119 lines
4.1 KiB
Python
119 lines
4.1 KiB
Python
from controller.MainController import MainController
|
|
from model.WebPicDownloader import MessageType, WebPicDownloader
|
|
|
|
|
|
class HomeController:
|
|
"""
|
|
Controller - HomeController
|
|
|
|
This controller handles all the interaction directly related to the download.
|
|
|
|
@author Jérémi Nihart / EndMove
|
|
@link https://git.endmove.eu/EndMove/WebPicDownloader
|
|
@version 1.0.0
|
|
@since 2022-08-30
|
|
"""
|
|
# Variables
|
|
__main_controller: MainController = None
|
|
__view = None
|
|
__webpic: WebPicDownloader = None
|
|
|
|
# Constructor
|
|
def __init__(self, controller: MainController, webpic: WebPicDownloader) -> None:
|
|
"""
|
|
Constructor
|
|
|
|
* :controller: -> The main application cpntroller.
|
|
* :webpic: -> The webpicdownloader instance.
|
|
"""
|
|
# Setub variables
|
|
self.__main_controller = controller
|
|
self.__webpic = webpic
|
|
|
|
# setup webpic event
|
|
webpic.set_messenger_callback(self.on_webpic_messenger)
|
|
webpic.set_success_callback(self.on_webpic_success)
|
|
webpic.set_failure_callback(self.on_webpic_failure)
|
|
|
|
# Subscribe to events
|
|
controller.subscribe_to_quite_event(self.on_quit)
|
|
|
|
# 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.
|
|
"""
|
|
self.__view = view
|
|
# END View method
|
|
|
|
# START View events
|
|
def on_download_requested(self, url: str, name: str) -> None:
|
|
"""
|
|
[event function for view]
|
|
=> Call this event method when the user requests to download
|
|
|
|
* :url: -> The url of the website to use for pic-download.
|
|
* :name: -> The name of the folder in which put pictures.
|
|
"""
|
|
if url.strip() and name.strip():
|
|
self.__view.set_interface_state(True)
|
|
self.__view.clear_logs()
|
|
self.__webpic.start_downloading(url, name)
|
|
else:
|
|
self.__view.show_error_message("Opss, the url or folder name are not valid!")
|
|
# END View events
|
|
|
|
# START Webpic events
|
|
def on_webpic_messenger(self, message: str, type) -> None:
|
|
"""
|
|
[event function for webpic]
|
|
=> This event is called to communicate a message.
|
|
|
|
* :message: -> Message that webpic send to the controller.
|
|
* :type: -> Type of message that webpic send to the controller.
|
|
"""
|
|
match type:
|
|
case MessageType.LOG:
|
|
self.__view.add_log(message)
|
|
case MessageType.ERROR:
|
|
self.__view.show_error_message(message)
|
|
case MessageType.SUCCESS:
|
|
self.__view.show_success_message(message)
|
|
|
|
def on_webpic_success(self) -> None:
|
|
"""
|
|
[event function for webpic]
|
|
=> This event is called to indicate that the download has finished successfully.
|
|
"""
|
|
self.__view.show_success_message("The download has been successfully completed.")
|
|
self.__view.set_interface_state(False)
|
|
|
|
def on_webpic_failure(self) -> None:
|
|
"""
|
|
[event function for webpic]
|
|
=> This event is called to indicate that there was a problem during the download.
|
|
"""
|
|
self.__view.show_error_message("A critical error preventing the download occurred, check the logs.")
|
|
self.__view.set_interface_state(False)
|
|
# END Webpic events
|
|
|
|
# START Controller methods
|
|
def on_quit(self) -> bool:
|
|
"""
|
|
[event function for controller]
|
|
=> Call this event when a request to exit is thrown.
|
|
"""
|
|
if self.__webpic.is_download_running():
|
|
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() # hot stop deamon
|
|
return False
|
|
return True
|
|
self.__webpic.stop_downloading(block=True)
|
|
# END Controller methods
|