Add periodic version check
All checks were successful
Gitea/kapitanbooru-uploader/pipeline/head This commit looks good

This commit is contained in:
Michał Leśniak 2025-03-11 00:46:39 +01:00
parent b559f965f5
commit 218f0b9b79
5 changed files with 351 additions and 204 deletions

View File

@ -7,11 +7,14 @@ import threading
import tkinter as tk
from tkinter import filedialog, messagebox, ttk
from typing import Dict, Tuple, Optional
from packaging.version import parse as parse_version
import itertools
import networkx as nx
import requests
from PIL import Image, ImageTk, PngImagePlugin
import wdtagger as wdt
import tomli
from .I18N import _
from .ProgressFile import ProgressFile
@ -139,7 +142,8 @@ class ImageBrowser(tk.Tk):
super().__init__()
self.title("Kapitanbooru Uploader")
self.geometry("900x600")
self.version = "0.4.4"
self.version = "0.5.0"
self.acknowledged_version = parse_version(self.version)
self.settings = Settings()
self.tags_repo = TagsRepo(self.settings)
@ -204,6 +208,66 @@ class ImageBrowser(tk.Tk):
self.create_widgets()
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):
"""Reload UI components with new language"""
# Destroy current widgets
@ -417,31 +481,43 @@ class ImageBrowser(tk.Tk):
frame = ttk.Frame(about, padding=10)
frame.pack(fill="both", expand=True)
row_counter = itertools.count(0)
ttk.Label(
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 = [
(f"Version {self.version}", 1),
("", 2),
(_("A GUI application for uploading images to KapitanBooru."), 3),
(_("Features include image upload, tag management, automatic"), 4),
(_("tagging with wdtagger, and cache management."), 5),
("", 6),
(_("Authors:"), 7),
("Michał Leśniak", 8),
("", 9),
(_("License: MIT License"), 10),
(f"Copyright © 2025 Michał Leśniak", 11),
("", 12),
_("Current version: {version}").format(version=self.version),
"",
_("A GUI application for uploading images to KapitanBooru."),
_("Features include image upload, tag management, automatic"),
_("tagging with wdtagger, and cache management."),
"",
_("Authors:"),
"Michał Leśniak",
"",
_("License: MIT License"),
f"Copyright © 2025 Michał Leśniak",
"",
]
for text, row in content:
ttk.Label(frame, text=text).grid(row=row, column=0, sticky=tk.W)
for text in content:
ttk.Label(frame, text=text).grid(row=next(row_counter), column=0, sticky=tk.W)
# Repository link
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)
repo_url = "https://git.mlesniak.pl/kapitan/kapitanbooru-uploader"
repo = ttk.Label(repo_frame, text=repo_url, cursor="hand2", foreground="blue")
@ -450,7 +526,7 @@ class ImageBrowser(tk.Tk):
# Website link
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)
website_url = "https://booru.mlesniak.pl"
website = ttk.Label(

View File

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: Kapitanbooru Uploader 0.4.4\n"
"Project-Id-Version: Kapitanbooru Uploader 0.5.0\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-Transfer-Encoding: 8bit\n"
@ -43,300 +43,345 @@ msgstr "Found auth_token:"
msgid "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..."
msgstr "Processing..."
#: ImageBrowser.py:34
#: ImageBrowser.py:37
msgid "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"
msgstr "Error opening file"
#: ImageBrowser.py:305
#: ImageBrowser.py:409
msgid "Tagger przetworzył:"
msgstr "Tagger processed:"
#: ImageBrowser.py:308
#: ImageBrowser.py:412
msgid "Błąd Taggera dla"
msgstr "Tagger error for"
#: ImageBrowser.py:334
#: ImageBrowser.py:438
msgid "Otwórz folder"
msgstr "Open folder"
#: ImageBrowser.py:337 ImageBrowser.py:600 ImageBrowser.py:814
#: ImageBrowser.py:822
#: ImageBrowser.py:441 ImageBrowser.py:728 ImageBrowser.py:944
#: ImageBrowser.py:952
msgid "Wyślij"
msgstr "Send"
#: ImageBrowser.py:340 ImageBrowser.py:807
#: ImageBrowser.py:444 ImageBrowser.py:937
msgid "Wyślij wszystko"
msgstr "Send all"
#: ImageBrowser.py:344 ImageBrowser.py:808 ImageBrowser.py:814
#: ImageBrowser.py:448 ImageBrowser.py:938 ImageBrowser.py:944
msgid "Podmień tagi"
msgstr "Replace tags"
#: ImageBrowser.py:347 ImageBrowser.py:809
#: ImageBrowser.py:451 ImageBrowser.py:939
msgid "Otwórz post"
msgstr "Open post"
#: ImageBrowser.py:350
#: ImageBrowser.py:454
msgid "Zakończ"
msgstr "Finish"
#: ImageBrowser.py:352
#: ImageBrowser.py:456
msgid "Plik"
msgstr "File"
#: ImageBrowser.py:356 ImageBrowser.py:430
#: ImageBrowser.py:460 ImageBrowser.py:557
msgid "Ustawienia"
msgstr "Settings"
#: ImageBrowser.py:359
#: ImageBrowser.py:463
msgid "Wyczyść cache Taggera"
msgstr "Clear Tagger cache"
#: ImageBrowser.py:362
#: ImageBrowser.py:466
msgid "Zregeneruj bazę tagów"
msgstr "Regenerate tag database"
#: ImageBrowser.py:364
#: ImageBrowser.py:468
msgid "Opcje"
msgstr "Options"
#: ImageBrowser.py:367
#: ImageBrowser.py:471
msgid "About"
msgstr "About"
#: ImageBrowser.py:368
#: ImageBrowser.py:472
msgid "Help"
msgstr "Help"
#: ImageBrowser.py:373
#: ImageBrowser.py:477
msgid "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."
msgstr "A GUI application for uploading images to KapitanBooru."
#: ImageBrowser.py:387
#: ImageBrowser.py:504
msgid "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."
msgstr "tagging with wdtagger, and cache management."
#: ImageBrowser.py:390
#: ImageBrowser.py:507
msgid "Authors:"
msgstr "Authors:"
#: ImageBrowser.py:393
#: ImageBrowser.py:510
msgid "License: MIT License"
msgstr "License: MIT License"
#: ImageBrowser.py:396
#: ImageBrowser.py:521
msgid "Repository:"
msgstr "Repository:"
#: ImageBrowser.py:397
#: ImageBrowser.py:530
msgid "Website:"
msgstr "Website:"
#: ImageBrowser.py:414
#: ImageBrowser.py:541
msgid "Close"
msgstr "Close"
#: ImageBrowser.py:422 ImageBrowser.py:425
#: ImageBrowser.py:549 ImageBrowser.py:552
msgid "Cache"
msgstr "Cache"
#: ImageBrowser.py:422
#: ImageBrowser.py:549
msgid "Cache Taggera zostało wyczyszczone."
msgstr "Tagger cache has been cleared."
#: ImageBrowser.py:425
#: ImageBrowser.py:552
msgid "Błąd przy czyszczeniu cache:"
msgstr "Error clearing cache:"
#: ImageBrowser.py:434
#: ImageBrowser.py:562
msgid "Login:"
msgstr "Login:"
#: ImageBrowser.py:440
#: ImageBrowser.py:568
msgid "Hasło:"
msgstr "Password:"
#: ImageBrowser.py:446
#: ImageBrowser.py:574
msgid "Base URL:"
msgstr "Base URL:"
#: ImageBrowser.py:452
#: ImageBrowser.py:580
msgid "Default Tags:"
msgstr "Default Tags:"
#: ImageBrowser.py:458
#: ImageBrowser.py:586
msgid "Browser:"
msgstr "Browser:"
#: ImageBrowser.py:472
#: ImageBrowser.py:600
msgid "Language:"
msgstr "Language:"
#: ImageBrowser.py:504
#: ImageBrowser.py:632
msgid "Zapisz"
msgstr "Save"
#: ImageBrowser.py:546
#: ImageBrowser.py:674
msgid "PNG Tags"
msgstr "PNG Tags"
#: ImageBrowser.py:558
#: ImageBrowser.py:686
msgid "Tagger Tags"
msgstr "Tagger Tags"
#: ImageBrowser.py:572
#: ImageBrowser.py:700
msgid "Manual Tags"
msgstr "Manual Tags"
#: ImageBrowser.py:580
#: ImageBrowser.py:708
msgid "Final Tags"
msgstr "Final Tags"
#: ImageBrowser.py:605
#: ImageBrowser.py:733
msgid "Wyświetl"
msgstr "Display"
#: ImageBrowser.py:622
#: ImageBrowser.py:750
msgid "Przetworzono tagi:"
msgstr "Processed tags:"
#: ImageBrowser.py:622 ImageBrowser.py:623 ImageBrowser.py:624
#: ImageBrowser.py:750 ImageBrowser.py:751 ImageBrowser.py:752
msgid "plików"
msgstr "files"
#: ImageBrowser.py:623
#: ImageBrowser.py:751
msgid "Zweryfikowano status uploadu:"
msgstr "Upload status verified:"
#: ImageBrowser.py:624
#: ImageBrowser.py:752
msgid "Zuploadowano:"
msgstr "Uploaded:"
#: ImageBrowser.py:652
#: ImageBrowser.py:780
msgid "Wybierz folder z obrazkami PNG"
msgstr "Select folder with PNG images"
#: ImageBrowser.py:683
#: ImageBrowser.py:813
msgid "Informacja"
msgstr "Information"
#: ImageBrowser.py:683
#: ImageBrowser.py:813
msgid "Brak plików PNG w wybranym folderze."
msgstr "No PNG files in the selected folder."
#: ImageBrowser.py:766
#: ImageBrowser.py:896
msgid "Błąd podczas sprawdzania paczki uploadu:"
msgstr "Error while checking upload package:"
#: ImageBrowser.py:842
#: ImageBrowser.py:972
msgid "Błąd przy obliczaniu MD5:"
msgstr "Error calculating MD5:"
#: ImageBrowser.py:898
#: ImageBrowser.py:1028
msgid "Błąd"
msgstr "Error"
#: ImageBrowser.py:898
#: ImageBrowser.py:1028
msgid "Nie można załadować obrazka:"
msgstr "Unable to load image:"
#: ImageBrowser.py:1108 ImageBrowser.py:1118
#: ImageBrowser.py:1238 ImageBrowser.py:1248
#, python-brace-format
msgid "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..."
msgstr "Tagger processing..."
#: ImageBrowser.py:1373
#: ImageBrowser.py:1503
#, python-brace-format
msgid "Wysyłam plik {base_file_name}..."
msgstr "Sending file {base_file_name}..."
#: ImageBrowser.py:1414
#: ImageBrowser.py:1544
msgid "Wysyłanie zakończone powodzeniem!"
msgstr "Upload completed successfully!"
#: ImageBrowser.py:1418 ImageBrowser.py:1427
#: ImageBrowser.py:1548 ImageBrowser.py:1557
#, python-brace-format
msgid ""
"Wysyłanie zakończone błędem.\n"
"Status: {status_code}\n"
"Treść: {text}"
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"
msgstr "Uploading"
#: ImageBrowser.py:1449
#: ImageBrowser.py:1579
msgid "Błąd wysyłania"
msgstr "Upload error"
#: ImageBrowser.py:1469
#: ImageBrowser.py:1599
msgid "Błąd edycji"
msgstr "Edit error"
#: ImageBrowser.py:1469
#: ImageBrowser.py:1599
msgid "Post nie został znaleziony dla tego pliku"
msgstr "Post not found for this file"
#: ImageBrowser.py:1479
#: ImageBrowser.py:1609
#, python-brace-format
msgid "Aktualizuję tagi dla {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"
msgstr "Operation cancelled"
#: ImageBrowser.py:1540
#: ImageBrowser.py:1670
msgid "Tagi zostały zaktualizowane!"
msgstr "Tags have been updated!"
#: ImageBrowser.py:1542
#: ImageBrowser.py:1672
msgid "Sukces edycji"
msgstr "Edit successful"
#: ImageBrowser.py:1548
#: ImageBrowser.py:1678
#, python-brace-format
msgid ""
"Błąd podczas aktualizacji tagów\n"
"Status: {code}"
msgstr ""
"Error updating tags\nStatus: {code}"
"Error updating tags\n"
"Status: {code}"
#: ImageBrowser.py:1552
#: ImageBrowser.py:1682
msgid "Treść:"
msgstr "Content:"
#: ImageBrowser.py:1556
#: ImageBrowser.py:1686
msgid "Krytyczny błąd edycji"
msgstr "Critical edit error"
#: ImageBrowser.py:1568
#: ImageBrowser.py:1698
msgid "Potwierdzenie"
msgstr "Confirmation"
#: ImageBrowser.py:1570
#: ImageBrowser.py:1700
msgid ""
"Czy na pewno chcesz wrzucić wszystkie niewrzucone pliki?\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"
"Make sure the tags are correct!"
#: ImageBrowser.py:1589
#: ImageBrowser.py:1724
msgid "Anulowano operację!"
msgstr "Operation cancelled!"
#: ImageBrowser.py:1597
#: ImageBrowser.py:1732
#, 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}"
msgstr ""
"Uploading {file_path} with tags: {final_tags} and rating: {final_rating}"
#: ImageBrowser.py:1608
#: ImageBrowser.py:1748
msgid "Przesłano pliki!"
msgstr "Files have been uploaded!"

View File

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: Kapitanbooru Uploader 0.4.4\n"
"Project-Id-Version: Kapitanbooru Uploader 0.5.0\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"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@ -17,8 +17,7 @@ msgstr "Błąd przy otwieraniu przeglądarki:"
#: common.py:72
msgid "Login succeeded, but expected cookies were not set."
msgstr ""
"Logowanie powiodło się, ale oczekiwane ciasteczka nie zostały ustawione."
msgstr "Logowanie powiodło się, ale oczekiwane ciasteczka nie zostały ustawione."
#: common.py:74
msgid "Login successful. Cookies stored in session."
@ -45,284 +44,324 @@ msgstr "Znaleziono auth_token:"
msgid "auth_token not found in the HTML page."
msgstr "Nie znaleziono auth_token w stronie HTML."
#: ImageBrowser.py:30
#: ImageBrowser.py:33
msgid "Processing..."
msgstr "Przetwarzanie..."
#: ImageBrowser.py:34
#: ImageBrowser.py:37
msgid "Processing, please wait..."
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"
msgstr "Błąd przy otwieraniu pliku"
#: ImageBrowser.py:305
#: ImageBrowser.py:409
msgid "Tagger przetworzył:"
msgstr "Tagger przetworzył:"
#: ImageBrowser.py:308
#: ImageBrowser.py:412
msgid "Błąd Taggera dla"
msgstr "Błąd Taggera dla"
#: ImageBrowser.py:334
#: ImageBrowser.py:438
msgid "Otwórz folder"
msgstr "Otwórz folder"
#: ImageBrowser.py:337 ImageBrowser.py:600 ImageBrowser.py:814
#: ImageBrowser.py:822
#: ImageBrowser.py:441 ImageBrowser.py:728 ImageBrowser.py:944
#: ImageBrowser.py:952
msgid "Wyślij"
msgstr "Wyślij"
#: ImageBrowser.py:340 ImageBrowser.py:807
#: ImageBrowser.py:444 ImageBrowser.py:937
msgid "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"
msgstr "Podmień tagi"
#: ImageBrowser.py:347 ImageBrowser.py:809
#: ImageBrowser.py:451 ImageBrowser.py:939
msgid "Otwórz post"
msgstr "Otwórz post"
#: ImageBrowser.py:350
#: ImageBrowser.py:454
msgid "Zakończ"
msgstr "Zakończ"
#: ImageBrowser.py:352
#: ImageBrowser.py:456
msgid "Plik"
msgstr "Plik"
#: ImageBrowser.py:356 ImageBrowser.py:430
#: ImageBrowser.py:460 ImageBrowser.py:557
msgid "Ustawienia"
msgstr "Ustawienia"
#: ImageBrowser.py:359
#: ImageBrowser.py:463
msgid "Wyczyść cache Taggera"
msgstr "Wyczyść cache Taggera"
#: ImageBrowser.py:362
#: ImageBrowser.py:466
msgid "Zregeneruj bazę tagów"
msgstr "Zregeneruj bazę tagów"
#: ImageBrowser.py:364
#: ImageBrowser.py:468
msgid "Opcje"
msgstr "Opcje"
#: ImageBrowser.py:367
#: ImageBrowser.py:471
msgid "About"
msgstr "O programie"
#: ImageBrowser.py:368
#: ImageBrowser.py:472
msgid "Help"
msgstr "Pomoc"
#: ImageBrowser.py:373
#: ImageBrowser.py:477
msgid "About 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."
msgstr "Aplikacja GUI do przesyłania obrazów do KapitanBooru."
#: ImageBrowser.py:387
#: ImageBrowser.py:504
msgid "Features include image upload, tag management, automatic"
msgstr "Funkcje obejmują przesyłanie obrazów, zarządzanie tagami, automatyczne"
#: ImageBrowser.py:388
#: ImageBrowser.py:505
msgid "tagging with wdtagger, and cache management."
msgstr "tagowanie za pomocą wdtagger oraz zarządzanie cache."
#: ImageBrowser.py:390
#: ImageBrowser.py:507
msgid "Authors:"
msgstr "Autorzy:"
#: ImageBrowser.py:393
#: ImageBrowser.py:510
msgid "License: MIT License"
msgstr "Licencja: MIT License"
#: ImageBrowser.py:396
#: ImageBrowser.py:521
msgid "Repository:"
msgstr "Repozytorium:"
#: ImageBrowser.py:397
#: ImageBrowser.py:530
msgid "Website:"
msgstr "Strona internetowa:"
#: ImageBrowser.py:414
#: ImageBrowser.py:541
msgid "Close"
msgstr "Zamknij"
#: ImageBrowser.py:422 ImageBrowser.py:425
#: ImageBrowser.py:549 ImageBrowser.py:552
msgid "Cache"
msgstr "Cache"
#: ImageBrowser.py:422
#: ImageBrowser.py:549
msgid "Cache Taggera zostało wyczyszczone."
msgstr "Cache Taggera zostało wyczyszczone."
#: ImageBrowser.py:425
#: ImageBrowser.py:552
msgid "Błąd przy czyszczeniu cache:"
msgstr "Błąd przy czyszczeniu cache:"
#: ImageBrowser.py:434
#: ImageBrowser.py:562
msgid "Login:"
msgstr "Login:"
#: ImageBrowser.py:440
#: ImageBrowser.py:568
msgid "Hasło:"
msgstr "Hasło:"
#: ImageBrowser.py:446
#: ImageBrowser.py:574
msgid "Base URL:"
msgstr "Base URL:"
#: ImageBrowser.py:452
#: ImageBrowser.py:580
msgid "Default Tags:"
msgstr "Domyślne tagi:"
#: ImageBrowser.py:458
#: ImageBrowser.py:586
msgid "Browser:"
msgstr "Przeglądarka:"
#: ImageBrowser.py:472
#: ImageBrowser.py:600
msgid "Language:"
msgstr "Język:"
#: ImageBrowser.py:504
#: ImageBrowser.py:632
msgid "Zapisz"
msgstr "Zapisz"
#: ImageBrowser.py:546
#: ImageBrowser.py:674
msgid "PNG Tags"
msgstr "Tagi PNG"
#: ImageBrowser.py:558
#: ImageBrowser.py:686
msgid "Tagger Tags"
msgstr "Tagi Taggera"
#: ImageBrowser.py:572
#: ImageBrowser.py:700
msgid "Manual Tags"
msgstr "Tagi ręczne"
#: ImageBrowser.py:580
#: ImageBrowser.py:708
msgid "Final Tags"
msgstr "Ostateczne tagi"
#: ImageBrowser.py:605
#: ImageBrowser.py:733
msgid "Wyświetl"
msgstr "Wyświetl"
#: ImageBrowser.py:622
#: ImageBrowser.py:750
msgid "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"
msgstr "plików"
#: ImageBrowser.py:623
#: ImageBrowser.py:751
msgid "Zweryfikowano status uploadu:"
msgstr "Zweryfikowano status uploadu:"
#: ImageBrowser.py:624
#: ImageBrowser.py:752
msgid "Zuploadowano:"
msgstr "Zuploadowano:"
#: ImageBrowser.py:652
#: ImageBrowser.py:780
msgid "Wybierz folder z obrazkami PNG"
msgstr "Wybierz folder z obrazami PNG"
#: ImageBrowser.py:683
#: ImageBrowser.py:813
msgid "Informacja"
msgstr "Informacja"
#: ImageBrowser.py:683
#: ImageBrowser.py:813
msgid "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:"
msgstr "Błąd podczas sprawdzania paczki uploadu:"
#: ImageBrowser.py:842
#: ImageBrowser.py:972
msgid "Błąd przy obliczaniu MD5:"
msgstr "Błąd przy obliczaniu MD5:"
#: ImageBrowser.py:898
#: ImageBrowser.py:1028
msgid "Błąd"
msgstr "Błąd"
#: ImageBrowser.py:898
#: ImageBrowser.py:1028
msgid "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
msgid "Warning: Tag '{tag}' not found in implication graph"
msgstr "Ostrzeżenie: Tag '{tag}' nie został znaleziony w grafie implikacji"
#: ImageBrowser.py:1348
#: ImageBrowser.py:1478
msgid "Tagger przetwarza..."
msgstr "Tagger przetwarza..."
#: ImageBrowser.py:1373
#: ImageBrowser.py:1503
#, python-brace-format
msgid "Wysyłam plik {base_file_name}..."
msgstr "Wysyłam plik {base_file_name}..."
#: ImageBrowser.py:1414
#, fuzzy
#: ImageBrowser.py:1544
msgid "Wysyłanie zakończone powodzeniem!"
msgstr "Upload zakończony powodzeniem!"
msgstr "Wysyłanie zakończone powodzeniem!"
#: ImageBrowser.py:1418 ImageBrowser.py:1427
#, fuzzy, python-brace-format
#: ImageBrowser.py:1548 ImageBrowser.py:1557
#, python-brace-format
msgid ""
"Wysyłanie zakończone błędem.\n"
"Status: {status_code}\n"
"Treść: {text}"
msgstr ""
"Upload zakończony błędem.\n"
"Wysyłanie zakończone błędem.\n"
"Status: {status_code}\n"
"Treść: {text}"
#: ImageBrowser.py:1433 ImageBrowser.py:1436
#: ImageBrowser.py:1563
msgid "Wysyłanie"
msgstr ""
msgstr "Wysyłanie"
#: ImageBrowser.py:1449
#, fuzzy
#: ImageBrowser.py:1579
msgid "Błąd wysyłania"
msgstr "Błąd edycji"
msgstr "Błąd wysyłania"
#: ImageBrowser.py:1469
#: ImageBrowser.py:1599
msgid "Błąd edycji"
msgstr "Błąd edycji"
#: ImageBrowser.py:1469
#: ImageBrowser.py:1599
msgid "Post nie został znaleziony dla tego pliku"
msgstr "Post nie został znaleziony dla tego pliku"
#: ImageBrowser.py:1479
#: ImageBrowser.py:1609
#, python-brace-format
msgid "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"
msgstr "Operacja anulowana"
#: ImageBrowser.py:1540
#: ImageBrowser.py:1670
msgid "Tagi zostały zaktualizowane!"
msgstr "Tagi zostały zaktualizowane!"
#: ImageBrowser.py:1542
#: ImageBrowser.py:1672
msgid "Sukces edycji"
msgstr "Sukces edycji"
#: ImageBrowser.py:1548
#: ImageBrowser.py:1678
#, python-brace-format
msgid ""
"Błąd podczas aktualizacji tagów\n"
@ -331,19 +370,19 @@ msgstr ""
"Błąd podczas aktualizacji tagów\n"
"Status: {code}"
#: ImageBrowser.py:1552
#: ImageBrowser.py:1682
msgid "Treść:"
msgstr "Treść:"
#: ImageBrowser.py:1556
#: ImageBrowser.py:1686
msgid "Krytyczny błąd edycji"
msgstr "Krytyczny błąd edycji"
#: ImageBrowser.py:1568
#: ImageBrowser.py:1698
msgid "Potwierdzenie"
msgstr "Potwierdzenie"
#: ImageBrowser.py:1570
#: ImageBrowser.py:1700
msgid ""
"Czy na pewno chcesz wrzucić wszystkie niewrzucone pliki?\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"
"Upewnij się, że tagi są poprawne!"
#: ImageBrowser.py:1589
#: ImageBrowser.py:1724
msgid "Anulowano operację!"
msgstr "Operacja anulowana!"
#: ImageBrowser.py:1597
#, fuzzy, python-brace-format
#: ImageBrowser.py:1732
#, 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:1608
#: ImageBrowser.py:1748
msgid "Przesłano pliki!"
msgstr "Pliki zostały przesłane!"
@ -497,19 +536,3 @@ msgstr "Błąd podczas odczytu tag_aliases:"
#: tag_processing.py:181
msgid "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"

View File

@ -4,3 +4,4 @@ pywin32==308
Requests==2.32.3
wdtagger==0.13.2
bs4==0.0.2
tomli==2.2.1

View File

@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "kapitanbooru-uploader"
version = "0.4.4"
version = "0.5.0"
description = "A GUI application for uploading images to KapitanBooru"
authors = [
{name = "Michał Leśniak", email = "kapitan@mlesniak.pl"}
@ -15,7 +15,8 @@ dependencies = [
"pywin32==308",
"requests==2.32.3",
"wdtagger==0.13.2",
"bs4==0.0.2"
"bs4==0.0.2",
"tomli==2.2.1"
]
requires-python = ">=3.13"
readme = "README.md"