Wallpaper-Changer/backend.py
2020-12-05 14:00:35 +01:00

109 lines
4.1 KiB
Python

from ctypes import windll
from praw import Reddit
from glob import glob
from time import sleep
from time import time
from urllib.request import urlretrieve
from os import getcwd, remove, system
import progressbar
import urllib.request
from imgur_downloader import ImgurDownloader
import _thread
from subprocess import Popen, CREATE_NEW_CONSOLE
CONFIG = ".config"
CLIENT = ".client"
intrvl = float(open(CONFIG, "r").read().split()[0])
imgpath = ""
start = time()
client = open(CLIENT, "r").read().split()
class NoImage(Exception):
pass
reddit = Reddit(client_id=client[0],
client_secret=client[1],
user_agent='Wallpaper changer by u/Surferlul')
class MyProgressBar():
def __init__(self):
self.pbar = None
def __call__(self, block_num, block_size, total_size):
if not self.pbar:
self.pbar=progressbar.ProgressBar(maxval=total_size)
self.pbar.start()
downloaded = block_num * block_size
if downloaded < total_size:
self.pbar.update(downloaded)
else:
self.pbar.finish()
def del_file(path, Seconds=10):
Popen("powershell.exe Sleep(" + str(Seconds) + "); Remove-Item .\\Images\\" + path, shell=True, creationflags=CREATE_NEW_CONSOLE)
posts = open(".history", "r").read()
for i in reddit.subreddit("wallpaper").hot(limit = 1000):
if i.url not in posts:
submission = i
break
open(".history", "a").write(submission.url + "\n")
try:
if "imgur" in submission.url:
if submission.url.split("/")[-1].split(".")[-1] not in ["jpg", "jpeg", "png"]:
print("Downoading", submission.url)
else:
print("Downoading", submission.url, "as", submission.url.split("/")[-1])
ImgurDownloader(
submission.url,
"./Images/",
file_name=submission.url.split("/")[-1]
if submission.url.split("/")[-1].split(".")[-1] not in ["jpg", "jpeg", "png"]
else submission.url.split("/")[-1].split(".")[0]
).save_images()
if submission.url.split("/")[-1].split(".")[-1] not in ["jpg", "jpeg", "png"]:
windll.user32.SystemParametersInfoW(20, 0, getcwd() + "\\" + glob("./Images/" + submission.url.split("/")[-1] + ".*")[0], 0)
if not int(open(CONFIG, "r").read().split()[1]):
del_file(glob(submission.url.split("/")[-1] + ".*")[0])
else:
windll.user32.SystemParametersInfoW(20, 0, getcwd() + "\\Images\\" + submission.url.split("/")[-1] , 0)
if not int(open(CONFIG, "r").read().split()[1]):
del_file(submission.url.split("/")[-1])
else:
if submission.url.split("/")[-1].split(".")[-1] not in ["jpg", "jpeg", "png"]:
raise NoImage
imgpath = "Images\\" + submission.url.split("/")[-1]
print("Downoading", submission.url, "as", submission.url.split("\\")[-1])
urlretrieve(submission.url, imgpath, MyProgressBar())
windll.user32.SystemParametersInfoW(20, 0, getcwd() + "\\" + imgpath, 0)
if not int(open(CONFIG, "r").read().split()[1]):
del_file(submission.url.split("/")[-1])
end = time()
intrvl += start - end
if intrvl >= 0:
pbar = progressbar.ProgressBar(maxval=intrvl)
pbar.start()
if intrvl < 10:
for i in range(1, int(intrvl * 10) + 1):
sleep(intrvl / int(intrvl * 10))
try:
pbar.update(intrvl / int(intrvl * 10) * i)
except:
pbar.update(int(intrvl))
print("test")
else:
for i in range(1, 101):
sleep(intrvl / 100)
pbar.update(intrvl / 100 * i)
pbar.finish()
elif int(open(CONFIG, "r").read().split()[3]):
intrvl -= 2 * (start - end)
print("Interval was rounded up to " + str(round(intrvl * 100) / 100) + "s because the download needed longer than the interval.")
except NoImage:
print("Error: Url doesn't point to an Image")
except Exception as E:
print("Error: " + type(E).__name__)