Major bug fixes, optimization + major advance

This commit is contained in:
2022-09-05 23:13:38 +02:00
parent 539b75cb09
commit f8f7832dd7
11 changed files with 322 additions and 161 deletions
+2 -2
View File
@@ -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
+34 -56
View File
@@ -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
+17 -4
View File
@@ -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
+6 -5
View File
@@ -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.