Bump version to 0.9.5; update localization files and refactor file upload logic in Core
All checks were successful
Gitea/kapitanbooru-uploader/pipeline/head This commit looks good

This commit is contained in:
2025-06-26 18:12:41 +02:00
parent aa6dd9e583
commit 49d000003a
4 changed files with 92 additions and 106 deletions

View File

@@ -35,7 +35,7 @@ class Core:
""" """
def __init__(self, settings: Settings, gui_mode: bool = True): def __init__(self, settings: Settings, gui_mode: bool = True):
self.version = "0.9.4" self.version = "0.9.5"
self.acknowledged_version = parse_version(self.version) self.acknowledged_version = parse_version(self.version)
self.settings = settings self.settings = settings
self.tags_repo = TagsRepo(settings) self.tags_repo = TagsRepo(settings)
@@ -221,7 +221,9 @@ class Core:
final_tags.add("meta:auto_upload") final_tags.add("meta:auto_upload")
return " ".join(sorted(final_tags)), rating return " ".join(sorted(final_tags)), rating
def get_tagger_results(self, file_path, callback: Callable|None = None) -> wdt.Result: def get_tagger_results(
self, file_path, callback: Callable | None = None
) -> wdt.Result:
md5 = self.image_files_md5[file_path] md5 = self.image_files_md5[file_path]
cached = self.tagger_cache[md5] cached = self.tagger_cache[md5]
if cached: if cached:
@@ -424,24 +426,29 @@ class Core:
""" """
Autotaguje pliki przy użyciu Taggera i wysyła je na serwer. Autotaguje pliki przy użyciu Taggera i wysyła je na serwer.
""" """
for file_path in file_paths: self.image_files = file_paths
if not os.path.isfile(file_path): self.total_files = len(self.image_files)
print(_("Plik nie istnieje:"), file_path) self.image_files_md5 = {
continue file: md5
try: for file, md5 in zip(
tags, rating = self.compute_final_tags_and_rating_for_file( self.image_files, self.compute_md5_parallel(self.image_files)
file_path, lambda: None )
) }
print(_("Tagi dla pliku"), file_path, ":", tags, "Rating:", rating) self.tagger_processed.clear()
self.upload_file( for md5 in self.image_files_md5.values():
file_path, if self.tagger_cache[md5]:
final_tags=tags, self.tagger_processed.add(md5)
final_rating=rating, self.uploaded.clear()
progress_queue=None, self.upload_verified = 0
cancel_event=None, self.uploaded_count = 0
) for file in self.image_files:
except Exception as e: self.uploaded[file] = False
print(_("Błąd podczas autotagowania pliku"), file_path, ":", e) if not self.image_files:
return
self.post_load_processing()
self.check_uploaded_files_thread.join()
self.process_tagger_queue_thread.join()
self.upload_all_files()
def autotag_dir(self, dir): def autotag_dir(self, dir):
""" """
@@ -454,12 +461,8 @@ class Core:
self.load_images() self.load_images()
self.check_uploaded_files_thread.join() self.check_uploaded_files_thread.join()
self.process_tagger_queue_thread.join() self.process_tagger_queue_thread.join()
files_to_upload = [x for x in self.image_files if not self.uploaded[x]]
if not files_to_upload:
print(_("Brak obrazów do przetworzenia w katalogu:"), dir)
return
self.autotag_files(files_to_upload) self.upload_all_files()
def upload_file( def upload_file(
self, self,

View File

@@ -1,8 +1,8 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Kapitanbooru Uploader 0.9.4\n" "Project-Id-Version: Kapitanbooru Uploader 0.9.5\n"
"Report-Msgid-Bugs-To: kapitan@mlesniak.pl\n" "Report-Msgid-Bugs-To: kapitan@mlesniak.pl\n"
"POT-Creation-Date: 2025-06-26 18:00+0200\n" "POT-Creation-Date: 2025-06-26 18:09+0200\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
@@ -47,52 +47,36 @@ msgstr "auth_token not found in the HTML page."
msgid "Błąd przy otwieraniu pliku" msgid "Błąd przy otwieraniu pliku"
msgstr "Error opening file" msgstr "Error opening file"
#: Core.py:237 #: Core.py:239
msgid "Tagger przetworzył:" msgid "Tagger przetworzył:"
msgstr "Tagger processed:" msgstr "Tagger processed:"
#: Core.py:240 #: Core.py:242
msgid "Błąd Taggera dla" msgid "Błąd Taggera dla"
msgstr "Tagger error for" msgstr "Tagger error for"
#: Core.py:295 #: Core.py:297
msgid "Error computing MD5:" msgid "Error computing MD5:"
msgstr "Error computing MD5:" msgstr "Error computing MD5:"
#: Core.py:420 #: Core.py:422
msgid "Błąd podczas sprawdzania paczki uploadu:" msgid "Błąd podczas sprawdzania paczki uploadu:"
msgstr "Error while checking upload package:" msgstr "Error while checking upload package:"
#: Core.py:429 #: Core.py:458
msgid "Plik nie istnieje:"
msgstr "File does not exist:"
#: Core.py:435
msgid "Tagi dla pliku"
msgstr "Tags for file"
#: Core.py:444
msgid "Błąd podczas autotagowania pliku"
msgstr "Error during file autotagowania"
#: Core.py:451
msgid "Podana ścieżka nie jest katalogiem:" msgid "Podana ścieżka nie jest katalogiem:"
msgstr "Given path is not a directory:" msgstr "Given path is not a directory:"
#: Core.py:459 #: Core.py:485
msgid "Brak obrazów do przetworzenia w katalogu:"
msgstr "No images to process in directory:"
#: Core.py:482
#, python-brace-format #, python-brace-format
msgid "Wysyłam plik {base_file_name}..." msgid "Wysyłam plik {base_file_name}..."
msgstr "Uploading file {base_file_name}..." msgstr "Uploading file {base_file_name}..."
#: Core.py:517 #: Core.py:520
msgid "Wysyłanie zakończone powodzeniem!" msgid "Wysyłanie zakończone powodzeniem!"
msgstr "Upload completed successfully!" msgstr "Upload completed successfully!"
#: Core.py:521 Core.py:530 #: Core.py:524 Core.py:533
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Wysyłanie zakończone błędem.\n" "Wysyłanie zakończone błędem.\n"
@@ -103,52 +87,52 @@ msgstr ""
"Status: {status_code}\n" "Status: {status_code}\n"
"Content: {text}" "Content: {text}"
#: Core.py:539 Core.py:545 ImageBrowser.py:664 ImageBrowser.py:667 #: Core.py:542 Core.py:548 ImageBrowser.py:664 ImageBrowser.py:667
#: ImageBrowser.py:1187 ImageBrowser.py:1190 #: ImageBrowser.py:1187 ImageBrowser.py:1190
msgid "Wysyłanie" msgid "Wysyłanie"
msgstr "Uploading" msgstr "Uploading"
#: Core.py:557 #: Core.py:560
msgid "Błąd wysyłania pliku" msgid "Błąd wysyłania pliku"
msgstr "Upload error" msgstr "Upload error"
#: Core.py:587 #: Core.py:590
msgid "Anulowano operację!" msgid "Anulowano operację!"
msgstr "Operation cancelled!" msgstr "Operation cancelled!"
#: Core.py:597 #: Core.py:600
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Wysyłanie {file_path} z tagami: {final_tags} i ratingiem: {final_rating}" "Wysyłanie {file_path} z tagami: {final_tags} i ratingiem: {final_rating}"
msgstr "" msgstr ""
"Uploading {file_path} with tags: {final_tags} and rating: {final_rating}" "Uploading {file_path} with tags: {final_tags} and rating: {final_rating}"
#: Core.py:616 #: Core.py:619
msgid "Przesłano pliki!" msgid "Przesłano pliki!"
msgstr "Files have been uploaded!" msgstr "Files have been uploaded!"
#: Core.py:637 Core.py:641 #: Core.py:640 Core.py:644
msgid "Post nie został znaleziony dla tego pliku" msgid "Post nie został znaleziony dla tego pliku"
msgstr "Post not found for this file" msgstr "Post not found for this file"
#: Core.py:652 #: Core.py:655
#, python-brace-format #, python-brace-format
msgid "Aktualizuję tagi dla {base_file_name}..." msgid "Aktualizuję tagi dla {base_file_name}..."
msgstr "Updating tags for {base_file_name}..." msgstr "Updating tags for {base_file_name}..."
#: Core.py:662 Core.py:672 Core.py:697 #: Core.py:665 Core.py:675 Core.py:700
msgid "Operacja anulowana" msgid "Operacja anulowana"
msgstr "Operation cancelled" msgstr "Operation cancelled"
#: Core.py:707 #: Core.py:710
msgid "Tagi zostały zaktualizowane!" msgid "Tagi zostały zaktualizowane!"
msgstr "Tags have been updated!" msgstr "Tags have been updated!"
#: Core.py:712 ImageBrowser.py:729 #: Core.py:715 ImageBrowser.py:729
msgid "Sukces edycji" msgid "Sukces edycji"
msgstr "Edit successful" msgstr "Edit successful"
#: Core.py:719 #: Core.py:722
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Błąd podczas aktualizacji tagów\n" "Błąd podczas aktualizacji tagów\n"
@@ -157,15 +141,15 @@ msgstr ""
"Error updating tags\n" "Error updating tags\n"
"Status: {code}" "Status: {code}"
#: Core.py:723 #: Core.py:726
msgid "Treść:" msgid "Treść:"
msgstr "Content:" msgstr "Content:"
#: Core.py:727 ImageBrowser.py:726 #: Core.py:730 ImageBrowser.py:726
msgid "Błąd edycji" msgid "Błąd edycji"
msgstr "Edit error" msgstr "Edit error"
#: Core.py:733 #: Core.py:736
msgid "Krytyczny błąd edycji" msgid "Krytyczny błąd edycji"
msgstr "Critical edit error" msgstr "Critical edit error"
@@ -569,5 +553,17 @@ msgstr "Fetched implications for {count} tags..."
msgid "Regeneracja bazy zakończona." msgid "Regeneracja bazy zakończona."
msgstr "Database regeneration complete." msgstr "Database regeneration complete."
#~ msgid "Plik nie istnieje:"
#~ msgstr "File does not exist:"
#~ msgid "Tagi dla pliku"
#~ msgstr "Tags for file"
#~ msgid "Błąd podczas autotagowania pliku"
#~ msgstr "Error during file autotagowania"
#~ msgid "Brak obrazów do przetworzenia w katalogu:"
#~ msgstr "No images to process in directory:"
#~ msgid "Błąd przy obliczaniu MD5:" #~ msgid "Błąd przy obliczaniu MD5:"
#~ msgstr "Error calculating MD5:" #~ msgstr "Error calculating MD5:"

View File

@@ -1,8 +1,8 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Kapitanbooru Uploader 0.9.4\n" "Project-Id-Version: Kapitanbooru Uploader 0.9.5\n"
"Report-Msgid-Bugs-To: kapitan@mlesniak.pl\n" "Report-Msgid-Bugs-To: kapitan@mlesniak.pl\n"
"POT-Creation-Date: 2025-06-26 18:00+0200\n" "POT-Creation-Date: 2025-06-26 18:09+0200\n"
"Language: pl\n" "Language: pl\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
@@ -49,52 +49,36 @@ msgstr "Nie znaleziono auth_token w stronie HTML."
msgid "Błąd przy otwieraniu pliku" msgid "Błąd przy otwieraniu pliku"
msgstr "Błąd przy otwieraniu pliku" msgstr "Błąd przy otwieraniu pliku"
#: Core.py:237 #: Core.py:239
msgid "Tagger przetworzył:" msgid "Tagger przetworzył:"
msgstr "Tagger przetworzył:" msgstr "Tagger przetworzył:"
#: Core.py:240 #: Core.py:242
msgid "Błąd Taggera dla" msgid "Błąd Taggera dla"
msgstr "Błąd Taggera dla" msgstr "Błąd Taggera dla"
#: Core.py:295 #: Core.py:297
msgid "Error computing MD5:" msgid "Error computing MD5:"
msgstr "Błąd przy obliczaniu MD5:" msgstr "Błąd przy obliczaniu MD5:"
#: Core.py:420 #: Core.py:422
msgid "Błąd podczas sprawdzania paczki uploadu:" msgid "Błąd podczas sprawdzania paczki uploadu:"
msgstr "Błąd podczas sprawdzania paczki uploadu:" msgstr "Błąd podczas sprawdzania paczki uploadu:"
#: Core.py:429 #: Core.py:458
msgid "Plik nie istnieje:"
msgstr ""
#: Core.py:435
msgid "Tagi dla pliku"
msgstr ""
#: Core.py:444
msgid "Błąd podczas autotagowania pliku"
msgstr "Błąd podczas autotagowania pliku"
#: Core.py:451
msgid "Podana ścieżka nie jest katalogiem:" msgid "Podana ścieżka nie jest katalogiem:"
msgstr "" msgstr ""
#: Core.py:459 #: Core.py:485
msgid "Brak obrazów do przetworzenia w katalogu:"
msgstr ""
#: Core.py:482
#, python-brace-format #, python-brace-format
msgid "Wysyłam plik {base_file_name}..." msgid "Wysyłam plik {base_file_name}..."
msgstr "Wysyłam plik {base_file_name}..." msgstr "Wysyłam plik {base_file_name}..."
#: Core.py:517 #: Core.py:520
msgid "Wysyłanie zakończone powodzeniem!" msgid "Wysyłanie zakończone powodzeniem!"
msgstr "Wysyłanie zakończone powodzeniem!" msgstr "Wysyłanie zakończone powodzeniem!"
#: Core.py:521 Core.py:530 #: Core.py:524 Core.py:533
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Wysyłanie zakończone błędem.\n" "Wysyłanie zakończone błędem.\n"
@@ -105,52 +89,52 @@ msgstr ""
"Status: {status_code}\n" "Status: {status_code}\n"
"Treść: {text}" "Treść: {text}"
#: Core.py:539 Core.py:545 ImageBrowser.py:664 ImageBrowser.py:667 #: Core.py:542 Core.py:548 ImageBrowser.py:664 ImageBrowser.py:667
#: ImageBrowser.py:1187 ImageBrowser.py:1190 #: ImageBrowser.py:1187 ImageBrowser.py:1190
msgid "Wysyłanie" msgid "Wysyłanie"
msgstr "Wysyłanie" msgstr "Wysyłanie"
#: Core.py:557 #: Core.py:560
msgid "Błąd wysyłania pliku" msgid "Błąd wysyłania pliku"
msgstr "Błąd wysyłania pliku" msgstr "Błąd wysyłania pliku"
#: Core.py:587 #: Core.py:590
msgid "Anulowano operację!" msgid "Anulowano operację!"
msgstr "Operacja anulowana!" msgstr "Operacja anulowana!"
#: Core.py:597 #: Core.py:600
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Wysyłanie {file_path} z tagami: {final_tags} i ratingiem: {final_rating}" "Wysyłanie {file_path} z tagami: {final_tags} i ratingiem: {final_rating}"
msgstr "" msgstr ""
"Wysyłanie {file_path} z tagami: {final_tags} i ratingiem: {final_rating}" "Wysyłanie {file_path} z tagami: {final_tags} i ratingiem: {final_rating}"
#: Core.py:616 #: Core.py:619
msgid "Przesłano pliki!" msgid "Przesłano pliki!"
msgstr "Pliki zostały przesłane!" msgstr "Pliki zostały przesłane!"
#: Core.py:637 Core.py:641 #: Core.py:640 Core.py:644
msgid "Post nie został znaleziony dla tego pliku" msgid "Post nie został znaleziony dla tego pliku"
msgstr "Post nie został znaleziony dla tego pliku" msgstr "Post nie został znaleziony dla tego pliku"
#: Core.py:652 #: Core.py:655
#, python-brace-format #, python-brace-format
msgid "Aktualizuję tagi dla {base_file_name}..." msgid "Aktualizuję tagi dla {base_file_name}..."
msgstr "Aktualizuję tagi dla {base_file_name}..." msgstr "Aktualizuję tagi dla {base_file_name}..."
#: Core.py:662 Core.py:672 Core.py:697 #: Core.py:665 Core.py:675 Core.py:700
msgid "Operacja anulowana" msgid "Operacja anulowana"
msgstr "Operacja anulowana" msgstr "Operacja anulowana"
#: Core.py:707 #: Core.py:710
msgid "Tagi zostały zaktualizowane!" msgid "Tagi zostały zaktualizowane!"
msgstr "Tagi zostały zaktualizowane!" msgstr "Tagi zostały zaktualizowane!"
#: Core.py:712 ImageBrowser.py:729 #: Core.py:715 ImageBrowser.py:729
msgid "Sukces edycji" msgid "Sukces edycji"
msgstr "Sukces edycji" msgstr "Sukces edycji"
#: Core.py:719 #: Core.py:722
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Błąd podczas aktualizacji tagów\n" "Błąd podczas aktualizacji tagów\n"
@@ -159,15 +143,15 @@ msgstr ""
"Błąd podczas aktualizacji tagów\n" "Błąd podczas aktualizacji tagów\n"
"Status: {code}" "Status: {code}"
#: Core.py:723 #: Core.py:726
msgid "Treść:" msgid "Treść:"
msgstr "Treść:" msgstr "Treść:"
#: Core.py:727 ImageBrowser.py:726 #: Core.py:730 ImageBrowser.py:726
msgid "Błąd edycji" msgid "Błąd edycji"
msgstr "Błąd edycji" msgstr "Błąd edycji"
#: Core.py:733 #: Core.py:736
msgid "Krytyczny błąd edycji" msgid "Krytyczny błąd edycji"
msgstr "Krytyczny błąd edycji" msgstr "Krytyczny błąd edycji"
@@ -571,5 +555,8 @@ msgstr "Pobrano implikacje dla {count} tagów..."
msgid "Regeneracja bazy zakończona." msgid "Regeneracja bazy zakończona."
msgstr "Regeneracja bazy zakończona." msgstr "Regeneracja bazy zakończona."
#~ msgid "Błąd podczas autotagowania pliku"
#~ msgstr "Błąd podczas autotagowania pliku"
#~ msgid "Błąd przy obliczaniu MD5:" #~ msgid "Błąd przy obliczaniu MD5:"
#~ msgstr "Błąd przy obliczaniu MD5:" #~ msgstr "Błąd przy obliczaniu MD5:"

View File

@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "kapitanbooru-uploader" name = "kapitanbooru-uploader"
version = "0.9.4" version = "0.9.5"
description = "A GUI application for uploading images to KapitanBooru" description = "A GUI application for uploading images to KapitanBooru"
authors = [{ name = "Michał Leśniak", email = "kapitan@mlesniak.pl" }] authors = [{ name = "Michał Leśniak", email = "kapitan@mlesniak.pl" }]
dependencies = [ dependencies = [