[svn] Update also on double click. immsview
authorfabien
Tue, 03 Feb 2004 16:50:28 -0500
branchimmsview
changeset 13 02c10487e5a0
parent 12 d275de5d2be2
child 14 a678f3ef86e0
[svn] Update also on double click.
immsview
--- a/immsview	Tue Feb 03 15:55:27 2004 -0500
+++ b/immsview	Tue Feb 03 16:50:28 2004 -0500
@@ -20,9 +20,12 @@
 # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 # Boston, MA 02111-1307, USA.
 
-_immsview_version = "$Id: immsview 1694 2004-02-03 20:55:27Z fabien $"
+_immsview_version = "$Id: immsview 1695 2004-02-03 21:50:28Z fabien $"
 
 # $Log$
+# Revision 1.14  2004/02/03 21:50:28  fabien
+# Update also on double click.
+#
 # Revision 1.13  2004/02/03 20:55:27  fabien
 # Play selected: check if the file exist, elsewhere try to
 # update it through the Db.
@@ -163,12 +166,12 @@
                    FROM Library
                    WHERE Library.uid = %d;''' % (uid,))
         return cu.fetchone()
-    def _get_library_by_path(self, path):
+    def get_uid_by_path(self, path):
         cu = self.cx.cursor()
-        cu.execute('''SELECT Library.uid, Library.sid
+        cu.execute('''SELECT Library.uid
                    FROM Library
                    WHERE Library.path = '%s';''' % (path))
-        return cu.fetchone()
+        return cu.fetchall()
     def get_ratings_and_info(self, uids = None):
     	print time.ctime(time.time()) + ": querying"
         cu = self.cx.cursor()
@@ -232,6 +235,7 @@
                  IMMSStore.COL_LAST_STR, strtime(curtime-tune['last']),
                  IMMSStore.COL_LAST, tune['last'],
                  IMMSStore.COL_SELECT, gtk.FALSE)
+        return giter
     def refresh(self):
         curtime = time.time()
         col, order = self.get_sort_column_id()
@@ -247,25 +251,36 @@
             self.tune_to_giter(tune, curtime = curtime)
 	print time.ctime(time.time()) + ": end insert"
         self.set_sort_column_id(col, order)
-    def find_selection(self):
+    def find_selected_giter(self):
+        giter = self.get_iter_first()
+        while giter:
+            if self.get_value(giter, IMMSStore.COL_SELECT):
+                break
+            giter = self.iter_next(giter)
+        return giter
+    def find_giter_from_uid(self, uid):
         giter = self.get_iter_first()
         while giter:
-            if self.get_value(giter, 4):
-                return self.get_path(giter)
+            if self.get_value(giter, IMMSStore.COL_UID) == uid:
+                break
             giter = self.iter_next(giter)
-        return None
-    def find_song_path(self, song):
-        giter = self.get_iter_first()
-        while giter:
-            if self.get_value(giter, 1) == song:
-                return self.get_path(giter)
-            giter = self.iter_next(giter)
-        return None
+        return giter
+    def find_giter_from_path(self, song):
+        uids = self.db.get_uid_by_path(song)
+        if len(uids) == 0:
+            return None
+        uid = uids[0]
+        giter = self.find_giter_from_uid(uid[0])
+        if not giter:
+            tunes = self.db.get_ratings_and_info(uids)
+            if len(tunes) > 0:
+                giter = self.tune_to_giter(tunes[0])
+        return giter
     def update_iter(self, giter):
         uid = self.get_value(giter, IMMSStore.COL_UID)
         tunes = self.db.get_ratings_and_info([uid,])
-        for tune in tunes:
-            self.tune_to_giter(tune, giter)
+        if len(tunes) > 0:
+            return self.tune_to_giter(tunes[0], giter)
         return giter
 
 class IMMSView(gtk.TreeView):
@@ -297,29 +312,21 @@
             self.connect('row-activated', self.on_row_activated)
         def set_current_song(self, song):
             model = self.get_model()
-            gpath = model.find_selection()
-            if gpath:
-                giter = model.get_iter(gpath)
+            giter = model.find_selected_giter()
+            if giter:
                 model.set_value(giter, IMMSStore.COL_SELECT, gtk.FALSE)
-            gpath = model.find_song_path(song)
-            if gpath:
-                giter = model.get_iter(gpath)
+            giter = model.find_giter_from_path(song)
+            if giter:
                 model.set_value(giter, IMMSStore.COL_SELECT, gtk.TRUE)
-                self.set_cursor(gpath)
+                self.set_cursor(model.get_path(giter))
         def get_filename(self, giter):
-            update = 0
-            fn = model.get_value(giter, IMMSStore.COL_PATH)
+            model = self.get_model()
+            fn = model.get_value(model.update_iter(giter), IMMSStore.COL_PATH)
             try:
                 os.stat(fn)
             except OSError:
-                update = 1
-            if update:
-                model.update_iter(giter)
-                fn = model.get_value(giter, IMMSStore.COL_PATH)
-                try:
-                    os.stat(fn)
-                except OSError:
-                    return None
+                return None
+            return fn
         def get_file_selected(self):
             model, giter = self.get_selection().get_selected()
             if giter:
@@ -328,7 +335,9 @@
         def on_row_activated(self, tview, path, col):
             model = self.get_model()
             giter = model.get_iter(path)
+            fn = self.get_filename(giter)
             self.set_current_song(fn)
+            self.xmms.play_file(fn)
 
 
 class IMMSToolbar(gtk.Toolbar):