diff --git a/main-dir/Global_DatabaseUpdate.py b/main-dir/Global_DatabaseUpdate.py index c6d7df7..6505c35 100644 --- a/main-dir/Global_DatabaseUpdate.py +++ b/main-dir/Global_DatabaseUpdate.py @@ -42,7 +42,7 @@ else: update_call = "python3 PseudoChannel.py %s" % update_flags - +halt = True # Step ONE: Global database update os.chdir(os.path.abspath(os.path.dirname(__file__))) @@ -53,139 +53,142 @@ except OSError: pass try: os.system(update_call) + halt = False except: print("ERROR: Global Update Failed!") - os.remove("pseudo-channel.db") - os.rename("pseudo-channel.bak", "pseudo-channel.db") - sys.exit() - - -base_dirA = os.path.dirname(os.path.abspath(__file__)) -locations = "pseudo-channel"+channel_dir_increment_symbol -channel_dirs = [ item for item in os.listdir('.') if os.path.isdir(os.path.join('.', item)) ] -channel_dirs = list(filter(lambda x: x.startswith(locations),channel_dirs)) - -for channel_dir in channel_dirs: - # Step TWO: Go to each folder, export the following information - # - Show title, lastEpisodeTitle - # - Movie title, lastPlayedDate - # - Current channel schedule that the daily schedule is sourced from - # - Daily schedule currently being executed - os.chdir(channel_dir) - - channel_dirA = os.path.dirname(os.path.abspath(__file__)) - print(channel_dirA.split('/')[-1]) - if channel_dirA.split('/')[-1] == "channels": - os.chdir(os.path.join(channel_dirA, channel_dir)) - channel_dirA = os.getcwd() - db_path = os.path.join(channel_dirA, "pseudo-channel.db") - print("ACTION: Importing from " + db_path) - + print(e) try: + os.remove("pseudo-channel.db") + halt = True + except: + print("DATABASE FILE NOT FOUND, RESTORING BACKUP") + os.rename("pseudo-channel.bak", "pseudo-channel.db") + sys.exit() + + +if halt != True: + base_dirA = os.path.dirname(os.path.abspath(__file__)) + locations = "pseudo-channel"+channel_dir_increment_symbol + channel_dirs = [ item for item in os.listdir('.') if os.path.isdir(os.path.join('.', item)) ] + channel_dirs = list(filter(lambda x: x.startswith(locations),channel_dirs)) + + for channel_dir in channel_dirs: + # Step TWO: Go to each folder, export the following information + # - Show title, lastEpisodeTitle + # - Movie title, lastPlayedDate + # - Current channel schedule that the daily schedule is sourced from + # - Daily schedule currently being executed + os.chdir(channel_dir) + + channel_dirA = os.path.dirname(os.path.abspath(__file__)) + print(channel_dirA.split('/')[-1]) + if channel_dirA.split('/')[-1] == "channels": + os.chdir(os.path.join(channel_dirA, channel_dir)) + channel_dirA = os.getcwd() + db_path = os.path.join(channel_dirA, "pseudo-channel.db") + print("ACTION: Importing from " + db_path) + + try: + conn = sqlite3.connect(db_path) + table = conn.cursor() + + + lastEpisode_export = table.execute('SELECT lastEpisodeTitle,title FROM shows').fetchall() + lastEpisode_export = list(lastEpisode_export) + lastMovie_export = table.execute('SELECT lastPlayedDate,title FROM movies').fetchall() + lastMovie_export = list(lastMovie_export) + schedule = table.execute('SELECT * FROM schedule').fetchall() + daily_schedule = table.execute('SELECT * FROM daily_schedule').fetchall() + + + + conn.commit() + conn.close() + except: + print("NOTICE: Database experiencing errors or hasn't been formed yet; creating fresh one") + lastEpisode_export = [] + lastMovie_export = [] + schedule = [] + daily_schedule = [] + + + # Step THREE: Delete the previous database, replace with the recently created global one + print("ACTION: Copying global update to " + db_path) + copy2('../pseudo-channel.db','.') + + + # Step FOUR: Import the previous information we exported previously + print("ACTION: Exporting to " + db_path) conn = sqlite3.connect(db_path) table = conn.cursor() + for i in range(0,len(lastEpisode_export)): + sql = "UPDATE shows SET lastEpisodeTitle=? WHERE title=?" + table.execute(sql,lastEpisode_export[i]) - lastEpisode_export = table.execute('SELECT lastEpisodeTitle,title FROM shows').fetchall() - lastEpisode_export = list(lastEpisode_export) - lastMovie_export = table.execute('SELECT lastPlayedDate,title FROM movies').fetchall() - lastMovie_export = list(lastMovie_export) - schedule = table.execute('SELECT * FROM schedule').fetchall() - daily_schedule = table.execute('SELECT * FROM daily_schedule').fetchall() - - - - conn.commit() - conn.close() - except: - print("NOTICE: Database experiencing errors or hasn't been formed yet; creating fresh one") - lastEpisode_export = [] - lastMovie_export = [] - schedule = [] - daily_schedule = [] - - - # Step THREE: Delete the previous database, replace with the recently created global one - print("ACTION: Copying global update to " + db_path) - copy2('../pseudo-channel.db','.') - - - # Step FOUR: Import the previous information we exported previously - print("ACTION: Exporting to " + db_path) - conn = sqlite3.connect(db_path) - table = conn.cursor() - - for i in range(0,len(lastEpisode_export)): - sql = "UPDATE shows SET lastEpisodeTitle=? WHERE title=?" - table.execute(sql,lastEpisode_export[i]) - - for i in range(0,len(lastMovie_export)): - sql = "UPDATE movies SET lastPlayedDate=? WHERE title=?" - table.execute(sql,lastMovie_export[i]) - if len(schedule) == 0: - #db = PseudoChannelDatabase("./pseudo-channel.db") - print("NOTICE: Schedule Not Found, Creating Default Schedule") - entryList = {} - entryList['id'] = "1" - entryList['unix'] = str(time.time()) - entryList['mediaID'] = "23" - rndsql = "SELECT * FROM shows WHERE (customSectionName NOT LIKE 'playlist' AND duration BETWEEN 6000 and 999000000) ORDER BY RANDOM() LIMIT 1" - table.execute(rndsql) - the_show = table.fetchone() - entryList['duration'] = str("1,"+str(int(the_show[4] / 60000))) - entryList['title'] = the_show[3] - entryList['startTime'] = "00:00:00" - entryList['dayOfWeek'] = "everyday" - entryList['startTimeUnix'] = time.mktime(time.strptime("2000/01/01 00:00:00", "%Y/%m/%d %H:%M:%S")) - entryList['section'] = "TV Shows" - if entryList['startTime'] == "00:00:00": - entryList['strictTime'] = "true" - else: - entryList['strictTime'] = "secondary" - entryList['endTime'] = datetime.datetime.fromtimestamp(float(entryList['startTimeUnix']) + the_show[4]/1000).strftime("%H:%M:%S") - entryList['timeShift'] = 15 - entryList['overlapMax'] = 15 - entryList['xtra'] = None - entryList['rerun'] = 0 - entryList['year'] = None - entryList['genres'] = None - entryList['actors'] = None - entryList['collections'] = None - entryList['rating'] = None - entryList['studio'] = None - entryList['seasonEpisode'] = None - print("INFO: Adding "+entryList['startTime']+" - "+entryList['title']+"\033[K",end='\n') - sql = "INSERT INTO schedule(id,unix,mediaID,title,duration,startTime,endTime,dayOfWeek,startTimeUnix,section,strictTime,timeShift,overlapMax,xtra,rerun,year,genres,actors,collections,rating,studio,seasonEpisode) \ - VALUES(:id,:unix,:mediaID,:title,:duration,:startTime,:endTime,:dayOfWeek,:startTimeUnix,:section,:strictTime,:timeShift,:overlapMax,:xtra,:rerun,:year,:genres,:actors,:collections,:rating,:studio,:seasonEpisode)" - table.execute(sql,entryList) - timediff = datetime.datetime.strptime("23:59:59", "%H:%M:%S") - datetime.datetime.strptime(entryList['startTime'], "%H:%M:%S") - print("INFO: "+str(timediff.seconds)+" to midnight\033[K",end='\n') - endloop = 0 - while timediff.seconds > 900 and endloop == 0: - entryList['id'] = str(int(entryList['id']) + 1) + for i in range(0,len(lastMovie_export)): + sql = "UPDATE movies SET lastPlayedDate=? WHERE title=?" + table.execute(sql,lastMovie_export[i]) + if len(schedule) == 0: + #db = PseudoChannelDatabase("./pseudo-channel.db") + print("NOTICE: Schedule Not Found, Creating Default Schedule") + entryList = {} + entryList['id'] = "1" entryList['unix'] = str(time.time()) - try: - prevEndTimeUnix = float(entryList['startTimeUnix']) + the_show[4]/1000 - except: - prevEndTimeUnix = float(entryList['startTimeUnix']) - prevEndTime = datetime.datetime.fromtimestamp(prevEndTimeUnix) - entryList['startTime'] = prevEndTime + (datetime.datetime.min - prevEndTime) % datetime.timedelta(minutes=entryList['timeShift']) - entryList['startTime'] = entryList['startTime'].strftime("%H:%M:%S") - entryList['startTimeUnix'] = time.mktime(time.strptime("2000/01/01 "+entryList['startTime'], "%Y/%m/%d %H:%M:%S")) - print("INFO: "+str(entryList['startTimeUnix'])+" - New Unix Time Start\033[K",end='\n') - print("INFO: "+str(entryList['startTime'])+" - New Start Time\033[K",end='\n') + entryList['mediaID'] = "0" + rndsql = "SELECT * FROM shows WHERE (customSectionName NOT LIKE 'playlist' AND duration BETWEEN 6000 and 999000) ORDER BY RANDOM() LIMIT 1" + table.execute(rndsql) + the_show = table.fetchone() + entryList['duration'] = str("1,"+str(int(the_show[4] / 60000))) + entryList['title'] = the_show[3] + entryList['startTime'] = "00:00:00" + entryList['dayOfWeek'] = "everyday" + entryList['startTimeUnix'] = time.mktime(time.strptime("2000/01/01 00:00:00", "%Y/%m/%d %H:%M:%S")) + entryList['section'] = "TV Shows" if entryList['startTime'] == "00:00:00": entryList['strictTime'] = "true" else: - entryList['strictTime'] = "secondary" + entryList['strictTime'] = "secondary" + entryList['endTime'] = datetime.datetime.fromtimestamp(float(entryList['startTimeUnix']) + the_show[4]/1000).strftime("%H:%M:%S") + entryList['timeShift'] = 15 + entryList['overlapMax'] = 15 + entryList['xtra'] = None + entryList['rerun'] = 0 + entryList['year'] = None + entryList['genres'] = None + entryList['actors'] = None + entryList['collections'] = None + entryList['rating'] = None + entryList['studio'] = None + entryList['seasonEpisode'] = None + print("INFO: Adding "+entryList['startTime']+" - "+entryList['title']+"\033[K",end='\n') + sql = "INSERT INTO schedule(id,unix,mediaID,title,duration,startTime,endTime,dayOfWeek,startTimeUnix,section,strictTime,timeShift,overlapMax,xtra,rerun,year,genres,actors,collections,rating,studio,seasonEpisode) \ + VALUES(:id,:unix,:mediaID,:title,:duration,:startTime,:endTime,:dayOfWeek,:startTimeUnix,:section,:strictTime,:timeShift,:overlapMax,:xtra,:rerun,:year,:genres,:actors,:collections,:rating,:studio,:seasonEpisode)" + table.execute(sql,entryList) timediff = datetime.datetime.strptime("23:59:59", "%H:%M:%S") - datetime.datetime.strptime(entryList['startTime'], "%H:%M:%S") - maxMS = timediff.seconds * 1000 - if 0 < int(entryList['endTime'].split(':')[1]) <= 15 or 30 < int(entryList['endTime'].split(':')[1]) <= 45: - maxMS = 15*60*1000 - rndsql = "SELECT * FROM shows WHERE (customSectionName NOT LIKE 'playlist' AND duration BETWEEN ? and ?) ORDER BY RANDOM() LIMIT 1" - table.execute(rndsql, ("60000", str(maxMS))) - the_show = table.fetchone() - try: + print("INFO: "+str(timediff.seconds)+" to midnight\033[K",end='\n') + endloop = 0 + while timediff.seconds > 900 and endloop == 0: + entryList['id'] = str(int(entryList['id']) + 1) + entryList['unix'] = str(time.time()) + prevEndTimeUnix = float(entryList['startTimeUnix']) + the_show[4]/1000 + prevEndTime = datetime.datetime.fromtimestamp(prevEndTimeUnix) + entryList['startTime'] = prevEndTime + (datetime.datetime.min - prevEndTime) % datetime.timedelta(minutes=entryList['timeShift']) + entryList['startTime'] = entryList['startTime'].strftime("%H:%M:%S") + entryList['startTimeUnix'] = time.mktime(time.strptime("2000/01/01 "+entryList['startTime'], "%Y/%m/%d %H:%M:%S")) + print("INFO: "+str(entryList['startTimeUnix'])+" - New Unix Time Start\033[K",end='\n') + print("INFO: "+str(entryList['startTime'])+" - New Start Time\033[K",end='\n') + if entryList['startTime'] == "00:00:00": + entryList['strictTime'] = "true" + else: + entryList['strictTime'] = "secondary" + timediff = datetime.datetime.strptime("23:59:59", "%H:%M:%S") - datetime.datetime.strptime(entryList['startTime'], "%H:%M:%S") + maxMS = timediff.seconds * 1000 + if 0 < int(entryList['endTime'].split(':')[1]) <= 15 or 30 < int(entryList['endTime'].split(':')[1]) <= 45: + maxMS = 15*60*1000 + rndsql = "SELECT * FROM shows WHERE (customSectionName NOT LIKE 'playlist' AND duration BETWEEN ? and ?) ORDER BY RANDOM() LIMIT 1" + table.execute(rndsql, ("60000", str(maxMS))) + the_show = table.fetchone() entryList['duration'] = str("1,"+str(int(the_show[4] / 60000))) entryList['endTime'] = datetime.datetime.fromtimestamp(float(entryList['startTimeUnix']) + the_show[4]/1000).strftime("%H:%M:%S") entryList['title'] = the_show[3] @@ -193,73 +196,70 @@ for channel_dir in channel_dirs: print("INFO: Adding "+entryList['startTime']+" - "+entryList['title']+"\033[K",end='\n') sql = "INSERT INTO schedule(id,unix,mediaID,title,duration,startTime,endTime,dayOfWeek,startTimeUnix,section,strictTime,timeShift,overlapMax,xtra,rerun,year,genres,actors,collections,rating,studio,seasonEpisode) \ VALUES(:id,:unix,:mediaID,:title,:duration,:startTime,:endTime,:dayOfWeek,:startTimeUnix,:section,:strictTime,:timeShift,:overlapMax,:xtra,:rerun,:year,:genres,:actors,:collections,:rating,:studio,:seasonEpisode)" - except: - timediff = timediff + datetime.timedelta(0,900) - if entryList['startTime'] != "00:00:00": - table.execute(sql,entryList) - print("INFO: "+str(timediff.seconds)+" to midnight\033[K",end='\n') - else: - endloop = 1 - else: - for i in range(0,len(schedule)): + if entryList['startTime'] != "00:00:00": + table.execute(sql,entryList) + print("INFO: "+str(timediff.seconds)+" to midnight\033[K",end='\n') + else: + endloop = 1 + else: + for i in range(0,len(schedule)): + try: + sql = "INSERT INTO schedule(id,unix,mediaID,title,duration,startTime,endTime,dayOfWeek,startTimeUnix,section,strictTime,timeShift,overlapMax,xtra,rerun,year,genres,actors,collections,rating,studio,seasonEpisode) \ + VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" + table.execute(sql,schedule[i]) + except Exception as e: + print("ERROR: "+str(e)) + print("INFO: Importing Legacy Database") + sql = "INSERT INTO schedule(id,unix,mediaID,title,duration,startTime,endTime,dayOfWeek,startTimeUnix,section,strictTime,timeShift,overlapMax,xtra) \ + VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)" + table.execute(sql,schedule[i]) + for i in range(0,len(daily_schedule)): try: - sql = "INSERT INTO schedule(id,unix,mediaID,title,duration,startTime,endTime,dayOfWeek,startTimeUnix,section,strictTime,timeShift,overlapMax,xtra,rerun,year,genres,actors,collections,rating,studio,seasonEpisode) \ - VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" - table.execute(sql,schedule[i]) + sql = "INSERT INTO daily_schedule(id,unix,mediaID,title,episodeNumber,seasonNumber,showTitle,duration,startTime,endTime,dayOfWeek,sectionType,plexMediaID,customSectionName,notes) \ + VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" + table.execute(sql,daily_schedule[i]) except Exception as e: print("ERROR: "+str(e)) print("INFO: Importing Legacy Database") - sql = "INSERT INTO schedule(id,unix,mediaID,title,duration,startTime,endTime,dayOfWeek,startTimeUnix,section,strictTime,timeShift,overlapMax,xtra) \ + sql = "INSERT INTO daily_schedule(id,unix,mediaID,title,episodeNumber,seasonNumber,showTitle,duration,startTime,endTime,dayOfWeek,sectionType,plexMediaID,customSectionName) \ VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)" - table.execute(sql,schedule[i]) - for i in range(0,len(daily_schedule)): - try: - sql = "INSERT INTO daily_schedule(id,unix,mediaID,title,episodeNumber,seasonNumber,showTitle,duration,startTime,endTime,dayOfWeek,sectionType,plexMediaID,customSectionName,notes) \ - VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" - table.execute(sql,daily_schedule[i]) - except Exception as e: - print("ERROR: "+str(e)) - print("INFO: Importing Legacy Database") - sql = "INSERT INTO daily_schedule(id,unix,mediaID,title,episodeNumber,seasonNumber,showTitle,duration,startTime,endTime,dayOfWeek,sectionType,plexMediaID,customSectionName) \ - VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)" - table.execute(sql,daily_schedule[i]) - - # Step FIVE: Remove any media not in the directories set of commerical archives - print("NOTICE: Trimming database at " + db_path) - os.system('python report_MediaFolders.py') - try: + table.execute(sql,daily_schedule[i]) + + # Step FIVE: Remove any media not in the directories set of commerical archives + print("NOTICE: Trimming database at " + db_path) + os.system('python report_MediaFolders.py') local_commercials = open('Commercial_Libraries.txt').read().splitlines() + local_movies = open('Movie_Libraries.txt').read().splitlines() + local_tvs = open('TV_Libraries.txt').read().splitlines() + commercial_removal = [x for x in global_commercials["Commercials"] if x not in local_commercials] - except: - print("ERROR: Commercials Not Found") - local_movies = open('Movie_Libraries.txt').read().splitlines() - local_tvs = open('TV_Libraries.txt').read().splitlines() - - movie_removal = [x for x in global_commercials["Movies"] if x not in local_movies] - tv_removal = [x for x in global_commercials["TV Shows"] if x not in local_tvs] - -# print(db_path) -# print(local_commercials) -# print(global_commercials["Commercials"]) -# print(commercial_removal) - - for commercial in commercial_removal: - sql = "DELETE FROM commercials WHERE customSectionName=?" - table.execute(sql,(commercial,)) - for movie in movie_removal: - sql = "DELETE FROM movies WHERE customSectionName=?" - table.execute(sql,(movie,)) - for tv in tv_removal: - sql = "DELETE FROM shows WHERE customSectionName=?" - table.execute(sql,(tv,)) - sql = "DELETE FROM episodes WHERE customSectionName=?" - table.execute(sql,(tv,)) - - conn.commit() - conn.close() + movie_removal = [x for x in global_commercials["Movies"] if x not in local_movies] + tv_removal = [x for x in global_commercials["TV Shows"] if x not in local_tvs] + + # print(db_path) + # print(local_commercials) + # print(global_commercials["Commercials"]) + # print(commercial_removal) + + for commercial in commercial_removal: + sql = "DELETE FROM commercials WHERE customSectionName=?" + table.execute(sql,(commercial,)) + for movie in movie_removal: + sql = "DELETE FROM movies WHERE customSectionName=?" + table.execute(sql,(movie,)) + for tv in tv_removal: + sql = "DELETE FROM shows WHERE customSectionName=?" + table.execute(sql,(tv,)) + sql = "DELETE FROM episodes WHERE customSectionName=?" + table.execute(sql,(tv,)) + + conn.commit() + conn.close() - os.chdir('..') - - print("NOTICE: " + db_path + " complete! Going to next file") - -print("NOTICE: Global update COMPLETE") + os.chdir('..') + + print("NOTICE: " + db_path + " complete! Going to next file") + + print("NOTICE: Global update COMPLETE") +else: + print("ERROR: Global update FAILED!") \ No newline at end of file