コード例 #1
0
    def onModLoaded(self):
        """ The module has been loaded """
        txtRdrLen = gtk.CellRendererText()

        columns = (('',   [(gtk.CellRendererPixbuf(), gtk.gdk.Pixbuf), (txtRdrLen, gobject.TYPE_STRING), (gtk.CellRendererText(), gobject.TYPE_STRING)], True),
                   (None, [(None, gobject.TYPE_PYOBJECT)],                                                                                               False))

        self.tree     = extTreeview.ExtTreeView(columns, True)
        self.popup    = None
        self.cfgWin   = None
        self.expName  = MOD_L10N
        self.scrolled = gtk.ScrolledWindow()
        self.cacheDir = os.path.join(consts.dirCfg, MOD_INFO[modules.MODINFO_NAME])
        # The album length is written in a smaller font, with a lighter color
        txtRdrLen.set_property('scale', 0.85)
        txtRdrLen.set_property('foreground-gdk', self.tree.get_style().text[gtk.STATE_INSENSITIVE])
        # Explorer
        self.tree.setDNDSources([consts.DND_TARGETS[consts.DND_DAP_TRACKS]])
        self.scrolled.add(self.tree)
        self.scrolled.set_shadow_type(gtk.SHADOW_IN)
        self.scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        self.scrolled.show()
        # GTK handlers
        self.tree.connect('drag-data-get',              self.onDragDataGet)
        self.tree.connect('key-press-event',            self.onKeyPressed)
        self.tree.connect('exttreeview-button-pressed', self.onButtonPressed)
        modules.postMsg(consts.MSG_CMD_EXPLORER_ADD, {'modName': MOD_L10N, 'expName': self.expName, 'icon': icons.cdromMenuIcon(), 'widget': self.scrolled})
        # Hide the album length when not drawing the root node
        self.tree.get_column(0).set_cell_data_func(txtRdrLen, self.__drawAlbumLenCell)
        # CD-ROM drive read speed
        modules.postMsg(consts.MSG_CMD_SET_CD_SPEED, {'speed': prefs.get(__name__, 'read-speed', PREFS_DFT_READ_SPEED)})
コード例 #2
0
    def playPaths(self, tree, paths, replace):
        """
            Replace/extend the tracklist
            If the list 'paths' is None, use the current selection
        """
        if self.tree.getNbChildren((0,)) != 0:
            tracks = self.getTracksFromPaths(tree, paths)

            if replace: modules.postMsg(consts.MSG_CMD_TRACKLIST_SET, {'tracks': tracks, 'playNow': True})
            else:       modules.postMsg(consts.MSG_CMD_TRACKLIST_ADD, {'tracks': tracks, 'playNow': False})
コード例 #3
0
    def loadDisc(self):
        """ Read disc information and create the explorer tree accordingly """
        import DiscID

        try:
            discInfo = DiscID.disc_id(DiscID.open(prefs.get(__name__, 'device', PREFS_DFT_DEVICE)))
        except Exception, err:
            if err[0] == 123:
                self.tree.replaceContent([(icons.cdromMenuIcon(), None, _('No disc found'), None)])
                modules.postMsg(consts.MSG_CMD_EXPLORER_RENAME, {'modName': MOD_L10N, 'expName': self.expName, 'newExpName': MOD_L10N})
                self.expName = MOD_L10N
            else:
                logger.error('[%s] Unable to read device\n\n%s' % (MOD_INFO[modules.MODINFO_NAME], traceback.format_exc()))
            return
コード例 #4
0
    def updateTree(self, discInfo):
        """ Update the tree using disc information from the cache, if any """
        cddb = self.getDiscFromCache(discInfo)

        # Create fake CDDB information if needed
        if cddb is None:
            cddb = {'DTITLE': '%s / %s' % (consts.UNKNOWN_ARTIST, consts.UNKNOWN_ALBUM)}
            for i in xrange(discInfo[DISC_NB_TRACKS]):
                cddb['TTITLE%u' % i] = consts.UNKNOWN_TITLE

        # Compute the length of each track
        trackLen = [int(round((discInfo[DISC_FRAME1 + i + 1] - discInfo[DISC_FRAME1 + i]) / 75.0)) for i in xrange(discInfo[DISC_NB_TRACKS] - 1)]
        trackLen.append(discInfo[DISC_LENGTH] - int(round(discInfo[DISC_FRAMEn] / 75.0)))

        # Update the root of the tree
        disc          = cddb['DTITLE'].strip().decode('iso-8859-15', 'replace')
        artist, album = disc.split(' / ')

        self.tree.setItem((0,), ROW_NAME, '%s' % tools.htmlEscape(disc))
        self.tree.setItem((0,), ROW_LENGTH, '[%s]' % sec2str(sum(trackLen)))

        # Update the explorer name
        modules.postMsg(consts.MSG_CMD_EXPLORER_RENAME, {'modName': MOD_L10N, 'expName': self.expName, 'newExpName': disc})
        self.expName = disc

        # Optional information
        try:    date = int(cddb['DYEAR'].strip().decode('iso-8859-15', 'replace'))
        except: date = None

        try:    genre = cddb['DGENRE'].strip().decode('iso-8859-15', 'replace')
        except: genre = None

        # Update each track
        for i, child in enumerate(self.tree.iterChildren((0,))):
            title = cddb['TTITLE%u' % i].strip().decode('iso-8859-15', 'replace')

            # Create the corresponding Track object
            track = CDTrack(str(i+1))
            track.setTitle(title)
            track.setAlbum(album)
            track.setArtist(artist)
            track.setLength(trackLen[i])
            track.setNumber(i+1)
            # Optional information
            if date is not None:  track.setDate(date)
            if genre is not None: track.setGenre(genre)
            # Fill the tree
            self.tree.setItem(child, ROW_NAME, '%02u. %s' % (i + 1, tools.htmlEscape(title)))
            self.tree.setItem(child, ROW_TRACK, track)
コード例 #5
0
    def onBtnOk(self, btn):
        """ Check that entered information is correct before saving everything """
        device    = self.cfgWin.getWidget('txt-device').get_text()
        useCDDB   = self.cfgWin.getWidget('chk-useCDDB').get_active()
        useCache  = useCDDB and self.cfgWin.getWidget('chk-useCache').get_active()
        readSpeed = self.cfgWin.getWidget('combo-read-speed').get_model()[self.cfgWin.getWidget('combo-read-speed').get_active()][1]

        if not os.path.exists(device):
            error    = _('Invalid path')
            errorMsg = _('The path to the CD-ROM device is not valid. Please choose an existing path.')
            gui.errorMsgBox(self.cfgWin, error, errorMsg)
            self.cfgWin.getWidget('txt-device').grab_focus()
        else:
            prefs.set(__name__, 'device',     device)
            prefs.set(__name__, 'use-cddb',   useCDDB)
            prefs.set(__name__, 'use-cache',  useCache)
            prefs.set(__name__, 'read-speed', readSpeed)
            self.cfgWin.hide()

            # CD-ROM drive read speed
            modules.postMsg(consts.MSG_CMD_SET_CD_SPEED, {'speed': readSpeed})
コード例 #6
0
 def onModUnloaded(self):
     """ The module is going to be unloaded """
     modules.postMsg(consts.MSG_CMD_EXPLORER_REMOVE, {'modName': MOD_L10N, 'expName': self.expName})
     if not prefs.get(__name__, 'use-cache', PREFS_DFT_USE_CACHE):
         self.clearCache()