mirror of
https://github.com/FakeTV/pseudo-channel.git
synced 2025-12-06 00:13:38 +00:00
161 lines
5.8 KiB
Python
161 lines
5.8 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Created on Thu Jun 28 17:33:59 2018
|
|
|
|
@author: Matt
|
|
"""
|
|
import sys
|
|
import argparse
|
|
import sqlite3
|
|
import os
|
|
from shutil import copy2
|
|
from pseudo_config import plexLibraries as global_commercials
|
|
|
|
channel_dir_increment_symbol = "_"
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser(description="Global Database Update Script")
|
|
|
|
parser.add_argument('-u','--update_all',action='store_true',help='update ALL elements')
|
|
parser.add_argument('-um','--update_movies',action='store_true',help='update MOVIE elements')
|
|
parser.add_argument('-utv','--update_tv',action='store_true',help='update TV elements')
|
|
parser.add_argument('-uc','--update_comm',action='store_true',help='update COMMERCIAL elements')
|
|
args = parser.parse_args()
|
|
|
|
if args.update_all or len(sys.argv) == 1:
|
|
update_flags = '-u'
|
|
else:
|
|
update_flags=''
|
|
if args.update_movies:
|
|
update_flags+=' -um'
|
|
if args.update_tv:
|
|
update_flags+=' -utv'
|
|
if args.update_comm:
|
|
update_flags+=' -uc'
|
|
|
|
|
|
update_call = "python PseudoChannel.py %s" % update_flags
|
|
|
|
|
|
# Step ONE: Global database update
|
|
print("NOTICE: Doing global update from PLEX: %s" % update_flags)
|
|
try:
|
|
os.rename("pseudo-channel.db", "pseudo-channel.bak")
|
|
except OSError:
|
|
pass
|
|
try:
|
|
os.system(update_call)
|
|
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__))
|
|
db_path = os.path.join(channel_dirA, "pseudo-channel.db")
|
|
print("NOTICE: 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("NOTICE: Copying global update to " + db_path)
|
|
copy2('../pseudo-channel.db','.')
|
|
|
|
|
|
# Step FOUR: Import the previous information we exported previously
|
|
print("NOTICE: 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])
|
|
for i in range(0,len(schedule)):
|
|
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)):
|
|
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')
|
|
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]
|
|
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")
|