Bump version to 0.8.3; add artist extraction from filename and update localization files
All checks were successful
Gitea/kapitanbooru-uploader/pipeline/head This commit looks good

This commit is contained in:
2025-06-25 23:56:19 +02:00
parent a1b1450400
commit 0987fbbed0
5 changed files with 193 additions and 171 deletions

View File

@@ -23,7 +23,7 @@ from .TagsRepo import TagsRepo
from .autocomplete import TagManager from .autocomplete import TagManager
from .common import get_auth_token, login, open_tag_wiki_url, open_webbrowser from .common import get_auth_token, login, open_tag_wiki_url, open_webbrowser
from .settings import Settings from .settings import Settings
from .tag_processing import TAG_FIXES, extract_parameters, parse_parameters, process_tag from .tag_processing import TAG_FIXES, extract_parameters, parse_parameters, process_tag, extract_artist_from_filename
from .tagger_cache import TaggerCache from .tagger_cache import TaggerCache
@@ -32,7 +32,7 @@ class ImageBrowser(tk.Tk):
super().__init__() super().__init__()
self.title("Kapitanbooru Uploader") self.title("Kapitanbooru Uploader")
self.geometry("900x600") self.geometry("900x600")
self.version = "0.8.2" self.version = "0.8.3"
self.acknowledged_version = parse_version(self.version) self.acknowledged_version = parse_version(self.version)
self.settings = Settings() self.settings = Settings()
@@ -250,6 +250,7 @@ class ImageBrowser(tk.Tk):
try: try:
img = Image.open(file_path) img = Image.open(file_path)
parameters = extract_parameters(img, file_path) parameters = extract_parameters(img, file_path)
artist_tag = extract_artist_from_filename(file_path)
png_tags = set( png_tags = set(
[ [
x x
@@ -258,6 +259,8 @@ class ImageBrowser(tk.Tk):
is not None # Ignoruj nieistniejące tagi is not None # Ignoruj nieistniejące tagi
] ]
) )
if artist_tag:
png_tags.add("artist:" + artist_tag.replace(" ", "_").replace("\\", ""))
img.close() img.close()
except Exception as e: except Exception as e:
print(_("Błąd przy otwieraniu pliku"), file_path, ":", e) print(_("Błąd przy otwieraniu pliku"), file_path, ":", e)
@@ -924,10 +927,13 @@ class ImageBrowser(tk.Tk):
try: try:
img = Image.open(file_path) img = Image.open(file_path)
parameters = extract_parameters(img, file_path) parameters = extract_parameters(img, file_path)
artist_tag = extract_artist_from_filename(file_path)
self.current_image_original = img.copy() self.current_image_original = img.copy()
self.current_parameters = parameters self.current_parameters = parameters
self.update_display_image() self.update_display_image()
parsed_parameters = parse_parameters(parameters, self.tags_repo) parsed_parameters = parse_parameters(parameters, self.tags_repo)
if artist_tag:
parsed_parameters += f" artist:{artist_tag.replace(' ', '_').replace('\\', '')}"
# Uaktualnij widget PNG Tags # Uaktualnij widget PNG Tags
self.update_png_tags_widget(parsed_parameters.split()) self.update_png_tags_widget(parsed_parameters.split())
# Uruchom Taggera w osobnym wątku # Uruchom Taggera w osobnym wątku

View File

