Archived
Major bug fixes, optimization + major advance
This commit is contained in:
@@ -14,5 +14,5 @@ class Frames(Enum):
|
||||
@version 1.0.0
|
||||
@since 2022-08-30
|
||||
"""
|
||||
Home = 1 # Home view
|
||||
Info = 2 # Info & copyright view
|
||||
HOME = 1 # Home view
|
||||
INFO = 2 # Info & copyright view
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
import time
|
||||
from controller.MainController import MainController
|
||||
from model.WebPicDownloader import WebPicDownloader
|
||||
from util.AsyncTask import AsyncTask
|
||||
from model.WebPicDownloader import MessageType, WebPicDownloader
|
||||
|
||||
|
||||
class HomeController:
|
||||
"""
|
||||
Controller - HomeController
|
||||
|
||||
desc...
|
||||
This controller handles all the interaction directly related to the download.
|
||||
|
||||
@author Jérémi Nihart / EndMove
|
||||
@link https://git.endmove.eu/EndMove/WebPicDownloader
|
||||
@@ -16,13 +14,12 @@ class HomeController:
|
||||
@since 2022-08-30
|
||||
"""
|
||||
# Variables
|
||||
__main_controller = None
|
||||
__main_controller: MainController = None
|
||||
__view = None
|
||||
__webpic: WebPicDownloader = None
|
||||
__download_task = None
|
||||
|
||||
# Constructor
|
||||
def __init__(self, controller: MainController, webpic) -> None:
|
||||
def __init__(self, controller: MainController, webpic: WebPicDownloader) -> None:
|
||||
"""
|
||||
Constructor
|
||||
|
||||
@@ -33,6 +30,11 @@ class HomeController:
|
||||
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)
|
||||
|
||||
@@ -45,21 +47,9 @@ class HomeController:
|
||||
* :view: -> The view that this controller manage.
|
||||
"""
|
||||
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)
|
||||
# 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.
|
||||
|
||||
* :frame: -> The frame we want to launch.
|
||||
"""
|
||||
self.__main_controller.change_frame(frame)
|
||||
|
||||
def on_download_requested(self, url: str, name: str) -> None:
|
||||
"""
|
||||
[event function for view]
|
||||
@@ -69,26 +59,45 @@ class HomeController:
|
||||
* :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) -> None:
|
||||
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.
|
||||
"""
|
||||
self.__view.add_log(message)
|
||||
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
|
||||
@@ -97,44 +106,13 @@ class HomeController:
|
||||
[event function for controller]
|
||||
=> Call this event when a request to exit is thrown.
|
||||
"""
|
||||
if self.__webpic.is_alive():
|
||||
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()
|
||||
time.sleep(4)
|
||||
self.__webpic.stop_downloading() # hot stop deamon
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
print("Quit... homecontroller END") # REMOVE
|
||||
return True
|
||||
self.__webpic.stop_downloading(block=True)
|
||||
# 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.
|
||||
"""
|
||||
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.
|
||||
"""
|
||||
print("stop callback called") # REMOVE
|
||||
self.__webpic.stop()
|
||||
# END Task methods
|
||||
@@ -1,3 +1,4 @@
|
||||
from controller.Frames import Frames
|
||||
from controller.MainController import MainController
|
||||
|
||||
|
||||
@@ -5,7 +6,7 @@ class InfoController:
|
||||
"""
|
||||
Controller - InfoController
|
||||
|
||||
desc...
|
||||
This controller manages the display of information in the information view.
|
||||
|
||||
@author Jérémi Nihart / EndMove
|
||||
@link https://git.endmove.eu/EndMove/WebPicDownloader
|
||||
@@ -13,11 +14,17 @@ class InfoController:
|
||||
@since 2022-08-30
|
||||
"""
|
||||
# Variables
|
||||
__main_controller = None
|
||||
__main_controller: MainController = None
|
||||
__view = None
|
||||
|
||||
# Constructor
|
||||
def __init__(self, controller: MainController) -> None:
|
||||
"""
|
||||
Constructor
|
||||
|
||||
* :controller: -> The main application cpntroller.
|
||||
"""
|
||||
# Setup variables
|
||||
self.__main_controller = controller
|
||||
|
||||
# START View methods
|
||||
@@ -28,14 +35,20 @@ class InfoController:
|
||||
:view: -> The view that this controller manage.
|
||||
"""
|
||||
self.__view = view
|
||||
self.__view.set_title(self.__main_controller.get_config('about_title'))
|
||||
self.__view.set_content(self.__main_controller.get_config('about_content'))
|
||||
self.__view.set_version(
|
||||
f"version: {self.__main_controller.get_config('app_version')} - {self.__main_controller.get_config('app_version_date')}"
|
||||
)
|
||||
# END View method
|
||||
|
||||
# START View events
|
||||
def on_change_view(self, frame) -> None:
|
||||
def on_change_view(self, frame: Frames) -> None:
|
||||
"""
|
||||
[event function for view]
|
||||
=> Call this event method when the user requests to change the window.
|
||||
|
||||
:frame: -> The frame we want to launch.
|
||||
* :frame: -> The frame we want to launch.
|
||||
"""
|
||||
self.__main_controller.change_frame(frame)
|
||||
# END View events
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
import os
|
||||
from controller.Frames import Frames
|
||||
|
||||
|
||||
class MainController:
|
||||
"""
|
||||
Controller - MainController
|
||||
|
||||
TODO desc...
|
||||
This controller manages all the main interaction, change of windows,
|
||||
dialogs, stop... It is the main controller.
|
||||
|
||||
@author Jérémi Nihart / EndMove
|
||||
@link https://git.endmove.eu/EndMove/WebPicDownloader
|
||||
@@ -44,7 +46,7 @@ class MainController:
|
||||
[event function for view]
|
||||
=> Event launch when you ask to open the current folder.
|
||||
"""
|
||||
os.startfile(self.get_config('app_folder'))
|
||||
os.startfile(self.get_config('app_folder')) # Open the file explorer on working dir
|
||||
|
||||
def on_quite(self) -> None:
|
||||
"""
|
||||
@@ -70,12 +72,11 @@ class MainController:
|
||||
[event function for view]
|
||||
=> Event launched when a request for more information arise.
|
||||
"""
|
||||
# TODO on_about
|
||||
print("on_about")
|
||||
self.change_frame(Frames.INFO)
|
||||
# END View methods
|
||||
|
||||
# START Controller methods
|
||||
def change_frame(self, frame) -> None:
|
||||
def change_frame(self, frame: Frames) -> None:
|
||||
"""
|
||||
[function for controller]
|
||||
=> Allows you to request a frame change in the main window.
|
||||
|
||||
Reference in New Issue
Block a user