98 lines
3.2 KiB
Python
Executable File
98 lines
3.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# -*- encoding: utf-8 -*-
|
|
|
|
import os
|
|
import re
|
|
import json
|
|
import shutil
|
|
import datetime
|
|
|
|
def readAllFile(s):
|
|
with open(s) as f:
|
|
return f.read()
|
|
def slugify(dat):
|
|
return re.sub(r'[^\w\s\.\-\(\)\[\]]', '-', dat)
|
|
|
|
wdir = os.path.abspath('.')
|
|
|
|
def main():
|
|
idir = os.path.join(wdir, 'i')
|
|
ddir = os.path.join(wdir, 'd')
|
|
|
|
subreddits = sorted(filter(lambda sr: os.path.isdir(os.path.join(wdir,'r',sr)), os.listdir(os.path.join(wdir,'r'))))
|
|
|
|
subreddits = list(zip(
|
|
subreddits,
|
|
map(
|
|
lambda a: a['links'],
|
|
map(
|
|
json.loads,
|
|
map(
|
|
readAllFile,
|
|
map(
|
|
lambda sr: os.path.join(wdir,'r',sr,'subreddit.json'),
|
|
subreddits
|
|
)))),
|
|
map(
|
|
lambda sr: os.path.join(wdir,'d',sr),
|
|
subreddits
|
|
)
|
|
))
|
|
|
|
copyfiles = list()
|
|
|
|
print('\r'+' '*79+'\r'+'Calculating changes...',end='')
|
|
|
|
for subreddit, links, target in subreddits:
|
|
sdir = os.path.join(ddir,subreddit)
|
|
for link in links:
|
|
imgd = os.path.join(idir, link['datakey'])
|
|
meta = os.path.join(imgd, 'meta.json')
|
|
if os.path.exists(meta):
|
|
files = json.loads(readAllFile(meta))
|
|
for seq, file in enumerate(files):
|
|
imgfrom = os.path.join(imgd, file['dname'])
|
|
imgfn = ''
|
|
imgfn+= subreddit
|
|
imgfn+= '__'
|
|
imgfn+= datetime.datetime.fromtimestamp(int(link['timestamp'])).isoformat().replace('T','_').replace(':','-')
|
|
imgfn+= '_'
|
|
imgfn+= 'nsfw' if link['nsfw'] else 'safe'
|
|
imgfn+= '___'
|
|
imgfn+= '-' if link['flair'] is None else slugify(link['flair'])
|
|
imgfn+= '___'
|
|
imgfn+= '-' if link['sharer'] is None else slugify(link['sharer'])
|
|
imgfn+= '___'
|
|
imgfn+= slugify(link['title'][:50])
|
|
imgfn+= '___'
|
|
imgfn+= slugify(link['datakey'])
|
|
imgfn+= '___'
|
|
imgfn+= str('%04d'%seq)
|
|
imgfn+= '.'+file['ext']
|
|
imgto = os.path.join(sdir,imgfn)
|
|
copyfiles.append((imgfrom,imgto))
|
|
del links
|
|
|
|
lcf = len(copyfiles)
|
|
for (cnt, (src, dst)) in enumerate(copyfiles):
|
|
if os.path.exists(dst): continue
|
|
container = os.path.dirname(os.path.abspath(dst))
|
|
if not os.path.exists(container):
|
|
os.makedirs(container)
|
|
print('\r'+' '*79+'\r'+'%03d%% copied: %05d of %05d'%((((cnt+1)/lcf)*100)//1, cnt+1, lcf),end='')
|
|
try:
|
|
shutil.copyfile(src, dst)
|
|
except KeyboardInterrupt as e:
|
|
print()
|
|
print('\r'+' '*79+'\r'+'Deleting interrupted file...',end='')
|
|
os.remove(dst)
|
|
print('\r'+' '*79+'\r'+'Aborted safely',end='')
|
|
print()
|
|
raise e
|
|
|
|
print('\r'+' '*79+'\r'+'Done.',end='')
|
|
print()
|
|
|
|
if __name__ == '__main__':
|
|
main()
|