This repository has been archived on 2023-11-29. You can view files and clone it, but cannot push or open issues or pull requests.
WebPicDownloader/controller/HomeController.py

140 lines
4.7 KiB
Python
Raw Normal View History

import time
from controller.MainController import MainController
from model.WebPicDownloader import WebPicDownloader
from util.AsyncTask import AsyncTask
class HomeController:
"""
2022-08-30 21:12:04 +02:00
Controller - HomeController
desc...
2022-08-30 21:12:04 +02:00
@author Jérémi Nihart / EndMove
@link https://git.endmove.eu/EndMove/WebPicDownloader
@version 1.0.0
@since 2022-08-30
"""
# Variables
2022-08-30 21:12:04 +02:00
__main_controller = None
__view = None
__webpic: WebPicDownloader = None
__download_task = None
# Constructor
def __init__(self, controller: MainController, webpic) -> None:
"""
Constructor
* :controller: -> The main application cpntroller.
* :webpic: -> The webpicdownloader instance.
"""
# Setub variables
2022-08-30 21:12:04 +02:00
self.__main_controller = controller
self.__webpic = webpic
# Subscribe to events
controller.subscribe_to_quite_event(self.on_quit)
2022-08-30 21:12:04 +02:00
# START View methods
def set_view(self, view) -> None:
"""
[function for view]
=> Define the view of this controller.
* :view: -> The view that this controller manage.
"""
2022-08-30 21:12:04 +02:00
self.__view = view
self.__webpic.set_messenger_callback(self.on_webpic_messenger)
self.__webpic.set_success_callback(self.on_webpic_success)
self.__webpic.set_failure_callback(self.on_webpic_failure)
2022-08-30 21:12:04 +02:00
# END View method
# START View events
def on_change_view(self, frame) -> None:
"""
[event function for view]
=> Call this event method when the user requests to change the window.
2022-08-30 21:12:04 +02:00
* :frame: -> The frame we want to launch.
2022-08-30 21:12:04 +02:00
"""
self.__main_controller.change_frame(frame)
def on_download_requested(self, url: str, name: str) -> None:
2022-08-30 21:12:04 +02:00
"""
[event function for view]
=> Call this event method when the user requests to download
2022-08-30 21:12:04 +02:00
* :url: -> The url of the website to use for pic-download.
* :name: -> The name of the folder in which put pictures.
2022-08-30 21:12:04 +02:00
"""
if url.strip() and name.strip():
self.__webpic.start_downloading(url, name)
else:
self.__view.show_error_message("Opss, the url or folder name are not valid!")
2022-08-31 12:07:43 +02:00
# END View events
2022-08-31 23:53:24 +02:00
# START Webpic events
def on_webpic_messenger(self, message: str) -> None:
"""
"""
self.__view.add_log(message)
def on_webpic_success(self) -> None:
"""
"""
self.__view.show_success_message("The download has been successfully completed.")
def on_webpic_failure(self) -> None:
"""
"""
self.__view.show_error_message("A critical error preventing the download occurred, check the logs.")
# END Webpic events
2022-08-31 23:53:24 +02:00
# START Controller methods
2022-09-04 17:38:45 +02:00
def on_quit(self) -> bool:
"""
[event function for controller]
=> Call this event when a request to exit is thrown.
"""
if self.__webpic.is_alive():
2022-09-04 17:38:45 +02:00
if self.__main_controller.show_question_dialog(
"Are you sure?",
"Do you really want to quit while the download is running?\nThis will stop the download."
):
self.__webpic.stop_downloading()
time.sleep(4)
2022-09-04 17:38:45 +02:00
return False
else:
return True
print("Quit... homecontroller END") # REMOVE
# END Controller methods
# START Task methods
def __async_task_start(self, url, name) -> None:
"""
[CallBack start function]
=> Start Callback function for asynctask, be careful once executed in asynctask this
function will keep its controller context. In short it's as if the thread was
launched in the controller and the execution never left it.
* :url: -> Url for webpic.
* :name: -> Working dir name for webpic.
"""
2022-09-04 17:38:45 +02:00
print("start callback called") # REMOVE
self.__view.clear_logs()
if self.__webpic.download(url, name):
self.__view.show_success_message("The download has been successfully completed.")
else:
self.__view.show_error_message("A critical error preventing the download occurred, check the logs.")
def __async_task_stop(self) -> None:
"""
[CallBack stop function]
=> End Callback function for asynctask, be careful once executed in asynctask this
function will keep its controller context. In short it's as if the thread was
launched in the controller and the execution never left it.
"""
2022-09-04 17:38:45 +02:00
print("stop callback called") # REMOVE
self.__webpic.stop()
# END Task methods