@@ -1,8 +1,8 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Kapitanbooru Uploader 0.8.2\n" "Project-Id-Version: Kapitanbooru Uploader 0.8.3\n"
"Report-Msgid-Bugs-To: kapitan@mlesniak.pl\n" "Report-Msgid-Bugs-To: kapitan@mlesniak.pl\n"
"POT-Creation-Date: 2025-03-27 20:47+0100\n" "POT-Creation-Date: 2025-06-25 23:49+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"
@@ -75,241 +75,241 @@ msgstr ""
"\n" "\n"
"Update using: {update_command}" "Update using: {update_command}"
#: ImageBrowser.py:263 #: ImageBrowser.py:266
msgid "Błąd przy otwieraniu pliku" msgid "Błąd przy otwieraniu pliku"
msgstr "Error opening file" msgstr "Error opening file"
#: ImageBrowser.py:305 #: ImageBrowser.py:308
msgid "Tagger przetworzył:" msgid "Tagger przetworzył:"
msgstr "Tagger processed:" msgstr "Tagger processed:"
#: ImageBrowser.py:308 #: ImageBrowser.py:311
msgid "Błąd Taggera dla" msgid "Błąd Taggera dla"
msgstr "Tagger error for" msgstr "Tagger error for"
#: ImageBrowser.py:334 #: ImageBrowser.py:337
msgid "Otwórz folder" msgid "Otwórz folder"
msgstr "Open folder" msgstr "Open folder"
#: ImageBrowser.py:337 ImageBrowser.py:626 ImageBrowser.py:853 #: ImageBrowser.py:340 ImageBrowser.py:629 ImageBrowser.py:856
#: ImageBrowser.py:861 #: ImageBrowser.py:864
msgid "Wyślij" msgid "Wyślij"
msgstr "Send" msgstr "Send"
#: ImageBrowser.py:340 ImageBrowser.py:846 #: ImageBrowser.py:343 ImageBrowser.py:849
msgid "Wyślij wszystko" msgid "Wyślij wszystko"
msgstr "Send all" msgstr "Send all"
#: ImageBrowser.py:344 ImageBrowser.py:847 ImageBrowser.py:853 #: ImageBrowser.py:347 ImageBrowser.py:850 ImageBrowser.py:856
msgid "Podmień tagi" msgid "Podmień tagi"
msgstr "Replace tags" msgstr "Replace tags"
#: ImageBrowser.py:347 ImageBrowser.py:848 #: ImageBrowser.py:350 ImageBrowser.py:851
msgid "Otwórz post" msgid "Otwórz post"
msgstr "Open post" msgstr "Open post"
#: ImageBrowser.py:350 #: ImageBrowser.py:353
msgid "Zakończ" msgid "Zakończ"
msgstr "Finish" msgstr "Finish"
#: ImageBrowser.py:352 #: ImageBrowser.py:355
msgid "Plik" msgid "Plik"
msgstr "File" msgstr "File"
#: ImageBrowser.py:356 ImageBrowser.py:455 #: ImageBrowser.py:359 ImageBrowser.py:458
msgid "Ustawienia" msgid "Ustawienia"
msgstr "Settings" msgstr "Settings"
#: ImageBrowser.py:359 #: ImageBrowser.py:362
msgid "Wyczyść cache Taggera" msgid "Wyczyść cache Taggera"
msgstr "Clear Tagger cache" msgstr "Clear Tagger cache"
#: ImageBrowser.py:362 #: ImageBrowser.py:365
msgid "Zregeneruj bazę tagów" msgid "Zregeneruj bazę tagów"
msgstr "Regenerate tag database" msgstr "Regenerate tag database"
#: ImageBrowser.py:364 #: ImageBrowser.py:367
msgid "Opcje" msgid "Opcje"
msgstr "Options" msgstr "Options"
#: ImageBrowser.py:367 #: ImageBrowser.py:370
msgid "About" msgid "About"
msgstr "About" msgstr "About"
#: ImageBrowser.py:368 #: ImageBrowser.py:371
msgid "Help" msgid "Help"
msgstr "Help" msgstr "Help"
#: ImageBrowser.py:373 #: ImageBrowser.py:376
msgid "About Kapitanbooru Uploader" msgid "About Kapitanbooru Uploader"
msgstr "About Kapitanbooru Uploader" msgstr "About Kapitanbooru Uploader"
#: ImageBrowser.py:390 #: ImageBrowser.py:393
#, python-brace-format #, python-brace-format
msgid "A new version {new_version} is available!" msgid "A new version {new_version} is available!"
msgstr "A new version {new_version} is available!" msgstr "A new version {new_version} is available!"
#: ImageBrowser.py:397 #: ImageBrowser.py:400
#, python-brace-format #, python-brace-format
msgid "Current version: {version}" msgid "Current version: {version}"
msgstr "Current version: {version}" msgstr "Current version: {version}"
#: ImageBrowser.py:399 #: ImageBrowser.py:402
msgid "A GUI application for uploading images to KapitanBooru." msgid "A GUI application for uploading images to KapitanBooru."
msgstr "A GUI application for uploading images to KapitanBooru." msgstr "A GUI application for uploading images to KapitanBooru."
#: ImageBrowser.py:400 #: ImageBrowser.py:403
msgid "Features include image upload, tag management, automatic" msgid "Features include image upload, tag management, automatic"
msgstr "Features include image upload, tag management, automatic" msgstr "Features include image upload, tag management, automatic"
#: ImageBrowser.py:401 #: ImageBrowser.py:404
msgid "tagging with wdtagger, and cache management." msgid "tagging with wdtagger, and cache management."
msgstr "tagging with wdtagger, and cache management." msgstr "tagging with wdtagger, and cache management."
#: ImageBrowser.py:403 #: ImageBrowser.py:406
msgid "Authors:" msgid "Authors:"
msgstr "Authors:" msgstr "Authors:"
#: ImageBrowser.py:406 #: ImageBrowser.py:409
msgid "License: MIT License" msgid "License: MIT License"
msgstr "License: MIT License" msgstr "License: MIT License"
#: ImageBrowser.py:419 #: ImageBrowser.py:422
msgid "Repository:" msgid "Repository:"
msgstr "Repository:" msgstr "Repository:"
#: ImageBrowser.py:428 #: ImageBrowser.py:431
msgid "Website:" msgid "Website:"
msgstr "Website:" msgstr "Website:"
#: ImageBrowser.py:439 #: ImageBrowser.py:442
msgid "Close" msgid "Close"
msgstr "Close" msgstr "Close"
#: ImageBrowser.py:447 ImageBrowser.py:450 #: ImageBrowser.py:450 ImageBrowser.py:453
msgid "Cache" msgid "Cache"
msgstr "Cache" msgstr "Cache"
#: ImageBrowser.py:447 #: ImageBrowser.py:450
msgid "Cache Taggera zostało wyczyszczone." msgid "Cache Taggera zostało wyczyszczone."
msgstr "Tagger cache has been cleared." msgstr "Tagger cache has been cleared."
#: ImageBrowser.py:450 #: ImageBrowser.py:453
msgid "Błąd przy czyszczeniu cache:" msgid "Błąd przy czyszczeniu cache:"
msgstr "Error clearing cache:" msgstr "Error clearing cache:"
#: ImageBrowser.py:460 #: ImageBrowser.py:463
msgid "Login:" msgid "Login:"
msgstr "Login:" msgstr "Login:"
#: ImageBrowser.py:466 #: ImageBrowser.py:469
msgid "Hasło:" msgid "Hasło:"
msgstr "Password:" msgstr "Password:"
#: ImageBrowser.py:472 #: ImageBrowser.py:475
msgid "Base URL:" msgid "Base URL:"
msgstr "Base URL:" msgstr "Base URL:"
#: ImageBrowser.py:478 #: ImageBrowser.py:481
msgid "Default Tags:" msgid "Default Tags:"
msgstr "Default Tags:" msgstr "Default Tags:"
#: ImageBrowser.py:484 #: ImageBrowser.py:487
msgid "Browser:" msgid "Browser:"
msgstr "Browser:" msgstr "Browser:"
#: ImageBrowser.py:498 #: ImageBrowser.py:501
msgid "Language:" msgid "Language:"
msgstr "Language:" msgstr "Language:"
#: ImageBrowser.py:530 #: ImageBrowser.py:533
msgid "Zapisz" msgid "Zapisz"
msgstr "Save" msgstr "Save"
#: ImageBrowser.py:572 #: ImageBrowser.py:575
msgid "PNG Tags" msgid "PNG Tags"
msgstr "PNG Tags" msgstr "PNG Tags"
#: ImageBrowser.py:584 #: ImageBrowser.py:587
msgid "Tagger Tags" msgid "Tagger Tags"
msgstr "Tagger Tags" msgstr "Tagger Tags"
#: ImageBrowser.py:598 #: ImageBrowser.py:601
msgid "Manual Tags" msgid "Manual Tags"
msgstr "Manual Tags" msgstr "Manual Tags"
#: ImageBrowser.py:606 #: ImageBrowser.py:609
msgid "Final Tags" msgid "Final Tags"
msgstr "Final Tags" msgstr "Final Tags"
#: ImageBrowser.py:631 #: ImageBrowser.py:634
msgid "Wyświetl" msgid "Wyświetl"
msgstr "Display" msgstr "Display"
#: ImageBrowser.py:648 #: ImageBrowser.py:651
msgid "Przetworzono tagi:" msgid "Przetworzono tagi:"
msgstr "Processed tags:" msgstr "Processed tags:"
#: ImageBrowser.py:648 ImageBrowser.py:649 ImageBrowser.py:650 #: ImageBrowser.py:651 ImageBrowser.py:652 ImageBrowser.py:653
msgid "plików" msgid "plików"
msgstr "files" msgstr "files"
#: ImageBrowser.py:649 #: ImageBrowser.py:652
msgid "Zweryfikowano status uploadu:" msgid "Zweryfikowano status uploadu:"
msgstr "Upload status verified:" msgstr "Upload status verified:"
#: ImageBrowser.py:650 #: ImageBrowser.py:653
msgid "Zuploadowano:" msgid "Zuploadowano:"
msgstr "Uploaded:" msgstr "Uploaded:"
#: ImageBrowser.py:679 #: ImageBrowser.py:682
msgid "Wybierz folder z obrazkami PNG, JPEG, WebP, AVIF i GIF" msgid "Wybierz folder z obrazkami PNG, JPEG, WebP, AVIF i GIF"
msgstr "Select folder with PNG, JPEG, WebP, AVIF, and GIF images" msgstr "Select folder with PNG, JPEG, WebP, AVIF, and GIF images"
#: ImageBrowser.py:721 #: ImageBrowser.py:724
msgid "Informacja" msgid "Informacja"
msgstr "Information" msgstr "Information"
#: ImageBrowser.py:722 #: ImageBrowser.py:725
#, fuzzy #, fuzzy
msgid "Brak plików PNG, JPEG, WebP, AVIF lub GIF w wybranym folderze." msgid "Brak plików PNG, JPEG, WebP, AVIF lub GIF w wybranym folderze."
msgstr "No PNG files in the selected folder." msgstr "No PNG files in the selected folder."
#: ImageBrowser.py:805 #: ImageBrowser.py:808
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:"
#: ImageBrowser.py:881 #: ImageBrowser.py:884
#: ImageBrowser.py:881
msgid "Error computing MD5:" msgid "Error computing MD5:"
msgstr "Error computing MD5:" msgstr "Error computing MD5:"
#: ImageBrowser.py:940
#: ImageBrowser.py:946
msgid "Błąd" msgid "Błąd"
msgstr "Error" msgstr "Error"
#: ImageBrowser.py:940 #: ImageBrowser.py:946
msgid "Nie można załadować obrazka:" msgid "Nie można załadować obrazka:"
msgstr "Unable to load image:" msgstr "Unable to load image:"
#: ImageBrowser.py:1150 ImageBrowser.py:1160 #: ImageBrowser.py:1156 ImageBrowser.py:1166
#, python-brace-format #, python-brace-format
msgid "Warning: Tag '{tag}' not found in implication graph" msgid "Warning: Tag '{tag}' not found in implication graph"
msgstr "Warning: Tag '{tag}' not found in implication graph" msgstr "Warning: Tag '{tag}' not found in implication graph"
#: ImageBrowser.py:1390 #: ImageBrowser.py:1396
msgid "Tagger przetwarza..." msgid "Tagger przetwarza..."
msgstr "Tagger processing..." msgstr "Tagger processing..."
#: ImageBrowser.py:1415 #: ImageBrowser.py:1421
#, python-brace-format #, python-brace-format
msgid "Wysyłam plik {base_file_name}..." msgid "Wysyłam plik {base_file_name}..."
msgstr "Sending file {base_file_name}..." msgstr "Sending file {base_file_name}..."
#: ImageBrowser.py:1456 #: ImageBrowser.py:1462
msgid "Wysyłanie zakończone powodzeniem!" msgid "Wysyłanie zakończone powodzeniem!"
msgstr "Upload completed successfully!" msgstr "Upload completed successfully!"
#: ImageBrowser.py:1460 ImageBrowser.py:1469 #: ImageBrowser.py:1466 ImageBrowser.py:1475
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Wysyłanie zakończone błędem.\n" "Wysyłanie zakończone błędem.\n"
@@ -320,40 +320,40 @@ msgstr ""
"Status: {status_code}\n" "Status: {status_code}\n"
"Content: {text}" "Content: {text}"
#: ImageBrowser.py:1475 ImageBrowser.py:1478 #: ImageBrowser.py:1481 ImageBrowser.py:1484
msgid "Wysyłanie" msgid "Wysyłanie"
msgstr "Uploading" msgstr "Uploading"
#: ImageBrowser.py:1491 #: ImageBrowser.py:1497
msgid "Błąd wysyłania" msgid "Błąd wysyłania"
msgstr "Upload error" msgstr "Upload error"
#: ImageBrowser.py:1511 #: ImageBrowser.py:1517
msgid "Błąd edycji" msgid "Błąd edycji"
msgstr "Edit error" msgstr "Edit error"
#: ImageBrowser.py:1511 #: ImageBrowser.py:1517
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"
#: ImageBrowser.py:1521 #: ImageBrowser.py:1527
#, 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}..."
#: ImageBrowser.py:1531 ImageBrowser.py:1541 ImageBrowser.py:1572 #: ImageBrowser.py:1537 ImageBrowser.py:1547 ImageBrowser.py:1578
msgid "Operacja anulowana" msgid "Operacja anulowana"
msgstr "Operation cancelled" msgstr "Operation cancelled"
#: ImageBrowser.py:1582 #: ImageBrowser.py:1588
msgid "Tagi zostały zaktualizowane!" msgid "Tagi zostały zaktualizowane!"
msgstr "Tags have been updated!" msgstr "Tags have been updated!"
#: ImageBrowser.py:1584 #: ImageBrowser.py:1590
msgid "Sukces edycji" msgid "Sukces edycji"
msgstr "Edit successful" msgstr "Edit successful"
#: ImageBrowser.py:1590 #: ImageBrowser.py:1596
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Błąd podczas aktualizacji tagów\n" "Błąd podczas aktualizacji tagów\n"
@@ -362,19 +362,19 @@ msgstr ""
"Error updating tags\n" "Error updating tags\n"
"Status: {code}" "Status: {code}"
#: ImageBrowser.py:1594 #: ImageBrowser.py:1600
msgid "Treść:" msgid "Treść:"
msgstr "Content:" msgstr "Content:"
#: ImageBrowser.py:1598 #: ImageBrowser.py:1604
msgid "Krytyczny błąd edycji" msgid "Krytyczny błąd edycji"
msgstr "Critical edit error" msgstr "Critical edit error"
#: ImageBrowser.py:1610 #: ImageBrowser.py:1616
msgid "Potwierdzenie" msgid "Potwierdzenie"
msgstr "Confirmation" msgstr "Confirmation"
#: ImageBrowser.py:1612 #: ImageBrowser.py:1618
msgid "" msgid ""
"Czy na pewno chcesz wrzucić wszystkie niewrzucone pliki?\n" "Czy na pewno chcesz wrzucić wszystkie niewrzucone pliki?\n"
"Każdy z nich zostanie oznaczony tagiem 'meta:auto_upload'.\n" "Każdy z nich zostanie oznaczony tagiem 'meta:auto_upload'.\n"
@@ -384,18 +384,18 @@ msgstr ""
"Each will be tagged with 'meta:auto_upload'.\n" "Each will be tagged with 'meta:auto_upload'.\n"
"Make sure the tags are correct!" "Make sure the tags are correct!"
#: ImageBrowser.py:1636 #: ImageBrowser.py:1642
msgid "Anulowano operację!" msgid "Anulowano operację!"
msgstr "Operation cancelled!" msgstr "Operation cancelled!"
#: ImageBrowser.py:1644 #: ImageBrowser.py:1650
#, 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}"
#: ImageBrowser.py:1660 #: ImageBrowser.py:1666
msgid "Przesłano pliki!" msgid "Przesłano pliki!"
msgstr "Files have been uploaded!" msgstr "Files have been uploaded!"
@@ -419,27 +419,27 @@ msgstr "Error loading settings:"
msgid "Błąd podczas zapisywania ustawień:" msgid "Błąd podczas zapisywania ustawień:"
msgstr "Error saving settings:" msgstr "Error saving settings:"
#: tag_processing.py:19 #: tag_processing.py:20
msgid "Błąd przy pobieraniu tagów postaci:" msgid "Błąd przy pobieraniu tagów postaci:"
msgstr "Error fetching character tags:" msgstr "Error fetching character tags:"
#: tag_processing.py:34 #: tag_processing.py:35
msgid "Błąd przy pobieraniu tagów copyright:" msgid "Błąd przy pobieraniu tagów copyright:"
msgstr "Error fetching copyright tags:" msgstr "Error fetching copyright tags:"
#: tag_processing.py:49 #: tag_processing.py:50
msgid "Błąd przy pobieraniu tagów artystów:" msgid "Błąd przy pobieraniu tagów artystów:"
msgstr "Error fetching artist tags:" msgstr "Error fetching artist tags:"
#: tag_processing.py:164 #: tag_processing.py:208
#: tag_processing.py:164
msgid "Nie można sparsować parametrów." msgid "Nie można sparsować parametrów."
msgstr "Unable to parse parameters." msgstr "Unable to parse parameters."
#: tag_processing.py:249
#: tag_processing.py:295
msgid "Błąd podczas odczytu tag_aliases:" msgid "Błąd podczas odczytu tag_aliases:"
msgstr "Error reading tag aliases:" msgstr "Error reading tag aliases:"
#: tag_processing.py:265 #: tag_processing.py:311
msgid "Błąd podczas odczytu tags:" msgid "Błąd podczas odczytu tags:"
msgstr "Error reading tags:" msgstr "Error reading tags:"

