From 1229b6bc02164ac97830ae321c8ee552cbc7c284 Mon Sep 17 00:00:00 2001 From: Redume Date: Sat, 16 Jul 2022 16:32:59 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=20NOTICE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 ++- main.py | 136 ++++++++++++++++++++++++++++++++++++----------- requirements.txt | 8 +-- 3 files changed, 113 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 3eabbbb..a2333d0 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,23 @@ ## Инструкция 1. Скачайте все необходимые модули -``` +```sh pip install -r requirements.txt ``` 2. Запустите main.py -``` +```sh python main.py ``` -## Участники проекта ✨ +## Участники проекта ✨ [(Emoji key)](https://allcontributors.org/docs/en/emoji-key)

Redume

💻 - 📆

Murzify

diff --git a/main.py b/main.py index b9cca6e..38688d0 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,27 @@ -from win10toast import ToastNotifier +""" + Copyright 2022 Redume + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +""" + from bs4 import BeautifulSoup +from win10toast import ToastNotifier +from pystray import MenuItem, Menu, Icon +from PIL import Image from elevate import elevate + +import json import requests import ctypes import os @@ -9,29 +29,87 @@ import urllib import schedule import winreg as reg import getpass +import sys + +from config import Config -class Nasa: - +class Nasa(Config): def __init__(self): self.url = "https://apod.nasa.gov/apod/" self.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) ' 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'} self.photoName = "everydayphotonasa.jpg" self.toaster = ToastNotifier() + self.state = json.loads( + Config.get_setting(self, + path="config.ini", + section="Settings", + setting="autorun") + .lower()) + + def resource_path(self, relative_path): + base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__))) + return os.path.join(base_path, relative_path) def autorun(self): - path = os.path.dirname(os.path.realpath(__file__)) - address = os.path.join(path, "main.exe") - key_value = "Software/Microsoft/Windows/CurrentVersion/Run" - user = getpass.getuser() - key = reg.OpenKey(reg.HKEY_LOCAL_MACHINE, key_value, 0, reg.KEY_ALL_ACCESS) - reg.SetValueEx(key, user, 0, reg.REG_SZ, address) - reg.CloseKey(key) - self.toaster.show_toast("EveryDayPhotoNasa", - "Программа добавлена в автозапуск.", - duration=5, - icon_path=None) + self.state = not MenuItem.checked + + if not ctypes.windll.shell32.IsUserAnAdmin() != 0: + elevate(show_console=False) + + if self.state is False: + print("Автозапуск включен.") + path = os.path.dirname(os.path.realpath(__file__)) + address = os.path.join(path, "main.exe") + key_value = "Software/Microsoft/Windows/CurrentVersion/Run" + user = getpass.getuser() + key = reg.OpenKey(reg.HKEY_LOCAL_MACHINE, key_value, 0, reg.KEY_ALL_ACCESS) + reg.SetValueEx(key, user, 0, reg.REG_SZ, address) + reg.CloseKey(key) + Config.update_setting(self, + path="config.ini", + section="Settings", + setting="autorun", + value="True") + + self.toaster.show_toast("EveryDayPhotoNasa", + "Программа добавлена в автозапуск.", + duration=3, + icon_path=self.resource_path("nasa.ico")) + else: + print("Программа удалена из автозапуска.") + key_value = "Software/Microsoft/Windows/CurrentVersion/Run" + user = getpass.getuser() + key = reg.OpenKey(reg.HKEY_LOCAL_MACHINE, key_value, 0, reg.KEY_ALL_ACCESS) + reg.DeleteValue(key, user) + reg.CloseKey(key) + Config.update_setting(self, + path="config.ini", + section="Settings", + setting="autorun", + value="False") + + self.toaster.show_toast("EveryDayPhotoNasa", + "Программа удалена из автозапуска.", + duration=3, + icon_path=self.resource_path("nasa.ico")) + + def tray(self): + tray = Icon("EveryDayPhotoNasa", title="EveryDayPhotoNasa", + icon=Image.open(self.resource_path("nasa.ico")), + menu=Menu( + MenuItem("Автозапуск", + self.autorun, + checked=lambda item: self.state), + MenuItem("Выход", + self.tray_close), + )) + tray.run() + + def tray_close(self, tray): + tray.visible = False + sys.exit(0) def download_photo(self): try: @@ -49,27 +127,23 @@ class Nasa: except requests.exceptions.ConnectionError: return self.toaster.show_toast("EveryDayPhotoNasa", "Не получилось подключится к сайту, проверьте подключение к интернету.", - duration=5, - icon_path=None) + duration=3, + icon_path=self.resource_path("nasa.ico")) def set_wallpaper(self): + print(self.state) path = os.path.abspath(self.photoName) ctypes.windll.user32.SystemParametersInfoW(20, 0, path, 0) self.toaster.show_toast("EveryDayPhotoNasa", - "Обои поставлены.", - duration=5, - icon_path=None) - - def start(self): - self.download_photo() - if ctypes.windll.shell32.IsUserAnAdmin() != 0: - elevate(show_console=False, graphical=False) - self.autorun() + "Обои установлены.", + duration=3, + icon_path=self.resource_path("nasa.ico")) -if __name__ == "__main__": - nasa = Nasa() - nasa.start() - schedule.every(1).day.do(nasa.start) - while True: - schedule.run_pending() +nasa = Nasa() +nasa.download_photo() + +schedule.every().day.at("00:30").do(nasa.download_photo) +while True: + schedule.run_pending() + nasa.tray() diff --git a/requirements.txt b/requirements.txt index 3a92561..b179320 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,8 @@ -beautifulsoup4==4.11.1 requests~=2.28.0 schedule~=1.1.0 -elevate~=0.1.3 future~=0.18.2 -win10toast~=0.9 \ No newline at end of file +beautifulsoup4~=4.11.1 +win10toast~=0.9 +pystray~=0.19.4 +Pillow~=9.2.0 +elevate~=0.1.3 \ No newline at end of file