Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/PYMD/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from ._files_manager import FileManager
from ._converter import Converter
from src.PYMD.utils.FilesManager import FileManager
from src.PYMD.logic.Converter import Converter
from ._pymd import Pymd
#from ._interface import Interface

Expand Down
6 changes: 3 additions & 3 deletions src/PYMD/_pymd.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
from .db_manager import db_manage
from .database import Manager
from chromologger import Logger as Log

# Initial paths to files
log:Log = Log('./logs/log_pymd')

filename:str = '../../data/test-docx2.docx'
output:str = '../../converted/'

class Pymd:
@staticmethod
def run_app():
db_manage.database_config()
Manager.database_config()
from .interface import run
run()
12 changes: 0 additions & 12 deletions src/PYMD/_returning.py

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
from sqlite3 import Cursor
from typing import Optional
from sqlazo import Database
from chromologger import Logger as Log

log = Log('./log.log')
log: Log = Log('./log.log')

def database_config():
db = Database('./db_manager/config.db', False)
db: Database = Database('./database/config.db', False)
# Query to validate that the table exists
validate_query = db.get_data_where('config_ui', 'id == 1')
validate_query: Optional[Cursor] = db.get_data_where('config_ui', 'id == 1')

# Means that database don't have configs
# Create initial configs
if validate_query is None:
cols_config: list[str] = ['id INTEGER PRIMARY KEY', 'name TEXT NOT NULL', 'value TEXT NOT NULL']
db.create_table('config_ui', cols_config)
Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion src/PYMD/interface/_initialHelp.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def __init__(self, window, app):
self.load_info()

def load_info(self, lang_code: str=None):
__lang = self.__lang.lang_code if lang_code == None else lang_code
__lang = self.__lang.lang_code if lang_code is None else lang_code
__info_md: str = ""
# This is not a translator, just a file
with open(f"./interface/translations/others/IH_{__lang}.srm", "r", encoding="utf-8") as lang:
Expand Down
32 changes: 24 additions & 8 deletions src/PYMD/interface/_interface.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import sys
from typing import Optional

from PySide6.QtWidgets import QApplication, QMainWindow, QFileDialog, QLabel, QMessageBox
from PySide6.QtGui import QIcon, QCloseEvent
from PySide6.QtCore import Qt, QLocale, QSize
Expand All @@ -15,7 +17,7 @@

# Feature: Change focus order (the exit dialog focus is "ok", should be "cancel")

db = Database('./db_manager/config.db', False)
db = Database('./database/config.db', False)
log:Log = Log('./logs/log_interface')

app = QApplication(sys.argv)
Expand Down Expand Up @@ -45,16 +47,14 @@ def __init__(self, parent=None):
@property
def get_app(self) -> QApplication: return app

def closeEvent(self, event: QCloseEvent) -> None:
if not self.__closed_ui: self.__exit(event)

def __listeners(self):
"""Catch events and set an action"""
self.ui.explorer_btn.clicked.connect(self.__open_file)
self.ui.language_btn.clicked.connect(self.__language)
self.ui.action_open_file.triggered.connect(self.__open_file)
self.ui.action_exit.triggered.connect(self.__exit)
self.ui.action_about.triggered.connect(self.__about)

self.ui.action_language.triggered.connect(self.__language)
self.ui.action_theme.triggered.connect(self.__theme)
self.ui.action_OSL.triggered.connect(self.__osl)
Expand All @@ -75,7 +75,7 @@ def __open_file(self):
# Feature: Show progress bar
# => Can be a Label image (hide initialHelp if all ok, continue else show initialHelp again)
__converter:Converter = Converter(self.__filename.absolute().__str__())
__content:str | None = __converter.convert_file().data_str
__content: Optional[str] = __converter.convert_file().data_str

if __content is not None:
self.__init_help.hide()
Expand Down Expand Up @@ -113,16 +113,27 @@ def __extensions(self) -> str:
for ex in FileManager.extensions(): __allow_extensions += f'*{ex} '
return __allow_extensions.strip()

def __exit(self, event_target: QCloseEvent | None = None):
def __exit(self, event_target: Optional[QCloseEvent] = None):
__result:int = self.__box_dialog(self.tr('Close Program'),self.tr('Do you want to close this program?'),{'ok': self.tr('Accept')}).exec()

if __result == 1024:
# Close via "Dialog" (CTRL + W)
self.__closed_ui = True
self.close()
else:
# When close via "Window" (Title bar "X")
if type(event_target) is QCloseEvent: event_target.ignore()

def closeEvent(self, event: QCloseEvent) -> None:
"""Catch Close Event (Title bar "X")

Args:
event (QCloseEvent): Close Event from title bar "X"
"""
if not self.__closed_ui: self.__exit(event)

