def getInstance(self, origin="N/A", session=None): printl("getInstance called from: "+ origin, self, "S") global gDatabase global gDatabaseMutex # Lock to init one only (Backgroud Loader is in concurrence with Screen call) if gDatabase is None: printl("Acquiring Mutex for: "+ origin, self, "I") gDatabaseMutex.acquire() #try: if True: printl("Mutex Acquired for: "+ origin, self, "I") #if session is not None: self.session = session if self.dbHandler is None: printl("Creating new Database instance", self) if self.USE_DB_TYPE == self.DB_SQLITE: self.dbHandler = databaseHandlerSQL().getInstance("from Database-" + origin ) if self.dbHandler.DB_FIRSTTIME: printl("Sql FirstTime", self) self.importDataToSql(session)#.addCallback(self.ImportDone).addErrback(self.ImportError) self.dbHandler.DB_FIRSTTIME = False else: printl("NOT Sql FirstTime", self) if self.USE_DB_TYPE == self.DB_PICKLEV2: self.dbHandler = databaseHandlerPICKLEV2().getInstance("from Database-" + origin, session) if self.dbHandler.DB_FIRSTTIME: printl("Pickle V2 FirstTime", self) self.importDataToPickleV2(session) self.dbHandler.DB_FIRSTTIME = False else: printl("NOT Pickle V2 FirstTime", self) if self.USE_DB_TYPE == self.DB_PICKLE: self.dbHandler = databaseHandlerPICKLE().getInstance("from Database-" + origin, session) if self.PRELOADDB: self.dbHandler.loadAll()# RELOAD ALLL gDatabase = self #finally: gDatabaseMutex.release() printl("Released Mutex of: "+ origin, self, "I") return gDatabase
def importDataToPickleV2 (self, session): printl("->", self, "S") try: if session is not None: self.mm = session.open(MessageBox, (_("\nConverting data to V2.... \n\nPlease wait... ")), MessageBox.TYPE_INFO) #self.mm = self.session.open(Msg) printl("Importing Data to PickleV2", self) # this will Open Pickle V1 and run upgrades if necessary userId = config.plugins.pvmc.seenuserid.value dbHandlerPickle = databaseHandlerPICKLE().getInstance("from importDataToPickleV2", None) dbHandlerPickle.loadAll() #Upgrade SeenDB records = dbHandlerPickle.getSeenForUpgrade() self.dbHandler.loadAll() start_time = time.time() cntNew = 0 printl("Total Seen Movies to Convert: "+str(len(records["Movies"])), self) for imdb in records["Movies"]: if imdb == u"": continue printl("getSeen for imdb: "+imdb, self) m = self.dbHandler.getMediaWithImdbId(imdb) if m is None: #printl("IS NONE: "+imdb, self) m = MediaInfo() m.Id = None m.ImdbId = imdb seen = records["Movies"][imdb]["Seen"] if seen: self.dbHandler.MarkAsSeenWithMedia(m,userId) else: pass #self.dbHandler.MarkAsUnseenWithMedia(m,userId) cntNew += 1 printl("Total Seen Series(no episodes) to Convert: "+str(len(records["TV"])), self) for thetvdb in records["TV"]: if thetvdb == u"": continue printl("getSeen for thetvdb: "+thetvdb, self) serie = self.dbHandler.getMediaWithTheTvDbId(thetvdb) for season in records["TV"][thetvdb]: if serie is not None: EpisodesFromSeason = self.dbHandler.getEpisodes(serie.Id, season) for episode in records["TV"][thetvdb][season]: EpisodeInserted = False seen = records["TV"][thetvdb][season][episode]["Seen"] if serie is not None: for ep in EpisodesFromSeason: if episode == ep.Episode: EpisodeInserted = True if seen: self.dbHandler.MarkAsSeen(ep.Id,userId) else: pass #self.dbHandler.MarkAsUnseen(ep.Id,userId) else: #printl("NO SERIE: " + thetvdb, self) pass if not EpisodeInserted: #printl("MANNUALLY: " + thetvdb, self) m = MediaInfo() # Fake Media, Avoid loosing Seen Data m.Id = None m.TheTvDbId = thetvdb m.Season = season m.Episode = episode if seen: #printl("SEEN 2: " + thetvdb, self) self.dbHandler.MarkAsSeenWithMedia(m,userId) else: #printl("UNSEEN 2: " + thetvdb, self) #self.dbHandler.MarkAsUnseenWithMedia(m,userId) pass cntNew += 1 # dbSeen["Movies"][primary_key["ImdbId"]]["Seen"] = primary_key["Seen"] # dbSeen["TV"][primary_key["TheTvDbId"]][primary_key["Season"]][primary_key["Episode"]]["Seen"] = primary_key["Seen"] printl("Seen Count: "+str(str(len(records["Movies"])+len(records["TV"]))) + " Processed: " + str(cntNew) ) #self.dbHandler.commit() elapsed_time = time.time() - start_time printl("Took: " + str(elapsed_time), self) try: if os.path.exists(self.DB_PATH + "seen.db"): os.rename(self.DB_PATH + "seen.db", self.DB_PATH + "seen.db" +".old") except Exception, ex: printl(".Backup Seen failed! Ex: " + str(ex), __name__, "E") except Exception, ex: printl(".Failed Import to PickleV2! Reloading Pickle V1. Ex: " + str(ex), __name__, "E") self.USE_DB_TYPE = self.DB_PICKLE