From 96597a4e2b822fa5bcbfc4dec788e48f6acf3fd2 Mon Sep 17 00:00:00 2001 From: Kapitan Date: Sun, 16 Mar 2025 01:28:47 +0100 Subject: [PATCH] Bump version to 0.6.0 and add artist tag processing functionality --- kapitanbooru_uploader/ImageBrowser.py | 16 +- .../locales/en/LC_MESSAGES/messages.po | 172 +++++++++--------- .../locales/pl/LC_MESSAGES/messages.po | 172 +++++++++--------- kapitanbooru_uploader/tag_processing.py | 35 ++++ pyproject.toml | 2 +- 5 files changed, 225 insertions(+), 172 deletions(-) diff --git a/kapitanbooru_uploader/ImageBrowser.py b/kapitanbooru_uploader/ImageBrowser.py index 4c2877a..88e8771 100644 --- a/kapitanbooru_uploader/ImageBrowser.py +++ b/kapitanbooru_uploader/ImageBrowser.py @@ -142,7 +142,7 @@ class ImageBrowser(tk.Tk): super().__init__() self.title("Kapitanbooru Uploader") self.geometry("900x600") - self.version = "0.5.2" + self.version = "0.6.0" self.acknowledged_version = parse_version(self.version) self.settings = Settings() @@ -217,6 +217,10 @@ class ImageBrowser(tk.Tk): # Check every 5 minutes (300,000 ms) self.after(300000, self._schedule_update_check) + def is_installed_via_pipx(self): + """Check if the application is installed via pipx""" + return os.environ.get("__PIPX_ORIGIN") == "pipx" + def _check_for_update(self): """Check for updates in a background thread""" @@ -263,7 +267,11 @@ class ImageBrowser(tk.Tk): formatted_message = message_template.format( new_version=new_version, current_version=self.version, - update_command="pip install --upgrade kapitanbooru-uploader", + update_command=( + "pipx upgrade kapitanbooru-uploader" + if self.is_installed_via_pipx() + else "pip install --upgrade kapitanbooru-uploader" + ), ) messagebox.showinfo(title, formatted_message) @@ -513,7 +521,9 @@ class ImageBrowser(tk.Tk): ] for text in content: - ttk.Label(frame, text=text).grid(row=next(row_counter), column=0, sticky=tk.W) + ttk.Label(frame, text=text).grid( + row=next(row_counter), column=0, sticky=tk.W + ) # Repository link repo_frame = ttk.Frame(frame) diff --git a/kapitanbooru_uploader/locales/en/LC_MESSAGES/messages.po b/kapitanbooru_uploader/locales/en/LC_MESSAGES/messages.po index 643a5e6..96575cb 100644 --- a/kapitanbooru_uploader/locales/en/LC_MESSAGES/messages.po +++ b/kapitanbooru_uploader/locales/en/LC_MESSAGES/messages.po @@ -1,8 +1,8 @@ msgid "" msgstr "" -"Project-Id-Version: Kapitanbooru Uploader 0.5.2\n" +"Project-Id-Version: Kapitanbooru Uploader 0.6.0\n" "Report-Msgid-Bugs-To: kapitan@mlesniak.pl\n" -"POT-Creation-Date: 2025-03-15 19:42+0100\n" +"POT-Creation-Date: 2025-03-16 01:22+0100\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -51,26 +51,26 @@ msgstr "Processing..." msgid "Processing, please wait..." msgstr "Processing, please wait..." -#: ImageBrowser.py:244 +#: ImageBrowser.py:248 #, python-brace-format msgid "Update check failed: {error}" msgstr "Update check failed: {error}" -#: ImageBrowser.py:246 +#: ImageBrowser.py:250 #, python-brace-format msgid "Malformed pyproject.toml: {error}" msgstr "Malformed pyproject.toml: {error}" -#: ImageBrowser.py:249 +#: ImageBrowser.py:253 #, python-brace-format msgid "Unexpected error during update check: {error}" msgstr "Unexpected error during update check: {error}" -#: ImageBrowser.py:256 +#: ImageBrowser.py:260 msgid "Update Available" msgstr "Update Available" -#: ImageBrowser.py:258 +#: ImageBrowser.py:262 #, python-brace-format msgid "" "A new version {new_version} is available!\n" @@ -83,240 +83,240 @@ msgstr "" "\n" "Update using: {update_command}" -#: ImageBrowser.py:367 +#: ImageBrowser.py:375 msgid "Błąd przy otwieraniu pliku" msgstr "Error opening file" -#: ImageBrowser.py:409 +#: ImageBrowser.py:417 msgid "Tagger przetworzył:" msgstr "Tagger processed:" -#: ImageBrowser.py:412 +#: ImageBrowser.py:420 msgid "Błąd Taggera dla" msgstr "Tagger error for" -#: ImageBrowser.py:438 +#: ImageBrowser.py:446 msgid "Otwórz folder" msgstr "Open folder" -#: ImageBrowser.py:441 ImageBrowser.py:728 ImageBrowser.py:944 -#: ImageBrowser.py:952 +#: ImageBrowser.py:449 ImageBrowser.py:738 ImageBrowser.py:954 +#: ImageBrowser.py:962 msgid "Wyślij" msgstr "Send" -#: ImageBrowser.py:444 ImageBrowser.py:937 +#: ImageBrowser.py:452 ImageBrowser.py:947 msgid "Wyślij wszystko" msgstr "Send all" -#: ImageBrowser.py:448 ImageBrowser.py:938 ImageBrowser.py:944 +#: ImageBrowser.py:456 ImageBrowser.py:948 ImageBrowser.py:954 msgid "Podmień tagi" msgstr "Replace tags" -#: ImageBrowser.py:451 ImageBrowser.py:939 +#: ImageBrowser.py:459 ImageBrowser.py:949 msgid "Otwórz post" msgstr "Open post" -#: ImageBrowser.py:454 +#: ImageBrowser.py:462 msgid "Zakończ" msgstr "Finish" -#: ImageBrowser.py:456 +#: ImageBrowser.py:464 msgid "Plik" msgstr "File" -#: ImageBrowser.py:460 ImageBrowser.py:557 +#: ImageBrowser.py:468 ImageBrowser.py:567 msgid "Ustawienia" msgstr "Settings" -#: ImageBrowser.py:463 +#: ImageBrowser.py:471 msgid "Wyczyść cache Taggera" msgstr "Clear Tagger cache" -#: ImageBrowser.py:466 +#: ImageBrowser.py:474 msgid "Zregeneruj bazę tagów" msgstr "Regenerate tag database" -#: ImageBrowser.py:468 +#: ImageBrowser.py:476 msgid "Opcje" msgstr "Options" -#: ImageBrowser.py:471 +#: ImageBrowser.py:479 msgid "About" msgstr "About" -#: ImageBrowser.py:472 +#: ImageBrowser.py:480 msgid "Help" msgstr "Help" -#: ImageBrowser.py:477 +#: ImageBrowser.py:485 msgid "About Kapitanbooru Uploader" msgstr "About Kapitanbooru Uploader" -#: ImageBrowser.py:494 +#: ImageBrowser.py:502 #, python-brace-format msgid "A new version {new_version} is available!" msgstr "A new version {new_version} is available!" -#: ImageBrowser.py:501 +#: ImageBrowser.py:509 #, python-brace-format msgid "Current version: {version}" msgstr "Current version: {version}" -#: ImageBrowser.py:503 +#: ImageBrowser.py:511 msgid "A GUI application for uploading images to KapitanBooru." msgstr "A GUI application for uploading images to KapitanBooru." -#: ImageBrowser.py:504 +#: ImageBrowser.py:512 msgid "Features include image upload, tag management, automatic" msgstr "Features include image upload, tag management, automatic" -#: ImageBrowser.py:505 +#: ImageBrowser.py:513 msgid "tagging with wdtagger, and cache management." msgstr "tagging with wdtagger, and cache management." -#: ImageBrowser.py:507 +#: ImageBrowser.py:515 msgid "Authors:" msgstr "Authors:" -#: ImageBrowser.py:510 +#: ImageBrowser.py:518 msgid "License: MIT License" msgstr "License: MIT License" -#: ImageBrowser.py:521 +#: ImageBrowser.py:531 msgid "Repository:" msgstr "Repository:" -#: ImageBrowser.py:530 +#: ImageBrowser.py:540 msgid "Website:" msgstr "Website:" -#: ImageBrowser.py:541 +#: ImageBrowser.py:551 msgid "Close" msgstr "Close" -#: ImageBrowser.py:549 ImageBrowser.py:552 +#: ImageBrowser.py:559 ImageBrowser.py:562 msgid "Cache" msgstr "Cache" -#: ImageBrowser.py:549 +#: ImageBrowser.py:559 msgid "Cache Taggera zostało wyczyszczone." msgstr "Tagger cache has been cleared." -#: ImageBrowser.py:552 +#: ImageBrowser.py:562 msgid "Błąd przy czyszczeniu cache:" msgstr "Error clearing cache:" -#: ImageBrowser.py:562 +#: ImageBrowser.py:572 msgid "Login:" msgstr "Login:" -#: ImageBrowser.py:568 +#: ImageBrowser.py:578 msgid "Hasło:" msgstr "Password:" -#: ImageBrowser.py:574 +#: ImageBrowser.py:584 msgid "Base URL:" msgstr "Base URL:" -#: ImageBrowser.py:580 +#: ImageBrowser.py:590 msgid "Default Tags:" msgstr "Default Tags:" -#: ImageBrowser.py:586 +#: ImageBrowser.py:596 msgid "Browser:" msgstr "Browser:" -#: ImageBrowser.py:600 +#: ImageBrowser.py:610 msgid "Language:" msgstr "Language:" -#: ImageBrowser.py:632 +#: ImageBrowser.py:642 msgid "Zapisz" msgstr "Save" -#: ImageBrowser.py:674 +#: ImageBrowser.py:684 msgid "PNG Tags" msgstr "PNG Tags" -#: ImageBrowser.py:686 +#: ImageBrowser.py:696 msgid "Tagger Tags" msgstr "Tagger Tags" -#: ImageBrowser.py:700 +#: ImageBrowser.py:710 msgid "Manual Tags" msgstr "Manual Tags" -#: ImageBrowser.py:708 +#: ImageBrowser.py:718 msgid "Final Tags" msgstr "Final Tags" -#: ImageBrowser.py:733 +#: ImageBrowser.py:743 msgid "Wyświetl" msgstr "Display" -#: ImageBrowser.py:750 +#: ImageBrowser.py:760 msgid "Przetworzono tagi:" msgstr "Processed tags:" -#: ImageBrowser.py:750 ImageBrowser.py:751 ImageBrowser.py:752 +#: ImageBrowser.py:760 ImageBrowser.py:761 ImageBrowser.py:762 msgid "plików" msgstr "files" -#: ImageBrowser.py:751 +#: ImageBrowser.py:761 msgid "Zweryfikowano status uploadu:" msgstr "Upload status verified:" -#: ImageBrowser.py:752 +#: ImageBrowser.py:762 msgid "Zuploadowano:" msgstr "Uploaded:" -#: ImageBrowser.py:780 +#: ImageBrowser.py:790 msgid "Wybierz folder z obrazkami PNG" msgstr "Select folder with PNG images" -#: ImageBrowser.py:813 +#: ImageBrowser.py:823 msgid "Informacja" msgstr "Information" -#: ImageBrowser.py:813 +#: ImageBrowser.py:823 msgid "Brak plików PNG w wybranym folderze." msgstr "No PNG files in the selected folder." -#: ImageBrowser.py:896 +#: ImageBrowser.py:906 msgid "Błąd podczas sprawdzania paczki uploadu:" msgstr "Error while checking upload package:" -#: ImageBrowser.py:972 +#: ImageBrowser.py:982 msgid "Błąd przy obliczaniu MD5:" msgstr "Error calculating MD5:" -#: ImageBrowser.py:1028 +#: ImageBrowser.py:1038 msgid "Błąd" msgstr "Error" -#: ImageBrowser.py:1028 +#: ImageBrowser.py:1038 msgid "Nie można załadować obrazka:" msgstr "Unable to load image:" -#: ImageBrowser.py:1238 ImageBrowser.py:1248 +#: ImageBrowser.py:1248 ImageBrowser.py:1258 #, python-brace-format msgid "Warning: Tag '{tag}' not found in implication graph" msgstr "Warning: Tag '{tag}' not found in implication graph" -#: ImageBrowser.py:1478 +#: ImageBrowser.py:1488 msgid "Tagger przetwarza..." msgstr "Tagger processing..." -#: ImageBrowser.py:1503 +#: ImageBrowser.py:1513 #, python-brace-format msgid "Wysyłam plik {base_file_name}..." msgstr "Sending file {base_file_name}..." -#: ImageBrowser.py:1544 +#: ImageBrowser.py:1554 msgid "Wysyłanie zakończone powodzeniem!" msgstr "Upload completed successfully!" -#: ImageBrowser.py:1548 ImageBrowser.py:1557 +#: ImageBrowser.py:1558 ImageBrowser.py:1567 #, python-brace-format msgid "" "Wysyłanie zakończone błędem.\n" @@ -327,40 +327,40 @@ msgstr "" "Status: {status_code}\n" "Content: {text}" -#: ImageBrowser.py:1563 ImageBrowser.py:1566 +#: ImageBrowser.py:1573 ImageBrowser.py:1576 msgid "Wysyłanie" msgstr "Uploading" -#: ImageBrowser.py:1579 +#: ImageBrowser.py:1589 msgid "Błąd wysyłania" msgstr "Upload error" -#: ImageBrowser.py:1599 +#: ImageBrowser.py:1609 msgid "Błąd edycji" msgstr "Edit error" -#: ImageBrowser.py:1599 +#: ImageBrowser.py:1609 msgid "Post nie został znaleziony dla tego pliku" msgstr "Post not found for this file" -#: ImageBrowser.py:1609 +#: ImageBrowser.py:1619 #, python-brace-format msgid "Aktualizuję tagi dla {base_file_name}..." msgstr "Updating tags for {base_file_name}..." -#: ImageBrowser.py:1619 ImageBrowser.py:1629 ImageBrowser.py:1660 +#: ImageBrowser.py:1629 ImageBrowser.py:1639 ImageBrowser.py:1670 msgid "Operacja anulowana" msgstr "Operation cancelled" -#: ImageBrowser.py:1670 +#: ImageBrowser.py:1680 msgid "Tagi zostały zaktualizowane!" msgstr "Tags have been updated!" -#: ImageBrowser.py:1672 +#: ImageBrowser.py:1682 msgid "Sukces edycji" msgstr "Edit successful" -#: ImageBrowser.py:1678 +#: ImageBrowser.py:1688 #, python-brace-format msgid "" "Błąd podczas aktualizacji tagów\n" @@ -369,19 +369,19 @@ msgstr "" "Error updating tags\n" "Status: {code}" -#: ImageBrowser.py:1682 +#: ImageBrowser.py:1692 msgid "Treść:" msgstr "Content:" -#: ImageBrowser.py:1686 +#: ImageBrowser.py:1696 msgid "Krytyczny błąd edycji" msgstr "Critical edit error" -#: ImageBrowser.py:1698 +#: ImageBrowser.py:1708 msgid "Potwierdzenie" msgstr "Confirmation" -#: ImageBrowser.py:1700 +#: ImageBrowser.py:1710 msgid "" "Czy na pewno chcesz wrzucić wszystkie niewrzucone pliki?\n" "Każdy z nich zostanie oznaczony tagiem 'meta:auto_upload'.\n" @@ -391,18 +391,18 @@ msgstr "" "Each will be tagged with 'meta:auto_upload'.\n" "Make sure the tags are correct!" -#: ImageBrowser.py:1724 +#: ImageBrowser.py:1734 msgid "Anulowano operację!" msgstr "Operation cancelled!" -#: ImageBrowser.py:1732 +#: ImageBrowser.py:1742 #, python-brace-format msgid "" "Wysyłanie {file_path} z tagami: {final_tags} i ratingiem: {final_rating}" msgstr "" "Uploading {file_path} with tags: {final_tags} and rating: {final_rating}" -#: ImageBrowser.py:1748 +#: ImageBrowser.py:1758 msgid "Przesłano pliki!" msgstr "Files have been uploaded!" @@ -426,11 +426,15 @@ msgstr "Error fetching character tags:" msgid "Błąd przy pobieraniu tagów copyright:" msgstr "Error fetching copyright tags:" -#: tag_processing.py:165 +#: tag_processing.py:48 +msgid "Błąd przy pobieraniu tagów artystów:" +msgstr "Error fetching artist tags:" + +#: tag_processing.py:200 msgid "Błąd podczas odczytu tag_aliases:" msgstr "Error reading tag aliases:" -#: tag_processing.py:181 +#: tag_processing.py:216 msgid "Błąd podczas odczytu tags:" msgstr "Error reading tags:" diff --git a/kapitanbooru_uploader/locales/pl/LC_MESSAGES/messages.po b/kapitanbooru_uploader/locales/pl/LC_MESSAGES/messages.po index e92e4dd..83f1b3e 100644 --- a/kapitanbooru_uploader/locales/pl/LC_MESSAGES/messages.po +++ b/kapitanbooru_uploader/locales/pl/LC_MESSAGES/messages.po @@ -1,8 +1,8 @@ msgid "" msgstr "" -"Project-Id-Version: Kapitanbooru Uploader 0.5.2\n" +"Project-Id-Version: Kapitanbooru Uploader 0.6.0\n" "Report-Msgid-Bugs-To: kapitan@mlesniak.pl\n" -"POT-Creation-Date: 2025-03-15 19:42+0100\n" +"POT-Creation-Date: 2025-03-16 01:22+0100\n" "Language: pl\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -53,26 +53,26 @@ msgstr "Przetwarzanie..." msgid "Processing, please wait..." msgstr "Przetwarzanie, proszę czekać..." -#: ImageBrowser.py:244 +#: ImageBrowser.py:248 #, python-brace-format msgid "Update check failed: {error}" msgstr "Sprawdzenie aktualizacji nie powiodło się: {error}" -#: ImageBrowser.py:246 +#: ImageBrowser.py:250 #, python-brace-format msgid "Malformed pyproject.toml: {error}" msgstr "Nieprawidłowy plik pyproject.toml: {error}" -#: ImageBrowser.py:249 +#: ImageBrowser.py:253 #, python-brace-format msgid "Unexpected error during update check: {error}" msgstr "Nieoczekiwany błąd podczas sprawdzania aktualizacji: {error}" -#: ImageBrowser.py:256 +#: ImageBrowser.py:260 msgid "Update Available" msgstr "Aktualizacja dostępna" -#: ImageBrowser.py:258 +#: ImageBrowser.py:262 #, python-brace-format msgid "" "A new version {new_version} is available!\n" @@ -85,240 +85,240 @@ msgstr "" "\n" "Aktualizuj za pomocą: {update_command}" -#: ImageBrowser.py:367 +#: ImageBrowser.py:375 msgid "Błąd przy otwieraniu pliku" msgstr "Błąd przy otwieraniu pliku" -#: ImageBrowser.py:409 +#: ImageBrowser.py:417 msgid "Tagger przetworzył:" msgstr "Tagger przetworzył:" -#: ImageBrowser.py:412 +#: ImageBrowser.py:420 msgid "Błąd Taggera dla" msgstr "Błąd Taggera dla" -#: ImageBrowser.py:438 +#: ImageBrowser.py:446 msgid "Otwórz folder" msgstr "Otwórz folder" -#: ImageBrowser.py:441 ImageBrowser.py:728 ImageBrowser.py:944 -#: ImageBrowser.py:952 +#: ImageBrowser.py:449 ImageBrowser.py:738 ImageBrowser.py:954 +#: ImageBrowser.py:962 msgid "Wyślij" msgstr "Wyślij" -#: ImageBrowser.py:444 ImageBrowser.py:937 +#: ImageBrowser.py:452 ImageBrowser.py:947 msgid "Wyślij wszystko" msgstr "Wyślij wszystko" -#: ImageBrowser.py:448 ImageBrowser.py:938 ImageBrowser.py:944 +#: ImageBrowser.py:456 ImageBrowser.py:948 ImageBrowser.py:954 msgid "Podmień tagi" msgstr "Podmień tagi" -#: ImageBrowser.py:451 ImageBrowser.py:939 +#: ImageBrowser.py:459 ImageBrowser.py:949 msgid "Otwórz post" msgstr "Otwórz post" -#: ImageBrowser.py:454 +#: ImageBrowser.py:462 msgid "Zakończ" msgstr "Zakończ" -#: ImageBrowser.py:456 +#: ImageBrowser.py:464 msgid "Plik" msgstr "Plik" -#: ImageBrowser.py:460 ImageBrowser.py:557 +#: ImageBrowser.py:468 ImageBrowser.py:567 msgid "Ustawienia" msgstr "Ustawienia" -#: ImageBrowser.py:463 +#: ImageBrowser.py:471 msgid "Wyczyść cache Taggera" msgstr "Wyczyść cache Taggera" -#: ImageBrowser.py:466 +#: ImageBrowser.py:474 msgid "Zregeneruj bazę tagów" msgstr "Zregeneruj bazę tagów" -#: ImageBrowser.py:468 +#: ImageBrowser.py:476 msgid "Opcje" msgstr "Opcje" -#: ImageBrowser.py:471 +#: ImageBrowser.py:479 msgid "About" msgstr "O programie" -#: ImageBrowser.py:472 +#: ImageBrowser.py:480 msgid "Help" msgstr "Pomoc" -#: ImageBrowser.py:477 +#: ImageBrowser.py:485 msgid "About Kapitanbooru Uploader" msgstr "O programie Kapitanbooru Uploader" -#: ImageBrowser.py:494 +#: ImageBrowser.py:502 #, python-brace-format msgid "A new version {new_version} is available!" msgstr "Dostępna jest nowa wersja {new_version}!" -#: ImageBrowser.py:501 +#: ImageBrowser.py:509 #, python-brace-format msgid "Current version: {version}" msgstr "Obecna wersja: {version}" -#: ImageBrowser.py:503 +#: ImageBrowser.py:511 msgid "A GUI application for uploading images to KapitanBooru." msgstr "Aplikacja GUI do przesyłania obrazów do KapitanBooru." -#: ImageBrowser.py:504 +#: ImageBrowser.py:512 msgid "Features include image upload, tag management, automatic" msgstr "Funkcje obejmują przesyłanie obrazów, zarządzanie tagami, automatyczne" -#: ImageBrowser.py:505 +#: ImageBrowser.py:513 msgid "tagging with wdtagger, and cache management." msgstr "tagowanie za pomocą wdtagger oraz zarządzanie cache." -#: ImageBrowser.py:507 +#: ImageBrowser.py:515 msgid "Authors:" msgstr "Autorzy:" -#: ImageBrowser.py:510 +#: ImageBrowser.py:518 msgid "License: MIT License" msgstr "Licencja: MIT License" -#: ImageBrowser.py:521 +#: ImageBrowser.py:531 msgid "Repository:" msgstr "Repozytorium:" -#: ImageBrowser.py:530 +#: ImageBrowser.py:540 msgid "Website:" msgstr "Strona internetowa:" -#: ImageBrowser.py:541 +#: ImageBrowser.py:551 msgid "Close" msgstr "Zamknij" -#: ImageBrowser.py:549 ImageBrowser.py:552 +#: ImageBrowser.py:559 ImageBrowser.py:562 msgid "Cache" msgstr "Cache" -#: ImageBrowser.py:549 +#: ImageBrowser.py:559 msgid "Cache Taggera zostało wyczyszczone." msgstr "Cache Taggera zostało wyczyszczone." -#: ImageBrowser.py:552 +#: ImageBrowser.py:562 msgid "Błąd przy czyszczeniu cache:" msgstr "Błąd przy czyszczeniu cache:" -#: ImageBrowser.py:562 +#: ImageBrowser.py:572 msgid "Login:" msgstr "Login:" -#: ImageBrowser.py:568 +#: ImageBrowser.py:578 msgid "Hasło:" msgstr "Hasło:" -#: ImageBrowser.py:574 +#: ImageBrowser.py:584 msgid "Base URL:" msgstr "Base URL:" -#: ImageBrowser.py:580 +#: ImageBrowser.py:590 msgid "Default Tags:" msgstr "Domyślne tagi:" -#: ImageBrowser.py:586 +#: ImageBrowser.py:596 msgid "Browser:" msgstr "Przeglądarka:" -#: ImageBrowser.py:600 +#: ImageBrowser.py:610 msgid "Language:" msgstr "Język:" -#: ImageBrowser.py:632 +#: ImageBrowser.py:642 msgid "Zapisz" msgstr "Zapisz" -#: ImageBrowser.py:674 +#: ImageBrowser.py:684 msgid "PNG Tags" msgstr "Tagi PNG" -#: ImageBrowser.py:686 +#: ImageBrowser.py:696 msgid "Tagger Tags" msgstr "Tagi Taggera" -#: ImageBrowser.py:700 +#: ImageBrowser.py:710 msgid "Manual Tags" msgstr "Tagi ręczne" -#: ImageBrowser.py:708 +#: ImageBrowser.py:718 msgid "Final Tags" msgstr "Ostateczne tagi" -#: ImageBrowser.py:733 +#: ImageBrowser.py:743 msgid "Wyświetl" msgstr "Wyświetl" -#: ImageBrowser.py:750 +#: ImageBrowser.py:760 msgid "Przetworzono tagi:" msgstr "Przetworzono tagi:" -#: ImageBrowser.py:750 ImageBrowser.py:751 ImageBrowser.py:752 +#: ImageBrowser.py:760 ImageBrowser.py:761 ImageBrowser.py:762 msgid "plików" msgstr "plików" -#: ImageBrowser.py:751 +#: ImageBrowser.py:761 msgid "Zweryfikowano status uploadu:" msgstr "Zweryfikowano status uploadu:" -#: ImageBrowser.py:752 +#: ImageBrowser.py:762 msgid "Zuploadowano:" msgstr "Zuploadowano:" -#: ImageBrowser.py:780 +#: ImageBrowser.py:790 msgid "Wybierz folder z obrazkami PNG" msgstr "Wybierz folder z obrazami PNG" -#: ImageBrowser.py:813 +#: ImageBrowser.py:823 msgid "Informacja" msgstr "Informacja" -#: ImageBrowser.py:813 +#: ImageBrowser.py:823 msgid "Brak plików PNG w wybranym folderze." msgstr "Brak plików PNG w wybranym folderze." -#: ImageBrowser.py:896 +#: ImageBrowser.py:906 msgid "Błąd podczas sprawdzania paczki uploadu:" msgstr "Błąd podczas sprawdzania paczki uploadu:" -#: ImageBrowser.py:972 +#: ImageBrowser.py:982 msgid "Błąd przy obliczaniu MD5:" msgstr "Błąd przy obliczaniu MD5:" -#: ImageBrowser.py:1028 +#: ImageBrowser.py:1038 msgid "Błąd" msgstr "Błąd" -#: ImageBrowser.py:1028 +#: ImageBrowser.py:1038 msgid "Nie można załadować obrazka:" msgstr "Nie można załadować obrazka:" -#: ImageBrowser.py:1238 ImageBrowser.py:1248 +#: ImageBrowser.py:1248 ImageBrowser.py:1258 #, python-brace-format msgid "Warning: Tag '{tag}' not found in implication graph" msgstr "Ostrzeżenie: Tag '{tag}' nie został znaleziony w grafie implikacji" -#: ImageBrowser.py:1478 +#: ImageBrowser.py:1488 msgid "Tagger przetwarza..." msgstr "Tagger przetwarza..." -#: ImageBrowser.py:1503 +#: ImageBrowser.py:1513 #, python-brace-format msgid "Wysyłam plik {base_file_name}..." msgstr "Wysyłam plik {base_file_name}..." -#: ImageBrowser.py:1544 +#: ImageBrowser.py:1554 msgid "Wysyłanie zakończone powodzeniem!" msgstr "Wysyłanie zakończone powodzeniem!" -#: ImageBrowser.py:1548 ImageBrowser.py:1557 +#: ImageBrowser.py:1558 ImageBrowser.py:1567 #, python-brace-format msgid "" "Wysyłanie zakończone błędem.\n" @@ -329,40 +329,40 @@ msgstr "" "Status: {status_code}\n" "Treść: {text}" -#: ImageBrowser.py:1563 ImageBrowser.py:1566 +#: ImageBrowser.py:1573 ImageBrowser.py:1576 msgid "Wysyłanie" msgstr "Wysyłanie" -#: ImageBrowser.py:1579 +#: ImageBrowser.py:1589 msgid "Błąd wysyłania" msgstr "Błąd wysyłania" -#: ImageBrowser.py:1599 +#: ImageBrowser.py:1609 msgid "Błąd edycji" msgstr "Błąd edycji" -#: ImageBrowser.py:1599 +#: ImageBrowser.py:1609 msgid "Post nie został znaleziony dla tego pliku" msgstr "Post nie został znaleziony dla tego pliku" -#: ImageBrowser.py:1609 +#: ImageBrowser.py:1619 #, python-brace-format msgid "Aktualizuję tagi dla {base_file_name}..." msgstr "Aktualizuję tagi dla {base_file_name}..." -#: ImageBrowser.py:1619 ImageBrowser.py:1629 ImageBrowser.py:1660 +#: ImageBrowser.py:1629 ImageBrowser.py:1639 ImageBrowser.py:1670 msgid "Operacja anulowana" msgstr "Operacja anulowana" -#: ImageBrowser.py:1670 +#: ImageBrowser.py:1680 msgid "Tagi zostały zaktualizowane!" msgstr "Tagi zostały zaktualizowane!" -#: ImageBrowser.py:1672 +#: ImageBrowser.py:1682 msgid "Sukces edycji" msgstr "Sukces edycji" -#: ImageBrowser.py:1678 +#: ImageBrowser.py:1688 #, python-brace-format msgid "" "Błąd podczas aktualizacji tagów\n" @@ -371,19 +371,19 @@ msgstr "" "Błąd podczas aktualizacji tagów\n" "Status: {code}" -#: ImageBrowser.py:1682 +#: ImageBrowser.py:1692 msgid "Treść:" msgstr "Treść:" -#: ImageBrowser.py:1686 +#: ImageBrowser.py:1696 msgid "Krytyczny błąd edycji" msgstr "Krytyczny błąd edycji" -#: ImageBrowser.py:1698 +#: ImageBrowser.py:1708 msgid "Potwierdzenie" msgstr "Potwierdzenie" -#: ImageBrowser.py:1700 +#: ImageBrowser.py:1710 msgid "" "Czy na pewno chcesz wrzucić wszystkie niewrzucone pliki?\n" "Każdy z nich zostanie oznaczony tagiem 'meta:auto_upload'.\n" @@ -393,18 +393,18 @@ msgstr "" "Każdy z nich zostanie oznaczony tagiem 'meta:auto_upload'.\n" "Upewnij się, że tagi są poprawne!" -#: ImageBrowser.py:1724 +#: ImageBrowser.py:1734 msgid "Anulowano operację!" msgstr "Operacja anulowana!" -#: ImageBrowser.py:1732 +#: ImageBrowser.py:1742 #, python-brace-format msgid "" "Wysyłanie {file_path} z tagami: {final_tags} i ratingiem: {final_rating}" msgstr "" "Wysyłanie {file_path} z tagami: {final_tags} i ratingiem: {final_rating}" -#: ImageBrowser.py:1748 +#: ImageBrowser.py:1758 msgid "Przesłano pliki!" msgstr "Pliki zostały przesłane!" @@ -428,11 +428,15 @@ msgstr "Błąd przy pobieraniu tagów postaci:" msgid "Błąd przy pobieraniu tagów copyright:" msgstr "Błąd przy pobieraniu tagów copyright:" -#: tag_processing.py:165 +#: tag_processing.py:48 +msgid "Błąd przy pobieraniu tagów artystów:" +msgstr "Błąd przy pobieraniu tagów artystów:" + +#: tag_processing.py:200 msgid "Błąd podczas odczytu tag_aliases:" msgstr "Błąd podczas odczytu tag_aliases:" -#: tag_processing.py:181 +#: tag_processing.py:216 msgid "Błąd podczas odczytu tags:" msgstr "Błąd podczas odczytu tags:" diff --git a/kapitanbooru_uploader/tag_processing.py b/kapitanbooru_uploader/tag_processing.py index ad359c6..cca62a4 100644 --- a/kapitanbooru_uploader/tag_processing.py +++ b/kapitanbooru_uploader/tag_processing.py @@ -34,6 +34,20 @@ def get_copyright_tags(tags_repo: TagsRepo): print(_("Błąd przy pobieraniu tagów copyright:"), e) return set() +@lru_cache(maxsize=1) +def get_artist_tags(tags_repo: TagsRepo): + """Zwraca zbiór nazw tagów z kategorii Artist (kategoria = 1) z bazy tags.sqlite""" + try: + conn = tags_repo.get_conn() + cursor = conn.cursor() + cursor.execute("SELECT name FROM tags WHERE category = 1") + rows = cursor.fetchall() + conn.close() + return {row[0] for row in rows} + except Exception as e: + print(_("Błąd przy pobieraniu tagów artystów:"), e) + return set() + # Wzorce i ustawienia związane z tagami COEFFICIENT_PATTERN = re.compile(r"^.*?(:\d+|\d+\.\d+)$") @@ -58,12 +72,22 @@ AUTO_METATAGS = [ "detailed_background", "ultra-detailed", "wallpaper", + "score_9", + "score_8_up", + "score_7_up", + "score_6_up", + "score_5_up", + "score_4_up", + "score_3_up", + "score_2_up", + "score_1_up", ] TAG_FIXES = { "2boy": "2boys", "2girl": "2girls", "exercise": "exercising", "keyboard_(computer)": "computer_keyboard", + "official_art": "official_style", } MULTI_TAG_FIXES = { "black_choker_with_heart_charm": ["black_choker", "heart_choker"], @@ -119,6 +143,7 @@ def parse_parameters(param_str, tags_repo: TagsRepo): # Pobierz tagi z bazy character_tags = get_character_tags(tags_repo) copyright_tags = get_copyright_tags(tags_repo) + artist_tags = get_artist_tags(tags_repo) # Dla tagów należących do kategorii Character for tag in list(tags): # iterujemy po kopii zbioru @@ -130,6 +155,16 @@ def parse_parameters(param_str, tags_repo: TagsRepo): if tag in copyright_tags: tags.discard(tag) tags.add("copyright:" + tag) + # Dla tagów należących do kategorii Artist + artist_tags_counter = 0 + for tag in list(tags): + if tag in artist_tags: + tags.discard(tag) + tags.add(tag + "_(style)") + tags.add("style_parody") + artist_tags_counter += 1 + if artist_tags_counter > 1: + tags.add("multiple_style_parody") tags = list(tags) tags.sort() diff --git a/pyproject.toml b/pyproject.toml index db76d40..6a13203 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "kapitanbooru-uploader" -version = "0.5.2" +version = "0.6.0" description = "A GUI application for uploading images to KapitanBooru" authors = [{ name = "Michał Leśniak", email = "kapitan@mlesniak.pl" }] dependencies = [