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()
 | |
| 	
 |