View File

@@ -1,8 +1,8 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Kapitanbooru Uploader 0.8.2\n" "Project-Id-Version: Kapitanbooru Uploader 0.8.3\n"
"Report-Msgid-Bugs-To: kapitan@mlesniak.pl\n" "Report-Msgid-Bugs-To: kapitan@mlesniak.pl\n"
"POT-Creation-Date: 2025-03-27 20:47+0100\n" "POT-Creation-Date: 2025-06-25 23:49+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"
@@ -77,242 +77,242 @@ msgstr ""
"\n" "\n"
"Aktualizuj za pomocą: {update_command}" "Aktualizuj za pomocą: {update_command}"
#: ImageBrowser.py:263 #: ImageBrowser.py:266
msgid "Błąd przy otwieraniu pliku" msgid "Błąd przy otwieraniu pliku"
msgstr "Błąd przy otwieraniu pliku" msgstr "Błąd przy otwieraniu pliku"
#: ImageBrowser.py:305 #: ImageBrowser.py:308
msgid "Tagger przetworzył:" msgid "Tagger przetworzył:"
msgstr "Tagger przetworzył:" msgstr "Tagger przetworzył:"
#: ImageBrowser.py:308 #: ImageBrowser.py:311
msgid "Błąd Taggera dla" msgid "Błąd Taggera dla"
msgstr "Błąd Taggera dla" msgstr "Błąd Taggera dla"
#: ImageBrowser.py:334 #: ImageBrowser.py:337
msgid "Otwórz folder" msgid "Otwórz folder"
msgstr "Otwórz folder" msgstr "Otwórz folder"
#: ImageBrowser.py:337 ImageBrowser.py:626 ImageBrowser.py:853 #: ImageBrowser.py:340 ImageBrowser.py:629 ImageBrowser.py:856
#: ImageBrowser.py:861 #: ImageBrowser.py:864
msgid "Wyślij" msgid "Wyślij"
msgstr "Wyślij" msgstr "Wyślij"
#: ImageBrowser.py:340 ImageBrowser.py:846 #: ImageBrowser.py:343 ImageBrowser.py:849
msgid "Wyślij wszystko" msgid "Wyślij wszystko"
msgstr "Wyślij wszystko" msgstr "Wyślij wszystko"
#: ImageBrowser.py:344 ImageBrowser.py:847 ImageBrowser.py:853 #: ImageBrowser.py:347 ImageBrowser.py:850 ImageBrowser.py:856
msgid "Podmień tagi" msgid "Podmień tagi"
msgstr "Podmień tagi" msgstr "Podmień tagi"
#: ImageBrowser.py:347 ImageBrowser.py:848 #: ImageBrowser.py:350 ImageBrowser.py:851
msgid "Otwórz post" msgid "Otwórz post"
msgstr "Otwórz post" msgstr "Otwórz post"
#: ImageBrowser.py:350 #: ImageBrowser.py:353
msgid "Zakończ" msgid "Zakończ"
msgstr "Zakończ" msgstr "Zakończ"
#: ImageBrowser.py:352 #: ImageBrowser.py:355
msgid "Plik" msgid "Plik"
msgstr "Plik" msgstr "Plik"
#: ImageBrowser.py:356 ImageBrowser.py:455 #: ImageBrowser.py:359 ImageBrowser.py:458
msgid "Ustawienia" msgid "Ustawienia"
msgstr "Ustawienia" msgstr "Ustawienia"
#: ImageBrowser.py:359 #: ImageBrowser.py:362
msgid "Wyczyść cache Taggera" msgid "Wyczyść cache Taggera"
msgstr "Wyczyść cache Taggera" msgstr "Wyczyść cache Taggera"
#: ImageBrowser.py:362 #: ImageBrowser.py:365
msgid "Zregeneruj bazę tagów" msgid "Zregeneruj bazę tagów"
msgstr "Zregeneruj bazę tagów" msgstr "Zregeneruj bazę tagów"
#: ImageBrowser.py:364 #: ImageBrowser.py:367
msgid "Opcje" msgid "Opcje"
msgstr "Opcje" msgstr "Opcje"
#: ImageBrowser.py:367 #: ImageBrowser.py:370
msgid "About" msgid "About"
msgstr "O programie" msgstr "O programie"
#: ImageBrowser.py:368 #: ImageBrowser.py:371
msgid "Help" msgid "Help"
msgstr "Pomoc" msgstr "Pomoc"
#: ImageBrowser.py:373 #: ImageBrowser.py:376
msgid "About Kapitanbooru Uploader" msgid "About Kapitanbooru Uploader"
msgstr "O programie Kapitanbooru Uploader" msgstr "O programie Kapitanbooru Uploader"
#: ImageBrowser.py:390 #: ImageBrowser.py:393
#, python-brace-format #, python-brace-format
msgid "A new version {new_version} is available!" msgid "A new version {new_version} is available!"
msgstr "Dostępna jest nowa wersja {new_version}!" msgstr "Dostępna jest nowa wersja {new_version}!"
#: ImageBrowser.py:397 #: ImageBrowser.py:400
#, python-brace-format #, python-brace-format
msgid "Current version: {version}" msgid "Current version: {version}"
msgstr "Obecna wersja: {version}" msgstr "Obecna wersja: {version}"
#: ImageBrowser.py:399 #: ImageBrowser.py:402
msgid "A GUI application for uploading images to KapitanBooru." msgid "A GUI application for uploading images to KapitanBooru."
msgstr "Aplikacja GUI do przesyłania obrazów do KapitanBooru." msgstr "Aplikacja GUI do przesyłania obrazów do KapitanBooru."
#: ImageBrowser.py:400 #: ImageBrowser.py:403
msgid "Features include image upload, tag management, automatic" msgid "Features include image upload, tag management, automatic"
msgstr "Funkcje obejmują przesyłanie obrazów, zarządzanie tagami, automatyczne" msgstr "Funkcje obejmują przesyłanie obrazów, zarządzanie tagami, automatyczne"
#: ImageBrowser.py:401 #: ImageBrowser.py:404
msgid "tagging with wdtagger, and cache management." msgid "tagging with wdtagger, and cache management."
msgstr "tagowanie za pomocą wdtagger oraz zarządzanie cache." msgstr "tagowanie za pomocą wdtagger oraz zarządzanie cache."
#: ImageBrowser.py:403 #: ImageBrowser.py:406
msgid "Authors:" msgid "Authors:"
msgstr "Autorzy:" msgstr "Autorzy:"
#: ImageBrowser.py:406 #: ImageBrowser.py:409
msgid "License: MIT License" msgid "License: MIT License"
msgstr "Licencja: MIT License" msgstr "Licencja: MIT License"
#: ImageBrowser.py:419 #: ImageBrowser.py:422
msgid "Repository:" msgid "Repository:"
msgstr "Repozytorium:" msgstr "Repozytorium:"
#: ImageBrowser.py:428 #: ImageBrowser.py:431
msgid "Website:" msgid "Website:"
msgstr "Strona internetowa:" msgstr "Strona internetowa:"
#: ImageBrowser.py:439 #: ImageBrowser.py:442
msgid "Close" msgid "Close"
msgstr "Zamknij" msgstr "Zamknij"
#: ImageBrowser.py:447 ImageBrowser.py:450 #: ImageBrowser.py:450 ImageBrowser.py:453
msgid "Cache" msgid "Cache"
msgstr "Cache" msgstr "Cache"
#: ImageBrowser.py:447 #: ImageBrowser.py:450
msgid "Cache Taggera zostało wyczyszczone." msgid "Cache Taggera zostało wyczyszczone."
msgstr "Cache Taggera zostało wyczyszczone." msgstr "Cache Taggera zostało wyczyszczone."
#: ImageBrowser.py:450 #: ImageBrowser.py:453
msgid "Błąd przy czyszczeniu cache:" msgid "Błąd przy czyszczeniu cache:"
msgstr "Błąd przy czyszczeniu cache:" msgstr "Błąd przy czyszczeniu cache:"
#: ImageBrowser.py:460 #: ImageBrowser.py:463
msgid "Login:" msgid "Login:"
msgstr "Login:" msgstr "Login:"
#: ImageBrowser.py:466 #: ImageBrowser.py:469
msgid "Hasło:" msgid "Hasło:"
msgstr "Hasło:" msgstr "Hasło:"
#: ImageBrowser.py:472 #: ImageBrowser.py:475
msgid "Base URL:" msgid "Base URL:"
msgstr "Base URL:" msgstr "Base URL:"
#: ImageBrowser.py:478 #: ImageBrowser.py:481
msgid "Default Tags:" msgid "Default Tags:"
msgstr "Domyślne tagi:" msgstr "Domyślne tagi:"
#: ImageBrowser.py:484 #: ImageBrowser.py:487
msgid "Browser:" msgid "Browser:"
msgstr "Przeglądarka:" msgstr "Przeglądarka:"
#: ImageBrowser.py:498 #: ImageBrowser.py:501
msgid "Language:" msgid "Language:"
msgstr "Język:" msgstr "Język:"
#: ImageBrowser.py:530 #: ImageBrowser.py:533
msgid "Zapisz" msgid "Zapisz"
msgstr "Zapisz" msgstr "Zapisz"
#: ImageBrowser.py:572 #: ImageBrowser.py:575
msgid "PNG Tags" msgid "PNG Tags"
msgstr "Tagi PNG" msgstr "Tagi PNG"
#: ImageBrowser.py:584 #: ImageBrowser.py:587
msgid "Tagger Tags" msgid "Tagger Tags"
msgstr "Tagi Taggera" msgstr "Tagi Taggera"
#: ImageBrowser.py:598 #: ImageBrowser.py:601
msgid "Manual Tags" msgid "Manual Tags"
msgstr "Tagi ręczne" msgstr "Tagi ręczne"
#: ImageBrowser.py:606 #: ImageBrowser.py:609
msgid "Final Tags" msgid "Final Tags"
msgstr "Ostateczne tagi" msgstr "Ostateczne tagi"
#: ImageBrowser.py:631 #: ImageBrowser.py:634
msgid "Wyświetl" msgid "Wyświetl"
msgstr "Wyświetl" msgstr "Wyświetl"
#: ImageBrowser.py:648 #: ImageBrowser.py:651
msgid "Przetworzono tagi:" msgid "Przetworzono tagi:"
msgstr "Przetworzono tagi:" msgstr "Przetworzono tagi:"
#: ImageBrowser.py:648 ImageBrowser.py:649 ImageBrowser.py:650 #: ImageBrowser.py:651 ImageBrowser.py:652 ImageBrowser.py:653
msgid "plików" msgid "plików"
msgstr "plików" msgstr "plików"
#: ImageBrowser.py:649 #: ImageBrowser.py:652
msgid "Zweryfikowano status uploadu:" msgid "Zweryfikowano status uploadu:"
msgstr "Zweryfikowano status uploadu:" msgstr "Zweryfikowano status uploadu:"
#: ImageBrowser.py:650 #: ImageBrowser.py:653
msgid "Zuploadowano:" msgid "Zuploadowano:"
msgstr "Zuploadowano:" msgstr "Zuploadowano:"
#: ImageBrowser.py:679 #: ImageBrowser.py:682
#, fuzzy #, fuzzy
msgid "Wybierz folder z obrazkami PNG, JPEG, WebP, AVIF i GIF" msgid "Wybierz folder z obrazkami PNG, JPEG, WebP, AVIF i GIF"
msgstr "Wybierz folder z obrazami PNG" msgstr "Wybierz folder z obrazami PNG"
#: ImageBrowser.py:721 #: ImageBrowser.py:724
msgid "Informacja" msgid "Informacja"
msgstr "Informacja" msgstr "Informacja"
#: ImageBrowser.py:722 #: ImageBrowser.py:725
#, fuzzy #, fuzzy
msgid "Brak plików PNG, JPEG, WebP, AVIF lub GIF w wybranym folderze." msgid "Brak plików PNG, JPEG, WebP, AVIF lub GIF w wybranym folderze."
msgstr "Brak plików PNG w wybranym folderze." msgstr "Brak plików PNG w wybranym folderze."
#: ImageBrowser.py:805 #: ImageBrowser.py:808
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:"
#: ImageBrowser.py:881 #: ImageBrowser.py:884
msgid "Error computing MD5:" msgid "Error computing MD5:"
msgstr "Błąd przy obliczaniu MD5:" msgstr "Błąd przy obliczaniu MD5:"
#: ImageBrowser.py:940 #: ImageBrowser.py:946
msgid "Błąd" msgid "Błąd"
msgstr "Błąd" msgstr "Błąd"
#: ImageBrowser.py:940 #: ImageBrowser.py:946
msgid "Nie można załadować obrazka:" msgid "Nie można załadować obrazka:"
msgstr "Nie można załadować obrazka:" msgstr "Nie można załadować obrazka:"
#: ImageBrowser.py:1150 ImageBrowser.py:1160 #: ImageBrowser.py:1156 ImageBrowser.py:1166
#, python-brace-format #, python-brace-format
msgid "Warning: Tag '{tag}' not found in implication graph" msgid "Warning: Tag '{tag}' not found in implication graph"
msgstr "Ostrzeżenie: Tag '{tag}' nie został znaleziony w grafie implikacji" msgstr "Ostrzeżenie: Tag '{tag}' nie został znaleziony w grafie implikacji"
#: ImageBrowser.py:1390 #: ImageBrowser.py:1396
msgid "Tagger przetwarza..." msgid "Tagger przetwarza..."
msgstr "Tagger przetwarza..." msgstr "Tagger przetwarza..."
#: ImageBrowser.py:1415 #: ImageBrowser.py:1421
#, 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}..."
#: ImageBrowser.py:1456 #: ImageBrowser.py:1462
msgid "Wysyłanie zakończone powodzeniem!" msgid "Wysyłanie zakończone powodzeniem!"
msgstr "Wysyłanie zakończone powodzeniem!" msgstr "Wysyłanie zakończone powodzeniem!"
#: ImageBrowser.py:1460 ImageBrowser.py:1469 #: ImageBrowser.py:1466 ImageBrowser.py:1475
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Wysyłanie zakończone błędem.\n" "Wysyłanie zakończone błędem.\n"
@@ -323,40 +323,40 @@ msgstr ""
"Status: {status_code}\n" "Status: {status_code}\n"
"Treść: {text}" "Treść: {text}"
#: ImageBrowser.py:1475 ImageBrowser.py:1478 #: ImageBrowser.py:1481 ImageBrowser.py:1484
msgid "Wysyłanie" msgid "Wysyłanie"
msgstr "Wysyłanie" msgstr "Wysyłanie"
#: ImageBrowser.py:1491 #: ImageBrowser.py:1497
msgid "Błąd wysyłania" msgid "Błąd wysyłania"
msgstr "Błąd wysyłania" msgstr "Błąd wysyłania"
#: ImageBrowser.py:1511 #: ImageBrowser.py:1517
msgid "Błąd edycji" msgid "Błąd edycji"
msgstr "Błąd edycji" msgstr "Błąd edycji"
#: ImageBrowser.py:1511 #: ImageBrowser.py:1517
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"
#: ImageBrowser.py:1521 #: ImageBrowser.py:1527
#, 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}..."
#: ImageBrowser.py:1531 ImageBrowser.py:1541 ImageBrowser.py:1572 #: ImageBrowser.py:1537 ImageBrowser.py:1547 ImageBrowser.py:1578
msgid "Operacja anulowana" msgid "Operacja anulowana"
msgstr "Operacja anulowana" msgstr "Operacja anulowana"
#: ImageBrowser.py:1582 #: ImageBrowser.py:1588
msgid "Tagi zostały zaktualizowane!" msgid "Tagi zostały zaktualizowane!"
msgstr "Tagi zostały zaktualizowane!" msgstr "Tagi zostały zaktualizowane!"
#: ImageBrowser.py:1584 #: ImageBrowser.py:1590
msgid "Sukces edycji" msgid "Sukces edycji"
msgstr "Sukces edycji" msgstr "Sukces edycji"
#: ImageBrowser.py:1590 #: ImageBrowser.py:1596
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Błąd podczas aktualizacji tagów\n" "Błąd podczas aktualizacji tagów\n"
@@ -365,19 +365,19 @@ msgstr ""
"Błąd podczas aktualizacji tagów\n" "Błąd podczas aktualizacji tagów\n"
"Status: {code}" "Status: {code}"
#: ImageBrowser.py:1594 #: ImageBrowser.py:1600
msgid "Treść:" msgid "Treść:"
msgstr "Treść:" msgstr "Treść:"
#: ImageBrowser.py:1598 #: ImageBrowser.py:1604
msgid "Krytyczny błąd edycji" msgid "Krytyczny błąd edycji"
msgstr "Krytyczny błąd edycji" msgstr "Krytyczny błąd edycji"
#: ImageBrowser.py:1610 #: ImageBrowser.py:1616
msgid "Potwierdzenie" msgid "Potwierdzenie"
msgstr "Potwierdzenie" msgstr "Potwierdzenie"
#: ImageBrowser.py:1612 #: ImageBrowser.py:1618
msgid "" msgid ""
"Czy na pewno chcesz wrzucić wszystkie niewrzucone pliki?\n" "Czy na pewno chcesz wrzucić wszystkie niewrzucone pliki?\n"
"Każdy z nich zostanie oznaczony tagiem 'meta:auto_upload'.\n" "Każdy z nich zostanie oznaczony tagiem 'meta:auto_upload'.\n"
@@ -387,18 +387,18 @@ msgstr ""
"Każdy z nich zostanie oznaczony tagiem 'meta:auto_upload'.\n" "Każdy z nich zostanie oznaczony tagiem 'meta:auto_upload'.\n"
"Upewnij się, że tagi są poprawne!" "Upewnij się, że tagi są poprawne!"
#: ImageBrowser.py:1636 #: ImageBrowser.py:1642
msgid "Anulowano operację!" msgid "Anulowano operację!"
msgstr "Operacja anulowana!" msgstr "Operacja anulowana!"
#: ImageBrowser.py:1644 #: ImageBrowser.py:1650
#, 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}"
#: ImageBrowser.py:1660 #: ImageBrowser.py:1666
msgid "Przesłano pliki!" msgid "Przesłano pliki!"
msgstr "Pliki zostały przesłane!" msgstr "Pliki zostały przesłane!"
@@ -422,28 +422,28 @@ msgstr "Błąd podczas ładowania ustawień:"
msgid "Błąd podczas zapisywania ustawień:" msgid "Błąd podczas zapisywania ustawień:"
msgstr "Błąd podczas zapisywania ustawień:" msgstr "Błąd podczas zapisywania ustawień:"
#: tag_processing.py:19 #: tag_processing.py:20
msgid "Błąd przy pobieraniu tagów postaci:" msgid "Błąd przy pobieraniu tagów postaci:"
msgstr "Błąd przy pobieraniu tagów postaci:" msgstr "Błąd przy pobieraniu tagów postaci:"
#: tag_processing.py:34 #: tag_processing.py:35
msgid "Błąd przy pobieraniu tagów copyright:" msgid "Błąd przy pobieraniu tagów copyright:"
msgstr "Błąd przy pobieraniu tagów copyright:" msgstr "Błąd przy pobieraniu tagów copyright:"
#: tag_processing.py:49 #: tag_processing.py:50
msgid "Błąd przy pobieraniu tagów artystów:" msgid "Błąd przy pobieraniu tagów artystów:"
msgstr "Błąd przy pobieraniu tagów artystów:" msgstr "Błąd przy pobieraniu tagów artystów:"
#: tag_processing.py:164 #: tag_processing.py:208
#, fuzzy #, fuzzy
msgid "Nie można sparsować parametrów." msgid "Nie można sparsować parametrów."
msgstr "Nie można załadować obrazka:" msgstr "Nie można załadować obrazka:"
#: tag_processing.py:249 #: tag_processing.py:295
msgid "Błąd podczas odczytu tag_aliases:" msgid "Błąd podczas odczytu tag_aliases:"
msgstr "Błąd podczas odczytu tag_aliases:" msgstr "Błąd podczas odczytu tag_aliases:"
#: tag_processing.py:265 #: tag_processing.py:311
msgid "Błąd podczas odczytu tags:" msgid "Błąd podczas odczytu tags:"
msgstr "Błąd podczas odczytu tags:" msgstr "Błąd podczas odczytu tags:"