def __about(self):
"""Show about dialog"""
About(self, self.current_lang)

def __language(self):
Expand All @@ -140,18 +151,23 @@ def __language(self):
self.ui.retranslateUi(self)
lang_manager.lang_dialog.retranslateUi(lang_manager)

# Update lang UI var
self.current_lang = lang_manager.lang_code

# When initial info screen is visible
if self.__init_help.info.isVisible(): self.__init_help.load_info(self.current_lang)

def __box_dialog(self, title:str = '', text:str = '', buttons_cancel_ok:dict | None = None, icon:QIcon | None = None) -> QMessageBox:
"""Create a box dialog"""
def __box_dialog(self, title:str = '', text:str = '', buttons_cancel_ok: Optional[dict] = None, icon: Optional[QIcon] = None) -> QMessageBox:
__icon: QIcon = icon if icon is not None else self.__icon_window
__dialog: QMessageBox = QMessageBox()

# Standard dialog buttons
__dialog.setStandardButtons(__dialog.StandardButton.Ok | __dialog.StandardButton.Cancel)

# If not give buttons labels
__buttons_txt:list[str] = [self.tr('Ok'), self.tr('Cancel')]

# Show and set window configs
__dialog.setWindowIcon(__icon)
__dialog.setWindowTitle(title)
__dialog.setText(text)
Expand Down
8 changes: 5 additions & 3 deletions src/PYMD/interface/_lang.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
from typing import Optional

from PySide6.QtCore import Qt, QTranslator, QLocale
from PySide6.QtWidgets import QApplication, QMainWindow
from .ui_dialog_language import Ui_Lang_Dialog
from PySide6.QtWidgets import QDialog
from sqlazo import Database

db = Database('./db_manager/config.db', False)
db = Database('./database/config.db', False)

class LanguageManager(QDialog):
def __init__(self, app:QApplication=None):
Expand All @@ -14,8 +16,8 @@ def __init__(self, app:QApplication=None):
self.lang_file:str = ''
self.__translator:QTranslator = QTranslator(app)
self.__app:QApplication = app
self.parent:QMainWindow | None = None
self.lang_dialog:Ui_Lang_Dialog | None = None
self.parent: Optional[QMainWindow] = None
self.lang_dialog: Optional[Ui_Lang_Dialog] = None

def set_super_parent(self, parent):
self.parent = parent
Expand Down
2 changes: 1 addition & 1 deletion src/PYMD/interface/_osl.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ class OSL(QDialog):
def __init__(self, parent=None, lang_manager=None):
super().__init__(parent)
self.__lang = lang_manager
self.__osl = Ui_dialog_osl()
self.__osl: Ui_dialog_osl = Ui_dialog_osl()
self.__osl.setupUi(self)
self.__load_initial_content()
self.show()
Expand Down
5 changes: 3 additions & 2 deletions src/PYMD/_converter.py → src/PYMD/logic/Converter.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
from typing import Optional
from ..models.Returning import Returning
from markitdown import MarkItDown, DocumentConverterResult
from src.PYMD._returning import Returning
from chromologger import Logger as Log
from threading import Thread
import asyncio

log = Log('./logs/log_converter') # Initialize logger

class Converter(MarkItDown):
def __init__(self,filename:str,ep:bool|None=None,eb:bool|None=None) -> None:
def __init__(self, filename:str, ep: Optional[bool] =None, eb: Optional[bool] =None) -> None:
super().__init__(enable_plugins=ep, enable_builtins=eb)
self.__fn:str = filename # Path to file + extension
self.content:str = ''
Expand Down
Empty file added src/PYMD/logic/__init__.py
Empty file.
14 changes: 14 additions & 0 deletions src/PYMD/models/Returning.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from typing import Optional

class Returning:
"""To standardize function returns, you can add information in text format (String) or a dictionary (dict)"""
def __init__(self, ok:bool = True, data_str: Optional[str] = None, data_dict: Optional[str] = None):
"""Class constructor

:param ok: Successful operation
:param data_str: String information
:param data_dict: Dictionary information
"""
self.ok: bool = ok # Status (operation)
self.data_str: Optional[str] = data_str # String information
self.data_dict: Optional[dict] = data_dict # Dictionary information
Empty file added src/PYMD/models/__init__.py
Empty file.
2 changes: 0 additions & 2 deletions src/PYMD/_files_manager.py → src/PYMD/utils/FilesManager.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
from src.PYMD._converter import Converter
from chromologger import Logger
from chromolog import Print as Log
from src.PYMD._returning import Returning
from pathlib import Path

log = Logger('./logs/log_file_manager')
Expand Down
Empty file added src/PYMD/utils/__init__.py
Empty file.