immsview
branchimmsview
changeset 9 412e93decb7c
parent 8 9aa8b1c884e7
child 10 bc1c7546502a
equal deleted inserted replaced
8:9aa8b1c884e7 9:412e93decb7c
    18 # You should have received a copy of the GNU General Public License
    18 # You should have received a copy of the GNU General Public License
    19 # along with GNU Emacs; see the file COPYING.  If not, write to the
    19 # along with GNU Emacs; see the file COPYING.  If not, write to the
    20 # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    20 # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    21 # Boston, MA 02111-1307, USA.
    21 # Boston, MA 02111-1307, USA.
    22 
    22 
    23 _immsview_version = "$Id: immsview 1690 2004-02-02 06:54:09Z fabien $"
    23 _immsview_version = "$Id: immsview 1691 2004-02-02 15:42:43Z fabien $"
    24 
    24 
    25 # $Log$
    25 # $Log$
       
    26 # Revision 1.10  2004/02/02 15:42:43  fabien
       
    27 # OK, reset current after changing song manually... however, I most sleep for almost a second to be sure to catch it.
       
    28 #
    26 # Revision 1.9  2004/02/02 06:54:09  fabien
    29 # Revision 1.9  2004/02/02 06:54:09  fabien
    27 # Add cvs log since I don't maintain a changelog currently.
    30 # Add cvs log since I don't maintain a changelog currently.
    28 #
    31 #
    29 # Revision 1.8  2004/02/02 06:44:10  fabien
    32 # Revision 1.8  2004/02/02 06:44:10  fabien
    30 # All functions are now implemented (with a somewhat "cleaner" interface.
    33 # All functions are now implemented (with a somewhat "cleaner" interface.
    39 # Revision 1.3  2004/02/01 15:59:04  fabien
    42 # Revision 1.3  2004/02/01 15:59:04  fabien
    40 # Adding xmms selection and last display.
    43 # Adding xmms selection and last display.
    41 # Revision 1.2  2004/02/01 04:40:41  fabien
    44 # Revision 1.2  2004/02/01 04:40:41  fabien
    42 # add versioning.
    45 # add versioning.
    43 # Revision 1.1  2004/02/01 03:05:25  fabien
    46 # Revision 1.1  2004/02/01 03:05:25  fabien
    44 # Première version de immsview.
    47 # Premiere version de immsview.
    45 
    48 
    46 # The aim of immsview is to become a better playlist editor than the
    49 # The aim of immsview is to become a better playlist editor than the
    47 # normal
    50 # normal
    48 
    51 
    49 # TODO:
    52 # TODO:
   120 
   123 
   121 class IMMSDb:
   124 class IMMSDb:
   122     _dbname = os.environ['HOME'] + '/.imms/imms.db'
   125     _dbname = os.environ['HOME'] + '/.imms/imms.db'
   123     # _dbname = os.environ['HOME'] + '/.imms/imms.backup.db'
   126     # _dbname = os.environ['HOME'] + '/.imms/imms.backup.db'
   124     def __init__(self):
   127     def __init__(self):
   125         self.cx = sqlite.connect(IMMSDb._dbname,
   128         self.cx = sqlite.connect(IMMSDb._dbname, autocommit = 1,
   126                                  encoding = ('utf-8', 'replace'))
   129                                  timeout = 2, encoding = ('utf-8', 'replace'))
   127     def commit(self):
   130     def commit(self):
   128         self.cx.commit()
   131         # self.cx.commit()
       
   132         pass
   129     def _get_ratings(self, min = 0, max = 250):
   133     def _get_ratings(self, min = 0, max = 250):
   130         cu = self.cx.cursor()
   134         cu = self.cx.cursor()
   131         cu.execute('''SELECT Rating.uid, Rating.rating 
   135         cu.execute('''SELECT Rating.uid, Rating.rating 
   132                    FROM Rating
   136                    FROM Rating
   133                    WHERE Rating.rating >= %d
   137                    WHERE Rating.rating >= %d
   160         self.commit()
   164         self.commit()
   161         results = []
   165         results = []
   162         for tune in res:
   166         for tune in res:
   163             try:
   167             try:
   164                 tmp = {'rating' : int(tune[1]),
   168                 tmp = {'rating' : int(tune[1]),
   165                        'path' : tune[2].decode('utf8', 'replace'),
   169                        'path' : tune[2].decode('utf-8', 'replace'),
   166                        'last' : int(tune[3])}
   170                        'last' : int(tune[3])}
   167                 results.append(tmp)
   171                 results.append(tmp)
   168             except UnicodeDecodeError:
   172             except UnicodeDecodeError:
   169                 print tune[2]
   173                 print tune[2]
   170         return results
   174         return results
   255             if giter:
   259             if giter:
   256                 return model.get_value(giter, IMMSStore.COL_PATH)
   260                 return model.get_value(giter, IMMSStore.COL_PATH)
   257             return None
   261             return None
   258 
   262 
   259 class IMMSToolbar(gtk.Toolbar):
   263 class IMMSToolbar(gtk.Toolbar):
   260 	def __init__(self, iview, xmms):
   264     # _IMMSPLOT_COMMAND = 'immsplot &'
   261             gtk.Toolbar.__init__(self)
   265     _IMMSPLOT_COMMAND = '/home/fabien/bin/immsplot &'
   262             self.iview = iview
   266     _SLEEP_TIME = 1
   263             self.xmms = xmms
   267     def __init__(self, iview, xmms):
   264             self.create_widgets()
   268         gtk.Toolbar.__init__(self)
   265 	def create_widgets(self):
   269         self.iview = iview
   266 		self.append_item(_('Refresh'), _('Refresh list'),
   270         self.xmms = xmms
   267                                  None, None, self.do_refresh)
   271         self.create_widgets()
   268                 self.append_item(_('Plot'), _('Show graph of rates'),
   272     def create_widgets(self):
   269                                  None, None, self.plot)
   273         self.append_item(_('Refresh'), _('Refresh list'),
   270                 self.append_item(_('Current'), _('Get current song'),
   274                          None, None, self.do_refresh)
   271                                  None, None, self.do_get_current)
   275         self.append_item(_('Plot'), _('Show graph of rates'),
   272                 self.append_item(_('Play'), _('Play selection'),
   276                          None, None, self.plot)
   273                                  None, None, self.do_play)
   277         self.append_item(_('Current'), _('Get current song'),
   274 	def plot(self, data):
   278                          None, None, self.do_get_current)
   275             os.system('/home/fabien/bin/immsplot &')
   279         self.append_item(_('Previous'), _('Play previous song'),
   276 	def do_refresh(self, data):
   280                          None, None, self.do_play_prev)
       
   281         self.append_item(_('Play'), _('Play selection'),
       
   282                          None, None, self.do_play)
       
   283         self.append_item(_('Next'), _('Play next song'),
       
   284                          None, None, self.do_play_next)
       
   285     def plot(self, dummy):
       
   286         os.system(self._IMMSPLOT_COMMAND)
       
   287     def do_refresh(self, dummy):
   277             self.iview.get_model().refresh()
   288             self.iview.get_model().refresh()
   278         def do_get_current(self, data):
   289     def do_get_current(self, dummy):
   279             song = self.xmms.get_current_file()
   290         song = self.xmms.get_current_file()
   280             self.iview.set_current_song(song)
   291         self.iview.set_current_song(song)
   281         def do_play(self, data):
   292     def do_play(self, dummy):
   282             fn = self.iview.get_file_selected()
   293         fn = self.iview.get_file_selected()
   283             if fn:
   294         if fn:
   284                 self.xmms.play_file(fn)
   295             self.xmms.play_file(fn)
       
   296         time.sleep(self._SLEEP_TIME)
       
   297         self.do_get_current(dummy)
       
   298     def do_play_prev(self, dummy):
       
   299         self.xmms.playlist_prev()
       
   300         time.sleep(self._SLEEP_TIME)
       
   301         self.do_get_current(dummy)
       
   302     def do_play_next(self, dummy):
       
   303         self.xmms.playlist_next()
       
   304         time.sleep(self._SLEEP_TIME)
       
   305         self.do_get_current(dummy)
       
   306         
   285 
   307 
   286 root = gtk.Window()
   308 root = gtk.Window()
   287 root.set_name(_("IMMSview"))
   309 root.set_title(_("IMMSView"))
   288 root.connect('destroy', gtk.mainquit)
   310 root.connect('destroy', gtk.mainquit)
   289 vbox = gtk.VBox(spacing = 3)
   311 vbox = gtk.VBox(spacing = 3)
   290 root.add(vbox)
   312 root.add(vbox)
   291 vbox.show()
   313 vbox.show()
   292 model = IMMSStore(IMMSDb())
   314 model = IMMSStore(IMMSDb())