View File

@@ -1,5 +1,6 @@
from functools import lru_cache from functools import lru_cache
import re import re
from os.path import basename
from .I18N import _ from .I18N import _
from .TagsRepo import TagsRepo from .TagsRepo import TagsRepo
@@ -86,6 +87,8 @@ AUTO_METATAGS = [
"score_3_up", "score_3_up",
"score_2_up", "score_2_up",
"score_1_up", "score_1_up",
"amazing_quality",
"best_quality",
] ]
TAG_FIXES = { TAG_FIXES = {
"2boy": "2boys", "2boy": "2boys",
@@ -115,6 +118,19 @@ MULTI_TAG_FIXES = {
from PIL import Image, PngImagePlugin from PIL import Image, PngImagePlugin
def extract_artist_from_filename(file_path: str) -> str:
"""Funkcja do ekstrakcji nazwy artysty z nazwy pliku.
Zakłada, że nazwa pliku jest w formacie "numer-seed-artysta.ext".
"""
# Pobierz nazwę pliku z pełnej ścieżki
file_name = basename(file_path)
# Upewniamy się, że nazwa pliku jest w formacie "numer-seed-artysta.ext"
if "-" not in file_name or file_name.count("-") < 2:
return ""
artist_name = file_name.split("-")[-1].split(".")[0]
return artist_name.strip() # Usuń ewentualne spacje
def extract_parameters(img: Image, file_path: str) -> str: def extract_parameters(img: Image, file_path: str) -> str:
"""Funkcja do ekstrakcji parametrów z pliku graficznego. """Funkcja do ekstrakcji parametrów z pliku graficznego.
Obsługuje PNG, JPEG, WebP, AVIF i GIF. Obsługuje PNG, JPEG, WebP, AVIF i GIF.

View File

@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "kapitanbooru-uploader" name = "kapitanbooru-uploader"
version = "0.8.2" version = "0.8.3"
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 = [