Add periodic version check
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Gitea/kapitanbooru-uploader/pipeline/head This commit looks good
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Gitea/kapitanbooru-uploader/pipeline/head This commit looks good
				
			This commit is contained in:
		| @@ -7,11 +7,14 @@ import threading | |||||||
| import tkinter as tk | import tkinter as tk | ||||||
| from tkinter import filedialog, messagebox, ttk | from tkinter import filedialog, messagebox, ttk | ||||||
| from typing import Dict, Tuple, Optional | from typing import Dict, Tuple, Optional | ||||||
|  | from packaging.version import parse as parse_version | ||||||
|  | import itertools | ||||||
|  |  | ||||||
| import networkx as nx | import networkx as nx | ||||||
| import requests | import requests | ||||||
| from PIL import Image, ImageTk, PngImagePlugin | from PIL import Image, ImageTk, PngImagePlugin | ||||||
| import wdtagger as wdt | import wdtagger as wdt | ||||||
|  | import tomli | ||||||
|  |  | ||||||
| from .I18N import _ | from .I18N import _ | ||||||
| from .ProgressFile import ProgressFile | from .ProgressFile import ProgressFile | ||||||
| @@ -139,7 +142,8 @@ 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.4.4" |         self.version = "0.5.0" | ||||||
|  |         self.acknowledged_version = parse_version(self.version) | ||||||
|  |  | ||||||
|         self.settings = Settings() |         self.settings = Settings() | ||||||
|         self.tags_repo = TagsRepo(self.settings) |         self.tags_repo = TagsRepo(self.settings) | ||||||
| @@ -204,6 +208,66 @@ class ImageBrowser(tk.Tk): | |||||||
|         self.create_widgets() |         self.create_widgets() | ||||||
|         self.bind_events() |         self.bind_events() | ||||||
|  |  | ||||||
|  |         # Schedule first update check | ||||||
|  |         self.after(1000, self._schedule_update_check) | ||||||
|  |  | ||||||
|  |     def _schedule_update_check(self): | ||||||
|  |         """Schedule periodic update checks""" | ||||||
|  |         self._check_for_update() | ||||||
|  |         # Check every 5 minutes (300,000 ms) | ||||||
|  |         self.after(300000, self._schedule_update_check) | ||||||
|  |  | ||||||
|  |     def _check_for_update(self): | ||||||
|  |         """Check for updates in a background thread""" | ||||||
|  |  | ||||||
|  |         def check_thread(): | ||||||
|  |             try: | ||||||
|  |                 # Fetch pyproject.toml using requests | ||||||
|  |                 response = requests.get( | ||||||
|  |                     "https://git.mlesniak.pl/kapitan/kapitanbooru-uploader/raw/branch/main/pyproject.toml", | ||||||
|  |                     timeout=10,  # Add reasonable timeout | ||||||
|  |                 ) | ||||||
|  |                 response.raise_for_status()  # Raise exception for HTTP errors | ||||||
|  |  | ||||||
|  |                 remote_toml = tomli.loads(response.text) | ||||||
|  |                 remote_version_str = remote_toml["project"]["version"] | ||||||
|  |                 remote_version = parse_version(remote_version_str) | ||||||
|  |                 current_version = parse_version(self.version) | ||||||
|  |  | ||||||
|  |                 if ( | ||||||
|  |                     remote_version > current_version | ||||||
|  |                     and remote_version > self.acknowledged_version | ||||||
|  |                 ): | ||||||
|  |                     self.after(0, lambda: self._notify_user(remote_version_str)) | ||||||
|  |                     self.acknowledged_version = remote_version | ||||||
|  |             except requests.exceptions.RequestException as e: | ||||||
|  |                 print(_("Update check failed: {error}").format(error=e)) | ||||||
|  |             except KeyError as e: | ||||||
|  |                 print(_("Malformed pyproject.toml: {error}").format(error=e)) | ||||||
|  |             except Exception as e: | ||||||
|  |                 print( | ||||||
|  |                     _("Unexpected error during update check: {error}").format(error=e) | ||||||
|  |                 ) | ||||||
|  |  | ||||||
|  |         threading.Thread(target=check_thread, daemon=True).start() | ||||||
|  |  | ||||||
|  |     def _notify_user(self, new_version): | ||||||
|  |         """Show update notification with translated messages""" | ||||||
|  |         title = _("Update Available") | ||||||
|  |         message_template = _( | ||||||
|  |             "A new version {new_version} is available!\n" | ||||||
|  |             "You have version {current_version}.\n\n" | ||||||
|  |             "Update using: {update_command}" | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         formatted_message = message_template.format( | ||||||
|  |             new_version=new_version, | ||||||
|  |             current_version=self.version, | ||||||
|  |             update_command="pip install --upgrade kapitanbooru-uploader", | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         messagebox.showinfo(title, formatted_message) | ||||||
|  |  | ||||||
|     def reload_ui(self): |     def reload_ui(self): | ||||||
|         """Reload UI components with new language""" |         """Reload UI components with new language""" | ||||||
|         # Destroy current widgets |         # Destroy current widgets | ||||||
| @@ -417,31 +481,43 @@ class ImageBrowser(tk.Tk): | |||||||
|         frame = ttk.Frame(about, padding=10) |         frame = ttk.Frame(about, padding=10) | ||||||
|         frame.pack(fill="both", expand=True) |         frame.pack(fill="both", expand=True) | ||||||
|  |  | ||||||
|  |         row_counter = itertools.count(0) | ||||||
|  |  | ||||||
|         ttk.Label( |         ttk.Label( | ||||||
|             frame, text="Kapitanbooru Uploader", font=("TkDefaultFont", 16, "bold") |             frame, text="Kapitanbooru Uploader", font=("TkDefaultFont", 16, "bold") | ||||||
|         ).grid(row=0, column=0, sticky=tk.W) |         ).grid(row=next(row_counter), column=0, sticky=tk.W) | ||||||
|  |  | ||||||
|  |         current_version = parse_version(self.version) | ||||||
|  |         if current_version < self.acknowledged_version: | ||||||
|  |             ttk.Label( | ||||||
|  |                 frame, | ||||||
|  |                 text=_("A new version {new_version} is available!").format( | ||||||
|  |                     new_version=self.acknowledged_version | ||||||
|  |                 ), | ||||||
|  |                 foreground="red", | ||||||
|  |             ).grid(row=next(row_counter), column=0, sticky=tk.W) | ||||||
|  |  | ||||||
|         content = [ |         content = [ | ||||||
|             (f"Version {self.version}", 1), |             _("Current version: {version}").format(version=self.version), | ||||||
|             ("", 2), |             "", | ||||||
|             (_("A GUI application for uploading images to KapitanBooru."), 3), |             _("A GUI application for uploading images to KapitanBooru."), | ||||||
|             (_("Features include image upload, tag management, automatic"), 4), |             _("Features include image upload, tag management, automatic"), | ||||||
|             (_("tagging with wdtagger, and cache management."), 5), |             _("tagging with wdtagger, and cache management."), | ||||||
|             ("", 6), |             "", | ||||||
|             (_("Authors:"), 7), |             _("Authors:"), | ||||||
|             ("Michał Leśniak", 8), |             "Michał Leśniak", | ||||||
|             ("", 9), |             "", | ||||||
|             (_("License: MIT License"), 10), |             _("License: MIT License"), | ||||||
|             (f"Copyright © 2025 Michał Leśniak", 11), |             f"Copyright © 2025 Michał Leśniak", | ||||||
|             ("", 12), |             "", | ||||||
|         ] |         ] | ||||||
|  |  | ||||||
|         for text, row in content: |         for text in content: | ||||||
|             ttk.Label(frame, text=text).grid(row=row, column=0, sticky=tk.W) |             ttk.Label(frame, text=text).grid(row=next(row_counter), column=0, sticky=tk.W) | ||||||
|  |  | ||||||
|         # Repository link |         # Repository link | ||||||
|         repo_frame = ttk.Frame(frame) |         repo_frame = ttk.Frame(frame) | ||||||
|         repo_frame.grid(row=13, sticky=tk.W) |         repo_frame.grid(row=next(row_counter), sticky=tk.W) | ||||||
|         ttk.Label(repo_frame, text=_("Repository:")).pack(side=tk.LEFT) |         ttk.Label(repo_frame, text=_("Repository:")).pack(side=tk.LEFT) | ||||||
|         repo_url = "https://git.mlesniak.pl/kapitan/kapitanbooru-uploader" |         repo_url = "https://git.mlesniak.pl/kapitan/kapitanbooru-uploader" | ||||||
|         repo = ttk.Label(repo_frame, text=repo_url, cursor="hand2", foreground="blue") |         repo = ttk.Label(repo_frame, text=repo_url, cursor="hand2", foreground="blue") | ||||||
| @@ -450,7 +526,7 @@ class ImageBrowser(tk.Tk): | |||||||
|  |  | ||||||
|         # Website link |         # Website link | ||||||
|         website_frame = ttk.Frame(frame) |         website_frame = ttk.Frame(frame) | ||||||
|         website_frame.grid(row=14, sticky=tk.W) |         website_frame.grid(row=next(row_counter), sticky=tk.W) | ||||||
|         ttk.Label(website_frame, text=_("Website:")).pack(side=tk.LEFT) |         ttk.Label(website_frame, text=_("Website:")).pack(side=tk.LEFT) | ||||||
|         website_url = "https://booru.mlesniak.pl" |         website_url = "https://booru.mlesniak.pl" | ||||||
|         website = ttk.Label( |         website = ttk.Label( | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| msgid "" | msgid "" | ||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: Kapitanbooru Uploader 0.4.4\n" | "Project-Id-Version: Kapitanbooru Uploader 0.5.0\n" | ||||||
| "Report-Msgid-Bugs-To: \n" | "Report-Msgid-Bugs-To: \n" | ||||||
| "POT-Creation-Date: 2025-03-02 00:39+0100\n" | "POT-Creation-Date: 2025-03-11 00:35+0100\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" | ||||||
|  |  | ||||||
| @@ -43,300 +43,345 @@ msgstr "Found auth_token:" | |||||||
| msgid "auth_token not found in the HTML page." | msgid "auth_token not found in the HTML page." | ||||||
| msgstr "auth_token not found in the HTML page." | msgstr "auth_token not found in the HTML page." | ||||||
|  |  | ||||||
| #: ImageBrowser.py:30 | #: ImageBrowser.py:33 | ||||||
| msgid "Processing..." | msgid "Processing..." | ||||||
| msgstr "Processing..." | msgstr "Processing..." | ||||||
|  |  | ||||||
| #: ImageBrowser.py:34 | #: ImageBrowser.py:37 | ||||||
| msgid "Processing, please wait..." | msgid "Processing, please wait..." | ||||||
| msgstr "Processing, please wait..." | msgstr "Processing, please wait..." | ||||||
|  |  | ||||||
| #: ImageBrowser.py:263 | #: ImageBrowser.py:244 | ||||||
|  | #, python-brace-format | ||||||
|  | msgid "Update check failed: {error}" | ||||||
|  | msgstr "Update check failed: {error}" | ||||||
|  |  | ||||||
|  | #: ImageBrowser.py:246 | ||||||
|  | #, python-brace-format | ||||||
|  | msgid "Malformed pyproject.toml: {error}" | ||||||
|  | msgstr "Malformed pyproject.toml: {error}" | ||||||
|  |  | ||||||
|  | #: ImageBrowser.py:249 | ||||||
|  | #, python-brace-format | ||||||
|  | msgid "Unexpected error during update check: {error}" | ||||||
|  | msgstr "Unexpected error during update check: {error}" | ||||||
|  |  | ||||||
|  | #: ImageBrowser.py:256 | ||||||
|  | msgid "Update Available" | ||||||
|  | msgstr "Update Available" | ||||||
|  |  | ||||||
|  | #: ImageBrowser.py:258 | ||||||
|  | #, python-brace-format | ||||||
|  | msgid "" | ||||||
|  | "A new version {new_version} is available!\n" | ||||||
|  | "You have version {current_version}.\n" | ||||||
|  | "\n" | ||||||
|  | "Update using: {update_command}" | ||||||
|  | msgstr "" | ||||||
|  | "A new version {new_version} is available!\n" | ||||||
|  | "You have version {current_version}.\n" | ||||||
|  | "\n" | ||||||
|  | "Update using: {update_command}" | ||||||
|  |  | ||||||
|  | #: ImageBrowser.py:367 | ||||||
| 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:409 | ||||||
| msgid "Tagger przetworzył:" | msgid "Tagger przetworzył:" | ||||||
| msgstr "Tagger processed:" | msgstr "Tagger processed:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:308 | #: ImageBrowser.py:412 | ||||||
| msgid "Błąd Taggera dla" | msgid "Błąd Taggera dla" | ||||||
| msgstr "Tagger error for" | msgstr "Tagger error for" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:334 | #: ImageBrowser.py:438 | ||||||
| msgid "Otwórz folder" | msgid "Otwórz folder" | ||||||
| msgstr "Open folder" | msgstr "Open folder" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:337 ImageBrowser.py:600 ImageBrowser.py:814 | #: ImageBrowser.py:441 ImageBrowser.py:728 ImageBrowser.py:944 | ||||||
| #: ImageBrowser.py:822 | #: ImageBrowser.py:952 | ||||||
| msgid "Wyślij" | msgid "Wyślij" | ||||||
| msgstr "Send" | msgstr "Send" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:340 ImageBrowser.py:807 | #: ImageBrowser.py:444 ImageBrowser.py:937 | ||||||
| msgid "Wyślij wszystko" | msgid "Wyślij wszystko" | ||||||
| msgstr "Send all" | msgstr "Send all" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:344 ImageBrowser.py:808 ImageBrowser.py:814 | #: ImageBrowser.py:448 ImageBrowser.py:938 ImageBrowser.py:944 | ||||||
| msgid "Podmień tagi" | msgid "Podmień tagi" | ||||||
| msgstr "Replace tags" | msgstr "Replace tags" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:347 ImageBrowser.py:809 | #: ImageBrowser.py:451 ImageBrowser.py:939 | ||||||
| msgid "Otwórz post" | msgid "Otwórz post" | ||||||
| msgstr "Open post" | msgstr "Open post" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:350 | #: ImageBrowser.py:454 | ||||||
| msgid "Zakończ" | msgid "Zakończ" | ||||||
| msgstr "Finish" | msgstr "Finish" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:352 | #: ImageBrowser.py:456 | ||||||
| msgid "Plik" | msgid "Plik" | ||||||
| msgstr "File" | msgstr "File" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:356 ImageBrowser.py:430 | #: ImageBrowser.py:460 ImageBrowser.py:557 | ||||||
| msgid "Ustawienia" | msgid "Ustawienia" | ||||||
| msgstr "Settings" | msgstr "Settings" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:359 | #: ImageBrowser.py:463 | ||||||
| msgid "Wyczyść cache Taggera" | msgid "Wyczyść cache Taggera" | ||||||
| msgstr "Clear Tagger cache" | msgstr "Clear Tagger cache" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:362 | #: ImageBrowser.py:466 | ||||||
| msgid "Zregeneruj bazę tagów" | msgid "Zregeneruj bazę tagów" | ||||||
| msgstr "Regenerate tag database" | msgstr "Regenerate tag database" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:364 | #: ImageBrowser.py:468 | ||||||
| msgid "Opcje" | msgid "Opcje" | ||||||
| msgstr "Options" | msgstr "Options" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:367 | #: ImageBrowser.py:471 | ||||||
| msgid "About" | msgid "About" | ||||||
| msgstr "About" | msgstr "About" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:368 | #: ImageBrowser.py:472 | ||||||
| msgid "Help" | msgid "Help" | ||||||
| msgstr "Help" | msgstr "Help" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:373 | #: ImageBrowser.py:477 | ||||||
| msgid "About Kapitanbooru Uploader" | msgid "About Kapitanbooru Uploader" | ||||||
| msgstr "About Kapitanbooru Uploader" | msgstr "About Kapitanbooru Uploader" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:386 | #: ImageBrowser.py:494 | ||||||
|  | #, python-brace-format | ||||||
|  | msgid "A new version {new_version} is available!" | ||||||
|  | msgstr "A new version {new_version} is available!" | ||||||
|  |  | ||||||
|  | #: ImageBrowser.py:501 | ||||||
|  | #, python-brace-format | ||||||
|  | msgid "Current version: {version}" | ||||||
|  | msgstr "Current version: {version}" | ||||||
|  |  | ||||||
|  | #: ImageBrowser.py:503 | ||||||
| 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:387 | #: ImageBrowser.py:504 | ||||||
| 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:388 | #: ImageBrowser.py:505 | ||||||
| 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:390 | #: ImageBrowser.py:507 | ||||||
| msgid "Authors:" | msgid "Authors:" | ||||||
| msgstr "Authors:" | msgstr "Authors:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:393 | #: ImageBrowser.py:510 | ||||||
| msgid "License: MIT License" | msgid "License: MIT License" | ||||||
| msgstr "License: MIT License" | msgstr "License: MIT License" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:396 | #: ImageBrowser.py:521 | ||||||
| msgid "Repository:" | msgid "Repository:" | ||||||
| msgstr "Repository:" | msgstr "Repository:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:397 | #: ImageBrowser.py:530 | ||||||
| msgid "Website:" | msgid "Website:" | ||||||
| msgstr "Website:" | msgstr "Website:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:414 | #: ImageBrowser.py:541 | ||||||
| msgid "Close" | msgid "Close" | ||||||
| msgstr "Close" | msgstr "Close" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:422 ImageBrowser.py:425 | #: ImageBrowser.py:549 ImageBrowser.py:552 | ||||||
| msgid "Cache" | msgid "Cache" | ||||||
| msgstr "Cache" | msgstr "Cache" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:422 | #: ImageBrowser.py:549 | ||||||
| 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:425 | #: ImageBrowser.py:552 | ||||||
| msgid "Błąd przy czyszczeniu cache:" | msgid "Błąd przy czyszczeniu cache:" | ||||||
| msgstr "Error clearing cache:" | msgstr "Error clearing cache:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:434 | #: ImageBrowser.py:562 | ||||||
| msgid "Login:" | msgid "Login:" | ||||||
| msgstr "Login:" | msgstr "Login:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:440 | #: ImageBrowser.py:568 | ||||||
| msgid "Hasło:" | msgid "Hasło:" | ||||||
| msgstr "Password:" | msgstr "Password:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:446 | #: ImageBrowser.py:574 | ||||||
| msgid "Base URL:" | msgid "Base URL:" | ||||||
| msgstr "Base URL:" | msgstr "Base URL:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:452 | #: ImageBrowser.py:580 | ||||||
| msgid "Default Tags:" | msgid "Default Tags:" | ||||||
| msgstr "Default Tags:" | msgstr "Default Tags:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:458 | #: ImageBrowser.py:586 | ||||||
| msgid "Browser:" | msgid "Browser:" | ||||||
| msgstr "Browser:" | msgstr "Browser:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:472 | #: ImageBrowser.py:600 | ||||||
| msgid "Language:" | msgid "Language:" | ||||||
| msgstr "Language:" | msgstr "Language:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:504 | #: ImageBrowser.py:632 | ||||||
| msgid "Zapisz" | msgid "Zapisz" | ||||||
| msgstr "Save" | msgstr "Save" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:546 | #: ImageBrowser.py:674 | ||||||
| msgid "PNG Tags" | msgid "PNG Tags" | ||||||
| msgstr "PNG Tags" | msgstr "PNG Tags" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:558 | #: ImageBrowser.py:686 | ||||||
| msgid "Tagger Tags" | msgid "Tagger Tags" | ||||||
| msgstr "Tagger Tags" | msgstr "Tagger Tags" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:572 | #: ImageBrowser.py:700 | ||||||
| msgid "Manual Tags" | msgid "Manual Tags" | ||||||
| msgstr "Manual Tags" | msgstr "Manual Tags" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:580 | #: ImageBrowser.py:708 | ||||||
| msgid "Final Tags" | msgid "Final Tags" | ||||||
| msgstr "Final Tags" | msgstr "Final Tags" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:605 | #: ImageBrowser.py:733 | ||||||
| msgid "Wyświetl" | msgid "Wyświetl" | ||||||
| msgstr "Display" | msgstr "Display" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:622 | #: ImageBrowser.py:750 | ||||||
| msgid "Przetworzono tagi:" | msgid "Przetworzono tagi:" | ||||||
| msgstr "Processed tags:" | msgstr "Processed tags:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:622 ImageBrowser.py:623 ImageBrowser.py:624 | #: ImageBrowser.py:750 ImageBrowser.py:751 ImageBrowser.py:752 | ||||||
| msgid "plików" | msgid "plików" | ||||||
| msgstr "files" | msgstr "files" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:623 | #: ImageBrowser.py:751 | ||||||
| msgid "Zweryfikowano status uploadu:" | msgid "Zweryfikowano status uploadu:" | ||||||
| msgstr "Upload status verified:" | msgstr "Upload status verified:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:624 | #: ImageBrowser.py:752 | ||||||
| msgid "Zuploadowano:" | msgid "Zuploadowano:" | ||||||
| msgstr "Uploaded:" | msgstr "Uploaded:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:652 | #: ImageBrowser.py:780 | ||||||
| msgid "Wybierz folder z obrazkami PNG" | msgid "Wybierz folder z obrazkami PNG" | ||||||
| msgstr "Select folder with PNG images" | msgstr "Select folder with PNG images" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:683 | #: ImageBrowser.py:813 | ||||||
| msgid "Informacja" | msgid "Informacja" | ||||||
| msgstr "Information" | msgstr "Information" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:683 | #: ImageBrowser.py:813 | ||||||
| msgid "Brak plików PNG w wybranym folderze." | msgid "Brak plików PNG w wybranym folderze." | ||||||
| msgstr "No PNG files in the selected folder." | msgstr "No PNG files in the selected folder." | ||||||
|  |  | ||||||
| #: ImageBrowser.py:766 | #: ImageBrowser.py:896 | ||||||
| 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:842 | #: ImageBrowser.py:972 | ||||||
| msgid "Błąd przy obliczaniu MD5:" | msgid "Błąd przy obliczaniu MD5:" | ||||||
| msgstr "Error calculating MD5:" | msgstr "Error calculating MD5:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:898 | #: ImageBrowser.py:1028 | ||||||
| msgid "Błąd" | msgid "Błąd" | ||||||
| msgstr "Error" | msgstr "Error" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:898 | #: ImageBrowser.py:1028 | ||||||
| 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:1108 ImageBrowser.py:1118 | #: ImageBrowser.py:1238 ImageBrowser.py:1248 | ||||||
| #, 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:1348 | #: ImageBrowser.py:1478 | ||||||
| msgid "Tagger przetwarza..." | msgid "Tagger przetwarza..." | ||||||
| msgstr "Tagger processing..." | msgstr "Tagger processing..." | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1373 | #: ImageBrowser.py:1503 | ||||||
| #, 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:1414 | #: ImageBrowser.py:1544 | ||||||
| msgid "Wysyłanie zakończone powodzeniem!" | msgid "Wysyłanie zakończone powodzeniem!" | ||||||
| msgstr "Upload completed successfully!" | msgstr "Upload completed successfully!" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1418 ImageBrowser.py:1427 | #: ImageBrowser.py:1548 ImageBrowser.py:1557 | ||||||
| #, python-brace-format | #, python-brace-format | ||||||
| msgid "" | msgid "" | ||||||
| "Wysyłanie zakończone błędem.\n" | "Wysyłanie zakończone błędem.\n" | ||||||
| "Status: {status_code}\n" | "Status: {status_code}\n" | ||||||
| "Treść: {text}" | "Treść: {text}" | ||||||
| msgstr "" | msgstr "" | ||||||
| "Upload failed.\nStatus: {status_code}\nContent: {text}" | "Upload failed.\n" | ||||||
|  | "Status: {status_code}\n" | ||||||
|  | "Content: {text}" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1433 ImageBrowser.py:1436 | #: ImageBrowser.py:1563 ImageBrowser.py:1566 | ||||||
| msgid "Wysyłanie" | msgid "Wysyłanie" | ||||||
| msgstr "Uploading" | msgstr "Uploading" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1449 | #: ImageBrowser.py:1579 | ||||||
| msgid "Błąd wysyłania" | msgid "Błąd wysyłania" | ||||||
| msgstr "Upload error" | msgstr "Upload error" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1469 | #: ImageBrowser.py:1599 | ||||||
| msgid "Błąd edycji" | msgid "Błąd edycji" | ||||||
| msgstr "Edit error" | msgstr "Edit error" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1469 | #: ImageBrowser.py:1599 | ||||||
| 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:1479 | #: ImageBrowser.py:1609 | ||||||
| #, 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:1489 ImageBrowser.py:1499 ImageBrowser.py:1530 | #: ImageBrowser.py:1619 ImageBrowser.py:1629 ImageBrowser.py:1660 | ||||||
| msgid "Operacja anulowana" | msgid "Operacja anulowana" | ||||||
| msgstr "Operation cancelled" | msgstr "Operation cancelled" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1540 | #: ImageBrowser.py:1670 | ||||||
| msgid "Tagi zostały zaktualizowane!" | msgid "Tagi zostały zaktualizowane!" | ||||||
| msgstr "Tags have been updated!" | msgstr "Tags have been updated!" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1542 | #: ImageBrowser.py:1672 | ||||||
| msgid "Sukces edycji" | msgid "Sukces edycji" | ||||||
| msgstr "Edit successful" | msgstr "Edit successful" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1548 | #: ImageBrowser.py:1678 | ||||||
| #, python-brace-format | #, python-brace-format | ||||||
| msgid "" | msgid "" | ||||||
| "Błąd podczas aktualizacji tagów\n" | "Błąd podczas aktualizacji tagów\n" | ||||||
| "Status: {code}" | "Status: {code}" | ||||||
| msgstr "" | msgstr "" | ||||||
| "Error updating tags\nStatus: {code}" | "Error updating tags\n" | ||||||
|  | "Status: {code}" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1552 | #: ImageBrowser.py:1682 | ||||||
| msgid "Treść:" | msgid "Treść:" | ||||||
| msgstr "Content:" | msgstr "Content:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1556 | #: ImageBrowser.py:1686 | ||||||
| msgid "Krytyczny błąd edycji" | msgid "Krytyczny błąd edycji" | ||||||
| msgstr "Critical edit error" | msgstr "Critical edit error" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1568 | #: ImageBrowser.py:1698 | ||||||
| msgid "Potwierdzenie" | msgid "Potwierdzenie" | ||||||
| msgstr "Confirmation" | msgstr "Confirmation" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1570 | #: ImageBrowser.py:1700 | ||||||
| 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" | ||||||
| @@ -346,17 +391,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:1589 | #: ImageBrowser.py:1724 | ||||||
| msgid "Anulowano operację!" | msgid "Anulowano operację!" | ||||||
| msgstr "Operation cancelled!" | msgstr "Operation cancelled!" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1597 | #: ImageBrowser.py:1732 | ||||||
| #, 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 "Uploading {file_path} with tags: {final_tags} and rating: {final_rating}" | msgstr "" | ||||||
|  | "Uploading {file_path} with tags: {final_tags} and rating: {final_rating}" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1608 | #: ImageBrowser.py:1748 | ||||||
| msgid "Przesłano pliki!" | msgid "Przesłano pliki!" | ||||||
| msgstr "Files have been uploaded!" | msgstr "Files have been uploaded!" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| msgid "" | msgid "" | ||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: Kapitanbooru Uploader 0.4.4\n" | "Project-Id-Version: Kapitanbooru Uploader 0.5.0\n" | ||||||
| "Report-Msgid-Bugs-To: \n" | "Report-Msgid-Bugs-To: \n" | ||||||
| "POT-Creation-Date: 2025-03-02 00:39+0100\n" | "POT-Creation-Date: 2025-03-11 00:35+0100\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" | ||||||
| @@ -17,8 +17,7 @@ msgstr "Błąd przy otwieraniu przeglądarki:" | |||||||
|  |  | ||||||
| #: common.py:72 | #: common.py:72 | ||||||
| msgid "Login succeeded, but expected cookies were not set." | msgid "Login succeeded, but expected cookies were not set." | ||||||
| msgstr "" | msgstr "Logowanie powiodło się, ale oczekiwane ciasteczka nie zostały ustawione." | ||||||
| "Logowanie powiodło się, ale oczekiwane ciasteczka nie zostały ustawione." |  | ||||||
|  |  | ||||||
| #: common.py:74 | #: common.py:74 | ||||||
| msgid "Login successful. Cookies stored in session." | msgid "Login successful. Cookies stored in session." | ||||||
| @@ -45,284 +44,324 @@ msgstr "Znaleziono auth_token:" | |||||||
| msgid "auth_token not found in the HTML page." | msgid "auth_token not found in the HTML page." | ||||||
| msgstr "Nie znaleziono auth_token w stronie HTML." | msgstr "Nie znaleziono auth_token w stronie HTML." | ||||||
|  |  | ||||||
| #: ImageBrowser.py:30 | #: ImageBrowser.py:33 | ||||||
| msgid "Processing..." | msgid "Processing..." | ||||||
| msgstr "Przetwarzanie..." | msgstr "Przetwarzanie..." | ||||||
|  |  | ||||||
| #: ImageBrowser.py:34 | #: ImageBrowser.py:37 | ||||||
| msgid "Processing, please wait..." | msgid "Processing, please wait..." | ||||||
| msgstr "Przetwarzanie, proszę czekać..." | msgstr "Przetwarzanie, proszę czekać..." | ||||||
|  |  | ||||||
| #: ImageBrowser.py:263 | #: ImageBrowser.py:244 | ||||||
|  | #, python-brace-format | ||||||
|  | msgid "Update check failed: {error}" | ||||||
|  | msgstr "Sprawdzenie aktualizacji nie powiodło się: {error}" | ||||||
|  |  | ||||||
|  | #: ImageBrowser.py:246 | ||||||
|  | #, python-brace-format | ||||||
|  | msgid "Malformed pyproject.toml: {error}" | ||||||
|  | msgstr "Nieprawidłowy plik pyproject.toml: {error}" | ||||||
|  |  | ||||||
|  | #: ImageBrowser.py:249 | ||||||
|  | #, python-brace-format | ||||||
|  | msgid "Unexpected error during update check: {error}" | ||||||
|  | msgstr "Nieoczekiwany błąd podczas sprawdzania aktualizacji: {error}" | ||||||
|  |  | ||||||
|  | #: ImageBrowser.py:256 | ||||||
|  | msgid "Update Available" | ||||||
|  | msgstr "Aktualizacja dostępna" | ||||||
|  |  | ||||||
|  | #: ImageBrowser.py:258 | ||||||
|  | #, python-brace-format | ||||||
|  | msgid "" | ||||||
|  | "A new version {new_version} is available!\n" | ||||||
|  | "You have version {current_version}.\n" | ||||||
|  | "\n" | ||||||
|  | "Update using: {update_command}" | ||||||
|  | msgstr "" | ||||||
|  | "Dostępna jest nowa wersja {new_version}!\n" | ||||||
|  | "Masz wersję {current_version}.\n" | ||||||
|  | "\n" | ||||||
|  | "Aktualizuj za pomocą: {update_command}" | ||||||
|  |  | ||||||
|  | #: ImageBrowser.py:367 | ||||||
| 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:409 | ||||||
| msgid "Tagger przetworzył:" | msgid "Tagger przetworzył:" | ||||||
| msgstr "Tagger przetworzył:" | msgstr "Tagger przetworzył:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:308 | #: ImageBrowser.py:412 | ||||||
| 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:438 | ||||||
| msgid "Otwórz folder" | msgid "Otwórz folder" | ||||||
| msgstr "Otwórz folder" | msgstr "Otwórz folder" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:337 ImageBrowser.py:600 ImageBrowser.py:814 | #: ImageBrowser.py:441 ImageBrowser.py:728 ImageBrowser.py:944 | ||||||
| #: ImageBrowser.py:822 | #: ImageBrowser.py:952 | ||||||
| msgid "Wyślij" | msgid "Wyślij" | ||||||
| msgstr "Wyślij" | msgstr "Wyślij" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:340 ImageBrowser.py:807 | #: ImageBrowser.py:444 ImageBrowser.py:937 | ||||||
| msgid "Wyślij wszystko" | msgid "Wyślij wszystko" | ||||||
| msgstr "Wyślij wszystko" | msgstr "Wyślij wszystko" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:344 ImageBrowser.py:808 ImageBrowser.py:814 | #: ImageBrowser.py:448 ImageBrowser.py:938 ImageBrowser.py:944 | ||||||
| msgid "Podmień tagi" | msgid "Podmień tagi" | ||||||
| msgstr "Podmień tagi" | msgstr "Podmień tagi" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:347 ImageBrowser.py:809 | #: ImageBrowser.py:451 ImageBrowser.py:939 | ||||||
| msgid "Otwórz post" | msgid "Otwórz post" | ||||||
| msgstr "Otwórz post" | msgstr "Otwórz post" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:350 | #: ImageBrowser.py:454 | ||||||
| msgid "Zakończ" | msgid "Zakończ" | ||||||
| msgstr "Zakończ" | msgstr "Zakończ" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:352 | #: ImageBrowser.py:456 | ||||||
| msgid "Plik" | msgid "Plik" | ||||||
| msgstr "Plik" | msgstr "Plik" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:356 ImageBrowser.py:430 | #: ImageBrowser.py:460 ImageBrowser.py:557 | ||||||
| msgid "Ustawienia" | msgid "Ustawienia" | ||||||
| msgstr "Ustawienia" | msgstr "Ustawienia" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:359 | #: ImageBrowser.py:463 | ||||||
| msgid "Wyczyść cache Taggera" | msgid "Wyczyść cache Taggera" | ||||||
| msgstr "Wyczyść cache Taggera" | msgstr "Wyczyść cache Taggera" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:362 | #: ImageBrowser.py:466 | ||||||
| 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:468 | ||||||
| msgid "Opcje" | msgid "Opcje" | ||||||
| msgstr "Opcje" | msgstr "Opcje" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:367 | #: ImageBrowser.py:471 | ||||||
| msgid "About" | msgid "About" | ||||||
| msgstr "O programie" | msgstr "O programie" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:368 | #: ImageBrowser.py:472 | ||||||
| msgid "Help" | msgid "Help" | ||||||
| msgstr "Pomoc" | msgstr "Pomoc" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:373 | #: ImageBrowser.py:477 | ||||||
| msgid "About Kapitanbooru Uploader" | msgid "About Kapitanbooru Uploader" | ||||||
| msgstr "O programie Kapitanbooru Uploader" | msgstr "O programie Kapitanbooru Uploader" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:386 | #: ImageBrowser.py:494 | ||||||
|  | #, python-brace-format | ||||||
|  | msgid "A new version {new_version} is available!" | ||||||
|  | msgstr "Dostępna jest nowa wersja {new_version}!" | ||||||
|  |  | ||||||
|  | #: ImageBrowser.py:501 | ||||||
|  | #, python-brace-format | ||||||
|  | msgid "Current version: {version}" | ||||||
|  | msgstr "Obecna wersja: {version}" | ||||||
|  |  | ||||||
|  | #: ImageBrowser.py:503 | ||||||
| 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:387 | #: ImageBrowser.py:504 | ||||||
| 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:388 | #: ImageBrowser.py:505 | ||||||
| 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:390 | #: ImageBrowser.py:507 | ||||||
| msgid "Authors:" | msgid "Authors:" | ||||||
| msgstr "Autorzy:" | msgstr "Autorzy:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:393 | #: ImageBrowser.py:510 | ||||||
| msgid "License: MIT License" | msgid "License: MIT License" | ||||||
| msgstr "Licencja: MIT License" | msgstr "Licencja: MIT License" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:396 | #: ImageBrowser.py:521 | ||||||
| msgid "Repository:" | msgid "Repository:" | ||||||
| msgstr "Repozytorium:" | msgstr "Repozytorium:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:397 | #: ImageBrowser.py:530 | ||||||
| msgid "Website:" | msgid "Website:" | ||||||
| msgstr "Strona internetowa:" | msgstr "Strona internetowa:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:414 | #: ImageBrowser.py:541 | ||||||
| msgid "Close" | msgid "Close" | ||||||
| msgstr "Zamknij" | msgstr "Zamknij" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:422 ImageBrowser.py:425 | #: ImageBrowser.py:549 ImageBrowser.py:552 | ||||||
| msgid "Cache" | msgid "Cache" | ||||||
| msgstr "Cache" | msgstr "Cache" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:422 | #: ImageBrowser.py:549 | ||||||
| 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:425 | #: ImageBrowser.py:552 | ||||||
| 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:434 | #: ImageBrowser.py:562 | ||||||
| msgid "Login:" | msgid "Login:" | ||||||
| msgstr "Login:" | msgstr "Login:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:440 | #: ImageBrowser.py:568 | ||||||
| msgid "Hasło:" | msgid "Hasło:" | ||||||
| msgstr "Hasło:" | msgstr "Hasło:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:446 | #: ImageBrowser.py:574 | ||||||
| msgid "Base URL:" | msgid "Base URL:" | ||||||
| msgstr "Base URL:" | msgstr "Base URL:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:452 | #: ImageBrowser.py:580 | ||||||
| msgid "Default Tags:" | msgid "Default Tags:" | ||||||
| msgstr "Domyślne tagi:" | msgstr "Domyślne tagi:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:458 | #: ImageBrowser.py:586 | ||||||
| msgid "Browser:" | msgid "Browser:" | ||||||
| msgstr "Przeglądarka:" | msgstr "Przeglądarka:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:472 | #: ImageBrowser.py:600 | ||||||
| msgid "Language:" | msgid "Language:" | ||||||
| msgstr "Język:" | msgstr "Język:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:504 | #: ImageBrowser.py:632 | ||||||
| msgid "Zapisz" | msgid "Zapisz" | ||||||
| msgstr "Zapisz" | msgstr "Zapisz" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:546 | #: ImageBrowser.py:674 | ||||||
| msgid "PNG Tags" | msgid "PNG Tags" | ||||||
| msgstr "Tagi PNG" | msgstr "Tagi PNG" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:558 | #: ImageBrowser.py:686 | ||||||
| msgid "Tagger Tags" | msgid "Tagger Tags" | ||||||
| msgstr "Tagi Taggera" | msgstr "Tagi Taggera" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:572 | #: ImageBrowser.py:700 | ||||||
| msgid "Manual Tags" | msgid "Manual Tags" | ||||||
| msgstr "Tagi ręczne" | msgstr "Tagi ręczne" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:580 | #: ImageBrowser.py:708 | ||||||
| msgid "Final Tags" | msgid "Final Tags" | ||||||
| msgstr "Ostateczne tagi" | msgstr "Ostateczne tagi" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:605 | #: ImageBrowser.py:733 | ||||||
| msgid "Wyświetl" | msgid "Wyświetl" | ||||||
| msgstr "Wyświetl" | msgstr "Wyświetl" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:622 | #: ImageBrowser.py:750 | ||||||
| msgid "Przetworzono tagi:" | msgid "Przetworzono tagi:" | ||||||
| msgstr "Przetworzono tagi:" | msgstr "Przetworzono tagi:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:622 ImageBrowser.py:623 ImageBrowser.py:624 | #: ImageBrowser.py:750 ImageBrowser.py:751 ImageBrowser.py:752 | ||||||
| msgid "plików" | msgid "plików" | ||||||
| msgstr "plików" | msgstr "plików" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:623 | #: ImageBrowser.py:751 | ||||||
| msgid "Zweryfikowano status uploadu:" | msgid "Zweryfikowano status uploadu:" | ||||||
| msgstr "Zweryfikowano status uploadu:" | msgstr "Zweryfikowano status uploadu:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:624 | #: ImageBrowser.py:752 | ||||||
| msgid "Zuploadowano:" | msgid "Zuploadowano:" | ||||||
| msgstr "Zuploadowano:" | msgstr "Zuploadowano:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:652 | #: ImageBrowser.py:780 | ||||||
| msgid "Wybierz folder z obrazkami PNG" | msgid "Wybierz folder z obrazkami PNG" | ||||||
| msgstr "Wybierz folder z obrazami PNG" | msgstr "Wybierz folder z obrazami PNG" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:683 | #: ImageBrowser.py:813 | ||||||
| msgid "Informacja" | msgid "Informacja" | ||||||
| msgstr "Informacja" | msgstr "Informacja" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:683 | #: ImageBrowser.py:813 | ||||||
| msgid "Brak plików PNG w wybranym folderze." | msgid "Brak plików PNG w wybranym folderze." | ||||||
| msgstr "Brak plików PNG w wybranym folderze." | msgstr "Brak plików PNG w wybranym folderze." | ||||||
|  |  | ||||||
| #: ImageBrowser.py:766 | #: ImageBrowser.py:896 | ||||||
| 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:842 | #: ImageBrowser.py:972 | ||||||
| msgid "Błąd przy obliczaniu MD5:" | msgid "Błąd przy obliczaniu MD5:" | ||||||
| msgstr "Błąd przy obliczaniu MD5:" | msgstr "Błąd przy obliczaniu MD5:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:898 | #: ImageBrowser.py:1028 | ||||||
| msgid "Błąd" | msgid "Błąd" | ||||||
| msgstr "Błąd" | msgstr "Błąd" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:898 | #: ImageBrowser.py:1028 | ||||||
| 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:1108 ImageBrowser.py:1118 | #: ImageBrowser.py:1238 ImageBrowser.py:1248 | ||||||
| #, 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:1348 | #: ImageBrowser.py:1478 | ||||||
| msgid "Tagger przetwarza..." | msgid "Tagger przetwarza..." | ||||||
| msgstr "Tagger przetwarza..." | msgstr "Tagger przetwarza..." | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1373 | #: ImageBrowser.py:1503 | ||||||
| #, 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:1414 | #: ImageBrowser.py:1544 | ||||||
| #, fuzzy |  | ||||||
| msgid "Wysyłanie zakończone powodzeniem!" | msgid "Wysyłanie zakończone powodzeniem!" | ||||||
| msgstr "Upload zakończony powodzeniem!" | msgstr "Wysyłanie zakończone powodzeniem!" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1418 ImageBrowser.py:1427 | #: ImageBrowser.py:1548 ImageBrowser.py:1557 | ||||||
| #, fuzzy, python-brace-format | #, python-brace-format | ||||||
| msgid "" | msgid "" | ||||||
| "Wysyłanie zakończone błędem.\n" | "Wysyłanie zakończone błędem.\n" | ||||||
| "Status: {status_code}\n" | "Status: {status_code}\n" | ||||||
| "Treść: {text}" | "Treść: {text}" | ||||||
| msgstr "" | msgstr "" | ||||||
| "Upload zakończony błędem.\n" | "Wysyłanie zakończone błędem.\n" | ||||||
| "Status: {status_code}\n" | "Status: {status_code}\n" | ||||||
| "Treść: {text}" | "Treść: {text}" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1433 ImageBrowser.py:1436 | #: ImageBrowser.py:1563 | ||||||
| msgid "Wysyłanie" | msgid "Wysyłanie" | ||||||
| msgstr "" | msgstr "Wysyłanie" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1449 | #: ImageBrowser.py:1579 | ||||||
| #, fuzzy |  | ||||||
| msgid "Błąd wysyłania" | msgid "Błąd wysyłania" | ||||||
| msgstr "Błąd edycji" | msgstr "Błąd wysyłania" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1469 | #: ImageBrowser.py:1599 | ||||||
| msgid "Błąd edycji" | msgid "Błąd edycji" | ||||||
| msgstr "Błąd edycji" | msgstr "Błąd edycji" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1469 | #: ImageBrowser.py:1599 | ||||||
| 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:1479 | #: ImageBrowser.py:1609 | ||||||
| #, 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:1489 ImageBrowser.py:1499 ImageBrowser.py:1530 | #: ImageBrowser.py:1619 ImageBrowser.py:1629 ImageBrowser.py:1660 | ||||||
| msgid "Operacja anulowana" | msgid "Operacja anulowana" | ||||||
| msgstr "Operacja anulowana" | msgstr "Operacja anulowana" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1540 | #: ImageBrowser.py:1670 | ||||||
| msgid "Tagi zostały zaktualizowane!" | msgid "Tagi zostały zaktualizowane!" | ||||||
| msgstr "Tagi zostały zaktualizowane!" | msgstr "Tagi zostały zaktualizowane!" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1542 | #: ImageBrowser.py:1672 | ||||||
| msgid "Sukces edycji" | msgid "Sukces edycji" | ||||||
| msgstr "Sukces edycji" | msgstr "Sukces edycji" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1548 | #: ImageBrowser.py:1678 | ||||||
| #, python-brace-format | #, python-brace-format | ||||||
| msgid "" | msgid "" | ||||||
| "Błąd podczas aktualizacji tagów\n" | "Błąd podczas aktualizacji tagów\n" | ||||||
| @@ -331,19 +370,19 @@ msgstr "" | |||||||
| "Błąd podczas aktualizacji tagów\n" | "Błąd podczas aktualizacji tagów\n" | ||||||
| "Status: {code}" | "Status: {code}" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1552 | #: ImageBrowser.py:1682 | ||||||
| msgid "Treść:" | msgid "Treść:" | ||||||
| msgstr "Treść:" | msgstr "Treść:" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1556 | #: ImageBrowser.py:1686 | ||||||
| msgid "Krytyczny błąd edycji" | msgid "Krytyczny błąd edycji" | ||||||
| msgstr "Krytyczny błąd edycji" | msgstr "Krytyczny błąd edycji" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1568 | #: ImageBrowser.py:1698 | ||||||
| msgid "Potwierdzenie" | msgid "Potwierdzenie" | ||||||
| msgstr "Potwierdzenie" | msgstr "Potwierdzenie" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1570 | #: ImageBrowser.py:1700 | ||||||
| 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" | ||||||
| @@ -353,18 +392,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:1589 | #: ImageBrowser.py:1724 | ||||||
| msgid "Anulowano operację!" | msgid "Anulowano operację!" | ||||||
| msgstr "Operacja anulowana!" | msgstr "Operacja anulowana!" | ||||||
|  |  | ||||||
| #: ImageBrowser.py:1597 | #: ImageBrowser.py:1732 | ||||||
| #, fuzzy, 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:1608 | #: ImageBrowser.py:1748 | ||||||
| msgid "Przesłano pliki!" | msgid "Przesłano pliki!" | ||||||
| msgstr "Pliki zostały przesłane!" | msgstr "Pliki zostały przesłane!" | ||||||
|  |  | ||||||
| @@ -497,19 +536,3 @@ msgstr "Błąd podczas odczytu tag_aliases:" | |||||||
| #: tag_processing.py:181 | #: tag_processing.py:181 | ||||||
| msgid "Błąd podczas odczytu tags:" | msgid "Błąd podczas odczytu tags:" | ||||||
| msgstr "Błąd podczas odczytu tags:" | msgstr "Błąd podczas odczytu tags:" | ||||||
|  |  | ||||||
| #, python-brace-format |  | ||||||
| #~ msgid "" |  | ||||||
| #~ "Upload zakończony błędem.\n" |  | ||||||
| #~ "Status: 409\n" |  | ||||||
| #~ "Treść: {error}" |  | ||||||
| #~ msgstr "" |  | ||||||
| #~ "Upload zakończony błędem.\n" |  | ||||||
| #~ "Status: 409\n" |  | ||||||
| #~ "Treść: {error}" |  | ||||||
|  |  | ||||||
| #~ msgid "Upload" |  | ||||||
| #~ msgstr "Upload" |  | ||||||
|  |  | ||||||
| #~ msgid "Błąd uploadu" |  | ||||||
| #~ msgstr "Błąd uploadu" |  | ||||||
|   | |||||||
| @@ -3,4 +3,5 @@ Pillow==11.1.0 | |||||||
| pywin32==308 | pywin32==308 | ||||||
| Requests==2.32.3 | Requests==2.32.3 | ||||||
| wdtagger==0.13.2 | wdtagger==0.13.2 | ||||||
| bs4==0.0.2 | bs4==0.0.2 | ||||||
|  | tomli==2.2.1 | ||||||
| @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" | |||||||
|  |  | ||||||
| [project] | [project] | ||||||
| name = "kapitanbooru-uploader" | name = "kapitanbooru-uploader" | ||||||
| version = "0.4.4" | version = "0.5.0" | ||||||
| description = "A GUI application for uploading images to KapitanBooru" | description = "A GUI application for uploading images to KapitanBooru" | ||||||
| authors = [ | authors = [ | ||||||
|     {name = "Michał Leśniak", email = "kapitan@mlesniak.pl"} |     {name = "Michał Leśniak", email = "kapitan@mlesniak.pl"} | ||||||
| @@ -15,7 +15,8 @@ dependencies = [ | |||||||
|     "pywin32==308", |     "pywin32==308", | ||||||
|     "requests==2.32.3", |     "requests==2.32.3", | ||||||
|     "wdtagger==0.13.2", |     "wdtagger==0.13.2", | ||||||
|     "bs4==0.0.2" |     "bs4==0.0.2", | ||||||
|  |     "tomli==2.2.1" | ||||||
| ] | ] | ||||||
| requires-python = ">=3.13" | requires-python = ">=3.13" | ||||||
| readme = "README.md" | readme = "README.md" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user