af1f9fd365
* IMGUR API is no longer used * --skip now accepts file types instead of domain * --skip-domain added * --no-download added * --no-dupe now supports YouTube * Duplicates of older posts will not be dowloaded if --no-dupe and --downloaded-posts options are given together * Invalid characters in MacOS and Linux platforms are removed from filenames * Bug fixes
95 lines
2.5 KiB
Python
95 lines
2.5 KiB
Python
import io
|
||
import json
|
||
import sys
|
||
from os import makedirs, path, remove
|
||
from pathlib import Path
|
||
|
||
from src.jsonHelper import JsonFile
|
||
from src.errors import FileNotFoundError
|
||
|
||
class GLOBAL:
|
||
"""Declare global variables"""
|
||
|
||
RUN_TIME = ""
|
||
config = {'imgur_client_id':None, 'imgur_client_secret': None}
|
||
arguments = None
|
||
directory = None
|
||
defaultConfigDirectory = Path.home() / "Bulk Downloader for Reddit"
|
||
configDirectory = ""
|
||
reddit_client_id = "U-6gk4ZCh3IeNQ"
|
||
reddit_client_secret = "7CZHY6AmKweZME5s50SfDGylaPg"
|
||
downloadedPosts = lambda: []
|
||
printVanilla = print
|
||
|
||
log_stream= None
|
||
|
||
def createLogFile(TITLE):
|
||
"""Create a log file with given name
|
||
inside a folder time stampt in its name and
|
||
put given arguments inside \"HEADER\" key
|
||
"""
|
||
|
||
folderDirectory = GLOBAL.directory / "LOG_FILES" / GLOBAL.RUN_TIME
|
||
|
||
logFilename = TITLE.upper()+'.json'
|
||
|
||
if not path.exists(folderDirectory):
|
||
makedirs(folderDirectory)
|
||
|
||
FILE = JsonFile(folderDirectory / Path(logFilename))
|
||
HEADER = " ".join(sys.argv)
|
||
FILE.add({"HEADER":HEADER})
|
||
|
||
return FILE
|
||
|
||
def printToFile(*args, noPrint=False,**kwargs):
|
||
"""Print to both CONSOLE and
|
||
CONSOLE LOG file in a folder time stampt in the name
|
||
"""
|
||
|
||
folderDirectory = GLOBAL.directory / Path("LOG_FILES") / Path(GLOBAL.RUN_TIME)
|
||
|
||
if not noPrint or \
|
||
GLOBAL.arguments.verbose or \
|
||
"file" in kwargs:
|
||
|
||
print(*args,**kwargs)
|
||
|
||
if not path.exists(folderDirectory):
|
||
makedirs(folderDirectory)
|
||
|
||
if not "file" in kwargs:
|
||
with io.open(
|
||
folderDirectory / "CONSOLE_LOG.txt","a",encoding="utf-8"
|
||
) as FILE:
|
||
print(*args, file=FILE, **kwargs)
|
||
|
||
def nameCorrector(string,reference=None):
|
||
"""Swap strange characters from given string
|
||
with underscore (_) and shorten it.
|
||
Return the string
|
||
"""
|
||
|
||
LIMIT = 247
|
||
|
||
stringLength = len(string)
|
||
|
||
if reference:
|
||
referenceLenght = len(reference)
|
||
totalLenght = referenceLenght
|
||
else:
|
||
totalLenght = stringLength
|
||
|
||
if totalLenght > LIMIT:
|
||
limit = LIMIT - referenceLenght
|
||
string = string[:limit-1]
|
||
|
||
string = string.replace(" ", "_")
|
||
|
||
if len(string.split('\n')) > 1:
|
||
string = "".join(string.split('\n'))
|
||
|
||
BAD_CHARS = ['\\','/',':','*','?','"','<','>','|','#', '.', '@' ,'“', '’', '\'', '!']
|
||
string = "".join([i if i not in BAD_CHARS else "_" for i in string])
|
||
|
||
return string |