#download files from youtube using rss feeds
import urllib.request
import xml.etree.ElementTree as ET
import requests
import csv
import os.path
import re
import shutil
from datetime import datetime

def getname(name,scheme):
	#find matching [*]
	locs=re.findall('(?<=\[)[^\[\]]+(?=\])',scheme)
	digits=[]
	for loc in locs:
		mstr='(?<='+loc+')[0-9]+'
		dig=re.findall(mstr,name)
		if(len(dig)>0):
			digits.append(dig[0])
	schema=re.split('(\[[^\[\]]+\])',scheme)
	nname=''
	count=0
	for bit in schema:
		if(re.match('\[.*\]',bit)):
			if(len(digits)>count):
				nname+=digits[count].zfill(2)
				count+=1
		else:
			nname+=bit
	if(count == len(locs)):
		return nname
	else:
		return name
	
def downloadfile(name,dest,url):
	name=name+".mp4"
	print('Saving to: '+name)
	urllib.request.urlretrieve(url,name)
	print('Moving to: '+dest+name)
	shutil.move(name,dest+name)
	print('Done')

def downloadfromfeed(feed):
	url=feed[1]
	dest=feed[2]
	filt=feed[3]
	scheme=feed[4]
	lastdl=datetime.strptime(feed[5], '%Y-%m-%d %H:%M:%S')
	response = urllib.request.urlopen(url)
	data = response.read()
	text = data.decode('utf-8')
	root = ET.fromstring(text)
	for child in root.findall('.//item'):
		title=child.find('.//title')
		date=datetime.strptime(child.find('.//pubDate').text, '%a, %d %b %Y %H:%M:%S %Z')
		if(date>lastdl):
			if(filt in title.text):
				if(date>datetime.strptime(feed[5], '%Y-%m-%d %H:%M:%S')):
					feed[5]=date.strftime('%Y-%m-%d %H:%M:%S')
				enc=child.find('.//enclosure')
				name=title.text
				target=enc.attrib.get('url')
				print('Downloading: '+name)
				fname=getname(name,scheme)
				downloadfile(fname,dest,target)

def downloadfeeds(feeds):
	for feed in feeds:
		downloadfromfeed(feed)

def readcsv(f,base):
	data=[]
	if(os.path.exists(f)):
		with open(f) as csvfile:
			reader=csv.reader(csvfile, delimiter='\t')
			for row in reader:
				data.append(row)
	dnames=[row[0] for row in data]
	with open(base) as basefile:
		reader=csv.reader(basefile, delimiter='\t')
		for row in reader:
			if(row[0] not in dnames):
				row.append('2000-01-01 01:01:01')
				data.append(row)
				dnames.append(row[0])
	return data

def savecsv(data,f):
	with open(f, 'w') as csvfile:
		writer=csv.writer(csvfile, delimiter='\t')
		writer.writerows(data)

os.chdir('/root/scripts/ytdownloader')
csvfile='feeds.csv'
csvbase='feedsbase.csv'
data=readcsv(csvfile,csvbase)
downloadfeeds(data)
print(data)
savecsv(data,csvfile)