diff --git a/src/core/ct/gstreamer.py b/src/core/ct/gstreamer.py index 3acc7707..9021c971 100644 --- a/src/core/ct/gstreamer.py +++ b/src/core/ct/gstreamer.py @@ -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 == []: diff --git a/src/core/music.py b/src/core/music.py index 65e9454e..0f88ad73 100644 --- a/src/core/music.py +++ b/src/core/music.py @@ -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")