Exemplo n.º 1
0
class UpdaterAgent(AgentThreadedBase):

    INTERVAL = 10 * 15

    def __init__(self):
        """
        @param interval: interval in seconds
        """
        AgentThreadedBase.__init__(self)
        self.count = 0
        self.db = None

    def h_shutdown(self):
        print "Updater - shutdown"

    def h_tick(self, _count):
        self.count += 1

        if self.count > self.INTERVAL:
            self.do_update()
            self.count = 0

    def _setupDb(self):
        if self.db is None:
            try:
                self.db = UserTracksDb()
            except:
                self.db = None

    def do_update(self):
        self._setupDb()
        if self.db is None:
            return

        batch = self.db.findNextToUpdate()
        self.pub("track_batch", batch)

        total = self.db.getToUpdateCount()
        self.pub("toUpdateCount", total)

        if total > 0:
            self.pub("log", "Updater - # tracks to update: %s" % str(total))

    def h_track_info(self, track_info):
        track = track_info["name"]
        artist = track_info["artist.name"]

        # print "updater.track_info: artist(%s) track(%s)" % (artist, track)
        try:
            playcount = int(track_info["userplaycount"])
        except Exception, e:
            self.pub(
                "log",
                "warning",
                "Updater - track_info with missing field(%s), artist(%s) track(%s)" % (e, artist, track),
            )
            playcount = 0

        ts = int(time.time())
        self.pub("track_to_update", ts, track, artist, playcount)
Exemplo n.º 2
0
class DbWriter(AgentThreadedBase):
    
    def __init__(self):
        """
        @param interval: interval in seconds
        """
        AgentThreadedBase.__init__(self)
        self.db=None
        
    def _setup(self):
        try:     self.db=UserTracksDb()
        except:  self.db=None 
        
    def h_shutdown(self):
        try:    self.db.close()
        except: pass
        
    def h_track_to_update(self, ts, track, artist, playcount):

        self._setup()
        if self.db is None:
            return
        try:
            count=self.db.updateOne(ts, track, artist, playcount)
        except Exception,e:
            self.pub("errorDbWriting", "DbWriter - "+str(e))
            return
        
        self.pub("updated", (artist, track, playcount, count))
            
        try:
            count=self.db.UniqueTracks_InsertIfNotExists(playcount, track, "", artist, "", "", "")
            self.pub("log", "Updated artist(%s) track(%s) playcount(%s)" % (artist, track, playcount))
        except Exception,e:
            self.pub("errorDbWriting", "DbWriter - "+str(e))
            return
Exemplo n.º 3
0
    class SignalRx(dbus.service.Object):
        """
        DBus signals for the /Player path
        """
        PATH="/Records"
        
        def __init__(self):
            dbus.service.Object.__init__(self, dbus.SessionBus(), self.PATH)
            self.db=None
            
            dbus.Bus().add_signal_receiver(self.sQRecords,
                                           signal_name="qRecords",
                                           dbus_interface="com.jldupont.lastfm.proxy",
                                           bus_name=None,
                                           path="/Records"
                                           )            

            dbus.Bus().add_signal_receiver(self.sQRecordsLatest,
                                           signal_name="qRecordsLatest",
                                           dbus_interface="com.jldupont.lastfm.proxy",
                                           bus_name=None,
                                           path="/Records"
                                           )            
    
        @dbus.service.signal(dbus_interface="com.jldupont.lastfm.proxy", signature="aa{sv}")
        def Records(self, list_dic):
            """
            Result 'output' signal
            
            A list of dictionaries i.e. array of array of {string:variant} entries
            """

        @dbus.service.signal(dbus_interface="com.jldupont.lastfm.proxy", signature="aa{sv}")
        def RecordsLatest(self, list_dic):
            """
            Result 'output' signal
            
            A list of dictionaries i.e. array of array of {string:variant} entries
            """
    
 
        def sQRecords(self, ts_start, limit):
            """
            DBus signal handler - /Records/qRecords
            
            @todo: more user friendly error reporting...
            """
            try:     ts=int(ts_start)
            except:  
                print "** expecting integer 'ts_start'"
                return
            
            try:     l=int(limit)
            except:  
                print "** expecting integer 'limit'"
                return
            
            #print "sQRecords: ts_start: %s -- limit: %s" % (ts_start, limit)
            self.setup()
            try:    records=self.db.getRecords(ts, l)
            except: records=None
            
            rs=self.formatRecordSet(records)
            self.Records(rs)

        def sQRecordsLatest(self, ts_start, limit):
            """
            DBus signal handler - /Records/qRecordsLatest
            
            @todo: more user friendly error reporting...
            """
            try:     ts=int(ts_start)
            except:  
                print "** expecting integer 'ts_start'"
                return
            
            try:     l=int(limit)
            except:  
                print "** expecting integer 'limit'"
                return
            
            #print "sQRecords: ts_start: %s -- limit: %s" % (ts_start, limit)
            self.setup()
            try:    records=self.db.getRecordsLatest(ts, l)
            except: records=None
            
            #print records
            
            rs=self.formatRecordSet(records)
            self.RecordsLatest(rs)
            
        def formatRecordSet(self, records):
            rs=[]
            for r in records:
                id, created, updated, playcount, track_name, track_mbid, artist_name, artist_mbid, album_name, album_mbid=r
                entry={}
                entry["id"]=id
                entry["created"]=created
                entry["updated"]=updated
                entry["playcount"]=playcount
                entry["track_name"]=track_name
                entry["track_mbid"]=track_mbid
                entry["artist_name"]=artist_name
                entry["artist_mbid"]=artist_mbid
                entry["album_name"]=album_name
                entry["album_mbid"]=album_mbid
                rs.append(entry)
                
            return rs
    
        def setup(self):
            if self.db is not None:
                return
            
            try:    self.db=UserTracksDb()
            except: self.db=None
    
        def shutdown(self):
            try:    self.db.close()
            except: pass
Exemplo n.º 4
0
 def setup(self):
     if self.db is not None:
         return
     
     try:    self.db=UserTracksDb()
     except: self.db=None
Exemplo n.º 5
0
 def _setup(self):
     try:     self.db=UserTracksDb()
     except:  self.db=None 
Exemplo n.º 6
0
 def _setupDb(self):
     if self.db is None:
         try:
             self.db = UserTracksDb()
         except:
             self.db = None