Manually check the gstreamer bus for new messages

This commit is contained in:
bjschuma 2010-02-12 20:13:39 -05:00
parent 05f09dfdfb
commit 808bc88dfa
2 changed files with 83 additions and 8 deletions

View File

@ -13,10 +13,13 @@ import settings
from bt.file import *
from bt import signal
from bt.message import write
import manager
import cline
global pipeline
global time
global bin
global bus
pipeline = gst.Pipeline("player")
@ -26,12 +29,8 @@ time = gst.Format(gst.FORMAT_TIME)
# Volume range goes from 0 to 1.0 (before sounding bad)
volume = gst.element_factory_make("volume","vol")
#level = gst.element_factory_make("level","volume-level")
pipeline.add(bin,volume )#,level)
#level.set_property("peak-ttl",0)
#level.set_property("peak-falloff",20)
pipeline.add(bin,volume)
bus = pipeline.get_bus()
def load(path):
@ -81,13 +80,58 @@ def setvol(value):
vol.set_property("volume",value )
def getProgress(tuple=False):
global pipeline
global time
# Don't bother to go on if the pipeline isn't playing
if not pipeline.get_state()[1] == gst.STATE_PLAYING:
return -1
position = pipeline.query_position(time)[0]
total = pipeline.query_duration(time)[0]
if tuple==False:
return float(position) / float(total)
else:
return (position,total)
# Draw the progress bar on the command line
def drawProgress():
p = getProgress()
if p == -1:
return
win = settings.get("maxyx")
max = int(win[1] * p)
if max == 0:
cline.message.disp(" "*(win[1]-1) ,win[0]-1)
else:
cline.message.disp("="*max, win[0]-1)
# A callback when there are messages on the bus
def onMessage(bus,message):
if message.type == gst.MESSAGE_EOS:
manager.run("next")
# Manually check the bus for messages
def checkBus():
global bus
if bus.peek() == None:
return
onMessage(bus,bus.pop())
def init():
# Register signals
signal.register("play",play)
signal.register("pause",pause)
signal.register("cliloop",drawProgress)
signal.register("cliloop",checkBus,90)
# Check for settings values
if settings.has("args") == True:
input = settings.get("args")
if not input == []:

View File

@ -6,16 +6,18 @@ __date__ ="$Feb 5, 2010 7:47:18 PM$"
from bt import plugin
from bt.message import write
from bt import sql
from bt import signal
from ct import gstreamer
import settings
class Plugin(plugin.Plugin):
def __init__(self):
plugin.Plugin.__init__(self)
self.help = "Used to control various aspects of playback"
self.usage = "music [load, pause, play, vol]"
self.usage = "music [load, whatis, now, pause, play, vol]"
def loadTrack(self,args):
@ -23,11 +25,33 @@ class Plugin(plugin.Plugin):
write("Usage: music load track")
join = ' '
path = join.join(args)
write("Loading: "+path)
write("Loading: "+path,True)
gstreamer.close()
gstreamer.load(path)
def whatIs(self,id):
curlib = str( settings.get("curlib") )
selstr = "track.name,artist.name,album.name"
frmstr = "track,artist,album,libtrack"
whrstr = "track.artist=artist.id AND track.album=album.id"
whrstr += " AND libtrack.track=track.id AND libtrack.library="+curlib
sel = sql.Select(selstr, frmstr, whrstr)
result = sel.execute().fetchall()
#if len(result) <= id:
# return
result = result[id]
write(result[0])
write("By: "+result[1])
write("From: "+result[2])
def nowPlaying(self):
self.whatIs(settings.get("curtrk"))
def run(self, args=None):
if args==None or len(args) < 1:
@ -37,6 +61,13 @@ class Plugin(plugin.Plugin):
if args[0] == "load":
self.loadTrack(args[1:])
elif args[0] == "whatis":
id = int(args[1])
self.whatIs(id)
elif args[0] == "now":
self.nowPlaying()
elif args[0] == "play":
signal.emit("play")