126 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
# -*- coding: utf-8 -*-
 | 
						|
# @Author: KevinMidboe
 | 
						|
# @Date:   2017-03-05 13:52:45
 | 
						|
# @Last Modified by:   KevinMidboe
 | 
						|
# @Last Modified time: 2017-03-05 17:14:25
 | 
						|
 | 
						|
import sqlite3, json, os, tweepy
 | 
						|
from re import sub
 | 
						|
 | 
						|
dbPath = 'shows.db'
 | 
						|
 | 
						|
consumer_key, consumer_secret = 'yvVTrxNtVsLkoHxKWxh4xvgjg', '39OW6Q8fIKDXvTPPCaEJDULcYaHC5XZ3fe7HHCGtdepBKui2jK'
 | 
						|
access_token, access_token_secret = '3214835117-OXVVLYeqUScRAPMqfVw5hS8NI63zPnWOVK63C5I', 'ClcGnF8vW6DbvgRgjwU6YjDc9f2oxMzOvUAN8kzpsmbcL'
 | 
						|
 | 
						|
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
 | 
						|
auth.set_access_token(access_token, access_token_secret)
 | 
						|
api = tweepy.API(auth)
 | 
						|
 | 
						|
def newnameMediaitems(media_items):
 | 
						|
	# media_items = [['New.Girl.S06E18.720p.HDTV.x264-EZTV.srt', '-EZTV', 'nl'], ['New.Girl.S06E18.720p.HDTV.x264-FLEET.srt', '-FLEET', 'en']]
 | 
						|
	media_items = json.loads(media_items)
 | 
						|
 | 
						|
	returnList = []
 | 
						|
	for item in media_items:
 | 
						|
		returnList.append([item[0], item[0].replace(item[1], '')])
 | 
						|
 | 
						|
	return returnList
 | 
						|
 | 
						|
def newnameSubtitles(subtitles):
 | 
						|
	subtitles = json.loads(subtitles)
 | 
						|
 | 
						|
	returnList = []
 | 
						|
	for item in subtitles:
 | 
						|
		returnList.append([item[0], item[0].replace(item[1], '.' + item[2])])
 | 
						|
 | 
						|
	return returnList
 | 
						|
 | 
						|
 | 
						|
def updateMovedStatus(episodeDict):
 | 
						|
	conn = sqlite3.connect(dbPath)
 | 
						|
	c = conn.cursor()
 | 
						|
 | 
						|
	c.execute('UPDATE stray_episodes SET moved = 1 WHERE original is "' + episodeDict['original'] + '"')
 | 
						|
 | 
						|
	conn.commit()
 | 
						|
	conn.close()
 | 
						|
 | 
						|
 | 
						|
 | 
						|
def unpackEpisodes():
 | 
						|
	conn = sqlite3.connect(dbPath)
 | 
						|
	c = conn.cursor()
 | 
						|
 | 
						|
	cursor = c.execute('SELECT * FROM stray_episodes WHERE verified = 1 AND moved = 0')
 | 
						|
	episodeList = []
 | 
						|
	for row in c.fetchall():
 | 
						|
		columnNames = [description[0] for description in cursor.description]
 | 
						|
		
 | 
						|
		episodeDict = dict.fromkeys(columnNames)
 | 
						|
		
 | 
						|
		for i, key in enumerate(episodeDict.keys()):
 | 
						|
			episodeDict[key] = row[i]
 | 
						|
 | 
						|
		episodeList.append(episodeDict)
 | 
						|
	
 | 
						|
	conn.close()
 | 
						|
 | 
						|
	return episodeList
 | 
						|
 | 
						|
def createFolders(episode):
 | 
						|
	showDir = '/media/hdd1/tv/%s/'% episode['name']
 | 
						|
	episodeFormat = '%s S%sE%s/'% (episode['name'], episode['season'], episode['episode'])
 | 
						|
	seasonFormat = '%s Season %s/'% (episode['name'], episode['season'])
 | 
						|
 | 
						|
	if not os.path.isdir(showDir + seasonFormat):
 | 
						|
		os.makedirs(showDir + seasonFormat)
 | 
						|
 | 
						|
	if not os.path.isdir(showDir + seasonFormat + episodeFormat):
 | 
						|
		os.makedirs(showDir + seasonFormat + episodeFormat)
 | 
						|
 | 
						|
def moveFiles(episode):
 | 
						|
	# TODO All this should be imported from config file
 | 
						|
	showDir = '/media/hdd1/tv/'
 | 
						|
	episodeFormat = '%s S%sE%s/'% (episode['name'], episode['season'], episode['episode'])
 | 
						|
	seasonFormat = '%s/%s Season %s/'% (episode['name'], episode['name'], episode['season'])
 | 
						|
	
 | 
						|
	# TODO All this is pretty ballsy to do this hard/stict.
 | 
						|
	newMediaitems = newnameMediaitems(episode['media_items'])
 | 
						|
	for item in newMediaitems:
 | 
						|
		old_location = showDir + episode['original'] + '/' + item[0]
 | 
						|
		new_location = showDir + seasonFormat + episodeFormat + item[1]
 | 
						|
		os.rename(old_location, new_location)
 | 
						|
	
 | 
						|
	if episode['subtitles']: 
 | 
						|
		newSubtitles = newnameSubtitles(episode['subtitles'])
 | 
						|
		for item in newSubtitles:
 | 
						|
			old_location = showDir + episode['original'] + '/' + item[0]
 | 
						|
			new_location = showDir + seasonFormat + episodeFormat + item[1]
 | 
						|
			os.rename(old_location, new_location)
 | 
						|
 | 
						|
	# shutil.rmtree(showDir + episode['original'])
 | 
						|
	if episode['trash']:
 | 
						|
		for trash in json.loads(episode['trash']):
 | 
						|
			os.remove(showDir + episode['original'] + '/'+ trash)
 | 
						|
	
 | 
						|
	# TODO Maybe move to delete folder instead, than user can dump.
 | 
						|
	os.rmdir(showDir + episode['original'])
 | 
						|
	
 | 
						|
	updateMovedStatus(episode)
 | 
						|
 | 
						|
	api.create_favorite(episode['response_id'])
 | 
						|
 | 
						|
 | 
						|
def findVerified():
 | 
						|
	episodes = unpackEpisodes()
 | 
						|
	if episodes:
 | 
						|
		for episode in episodes:
 | 
						|
			createFolders(episode)
 | 
						|
			moveFiles(episode)
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
	findVerified()
 | 
						|
	
 |