Can play songs again
git-svn-id: file:///home/anna/Desktop/ocarina-legacy/mithos/ocarina@35 1daee41c-8060-4895-b1f0-2197c00d777a
This commit is contained in:
parent
9bb8ecc0a0
commit
1314d613e7
|
@ -45,6 +45,7 @@ class LibView(gtk.VBox):
|
||||||
#if rval == False:
|
#if rval == False:
|
||||||
# print artist,album,self.data.library.files[track].title
|
# print artist,album,self.data.library.files[track].title
|
||||||
tree.append(aliter,[self.data.library.files[track].title,self.data.library.files[track].id])
|
tree.append(aliter,[self.data.library.files[track].title,self.data.library.files[track].id])
|
||||||
|
tree.set_sort_column_id(0,gtk.SORT_ASCENDING)
|
||||||
self.treeview = gtk.TreeView(tree)
|
self.treeview = gtk.TreeView(tree)
|
||||||
self.treeview.connect("button_release_event",self.clicked)
|
self.treeview.connect("button_release_event",self.clicked)
|
||||||
self.col = gtk.TreeViewColumn('Library')
|
self.col = gtk.TreeViewColumn('Library')
|
||||||
|
@ -65,12 +66,13 @@ class LibView(gtk.VBox):
|
||||||
|
|
||||||
|
|
||||||
def makeLabel(self):
|
def makeLabel(self):
|
||||||
self.label = gtk.Label(str(self.data.library.count)+" tracks in collection")
|
self.label = gtk.Label("")#str(self.data.library.count)+" tracks in collection")
|
||||||
self.label.show()
|
self.updateLabel()
|
||||||
|
#self.label.show()
|
||||||
|
|
||||||
|
|
||||||
def updateLabel(self):
|
def updateLabel(self):
|
||||||
self.label.set_text(str(self.data.library.count)+" tracks in collection")
|
self.label.set_text(str(self.data.library.count)+" collected")
|
||||||
self.label.show()
|
self.label.show()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,9 @@ class PlistView(gtk.ScrolledWindow):
|
||||||
gtk.ScrolledWindow.__init__(self)
|
gtk.ScrolledWindow.__init__(self)
|
||||||
self.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
|
self.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
|
||||||
self.data = data
|
self.data = data
|
||||||
|
self.data.song.next = self.next
|
||||||
self.tree = None
|
self.tree = None
|
||||||
|
self.label = gtk.Label("")
|
||||||
self.makeList()
|
self.makeList()
|
||||||
gobject.timeout_add(1000,self.checkUpdate)
|
gobject.timeout_add(1000,self.checkUpdate)
|
||||||
|
|
||||||
|
@ -22,20 +24,81 @@ class PlistView(gtk.ScrolledWindow):
|
||||||
|
|
||||||
|
|
||||||
def makeList(self):
|
def makeList(self):
|
||||||
trackList= gtk.ListStore(int,str,str,str,str)
|
trackList= gtk.ListStore(int,str,str,str,str,int)
|
||||||
if self.tree:
|
if self.tree:
|
||||||
self.remove(self.tree)
|
self.remove(self.tree)
|
||||||
|
time = 0
|
||||||
for index in self.data.curList:
|
for index in self.data.curList:
|
||||||
track = self.data.library.files[index]
|
track = self.data.library.files[index]
|
||||||
trackList.append([track.id,track.title,track.artist,track.album,track.length])
|
trackList.append([track.id,track.title,track.length,track.artist,track.album,track.count])
|
||||||
|
time+=track.duration
|
||||||
self.tree = gtk.TreeView(trackList)
|
self.tree = gtk.TreeView(trackList)
|
||||||
cell = gtk.CellRendererText()
|
cell = gtk.CellRendererText()
|
||||||
cols = ["Id","Title","Artist","Album","Length"]
|
cols = ["Id","Title","Length","Artist","Album","#"]
|
||||||
|
trackList.set_sort_column_id(self.data.sortedCol,gtk.SORT_ASCENDING)
|
||||||
|
lenSaved = len(self.data.colSizes)
|
||||||
for i in range(len(cols)):
|
for i in range(len(cols)):
|
||||||
col = gtk.TreeViewColumn(cols[i],cell)
|
col = gtk.TreeViewColumn(cols[i],cell)
|
||||||
col.add_attribute(cell,'text',i)
|
col.add_attribute(cell,'text',i)
|
||||||
col.set_resizable(True)
|
col.set_resizable(True)
|
||||||
col.set_sort_column_id(i)
|
col.set_sort_column_id(i)
|
||||||
self.tree.append_column(col)
|
col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
|
||||||
|
col.set_min_width(2)
|
||||||
|
col.set_max_width(700)
|
||||||
|
if cols[i] != "Id":
|
||||||
|
self.tree.append_column(col)
|
||||||
|
self.tree.set_rules_hint(True)
|
||||||
|
self.tree.connect("row-activated",self.selectSong,"clicked",trackList)
|
||||||
self.tree.show()
|
self.tree.show()
|
||||||
|
self.resizeCols()
|
||||||
self.add(self.tree)
|
self.add(self.tree)
|
||||||
|
self.makeTimeLabel(time)
|
||||||
|
|
||||||
|
|
||||||
|
# Use to save column widths
|
||||||
|
def saveCols(self):
|
||||||
|
cols = self.tree.get_columns()
|
||||||
|
self.data.colSizes = []
|
||||||
|
for col in cols:
|
||||||
|
self.data.colSizes +=[col.get_width()]
|
||||||
|
|
||||||
|
|
||||||
|
def resizeCols(self):
|
||||||
|
cols = self.tree.get_columns()
|
||||||
|
for i in range(len(self.data.colSizes)):
|
||||||
|
cols[i].set_fixed_width(self.data.colSizes[i])
|
||||||
|
|
||||||
|
|
||||||
|
def makeTimeLabel(self,time):
|
||||||
|
day = time/86500
|
||||||
|
time = time-(day*86500)
|
||||||
|
hour = time/3600
|
||||||
|
time = time-(hour*3600)
|
||||||
|
min = time/60
|
||||||
|
time = time-(min*60)
|
||||||
|
|
||||||
|
string = self.toStr(day,"day")+self.toStr(hour,"hour")
|
||||||
|
string += self.toStr(min,"minute")+self.toStr(time,"second")
|
||||||
|
self.label.set_text(string)
|
||||||
|
self.label.show()
|
||||||
|
|
||||||
|
|
||||||
|
def toStr(self,time,label):
|
||||||
|
if time > 0:
|
||||||
|
string=str(time) + " "+label
|
||||||
|
if time > 1:
|
||||||
|
string+="s"
|
||||||
|
string += " "
|
||||||
|
return string
|
||||||
|
|
||||||
|
|
||||||
|
def selectSong(self,widgit,iter,path,data,list):
|
||||||
|
print list[iter][0]
|
||||||
|
if self.data.song:
|
||||||
|
self.data.song.close()
|
||||||
|
self.data.song.passInfo(self.data.library.files[list[iter][0]])
|
||||||
|
self.data.song.play(None,None)
|
||||||
|
|
||||||
|
|
||||||
|
def next(self):
|
||||||
|
self.song.close()
|
||||||
|
|
|
@ -70,7 +70,8 @@ class Library:
|
||||||
|
|
||||||
# Add song to library
|
# Add song to library
|
||||||
def add(self,words,file,index):
|
def add(self,words,file,index):
|
||||||
self.files+=[SongInfo()]
|
#self.files+=[SongInfo()]
|
||||||
|
self.files.insert(index,SongInfo())
|
||||||
info = self.files[index]
|
info = self.files[index]
|
||||||
info.filename = os.path.join(self.path,file)
|
info.filename = os.path.join(self.path,file)
|
||||||
info.count = 0
|
info.count = 0
|
||||||
|
|
|
@ -30,6 +30,7 @@ class main:
|
||||||
self.options.verbose = True
|
self.options.verbose = True
|
||||||
# Load saved data (or create new data)
|
# Load saved data (or create new data)
|
||||||
self.data = SavedData(self.options)
|
self.data = SavedData(self.options)
|
||||||
|
self.data.song = Song(self.quit)
|
||||||
|
|
||||||
self.window = Window(self.quit,self.options,self.data)
|
self.window = Window(self.quit,self.options,self.data)
|
||||||
gtk.main()
|
gtk.main()
|
||||||
|
@ -79,6 +80,8 @@ class main:
|
||||||
#print self.window.get_size()
|
#print self.window.get_size()
|
||||||
self.data.size = self.window.get_size()
|
self.data.size = self.window.get_size()
|
||||||
self.data.divider = self.window.divider.get_position()
|
self.data.divider = self.window.divider.get_position()
|
||||||
|
self.window.plistview.saveCols()
|
||||||
|
self.data.clearSong()
|
||||||
self.data.dump()
|
self.data.dump()
|
||||||
#self.library.dump()
|
#self.library.dump()
|
||||||
gtk.main_quit()
|
gtk.main_quit()
|
||||||
|
|
|
@ -2,6 +2,7 @@ import os
|
||||||
import cPickle as pickle
|
import cPickle as pickle
|
||||||
from library import Library
|
from library import Library
|
||||||
|
|
||||||
|
from song import Song
|
||||||
|
|
||||||
class SavedData:
|
class SavedData:
|
||||||
def __init__(self,options):
|
def __init__(self,options):
|
||||||
|
@ -11,8 +12,11 @@ class SavedData:
|
||||||
self.divider = 150
|
self.divider = 150
|
||||||
self.library = Library()
|
self.library = Library()
|
||||||
self.curList = []
|
self.curList = []
|
||||||
|
self.colSizes = [110,110,110,110,110]
|
||||||
|
self.sortedCol = 3
|
||||||
self.updateList = False
|
self.updateList = False
|
||||||
self.path = path
|
self.path = path
|
||||||
|
self.song = None
|
||||||
|
|
||||||
if os.path.exists(path):
|
if os.path.exists(path):
|
||||||
try:
|
try:
|
||||||
|
@ -30,6 +34,12 @@ class SavedData:
|
||||||
out.close()
|
out.close()
|
||||||
|
|
||||||
|
|
||||||
|
def clearSong(self):
|
||||||
|
self.song.close()
|
||||||
|
self.song = None
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
# Read user data from the file
|
# Read user data from the file
|
||||||
def load(self,path,options):
|
def load(self,path,options):
|
||||||
if options.verbose == True:
|
if options.verbose == True:
|
||||||
|
@ -40,3 +50,4 @@ class SavedData:
|
||||||
self.library = data.library
|
self.library = data.library
|
||||||
self.divider = data.divider
|
self.divider = data.divider
|
||||||
self.curList = data.curList
|
self.curList = data.curList
|
||||||
|
self.colSizes = data.colSizes
|
||||||
|
|
|
@ -8,19 +8,20 @@ from duration import Duration
|
||||||
|
|
||||||
class Song():
|
class Song():
|
||||||
#def __init__(self,info,exitFunc,prnt):
|
#def __init__(self,info,exitFunc,prnt):
|
||||||
def __init__(self,info,exitFunc):
|
def __init__(self,exitFunc):
|
||||||
self.quit=exitFunc
|
self.quit=exitFunc
|
||||||
#self.prnt=prnt
|
#self.prnt=prnt
|
||||||
self.info = info
|
#self.info = info
|
||||||
self.info.tags = dict()
|
#self.info.tags = dict()
|
||||||
self.setInfo = None
|
#self.setInfo = None
|
||||||
self.getNext = None
|
#self.getNext = None
|
||||||
self.current = 0
|
#self.current = 0
|
||||||
# initialize player pipeline
|
# initialize player pipeline
|
||||||
|
self.next = None
|
||||||
self.player = gst.Pipeline("player")
|
self.player = gst.Pipeline("player")
|
||||||
bin = gst.element_factory_make("playbin",None)
|
self.bin = gst.element_factory_make("playbin",None)
|
||||||
bin.set_property("uri","file://"+self.info.filename)
|
#bin.set_property("uri","file://"+self.info.filename)
|
||||||
self.player.add(bin)
|
self.player.add(self.bin)
|
||||||
|
|
||||||
# initialize bus
|
# initialize bus
|
||||||
bus = self.player.get_bus()
|
bus = self.player.get_bus()
|
||||||
|
@ -28,7 +29,7 @@ class Song():
|
||||||
bus.connect("message",self.onMessage)
|
bus.connect("message",self.onMessage)
|
||||||
|
|
||||||
# Pause song
|
# Pause song
|
||||||
self.pause()
|
#self.pause()
|
||||||
|
|
||||||
# Initialize stuff for finding duration
|
# Initialize stuff for finding duration
|
||||||
self.time_format = gst.Format(gst.FORMAT_TIME)
|
self.time_format = gst.Format(gst.FORMAT_TIME)
|
||||||
|
@ -51,7 +52,8 @@ class Song():
|
||||||
self.close()
|
self.close()
|
||||||
print "Error: %s" % err, debug
|
print "Error: %s" % err, debug
|
||||||
print "Trying next song"
|
print "Trying next song"
|
||||||
self.getNext(None,None)
|
self.next()
|
||||||
|
#self.getNext(None,None)
|
||||||
#if self.quit != None:
|
#if self.quit != None:
|
||||||
# self.quit("")
|
# self.quit("")
|
||||||
#elif t == gst.MESSAGE_TAG:
|
#elif t == gst.MESSAGE_TAG:
|
||||||
|
@ -73,8 +75,8 @@ class Song():
|
||||||
def play(self,widgit,data):
|
def play(self,widgit,data):
|
||||||
self.player.set_state(gst.STATE_PLAYING)
|
self.player.set_state(gst.STATE_PLAYING)
|
||||||
# Start main loop and find duration (if this hasn't been done yet)
|
# Start main loop and find duration (if this hasn't been done yet)
|
||||||
while self.duration() == False:
|
#while self.duration() == False:
|
||||||
time.sleep(0.1)
|
# time.sleep(0.1)
|
||||||
|
|
||||||
|
|
||||||
# Change state to "paused"
|
# Change state to "paused"
|
||||||
|
@ -117,3 +119,8 @@ class Song():
|
||||||
return (True,dur)
|
return (True,dur)
|
||||||
except:
|
except:
|
||||||
return (False,None)
|
return (False,None)
|
||||||
|
|
||||||
|
|
||||||
|
def passInfo(self,info):
|
||||||
|
self.info = info
|
||||||
|
self.bin.set_property("uri","file://"+self.info.filename)
|
||||||
|
|
|
@ -111,65 +111,6 @@ class Window(gtk.Window):
|
||||||
self.tagLabels[key].show()
|
self.tagLabels[key].show()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def makeList(self):
|
|
||||||
title = Column('title')
|
|
||||||
title.expand = True
|
|
||||||
title.searchable = True
|
|
||||||
artist = Column('artist')
|
|
||||||
artist.expand = True
|
|
||||||
artist.searchable = True
|
|
||||||
album = Column('album')
|
|
||||||
album.expand = True
|
|
||||||
album.searchable = True
|
|
||||||
count = Column('count')
|
|
||||||
count.expand = True
|
|
||||||
#count.searchable = True
|
|
||||||
length = Column('length')
|
|
||||||
length.expand = True
|
|
||||||
#length.searchable = True
|
|
||||||
self.list = ObjectList([title,artist,album,count,length])
|
|
||||||
for num in self.ops.plist.list:
|
|
||||||
#print self.ops.plist.translate(num)
|
|
||||||
self.list.append(self.ops.plist.translate(num))
|
|
||||||
#self.list.append(num)
|
|
||||||
self.list.sort_by_attribute('artist')
|
|
||||||
self.list.connect("row-activated",self.ops.plist.selectSong,"clicked",self.list)
|
|
||||||
self.list.show()
|
|
||||||
self.mainLayout.add(self.list)
|
|
||||||
'''
|
|
||||||
# Make scrolled window, add to window
|
|
||||||
scroll = gtk.ScrolledWindow()
|
|
||||||
scroll.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
|
|
||||||
#self.mainLayout.pack_start(scroll,False,False,0)
|
|
||||||
self.mainLayout.add(scroll)
|
|
||||||
# Make and populate list
|
|
||||||
self.list = gtk.ListStore(int,str,str,str,int)
|
|
||||||
for num in self.ops.plist.list:
|
|
||||||
self.list.append(self.ops.plist.translate(num))
|
|
||||||
# Make treeview from list
|
|
||||||
if self.tree:
|
|
||||||
self.tree = None
|
|
||||||
self.tree = gtk.TreeView(self.list)
|
|
||||||
cell = gtk.CellRendererText()
|
|
||||||
cols = ["Id","Title","Artist","Album","Count"]
|
|
||||||
for i in range(len(cols)):
|
|
||||||
col = gtk.TreeViewColumn(cols[i],cell)
|
|
||||||
col.add_attribute(cell,'text',i)
|
|
||||||
col.set_resizable(True)
|
|
||||||
col.set_sort_column_id(i)
|
|
||||||
self.tree.append_column(col)
|
|
||||||
self.tree.connect("row-activated",self.ops.plist.selectSong,"clicked",self.list)
|
|
||||||
self.tree.connect("button_press_event",self.ops.click,"clicked",self.list,self.tree.get_selection())
|
|
||||||
self.tree.set_grid_lines(True)
|
|
||||||
scroll.add(self.tree)
|
|
||||||
self.tree.columns_autosize()
|
|
||||||
self.tree.show()
|
|
||||||
scroll.show()
|
|
||||||
#self.gotoCurSong()
|
|
||||||
'''
|
|
||||||
|
|
||||||
|
|
||||||
def gotoCurSong(self):
|
def gotoCurSong(self):
|
||||||
#return
|
#return
|
||||||
if len(self.list) == 0:
|
if len(self.list) == 0:
|
||||||
|
@ -278,6 +219,10 @@ class Window(gtk.Window):
|
||||||
library = MenuItem("Library",None,None,None,[newLib,delete])
|
library = MenuItem("Library",None,None,None,[newLib,delete])
|
||||||
bar.append(library)
|
bar.append(library)
|
||||||
|
|
||||||
|
clear = MenuItem("Clear Playlist",self.clearPlist,"Clear",None,None)
|
||||||
|
plist = MenuItem("Playlist",None,None,None,[clear])
|
||||||
|
bar.append(plist)
|
||||||
|
|
||||||
# Replace first 'None' with after track functions
|
# Replace first 'None' with after track functions
|
||||||
pafter = MenuItem("Pause After Current Track",None,"pafter",self.changeFrameTitle,None)
|
pafter = MenuItem("Pause After Current Track",None,"pafter",self.changeFrameTitle,None)
|
||||||
qafter = MenuItem("Quit After Current Track",None,"qafter",self.changeFrameTitle,None)
|
qafter = MenuItem("Quit After Current Track",None,"qafter",self.changeFrameTitle,None)
|
||||||
|
@ -291,6 +236,13 @@ class Window(gtk.Window):
|
||||||
def deleteLib(self,widgit,data,other=None):
|
def deleteLib(self,widgit,data,other=None):
|
||||||
self.data.library.reset()
|
self.data.library.reset()
|
||||||
self.libview.update()
|
self.libview.update()
|
||||||
|
self.data.curList = []
|
||||||
|
self.data.updateList = True
|
||||||
|
|
||||||
|
|
||||||
|
def clearPlist(self,widgit,data,other=None):
|
||||||
|
self.data.curList = []
|
||||||
|
self.data.updateList = True
|
||||||
|
|
||||||
|
|
||||||
# Used to select a directory
|
# Used to select a directory
|
||||||
|
@ -327,23 +279,6 @@ class Window(gtk.Window):
|
||||||
|
|
||||||
rightPane=gtk.VBox(False,0)
|
rightPane=gtk.VBox(False,0)
|
||||||
|
|
||||||
#tracks = gtk.TreeStore(str)
|
|
||||||
#for file in self.data.library.files:
|
|
||||||
# tracks.append(None,[file.title])
|
|
||||||
|
|
||||||
#trackview = gtk.TreeView(tracks)
|
|
||||||
#title = gtk.TreeViewColumn('filename')
|
|
||||||
#trackview.append_column(title)
|
|
||||||
#cell = gtk.CellRendererText()
|
|
||||||
#title.pack_start(cell,True)
|
|
||||||
#title.add_attribute(cell,'text',0)
|
|
||||||
#trackview.set_rules_hint(True)
|
|
||||||
#trackview.show()
|
|
||||||
#trackscroll = gtk.ScrolledWindow()
|
|
||||||
#trackscroll.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
|
|
||||||
#trackscroll.add(trackview)
|
|
||||||
#trackscroll.show()
|
|
||||||
#rightPane.pack_start(trackscroll,False,False,0)
|
|
||||||
self.plistview = PlistView(self.data)
|
self.plistview = PlistView(self.data)
|
||||||
self.plistview.show()
|
self.plistview.show()
|
||||||
rightPane.add(self.plistview)
|
rightPane.add(self.plistview)
|
||||||
|
@ -358,7 +293,8 @@ class Window(gtk.Window):
|
||||||
|
|
||||||
def makeBottomRow(self,vbox):
|
def makeBottomRow(self,vbox):
|
||||||
box = gtk.HBox(False,0)
|
box = gtk.HBox(False,0)
|
||||||
box.pack_end(self.libview.label)
|
box.pack_end(self.libview.label,False,False,10)
|
||||||
|
box.pack_end(self.plistview.label)
|
||||||
box.show()
|
box.show()
|
||||||
align = gtk.Alignment(1,0.5,0,0)
|
align = gtk.Alignment(1,0.5,0,0)
|
||||||
align.add(box)
|
align.add(box)
|
||||||
|
|
Loading…
Reference in New Issue