From e285a47c02c6de8a4954aa20f1ad44f4b0bfa715 Mon Sep 17 00:00:00 2001 From: Undid Iridium Date: Thu, 9 Oct 2025 01:25:01 -0400 Subject: [PATCH 1/7] Fixes for Danbooru --- .../resources/LabelsBundle.properties | 76 +++++ .../resources/LabelsBundle_ar_AR.properties | 57 ++++ .../resources/LabelsBundle_de_DE.properties | 57 ++++ .../resources/LabelsBundle_el_GR.properties | 75 +++++ .../resources/LabelsBundle_en_US.properties | 1 + .../resources/LabelsBundle_es_ES.properties | 76 +++++ .../resources/LabelsBundle_fi_FI.properties | 57 ++++ .../resources/LabelsBundle_fr_CH.properties | 57 ++++ .../resources/LabelsBundle_in_ID.properties | 59 ++++ .../resources/LabelsBundle_it_IT.properties | 57 ++++ .../resources/LabelsBundle_kr_KR.properties | 57 ++++ .../resources/LabelsBundle_nl_NL.properties | 57 ++++ .../resources/LabelsBundle_pl_PL.properties | 59 ++++ .../LabelsBundle_porrisavvo_FI.properties | 57 ++++ .../resources/LabelsBundle_pt_BR.properties | 58 ++++ .../resources/LabelsBundle_pt_PT.properties | 75 +++++ .../resources/LabelsBundle_ru_RU.properties | 57 ++++ .../resources/LabelsBundle_zh_CN.properties | 75 +++++ out/production/resources/camera.wav | Bin 0 -> 5134 bytes out/production/resources/comment.png | Bin 0 -> 289 bytes out/production/resources/folder.png | Bin 0 -> 347 bytes out/production/resources/gear.png | Bin 0 -> 670 bytes out/production/resources/icon.ico | Bin 0 -> 4286 bytes out/production/resources/icon.png | Bin 0 -> 728 bytes out/production/resources/list.png | Bin 0 -> 203 bytes .../resources/log4j.file.properties | 18 + out/production/resources/log4j2-example.xml | 30 ++ out/production/resources/rip.properties | 50 +++ out/production/resources/stop.png | Bin 0 -> 164 bytes out/production/resources/time.png | Bin 0 -> 690 bytes out/production/resources/wrench.png | Bin 0 -> 607 bytes .../ripme/ripper/AbstractRipper.java | 18 +- .../ripme/ripper/DownloadFileThread.java | 318 +++++++++--------- .../ripme/ripper/rippers/DanbooruRipper.java | 75 ++++- .../ripper/rippers/FileFinishCallBack.java | 9 + .../rarchives/ripme/ripper/rippers/test.json | 99 ++++++ .../rarchives/ripme/ripper/rippers/test2.json | 92 +++++ 37 files changed, 1614 insertions(+), 162 deletions(-) create mode 100644 out/production/resources/LabelsBundle.properties create mode 100644 out/production/resources/LabelsBundle_ar_AR.properties create mode 100644 out/production/resources/LabelsBundle_de_DE.properties create mode 100644 out/production/resources/LabelsBundle_el_GR.properties create mode 100644 out/production/resources/LabelsBundle_en_US.properties create mode 100644 out/production/resources/LabelsBundle_es_ES.properties create mode 100644 out/production/resources/LabelsBundle_fi_FI.properties create mode 100644 out/production/resources/LabelsBundle_fr_CH.properties create mode 100644 out/production/resources/LabelsBundle_in_ID.properties create mode 100644 out/production/resources/LabelsBundle_it_IT.properties create mode 100644 out/production/resources/LabelsBundle_kr_KR.properties create mode 100644 out/production/resources/LabelsBundle_nl_NL.properties create mode 100644 out/production/resources/LabelsBundle_pl_PL.properties create mode 100644 out/production/resources/LabelsBundle_porrisavvo_FI.properties create mode 100644 out/production/resources/LabelsBundle_pt_BR.properties create mode 100644 out/production/resources/LabelsBundle_pt_PT.properties create mode 100644 out/production/resources/LabelsBundle_ru_RU.properties create mode 100644 out/production/resources/LabelsBundle_zh_CN.properties create mode 100644 out/production/resources/camera.wav create mode 100644 out/production/resources/comment.png create mode 100644 out/production/resources/folder.png create mode 100644 out/production/resources/gear.png create mode 100644 out/production/resources/icon.ico create mode 100644 out/production/resources/icon.png create mode 100644 out/production/resources/list.png create mode 100644 out/production/resources/log4j.file.properties create mode 100644 out/production/resources/log4j2-example.xml create mode 100644 out/production/resources/rip.properties create mode 100644 out/production/resources/stop.png create mode 100644 out/production/resources/time.png create mode 100644 out/production/resources/wrench.png create mode 100644 src/main/java/com/rarchives/ripme/ripper/rippers/FileFinishCallBack.java create mode 100644 src/main/java/com/rarchives/ripme/ripper/rippers/test.json create mode 100644 src/main/java/com/rarchives/ripme/ripper/rippers/test2.json diff --git a/out/production/resources/LabelsBundle.properties b/out/production/resources/LabelsBundle.properties new file mode 100644 index 000000000..63bca351c --- /dev/null +++ b/out/production/resources/LabelsBundle.properties @@ -0,0 +1,76 @@ +Log = Log +History = History +created = created +modified = modified +queue = Queue +Configuration = Configuration +open = Open + +# Keys for the Configuration menu +current.version = Current version +check.for.updates = Check for updates +auto.update = Auto-update? +max.download.threads = Maximum download threads: +timeout.mill = Timeout (in milliseconds): +retry.download.count = Retry download count +retry.sleep.mill = Wait between retries (in milliseconds): +overwrite.existing.files = Overwrite existing files? +sound.when.rip.completes = Sound when rip completes +preserve.order = Preserve order +save.logs = Save logs +notification.when.rip.starts = Notification when rip starts +save.urls.only = Save URLs only +save.album.titles = Save album titles +autorip.from.clipboard = Autorip from Clipboard +save.descriptions = Save descriptions +prefer.mp4.over.gif = Prefer MP4 over GIF +restore.window.position = Restore window position +remember.url.history = Remember URL history +loading.history.from = Loading history from + +# Queue keys +queue.remove.all = Remove All +queue.validation = Are you sure you want to remove all elements from the queue? +queue.remove.selected = Remove Selected + +# History +re-rip.checked = Re-rip Checked +remove = Remove +clear = Clear +history.check.all = Check All +history.check.none = Check None +history.check.selected = Check Selected +history.uncheck.selected = Uncheck Selected +history.load.failed.warning = RipMe failed to load the history file at historyFile.getAbsolutePath() \n\nError: %s\n\nClosing RipMe will automatically overwrite the contents of this file,\nso you may want to back the file up before closing RipMe! +history.load.none = There are no history entries to re-rip. Rip some albums first +history.load.none.checked = No history entries have been 'Checked' Check an entry by clicking the checkbox to the right of the URL or Right-click a URL to check/uncheck all items + +# TrayIcon +tray.show = Show +tray.hide = Hide +tray.autorip = Clipboard Autorip +tray.exit = Exit + +# Misc UI keys +loading.history.from.configuration = Loading history from configuration +interrupted.while.waiting.to.rip.next.album = Interrupted while waiting to rip next album +inactive = Inactive +download.url.list = Download url list +select.save.dir = Select Save Directory + +# Keys for the logs generated by DownloadFileThread +nonretriable.status.code = Non-retriable status code +retriable.status.code = Retriable status code +server.doesnt.support.resuming.downloads = Server doesn't support resuming downloads +# A "magic number" can also be called a file signature +was.unable.to.get.content.type.using.magic.number = Was unable to get content type using magic number +magic.number.was = Magic number was +deleting.existing.file = Deleting existing file +request.properties = Request properties +download.interrupted = Download interrupted +exceeded.maximum.retries = Exceeded maximum retries +http.status.exception = HTTP status exception +exception.while.downloading.file = Exception while downloading file +failed.to.download = Failed to download +skipping = Skipping +file.already.exists = file already exists \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_ar_AR.properties b/out/production/resources/LabelsBundle_ar_AR.properties new file mode 100644 index 000000000..3ec2ca731 --- /dev/null +++ b/out/production/resources/LabelsBundle_ar_AR.properties @@ -0,0 +1,57 @@ +Log = \u0645\u0644\u0641 \u0627\u0644\u062A\u062A\u0628\u0639 +History = \u0630\u0627\u0643\u0631\u0629 \u0627\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645 +created = \u0627\u0644\u0627\u0646\u0634\u0627\u0621 +modified = \u062A\u0645 \u0627\u0644\u062A\u0639\u062F\u064A\u0644 +queue = \u0637\u0627\u0628\u0648\u0631 +Configuration = \u062A\u0631\u062A\u064A\u0628 + +# Keys for the Configuration menu + +current.version = \u0627\u0644\u0646\u0633\u062E\u0629 \u0627\u0644\u062D\u0627\u0644\u064A\u0629 +check.for.updates = \u0627\u0644\u0628\u062D\u062B \u0639\u0646 \u062A\u062D\u062F\u064A\u062B +auto.update = \u062A\u062D\u062F\u064A\u062B \u062A\u0644\u0642\u0627\u0626\u0649 +max.download.threads = \u0627\u0642\u0635\u0649 \u0639\u062F\u062F \u0644\u0644\u062A\u062D\u0645\u064A\u0644 +timeout.mill = \u0645\u0637\u062D\u0646\u0629 \u0627\u0644\u0645\u0647\u0644\u0629 +retry.download.count = \u0639\u062F\u062F \u0645\u0631\u0627\u062A \u0645\u062D\u0627\u0648\u0644\u0629 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 +overwrite.existing.files = \u0623\u0639\u0627\u062F\u0629 \u0643\u062A\u0627\u0628\u0629 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0642\u062F\u064A\u0645\u0629 +sound.when.rip.completes = \u0635\u0648\u062A \u0639\u0646\u062F \u0627\u0646\u062A\u0647\u0627\u0621 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 +preserve.order = \u062D\u0641\u0638 \u0627\u0644\u062A\u0631\u062A\u064A\u0628 +save.logs = \u062D\u0641\u0638 \u0645\u0644\u0641\u0627\u062A \u0627\u0644\u062A\u062A\u0628\u0639 +notification.when.rip.starts = \u0627\u0634\u0639\u0627\u0631 \u0639\u0646\u062F \u0627\u0644\u0628\u062F\u0621 +save.urls.only = \u062D\u0641\u0638 \u0627\u0644\u0645\u0633\u0627\u0631\u0627\u062A \u0641\u0642\u0637 +save.album.titles = \u062D\u0641\u0638 \u0639\u0646\u0627\u0648\u064A\u0646 \u0627\u0644\u0627\u0644\u0628\u0648\u0645\u0627\u062A +autorip.from.clipboard = autorip.from.clipboard +save.descriptions = \u062D\u0641\u0638 \u0627\u0644\u062A\u0641\u0627\u0635\u064A\u0644 +prefer.mp4.over.gif = Prefer MP4 over GIF +restore.window.position = \u0627\u0639\u0627\u062F\u0647 \u0645\u0648\u0636\u0639 \u0627\u0644\u0646\u0627\u0641\u0630\u0629 +remember.url.history = \u062A\u0630\u0643\u0631 \u0627\u0644\u0639\u0646\u0627\u0648\u064A\u0646 +loading.history.from = \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0630\u0627\u0643\u0631\u0629 \u0645\u0646 + +# Misc UI keys + +loading.history.from.configuration = \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0630\u0627\u0643\u0631\u0629 \u0645\u0646 \u0627\u0644\u062A\u0631\u062A\u064A\u0628\u0627\u062A +interrupted.while.waiting.to.rip.next.album = \u0627\u064A\u0642\u0627\u0641 \u0627\u0646\u062A\u0638\u0627\u0631 \u0627\u0644\u0627\u0644\u0628\u0648\u0645\u0627\u062A \u0627\u0644\u0642\u0627\u062F\u0645\u0629 +inactive = \u063A\u064A\u0631 \u0646\u0634\u0637 +re-rip.checked = \u0627\u0639\u0627\u062F\u0647 +remove = \u0645\u0633\u062D +clear = \u0645\u0633\u062D +download.url.list = \u062A\u0646\u0632\u064A\u0644 \u062C\u0645\u064A\u0639 \u0627\u0644\u0639\u0646\u0627\u0648\u064A\u0646 +select.save.dir = \u0627\u062E\u062A\u0627\u0631 \u0645\u0633\u0627\u0631 \u0627\u0644\u062D\u0641\u0638 + +# Keys for the logs generated by DownloadFileThread + +nonretriable.status.code = Nonretriable status code +retriable.status.code = Retriable status code +server.doesnt.support.resuming.downloads = Server doesnt support resuming downloads +# A "magic number" can also be called a file signature +was.unable.to.get.content.type.using.magic.number = Was unable to get content type using magic number +magic.number.was = Magic number was +deleting.existing.file = \u0645\u0633\u062D \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0645\u0648\u062C\u0648\u062F\u0629 +request.properties = \u062E\u0635\u0627\u0626\u0635 \u0627\u0644\u0637\u0644\u0628 +download.interrupted = \u0623\u064A\u0642\u0627\u0641 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 +exceeded.maximum.retries = \u0623\u0642\u0635\u0649 \u0639\u062F\u062F \u0645\u0631\u0627\u062A \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629 +http.status.exception = HTTP Exception +exception.while.downloading.file = \u0641\u0634\u0644 \u0627\u062B\u0646\u0627\u0621 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0644\u0641 +failed.to.download = \u0641\u0634\u0644 \u0641\u0649 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 +skipping = \u0645\u062A\u0627\u0628\u0639\u0629 +file.already.exists = \u0627\u0644\u0645\u0644\u0641 \u0645\u0648\u062C\u0648\u062F \u0628\u0627\u0644\u0641\u0639\u0644 diff --git a/out/production/resources/LabelsBundle_de_DE.properties b/out/production/resources/LabelsBundle_de_DE.properties new file mode 100644 index 000000000..9e7675669 --- /dev/null +++ b/out/production/resources/LabelsBundle_de_DE.properties @@ -0,0 +1,57 @@ +Log = Log +History = Verlauf +created = erstellt +modified = geändert +queue = Queue +Configuration = Konfiguration + +# Keys for the Configuration menu + +current.version = Aktuelle Version +check.for.updates = Suche nach Aktualisierungen +auto.update = Automatisch Aktualisieren? +max.download.threads = Maximale Download-Threads +timeout.mill = Timeout (in Milliseconds): +retry.download.count = Anzahl der Downloadversuche +overwrite.existing.files = Überschreibe bereits existierende Dateien? +sound.when.rip.completes = Ton abspielen bei fertigem Download +preserve.order = Reihenfolge beibehalten +save.logs = Speichere Logs +notification.when.rip.starts = Benachrichtigung wenn Download startet +save.urls.only = Speicher nur URLs +save.album.titles = Speichere Albumtitels +autorip.from.clipboard = Automatisch Downloaden von der Zwischenablage +save.descriptions = Speichere Beschreibungen +prefer.mp4.over.gif = Bevorzuge MP4 über GIF +restore.window.position = Wieder herstellen der Fensterposition +remember.url.history = Speichere URL Verlauf +loading.history.from = Lade Verlauf von + +# Misc UI keys + +loading.history.from.configuration = Lade Verlauf aus Konfiguration +interrupted.while.waiting.to.rip.next.album = Unterbrochen während Download des nächsten Albums +inactive = Inaktiv +re-rip.checked = Re-rip Ausgewählte +remove = Entfernen +clear = Leeren +download.url.list = Download URL Liste +select.save.dir = Wähle Zielverzeichnis + +# Keys for the logs generated by DownloadFileThread + +nonretriable.status.code = Non-retriable status code +retriable.status.code = Retriable status code +server.doesnt.support.resuming.downloads = Server doesn't support resuming downloads +# A "magic number" can also be called a file signature +was.unable.to.get.content.type.using.magic.number = Was unable to get content type using magic number +magic.number.was = Magic number was +deleting.existing.file = Deleting existing file +request.properties = Request properties +download.interrupted = Download interrupted +exceeded.maximum.retries = Exceeded maximum retries +http.status.exception = HTTP status exception +exception.while.downloading.file = Exception while downloading file +failed.to.download = Failed to download +skipping = Skipping +file.already.exists = file already exists diff --git a/out/production/resources/LabelsBundle_el_GR.properties b/out/production/resources/LabelsBundle_el_GR.properties new file mode 100644 index 000000000..573e76e68 --- /dev/null +++ b/out/production/resources/LabelsBundle_el_GR.properties @@ -0,0 +1,75 @@ +Log = Log +History = Ιστορικό +created = δημιουργήθηκε +modified = τροποποιήθηκε +queue = Ουρά +Configuration = Ρυθμίσεις +open = Άνοιγμα + +# Keys for the Configuration menu +current.version = Τρέχουσα έκδοση +check.for.updates = Έλεγχος για ενημερώσεις +auto.update = Αυτόματη ενημέρωση? +max.download.threads = Μέγιστος αριθμός παράλληλων συνδέσεων: +timeout.mill = Λήξη (σε χιλιοστά του δευτερολέπτου): +retry.download.count = Αριθμός επανάληψεων μεταφόρτωσης +overwrite.existing.files = Να αντικατασταθούν τα υπάρχοντα αρχεία? +sound.when.rip.completes = Ήχος όταν το rip ολοκληρωθεί +preserve.order = Διατήρηση σειράς +save.logs = Αποθήκευση logs +notification.when.rip.starts = Ειδοποίηση όταν αρχισει το rip +save.urls.only = Αποθήκευση μόνο των URL +save.album.titles = Αποθήκευση τίτλων των αλμπουμ +autorip.from.clipboard = Αυτόματο rip-άρισμα απο το πρόχειρο (clipboard) +save.descriptions = Αποθήκευση περιγραφής +prefer.mp4.over.gif = Προτίμηση MP4 απο GIF +restore.window.position = Επαναφορά θέσης παραθύρου +remember.url.history = Να θυμάμαι ιστορικο απο URL +loading.history.from = Φόρτωση ιστορικού από + +# Queue keys +queue.remove.all = Διαγραφή όλων +queue.validation = Είσαι σίγουρος οτι θέλεις να διαγράφουν όλα τα στοιχεια της ουράς? +queue.remove.selected = Διαγραφή επιλεγμένου + +# History +re-rip.checked = Re-rip Τσεκαρισμένο +remove = Διαγραφή +clear = Καθάρισμα +history.check.all = Επιλογή όλων +history.check.none = Επιλογή κανενός +history.check.selected = Επιλογή επιλεγμένου +history.uncheck.selected = απο-επιλογή επιλεγμένου +history.load.failed.warning = Το RipMe απέτυχε να φορτώσει το αρχείο ιστορικού απο historyFile.getAbsolutePath() \n\nΛάθος %s\n\n Κλέισιμο του RipMe, θα επιφέρει αυτοματη αντικατάσταση των περιεχόμενων αυτού του αρχείου,\nάρα ίσως θα ήταν καλή ιδέα να πάρεις ένα αντίγραφο ασφαλείας πρίν κλέισεις το RipMe! +history.load.none = Δεν υπάρχουν ιστορικές εγγραφές για να ξαναripάρω. Rip-αρε καποια αλμπουμς πρώτα +history.load.none.checked = Δεν έχει τσεκαριστεί καμια ιστορική εγγραφή. Τσέκαρε μια εγγραφή κλικάροντας το checkbox στα αριστερλα του URL, ή πάτα δεξί κλίκ σε ένα URL για να επιλέξεις/αποεπιλέξεις ολα τα στοιχεία + +# TrayIcon +tray.show = Εμφάνιση +tray.hide = Απόκρυψη +tray.autorip = Αυτόματο rip του προχειρου(clipboard) +tray.exit = Έξοδος + +# Misc UI keys +loading.history.from.configuration = Φόρτωση ιστορικού απο τίς ρυθμίσεις +interrupted.while.waiting.to.rip.next.album = Διεκόπη ενω ήμουν σε αναμονή για να ripάρω το επόμενο άλμπουμ +inactive = Αδρανής +download.url.list = Μεταφόρτωση λίστας URL +select.save.dir = Επιλογή τοποθεσίας απθήκευσης + +# Keys for the logs generated by DownloadFileThread +nonretriable.status.code = Non-retriable status code +retriable.status.code = Retriable status code +server.doesnt.support.resuming.downloads = Ο διακομιστής δεν υποστηρίζει συνέχιση της μεταφόρτωσης +# A "magic number" can also be called a file signature +was.unable.to.get.content.type.using.magic.number = Δεν ευρέθη ο τύπος του αρχείου χρησιμοποιώντας τον μαγικό αριθμό +magic.number.was = Ο μαγικός αριθμός ήταν +deleting.existing.file = Διαγραφή υπάρχοντος αρχείου +request.properties = Ιδιότητες της αίτησης +download.interrupted = Η μεταφόρτωση διεκόπη +exceeded.maximum.retries = Υπέρβαση του μέγιστου αριθμου προσπαθειών +http.status.exception = HTTP status λάθος +exception.while.downloading.file = Λάθος ενω μεταφορτώνοταν ενα αρχειο +failed.to.download = Αποτυχία μεταφόρτωσης +skipping = Παράκαμψη +file.already.exists = το αρχείο υπάρχει ήδη \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_en_US.properties b/out/production/resources/LabelsBundle_en_US.properties new file mode 100644 index 000000000..7eb1fb85a --- /dev/null +++ b/out/production/resources/LabelsBundle_en_US.properties @@ -0,0 +1 @@ +# This need to be empty since EN is the default language in the bundles \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_es_ES.properties b/out/production/resources/LabelsBundle_es_ES.properties new file mode 100644 index 000000000..fea84e5d5 --- /dev/null +++ b/out/production/resources/LabelsBundle_es_ES.properties @@ -0,0 +1,76 @@ +Log = Log +History = Historia +created = creado +modified = modificado +queue = Cola +Configuration = Configuracion +open = Abrir + +# Keys for the Configuration menu +current.version = Version Actual +check.for.updates = Buscar actualizaciones +auto.update = Actualizar automáticamente? +max.download.threads = Número de descargas simultáneas: +timeout.mill = Tiempo máximo de espera (milisegundos): +retry.download.count = Número de reintentos de descarga: +retry.sleep.mill = Espera entre reintentos (milisegundos): +overwrite.existing.files = Sobreescribir archivos existentes? +sound.when.rip.completes = Notificar cuando el rip termina +preserve.order = Mantener el orden +save.logs = Guardar logs +notification.when.rip.starts = Notificar cuando el rip comienza +save.urls.only = Guardar solamente URLs +save.album.titles = Guardar títulos de álbumes +autorip.from.clipboard = Autorip desde el portapapeles +save.descriptions = Guardar descripciones +prefer.mp4.over.gif = Preferir MP4 sobre GIF +restore.window.position = Restaurar posicion de la ventana +remember.url.history = Recordar historia URL +loading.history.from = Cargando historia desde + +# Queue keys +queue.remove.all = Eliminar todos los elementos +queue.validation = ¿Está seguro que desea eliminar todos los elementos de la lista? +queue.remove.selected = Eliminar elementos seleccionados + +# History +re-rip.checked = Re-rip Marcados +remove = Remover +clear = Limpiar +history.check.all = Marcar Todos +history.check.none = Desmarcar Todos +history.check.selected = Marcar Seleccionados +history.uncheck.selected = Desmarcar Seleccionados +history.load.failed.warning = RipMe falló al cargar la historia de historyFile.getAbsolutePath() \n\nError: %s\n\nSi cierras RipMe los contenidos de este archivo se sobreescribirán,\nhaz un backup antes de cerrar RipMe! +history.load.none = El historial está vacío. Ripea algunos álbumes primero +history.load.none.checked = Ninguna entrada del historial fue 'marcada'. Selecciona una entrada clickeando la casilla a la derecha de la URL o haz click derecho sobre una URL para marcar/desmarcar todas las entradas. + +# TrayIcon +tray.show = Mostrar +tray.hide = Esconder +tray.autorip = Autorip desde el portapapeles +tray.exit = Salida + +# Misc UI keys +loading.history.from.configuration = Cargando historia desde la configuración +interrupted.while.waiting.to.rip.next.album = Interrumpido esperando el rip del próximo álbum +inactive = Inactivo +download.url.list = Lista de URLs a descargar +select.save.dir = Seleccione el directorio de guardado + +# Keys for the logs generated by DownloadFileThread +nonretriable.status.code = Código de estado no recuperable +retriable.status.code = Código de estado recuperable +server.doesnt.support.resuming.downloads = El servidor no soporta resumir las descargas +# A "magic number" can also be called a file signature +was.unable.to.get.content.type.using.magic.number = Imposible obtener el tipo de contenido utilizando el número mágico +magic.number.was = El número mágico era +deleting.existing.file = Eliminando el archivo existente +request.properties = Propiedades del pedido +download.interrupted = Descarga interrumpida +exceeded.maximum.retries = Máximo número de reintentos excedido +http.status.exception = Error de estado HTTP +exception.while.downloading.file = Error al descargar archivo +failed.to.download = Descarga fallida +skipping = Saltando +file.already.exists = el fichero ya existe \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_fi_FI.properties b/out/production/resources/LabelsBundle_fi_FI.properties new file mode 100644 index 000000000..6edd4e45f --- /dev/null +++ b/out/production/resources/LabelsBundle_fi_FI.properties @@ -0,0 +1,57 @@ +Log = Logi +History = Historia +created = luotu +modified = muokattu +queue = Jono +Configuration = Asetukset + +# Keys for the Configuration menu + +current.version = Nykyinen versio +check.for.updates = Tarkista päivitykset +auto.update = Automaattipäivitys? +max.download.threads = Yhtäaikaiset lataukset +timeout.mill = Aikakatkaisu (millisekunneissa): +retry.download.count = Latauksen uudelleenyritykset +overwrite.existing.files = Korvaa nykyiset tiedostot? +sound.when.rip.completes = Valmistumisääni +preserve.order = Pidä järjestys +save.logs = Tallenna logit +notification.when.rip.starts = Valmistumisilmoitus +save.urls.only = Tallenna vain osoitteet +save.album.titles = Tallenna albumiotsikot +autorip.from.clipboard = Ota linkit leikepöydältä +save.descriptions = Tallenna kuvaukset +prefer.mp4.over.gif = Suosi MP4:jää GIF:fin sijasta +restore.window.position = Palauta ikkunan sijainti +remember.url.history = Muista osoitehistoria +loading.history.from = Ladataan historiaa kohteesta + +# Misc UI keys + +loading.history.from.configuration = Ladataan historiaa asetustiedostosta +interrupted.while.waiting.to.rip.next.album = Keskeytetty odottaessa seuraavaa albumia +inactive = Toimeton +re-rip.checked = Uudelleenlataa merkatut +remove = Poista +clear = Tyhjennä +download.url.list = Download url list +select.save.dir = Valitse tallennuskansio + +# Keys for the logs generated by DownloadFileThread + +nonretriable.status.code = Uudelleenyrityskelvoton tilakoodi +retriable.status.code = Uudelleenyritettävä tilakoodi +server.doesnt.support.resuming.downloads = Serveri ei tue latausten uudelleen jatkamista +# A "magic number" can also be called a file signature +was.unable.to.get.content.type.using.magic.number = Sisältötyyppiä ei pystytty taikanumerolla selvittämään +magic.number.was = Taikanumero on +deleting.existing.file = Poistetaan nykyinen tiedosto +request.properties = Pyyntöominaisuudet +download.interrupted = Lataus keskeytetty +exceeded.maximum.retries = Max-uudelleenyritykset saavutettu +http.status.exception = HTTP-tilapoikkeus +exception.while.downloading.file = Poikkeus ladattaessa tiedostoa +failed.to.download = Lataaminen epäonnistui +skipping = Ohitetaan +file.already.exists = tiedosto on jo olemassa \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_fr_CH.properties b/out/production/resources/LabelsBundle_fr_CH.properties new file mode 100644 index 000000000..b489e3e3a --- /dev/null +++ b/out/production/resources/LabelsBundle_fr_CH.properties @@ -0,0 +1,57 @@ +Log = Journal +History = Historique +created = créé le +modified = modifié le +queue = File d'attente +Configuration = Configuration + +# Keys for the Configuration menu + +current.version = Version actuelle +check.for.updates = Vérifier mises à jour +auto.update = Mises à jour automatiques? +max.download.threads = Nombre de téléchargements parallèles maximum +timeout.mill = Délai d'expiration (en millisecondes): +retry.download.count = Nombre d'essais téléchargement +overwrite.existing.files = Remplacer fichiers existants ? +sound.when.rip.completes = Son lorsque le rip est terminé +preserve.order = Conserver l'ordre +save.logs = Enregistrer journaux +notification.when.rip.starts = Notification lorsqu'un rip commence +save.urls.only = Enregistrer URL uniquement +save.album.titles = Enregistrer titres d'album +autorip.from.clipboard = Autorip depuis presse-papier +save.descriptions = Enregistrer descriptions +prefer.mp4.over.gif = Préférer MP4 à GIF +restore.window.position = Restaurer la position de la fenêtre +remember.url.history = Se souvenir de l'historique des URL +loading.history.from = Charger l'historique depuis + +# Misc UI keys + +loading.history.from.configuration = Charger l'historique depuis la configuration +interrupted.while.waiting.to.rip.next.album = Interrompu lors de l'attente pour ripper le prochain album +inactive = Inactif +re-rip.checked = Re-rip vérifié +remove = Enlever +clear = Effacer +download.url.list = Télécharger la liste d'URL +select.save.dir = Sélectionner répertoire de sauvegarde + +# Keys for the logs generated by DownloadFileThread + +nonretriable.status.code = Code statut non-réessayable +retriable.status.code = Code statut réessayable +server.doesnt.support.resuming.downloads = Le serveur ne supporte pas la reprise de téléchargements +# A "magic number" can also be called a file signature +was.unable.to.get.content.type.using.magic.number = A été incapable de récupérer le type de contenu en utilisant le Magic Number +magic.number.was = Le Magic Number était +deleting.existing.file = Suppression du fichier existant +request.properties = Demande des propriétés +download.interrupted = Téléchargement interrompu +exceeded.maximum.retries = Nombre maximal de tentatives dépassé +http.status.exception = Exception de statut HTTP +exception.while.downloading.file = Exception lors du téléchargement d'un fichier +failed.to.download = Échec du téléchargement +skipping = Sauter +file.already.exists = fichier existe déjà \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_in_ID.properties b/out/production/resources/LabelsBundle_in_ID.properties new file mode 100644 index 000000000..b5e773d5b --- /dev/null +++ b/out/production/resources/LabelsBundle_in_ID.properties @@ -0,0 +1,59 @@ +Log = Log +History = Riwayat +created = dibuat pada +modified = diubah pada +queue = Antrian +Configuration = Pengaturan + +# Keys for the Configuration menu + +current.version = Versi saat ini +check.for.updates = Periksa update +auto.update = Update otomatis? +max.download.threads = Thread unduh maksimal +timeout.mill = Batas waktu (dalam milidetik): +retry.download.count = Jumlah percobaan unduh +overwrite.existing.files = Timpa file yang ada? +sound.when.rip.completes = Hidupkan suara saat rip selesai +preserve.order = Pertahankan urutan +save.logs = Simpan log +notification.when.rip.starts = Pemberitahuan saat rip dimulai +save.urls.only = Simpan URL saja +save.album.titles = Simpan judul album +autorip.from.clipboard = Rip otomatis dari clipboard +save.descriptions = Simpan deskripsi +prefer.mp4.over.gif = Utamakan MP4 dari GIF +restore.window.position = Kembalikan ukuran Window +remember.url.history = Ingat riwayat URL +loading.history.from = Ambil riwayat dari + +# Misc UI keys + +loading.history.from.configuration = Ambil riwayat dari pengaturan +interrupted.while.waiting.to.rip.next.album = Terputus saat menunggu rip album selanjutnya +inactive = Tidak aktif +re-rip.checked = Rip Ulang +remove = Hapus +clear = Hapus Semua +download.url.list = Unduh daftar url +select.save.dir = Pilih Tempat Penyimpanan + +# Keys for the logs generated by DownloadFileThread + +nonretriable.status.code = Kode status tidak dapat diulang +retriable.status.code = Kode status dapat diulang +server.doesnt.support.resuming.downloads = Server tidak punya fitur melanjutkan unduhan + +# A "magic number" can also be called a file signature + +was.unable.to.get.content.type.using.magic.number = Tidak dapat mengetahui tipe file menggunakan magic number +magic.number.was = Magic number nya +deleting.existing.file = Menghapus file yang sudah ada +request.properties = Membutuhkan data properties +download.interrupted = Unduhan terputus +exceeded.maximum.retries = Mencapai percobaan maksimum +http.status.exception = Pengecualian status HTTP +exception.while.downloading.file = Pengecualian saat mengunduh file +failed.to.download = Gagal mengunduh +skipping = Melewatkan +file.already.exists = file sudah ada \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_it_IT.properties b/out/production/resources/LabelsBundle_it_IT.properties new file mode 100644 index 000000000..de00612b7 --- /dev/null +++ b/out/production/resources/LabelsBundle_it_IT.properties @@ -0,0 +1,57 @@ +Log = Log +History = Cronologia +created = creato +modified = modificato +queue = Coda +Configuration = Configurazione + +# Keys for the Configuration menu + +current.version = Versione corrente +check.for.updates = Controlla aggiornamenti +auto.update = Aggiornamento automatico? +max.download.threads = Thread di download massimi: +timeout.mill = Timeout (in millisecondi): +retry.download.count = Tentativi di download +overwrite.existing.files = Sovrascrivi file esistenti? +sound.when.rip.completes = Suono al completamento del rip +preserve.order = Preserva ordine +save.logs = Salva log +notification.when.rip.starts = Notifica quando inizia il rip +save.urls.only = Salva solo gli URL +save.album.titles = Salva titoli album +autorip.from.clipboard = Autorip da appunti +save.descriptions = Salva descrizioni +prefer.mp4.over.gif = Preferisci MP4 a GIF +restore.window.position = Ripristina posizione della finestra +remember.url.history = Ricorda la cronologia degli URL +loading.history.from = Carica cronologia da + +# Misc UI keys + +loading.history.from.configuration = Caricamento cronologia da configurazione +interrupted.while.waiting.to.rip.next.album = Interrotto mentre attendevo il rip dell'album successivo +inactive = Inattivo +re-rip.checked = Re-rip selezionato +remove = Rimuovi +clear = Pulisci +download.url.list = Download lista degli url +select.save.dir = Seleziona cartella salvataggio + +# Keys for the logs generated by DownloadFileThread + +nonretriable.status.code = Codice di stato irreversibile +retriable.status.code = Codice di stato reversibile +server.doesnt.support.resuming.downloads = Il server non supporta la ripresa dei download +# A "magic number" can also be called a file signature +was.unable.to.get.content.type.using.magic.number = Non � stato possibile ottenere il tipo del contenuto usando magic number +magic.number.was = Magic number era +deleting.existing.file = Cancellazione file esistente +request.properties = Richiesta propriet� +download.interrupted = Download interrotto +exceeded.maximum.retries = Superato il numero massimo di tentativi +http.status.exception = Eccezione stato HTTP +exception.while.downloading.file = Eccezione durante il download del file +failed.to.download = Download non riuscito +skipping = Saltare +file.already.exists = il file esiste gi� \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_kr_KR.properties b/out/production/resources/LabelsBundle_kr_KR.properties new file mode 100644 index 000000000..e01100552 --- /dev/null +++ b/out/production/resources/LabelsBundle_kr_KR.properties @@ -0,0 +1,57 @@ +Log = \uB85C\uADF8 +History = \uD788\uC2A4\uD1A0\uB9AC +created = \uC0DD\uC0B0\uB428 +modified = \uC218\uC815\uB428 +queue = \uB300\uAE30\uC5F4 +Configuration = \uAD6C\uC131 + +# Keys for the Configuration menu + +current.version = \uD604\uC7AC \uBC84\uC804 +check.for.updates = \uC5C5\uB370\uC774\uD2B8 \uD655\uC778 +auto.update = \uC790\uB3D9 \uC5C5\uB370\uC774\uD2B8 +max.download.threads = \uCD5C\uB300 \uB2E4\uC6B4\uB85C\uB4DC \uC4F0\uB808\uB4DC \uC218 +timeout.mill = \uC2DC\uAC04 \uC81C\uD55C (\uBC00\uB9AC\uCD08): +retry.download.count = \uB2E4\uC6B4\uB85C\uB4DC \uC7AC\uC2DC\uB3C4 \uD68C\uC218 +overwrite.existing.files = \uC911\uBCF5\uD30C\uC77C \uB36E\uC5B4\uC4F0\uAE30 +sound.when.rip.completes = \uC644\uB8CC\uC2DC \uC54C\uB9BC +preserve.order = \uBA85\uB839 \uAE30\uC5B5\uD558\uAE30 +save.logs = \uB85C\uADF8 \uC800\uC7A5 +notification.when.rip.starts = \uC2DC\uC791\uC2DC \uC54C\uB9BC +save.urls.only = URL\uB9CC \uC800\uC7A5\uD558\uAE30 +save.album.titles = \uC568\uBC94 \uC81C\uBAA9 \uC800\uC7A5 +autorip.from.clipboard = \uD074\uB9BD\uBCF4\uB4DC\uC5D0\uC11C \uC790\uB3D9\uC73C\uB85C \uAC00\uC838\uC624\uAE30 +save.descriptions = \uC568\uBC94 \uC124\uBA85 \uC800\uC7A5 +prefer.mp4.over.gif = GIF\uBCF4\uB2E4 MP4 \uC120\uD638 +restore.window.position = \uCC3D \uC704\uCE58 \uBCF5\uC6D0 +remember.url.history = URL \uD788\uC2A4\uD1A0\uB9AC \uAE30\uC5B5\uD558\uAE30 +loading.history.from = \uD788\uC2A4\uD1A0\uB9AC \uAC00\uC838\uC624\uAE30 + +# Misc UI keys + +loading.history.from.configuration = \uAD6C\uC131\uC5D0\uC11C \uD788\uC2A4\uD1A0\uB9AC \uBD88\uB7EC\uC624\uAE30 +interrupted.while.waiting.to.rip.next.album = \uB2E4\uC74C \uC568\uBC94 \uBCF5\uC0AC\uB97C \uAE30\uB2E4\uB9AC\uB294\uB3D9\uC548 \uC911\uB2E8\uB428 +inactive = \uBE44\uD65C\uC131\uD654 +re-rip.checked = \uB2E4\uC2DC \uBCF5\uC0AC\uD558\uAE30 \uCCB4\uD06C\uB428 +remove = \uC120\uD0DD\uD55C \uAE30\uB85D \uC0AD\uC81C +clear = \uD788\uC2A4\uD1A0\uB9AC \uBAA8\uB450 \uC0AD\uC81C +download.url.list = URL \ubAA9\uB85D\uC744 \uB2E4\uC6B4\uB85C\uB4DC\uD558\uAE30 +select.save.dir = \uC800\uC7A5\uC744 \uB514\uB809\uD1A0\uB9AC \uC120\uD0DD\uD558\uAE30 + +# Keys for the logs generated by DownloadFileThread + +nonretriable.status.code = \uBCF5\uAD6C\uD560 \uC218 \uC5C6\uB294 \uC0C1\uD0DC \uCF54\uB4DC +retriable.status.code = \uBCF5\uAD6C\uD560 \uC218 \uC788\uB294 \uC0C1\uD0DC \uCF54\uB4DC +server.doesnt.support.resuming.downloads = \uC11C\uBC84 \uB2E4\uC6B4\uB85C\uB4DC \uC7AC\uAC1C\uB97C \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB2E4 +# A "magic number" can also be called a file signature +was.unable.to.get.content.type.using.magic.number = \uC2DC\uADF8\uB108\uCC98 \uD30C\uC77C \uC0AC\uC6A9\uD558\uC5EC \uB0B4\uC6A9 \uC720\uD615\uC744 \uAC00\uC838\uC62C \uC218 \uC5C6\uAE30 +magic.number.was = \uC2DC\uADF8\uB108\uCC98 \uD30C\uC77C \uC774\uAC70\uC600\uC2B5\uB2C8\uB2E4 +deleting.existing.file = \uAE30\uC874 \uD30C\uC77C\uC744 \uC0AD\uC81C\uD558\uB294 \uC911\uC785\uB2C8\uB2E4 +request.properties = \uC18D\uC131\uC744 \uC694\uCCAD\uD558\uAE30 +download.interrupted = \uB2E4\uC6B4\uB85C\uB4DC\uAC00 \uC911\uB2E8\uB418\uC5C8\uC2B5\uB2C8\uB2E4 +exceeded.maximum.retries = \uCD5C\uB300 \uC7AC\uC2DC\uB3C4 \uD69F\uC218\uB97C \uCD08\uACFC\uD588\uC2B5\uB2C8\uB2E4 +http.status.exception = HTTP \uC0C1\uD0DC \uC608\uC678\uB97C +exception.while.downloading.file = \uD30C\uC77C\uC744 \uB2E4\uC6B4\uB85C\uB4DC\uD558\uB294 \uB3D9\uC548 \uC608\uC678\uAC00 \uBC1C\uC0DD\uD558\uAE30 +failed.to.download = \uB2E4\uC6B4\uB85C\uB4DC\uD558\uC9C0 \uBABB\uD558\uAE30 +skipping = \uAC74\uB108\uB6F0\uACE0 \uC788\uC2B5\uB2C8\uB2E4 +file.already.exists = \uD30C\uC77C\uC774 \uC774\uBBF8 \uC788\uC2B5\uB2C8\uB2E4 \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_nl_NL.properties b/out/production/resources/LabelsBundle_nl_NL.properties new file mode 100644 index 000000000..e1d9d61c3 --- /dev/null +++ b/out/production/resources/LabelsBundle_nl_NL.properties @@ -0,0 +1,57 @@ +Log = Logboek +History = Geschiedenis +created = gemaakt +modified = aangepast +queue = Wachtrij +Configuration = Configuratie + +# Keys for the Configuration menu + +current.version = Huidige versie +check.for.updates = Controleer op updates +auto.update = Auto-update? +max.download.threads = Maximale downloadthreads +timeout.mill = Timeout (in milliseconden): +retry.download.count = Aantal keren opnieuw proberen te downloaden +overwrite.existing.files = Bestaande bestanden overschrijven? +sound.when.rip.completes = Geluid wanneer rip klaar is +preserve.order = Volgorde behouden +save.logs = Logbestanden opslaan +notification.when.rip.starts = Notificatie wanneer rip start +save.urls.only = Alleen URLs opslaan +save.album.titles = Album titels opslaan +autorip.from.clipboard = Rip automatisch van klembord +save.descriptions = Beschrijvingen opslaan +prefer.mp4.over.gif = Geef de voorkeur aan MP4 over GIF +restore.window.position = Vensterpositie herstellen +remember.url.history = URL geschiedenis onthouden +loading.history.from = Geschiedenis laden van + +# Misc UI keys + +loading.history.from.configuration = Geschiedenis laden van configuratie +interrupted.while.waiting.to.rip.next.album = Onderbroken tijdens het wachten om volgend album te rippen +inactive = Inactief +re-rip.checked = Re-rip Gecheckt +remove = Verwijderen +clear = Opruimen +download.url.list = Download url list +select.save.dir = Select Save Directory + +# Keys for the logs generated by DownloadFileThread + +nonretriable.status.code = Non-retriable status code +retriable.status.code = Retriable status code +server.doesnt.support.resuming.downloads = Server doesn't support resuming downloads +# A "magic number" can also be called a file signature +was.unable.to.get.content.type.using.magic.number = Was unable to get content type using magic number +magic.number.was = Magic number was +deleting.existing.file = Deleting existing file +request.properties = Request properties +download.interrupted = Download interrupted +exceeded.maximum.retries = Exceeded maximum retries +http.status.exception = HTTP status exception +exception.while.downloading.file = Exception while downloading file +failed.to.download = Failed to download +skipping = Skipping +file.already.exists = file already exists \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_pl_PL.properties b/out/production/resources/LabelsBundle_pl_PL.properties new file mode 100644 index 000000000..dbb74ef1f --- /dev/null +++ b/out/production/resources/LabelsBundle_pl_PL.properties @@ -0,0 +1,59 @@ +Log = Logi +History = Historia +created = Stworzono +modified = Zmodyfikowano +queue = Kolejka +Configuration = Konfiguracja + +# Keys for the Configuration menu + +current.version = Obecna Wersja +check.for.updates = Sprawdź dostępność aktualizacji +auto.update = Auto Aktualizacja? +max.download.threads = Maksymalna Ilośc Pobieranych Plików: +timeout.mill = Opóźnienie (w milisekundach): +retry.download.count = Liczba ponownych pobrań +overwrite.existing.files = Nadpisać istniejące pliki? +sound.when.rip.completes = Dźwięk po zakończeniu +preserve.order = Zachować porządek +save.logs = Zapisz Logi +notification.when.rip.starts = Powiadomienie przy uruchomieniu pobierania +save.urls.only = Zapisz tylko linki +save.album.titles = Zapisz nazwy albumów +autorip.from.clipboard = Auto pobieranie ze schowka +save.descriptions = Zapisz opis +prefer.mp4.over.gif = Preferuj MP4 od GIF +restore.window.position = Przywróć pozycję okna +remember.url.history = Zapamiętaj historię linków +loading.history.from = Załaduj historię z... + +# Misc UI keys + +loading.history.from.configuration = Załaduj historię z ustawień +interrupted.while.waiting.to.rip.next.album = Przerwany podczas oczekiwania na zgrywanie następnego albumu +inactive = Nieaktywny +re-rip.checked = Sprawdź pobrane ripy +remove = Usuń +clear = Wyczyść +download.url.list = Pobierz listę linków +select.save.dir = Wybierz ścieżkę zapisu + +# Keys for the logs generated by DownloadFileThread + +nonretriable.status.code = Nieodwracalny kod statusu +retriable.status.code = Odzyskiwanie kodu statusu +server.doesnt.support.resuming.downloads = Serwer nie obsługuje wznowienia pobierania + +# A "magic number" can also be called a file signature + +was.unable.to.get.content.type.using.magic.number = Nie udało się uzyskać typu zawartości za pomocą magicznej liczby +magic.number.was = Magiczną liczbą była +deleting.existing.file = Usuwanie istniejących plików +request.properties = Poproś o uprawnienia +download.interrupted = Pobieranie przerwane +exceeded.maximum.retries = Spodziewana ilośc powtórzeń +http.status.exception = Wyjątek statusu http +exception.while.downloading.file = Wystąpił problem podczas pobierania pliku +failed.to.download = Nie można pobrać pliku +skipping = Pomijanie +file.already.exists = Plik już istnieje \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_porrisavvo_FI.properties b/out/production/resources/LabelsBundle_porrisavvo_FI.properties new file mode 100644 index 000000000..a2ba056e4 --- /dev/null +++ b/out/production/resources/LabelsBundle_porrisavvo_FI.properties @@ -0,0 +1,57 @@ +Log = Loki +History = Historriijja +created = luatu +modified = muakat +queue = Jono +Configuration = Assetuksse + +# Keys for the Configuration menu + +current.version = Nykyne versijjo +check.for.updates = Tarkist update +auto.update = Automaatpäivvitys? +max.download.threads = Yht'aikasse ripi +timeout.mill = Timeout (millisekois): +retry.download.count = Ripi retry count +overwrite.existing.files = Korvvaa nykysse filu? +sound.when.rip.completes = Valmistummis'ään +preserve.order = Pir järestys +save.logs = Tallen loki +notification.when.rip.starts = Valmistummisilmotus +save.urls.only = Tallen vaa ossottee +save.album.titles = Tallen album'otsiko +autorip.from.clipboard = Ot linki leikpöyrrält +save.descriptions = Tallen kuvvauksse +prefer.mp4.over.gif = Suasi MP4 GIF sijjaa +restore.window.position = Palaut ikkunna sijaant +remember.url.history = Muist osot'hissa +loading.history.from = Larrataa hissaa lähteest + +# Misc UI keys + +loading.history.from.configuration = Larrataa hissaa asetusfilust +interrupted.while.waiting.to.rip.next.album = Keskeytet venates seurraavvaa album +inactive = Idle +re-rip.checked = Re-rip merkatu +remove = Poist +clear = Tyhjen +download.url.list = Download url list +select.save.dir = Valkkaa savekansio + +# Keys for the logs generated by DownloadFileThread + +nonretriable.status.code = retry-kelvvoto statuskoori +retriable.status.code = Retriable statuskoori +server.doesnt.support.resuming.downloads = Servvu ei tue lataaste retryamist +# A "magic number" can also be called a file signature +was.unable.to.get.content.type.using.magic.number = Sissälttötyyppii ei pystyt selvittää taikanumerolla +magic.number.was = Taikanumero o +deleting.existing.file = Deletoirraa nykyne filu +request.properties = Pyynt'omminassuurre +download.interrupted = Lattaus keskeytet +exceeded.maximum.retries = Max-retryet saavvutet +http.status.exception = HTTP-statuspoikkeus +exception.while.downloading.file = Poikkeus larattajjes filuu +failed.to.download = Lattaamminne failas +skipping = Skipataa +file.already.exists = filu ojjo ollemmas \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_pt_BR.properties b/out/production/resources/LabelsBundle_pt_BR.properties new file mode 100644 index 000000000..882092353 --- /dev/null +++ b/out/production/resources/LabelsBundle_pt_BR.properties @@ -0,0 +1,58 @@ +Log = Registro +History = Histórico +created = criado +modified = modificado +queue = Fila +Configuration = Configuração + +# Keys for the Configuration menu + +current.version = Versão atual +check.for.updates = Verificar atualizações +auto.update = Atualização automática? +max.download.threads = Número máximo de conexões: +timeout.mill = Tempo limite (em milissegundos): +retry.download.count = Número de tentativas +overwrite.existing.files = Sobrescrever arquivos existentes? +sound.when.rip.completes = Som quando terminar o rip +preserve.order = Preservar ordem +save.logs = Salvar registros +notification.when.rip.starts = Som quando rip começar +save.urls.only = Salvar apenas URLs +save.album.titles = Salvar títulos dos álbums +autorip.from.clipboard = Autorip da área de transferência +save.descriptions = Salvar descrições +prefer.mp4.over.gif = Preferir MP4 a GIF +restore.window.position = Restaurar posição da janela +remember.url.history = Lembrar histórico de URL +loading.history.from = Carregando histórico de + +# Misc UI keys + +loading.history.from.configuration = Carregando o histórico da configuração +interrupted.while.waiting.to.rip.next.album = Interrompido enquanto esperava o rip do próximo álbum +inactive = Inativo +re-rip.checked = Re-ripar selecionados +remove = Remover +clear = Limpar +download.url.list = Baixar lista de URLs +select.save.dir = Selecionar diretório de gravação + +# Keys for the logs generated by DownloadFileThread + +nonretriable.status.code = Código de não retentável +retriable.status.code = Código de retentável +server.doesnt.support.resuming.downloads = O servidor não suporta continuar downloads + +# A "magic number" can also be called a file signature +was.unable.to.get.content.type.using.magic.number = Não foi possível achar o tipo de conteúdo usando o número mágico +magic.number.was = O número mágico foi +deleting.existing.file = Deletar arquivo existente +request.properties = Requerer propriedades +download.interrupted = Download interrompido +exceeded.maximum.retries = Excedeu tentativas máximas +http.status.exception = Exceção de status HTTP +exception.while.downloading.file = Exceção enquanto o arquivo era baixado +failed.to.download = Falha no download +skipping = Pulando +file.already.exists = arquivo já existe \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_pt_PT.properties b/out/production/resources/LabelsBundle_pt_PT.properties new file mode 100644 index 000000000..a0058524e --- /dev/null +++ b/out/production/resources/LabelsBundle_pt_PT.properties @@ -0,0 +1,75 @@ +Log = Registo +History = Histórico +created = criado +modified = modificado +queue = Fila +Configuration = Configuração +open = Abrir + +# Keys for the Configuration menu +current.version = Versão atual +check.for.updates = Verificar atualizações +auto.update = Atualização automática? +max.download.threads = Número máximo de processos de transferência +timeout.mill = Tempo de espera (em milissegundos): +retry.download.count = Número de novas tentativas de transferência +overwrite.existing.files = Sobrescrever ficheiros existentes? +sound.when.rip.completes = Notificar quando o rip é concluído +preserve.order = Manter a ordem +save.logs = Guardar registos +notification.when.rip.starts = Notificar quando o rip começar +save.urls.only = Apenas guardar URLs +save.album.titles = Guardar os títulos de álbuns +autorip.from.clipboard = Autorip da área de transferência +save.descriptions = Guardar descrições +prefer.mp4.over.gif = Preferir MP4 a GIF +restore.window.position = Restaurar posição da janela +remember.url.history = Lembrar histórico de URL +loading.history.from = Carregar histórico de + +# Queue keys +queue.remove.all = Remover todos +queue.validation = Tem a certeza de que quer remover todos os elementos da fila? +queue.remove.selected = Remover seleccionados + +# History +re-rip.checked = Re-rip seleccionados +remove = Remover +clear = Limpar +history.check.all = Seleccionar todos +history.check.none = Não seleccionar nenhuma +history.check.selected = Marca seleccionada +history.uncheck.selected = Desmaracar seleccionada +history.load.failed.warning = RipMe não carregou o ficheiro de histórico no historyFile.getAbsolutePath() \n\nErro: %s\n\nFechar o RipMe sobregravará automaticamente o conteúdo deste ficheiro.\nPode querer fazer o backup do ficheiro antes de fechar o RipMe! +history.load.none = Não há entradas no histórico para re-rip. Rip alguns álbuns primeiro. +history.load.none.checked = Não foram seleccionadas entradas no histórico. Selecione uma entrada clicando na caixa à direita do URL ou clique com o botão direito em um URL para selecione/desselecione todos os itens. + +# TrayIcon +tray.show = Mostrar +tray.hide = Esconder +tray.autorip = AutoRip clipboard +tray.exit = Saída + +# Misc UI keys +loading.history.from.configuration = A carregar o histórico da configuração +interrupted.while.waiting.to.rip.next.album = Interrompido durante a espera do rip do próximo álbum +inactive = Inativo +download.url.list = A lista de URLs para download +select.save.dir = Selecione salvar diretório + +# Keys for the logs generated by DownloadFileThread +nonretriable.status.code = Código de estado não recuperável +retriable.status.code = Código de estado recuperável +server.doesnt.support.resuming.downloads = Servidor não suporta o reinício de downloads +# A "magic number" can also be called a file signature +was.unable.to.get.content.type.using.magic.number = Impossibilidade de obter o tipo de conteúdo utilizando o número mágico +magic.number.was = Número mágico foi +deleting.existing.file = Eliminação do ficheiro existente +request.properties = Propriedades do pedido +download.interrupted = Download interrompido +exceeded.maximum.retries = Excedeu tentativas máximas +http.status.exception = Exceção de status HTTP +exception.while.downloading.file = Exceção enquanto o ficheiro era baixado +failed.to.download = Falha no download +skipping = Pulando +file.already.exists = Ficheiro já existe \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_ru_RU.properties b/out/production/resources/LabelsBundle_ru_RU.properties new file mode 100644 index 000000000..a3100df85 --- /dev/null +++ b/out/production/resources/LabelsBundle_ru_RU.properties @@ -0,0 +1,57 @@ +Log = Лог +History = История +created = создано +modified = изменено +queue = Очередь +Configuration = Настройки + +# Keys for the Configuration menu + +current.version = Текущая версия +check.for.updates = Проверить обновления +auto.update = Автообновление +max.download.threads = Максимальное число потоков: +timeout.mill = Задержка (в миллисекундах): +retry.download.count = Число повторов +overwrite.existing.files = Перезаписать существующие файлы? +sound.when.rip.completes = Звук при завершении +preserve.order = Сохранять порядок +save.logs = Сохранять логи +notification.when.rip.starts = Уведомление при запуске +save.urls.only = Сохранять только ссылки +save.album.titles = Сохранять названия альбомов +autorip.from.clipboard = Автоскачивание из буфера +save.descriptions = Сохранять описания +prefer.mp4.over.gif = Предпочесть MP4 вместо GIF +restore.window.position = Восстановить положение окна +remember.url.history = Запоминать историю запросов +loading.history.from = Загрузить историю из + +# Misc UI keys + +loading.history.from.configuration = Загрузить историю из настроек +interrupted.while.waiting.to.rip.next.album = Прервано во время ожидания скачивания следующего альбома +inactive = Неактивно +re-rip.checked = Перекачать выбранное +remove = Удалить +clear = Очистить +download.url.list = Скачать список ссылок +select.save.dir = Выбрать папку для сохранения + +# Keys for the logs generated by DownloadFileThread + +nonretriable.status.code = Код не возвращаемого статуса +retriable.status.code = Код возвращаемого статуса +server.doesnt.support.resuming.downloads = Сервер не поддерживает возобновление загрузки +# A "magic number" can also be called a file signature +was.unable.to.get.content.type.using.magic.number = Не удалось получить тип контента с использованием магического номера +magic.number.was = Магический номер был +deleting.existing.file = Удаление существующего файла +request.properties = Свойства запроса +download.interrupted = Загрузка прервана +exceeded.maximum.retries = Достигнуто максимальное количество попыток +http.status.exception = Исключение HTTP-статуса +exception.while.downloading.file = Исключение при загрузке файла +failed.to.download = Не удалось загрузить +skipping = Пропуск +file.already.exists = Файл уже существует diff --git a/out/production/resources/LabelsBundle_zh_CN.properties b/out/production/resources/LabelsBundle_zh_CN.properties new file mode 100644 index 000000000..cd43da1ce --- /dev/null +++ b/out/production/resources/LabelsBundle_zh_CN.properties @@ -0,0 +1,75 @@ +Log = 日志 +History = 历史 +created = 创建时间 +modified = 修改时间 +queue = 队列 +Configuration = 配置 +open = 打开 + +# Keys for the Configuration menu +current.version = 当前版本 +check.for.updates = 检查更新 +auto.update = 自动更新? +max.download.threads = 最大下载线程数: +timeout.mill = 超时(毫秒): +retry.download.count = 重试下载次数 +overwrite.existing.files = 覆盖现有文件? +sound.when.rip.completes = 抓取完成时播放声音 +preserve.order = 保持顺序 +save.logs = 保存日志 +notification.when.rip.starts = 通知抓取开始 +save.urls.only = 仅保存 URL +save.album.titles = 保存专辑标题 +autorip.from.clipboard = 监视剪贴板上的 URL +save.descriptions = 保存描述 +prefer.mp4.over.gif = 首选 MP4 而非 GIF +restore.window.position = 恢复窗口位置 +remember.url.history = 记住 URL 历史 +loading.history.from = 加载历史从 + +# Queue keys +queue.remove.all = 移除全部 +queue.validation = 您确定要移除队列内的全部项目? +queue.remove.selected = 移除所选项目 + +# History +re-rip.checked = 重新抓取选中的项目 +remove = 移除 +clear = 清除 +history.check.all = 选中全部 +history.check.none = 取消选中全部 +history.check.selected = 选中所选项目 +history.uncheck.selected = 取消选中所选项目 +history.load.failed.warning = RipMe 加载位于 historyFile.getAbsolutePath() 的历史文件失败\n\n错误:%s\n\n关闭 RipMe 会自动覆盖此文件的内容,\n请在关闭 RipMe 前备份它! +history.load.none = 无可重新抓取的历史条目。请先抓取一些专辑 +history.load.none.checked = 未 '选中' 任何历史条目,请通过选中所需 URL 前面的复选框或URL 的右键菜单以选中所需条目 + +# TrayIcon +tray.show = 显示 +tray.hide = 隐藏 +tray.autorip = 监视剪贴板上的 URL +tray.exit = 退出 + +# Misc UI keys +loading.history.from.configuration = 从配置加载历史 +interrupted.while.waiting.to.rip.next.album = 等候抓取下一专辑期间发生中断 +inactive = 非活动 +download.url.list = 下载 URL 列表 +select.save.dir = 选择保存目录 + +# Keys for the logs generated by DownloadFileThread +nonretriable.status.code = 非可重试状态代码 +retriable.status.code = 可重试状态代码 +server.doesnt.support.resuming.downloads = 服务器不支持继续下载(续传) +# A "magic number" can also be called a file signature +was.unable.to.get.content.type.using.magic.number = 不能使用幻数获取内容类型 +magic.number.was = 幻数为 +deleting.existing.file = 删除现有文件 +request.properties = 请求属性 +download.interrupted = 下载中断 +exceeded.maximum.retries = 超过最大重试次数 +http.status.exception = HTTP 状态意外 +exception.while.downloading.file = 下载文件时发生意外 +failed.to.download = 下载失败 +skipping = 跳过 +file.already.exists = 文件已存在 \ No newline at end of file diff --git a/out/production/resources/camera.wav b/out/production/resources/camera.wav new file mode 100644 index 0000000000000000000000000000000000000000..617e0f03f802559268e4ef31d294e35f53344cd1 GIT binary patch literal 5134 zcmZ8ke}rvGe(wz%^H=OjY>corOspr5Wej8Ac=UAirdMlv)Ap|G%3a5vIUG5wq!dN1 zQp!}6R4U3AWll~UP8^53u3TEv(YEvA@o3(@c=8w{^Virh3`-38YlZ3k)V=*?S8nTb z&#fQdU-kWdKHvJQ?|$byzyC*jdp~%4c3AzGed8;8dwXBP-&g;9Z~OnHy;t_if)&5~ z!@a#*%)N2HxSzkZFm zn{J;z|McV)HnP3F{pYv0x1T@QyZ5l-pWS}A`Skk!-X2kpSJ%nA=5^KTO-dm81+xTPMt_4y3W?X|a`zVL5;a+|(+^~vq$w>L%kP#!#-_0M{v z=Vz}yaIaS7lW5%BI1zXoSMT?M&DeA`UXPnj^W}o4*vYz~LN-Lyh6ye>i?x(yUg>!= zXHl``v=9%Mrh9a~Y0T0!R5z=%>8&9|FPL>#?P_F;!USzL%6S(hiK^{fQ!bmvP}>e& z@cx7pq4iW78&go_%*0VR%5>uOvQgb-)W-9M6NYnXIbRke7+BZp&=4w}WA#mYN>A$CR6ELoVs7=x&a zBO5n;n<%9OsbS0*G;10ree_bg&@@uQ2gi-oI7ixcgOL^Qq@tYbZXHa`N}-c!*Vc%N zvfx`IOfs_JQkf7X^O}=ZM`EQ#=1J0#UV83?uTO0^8D@y#Gzp^YGMJR=ZAzFgu=gP$B4U8?BTTwg7ng}GQZH+gKFzY>xQA`@^yrwl*D*4nJg)C7z zIA`HgV%i(8kOQ1qtaCz2f%rHJ$&5-w0-=Qjgjh?XnO5EeW34e#Ssx5EGOI&0QY%TN zwcZ*n7{_kqyC@oNVLJ)2^;|SYwIkxAtH#eYxNSU0qn$=n> zu9A};$IOv&R5_G>G=eH?gZ55xsAa+htQH<1fvoom+2C|?T3V+#aKb5^p8&THA#1071TGB|SE2+AqweKyNmmG<1gmoP!6fVPP5<_YPan^LG78IOT zNp&a+giF{O>D;>{YZR6#$*?Alv38zn{q8^f{I9@ku&L6+` zx9|SPdq4lhUwrSKKTW^7z5T(fC$CP2@BQD&PygkZ{46d0`|oZ){>9_H2Prm&2kKcOl+kgMoKmF)$4*!h*WW`3L(0qlQ4_}Au)}5 zc6PQJ_1@W+S5HryKe)d6`02yr+y9-8YjrT2ub#b7AAIm+K7aF@Z(P`G>K;9!Uw^=7 z{#TzAv7ZXybu+D>y}zkQP2GGkoDVHo?!P{*+P%f)g*|fO-t9+iDvv&U@$l%^;_!d! zLp{FsHJtjUr`&xQ=tFJZe>~o-P9E@T!))7r+8-T~&4}7;__QL0e&*}?VE+0&rdMax zveN7E!BIK&W>T~L2drB))@=G0Nzra1U8kQuUfYXxoKkLiqOl zvJZldoh|yyb#W+Hy5y2En#;?X`gGyPv&8{N9bUsK>}QLMX8%6MS*pc3(-(;c~YmxevA_%KtmO!ZU^j2v#Re`ORhkP&|kU1O9v1V zfl*e4Rchw78%AAPXNRyTb!-8YQ5FJV(1^AbB{#BN_hjkXl?EpX+xDCYGfGl19K>2t zTE~=@r3ypG%S!hbZm~~N8-2BG!uexaicOzA8fXd|=2qCD7DBDkB&RnzzfVFW-C&w&|9mrBgRLmLC z88I~y<8s|Ba3she%KbFRQifoosEJBJR?-Ina0NEEiY^w?r}Ms<>&YX;z}>c`b2COJ zF&|?9L4)jk&r1@AR@a40I;mMHM-U39Omrv%D<~*mf=`T2flC~hs4InVNiAJqa*wh=!S8kZ{b4TwuJn{q_%*3&Uu`0C6365!@4fK^#askGzTyL97qrRcmqDKQ?gVI5dup696 z8{0bYGEfP$#vxa7>beM*5mO}^=*21mpBY6YvQp8Hfz@b1l+jehgqkv~*Ov0sE6{la zMcab+I6v)SHAROxIn8qrtl=DdD;Ps_5;a6>!cC?UUSi0j4^e341QRLZe5mqCHo9vS zS{<|~$O3INhp9O#Xa_iM4ANQj18CcmK@6g;N{z-=d5ccONwjO|Y%F4fMoBkyKsRM+ zgVPmF21)BEFRoeDf9i;TW$(;Rd_l4-GpwD_fZ_5LWGri`dKg`b?}Y?j1Z$Ycz({8%?-4dvkbvApIVyosG}Wrm!__b&bFwLwMnWV5)Eh@5m!dc#2^Y9^ZWYIJR=YjatF>9!Ctg3qhv=+!+2VhW435{z#*38#8t^;I02j(UC>0EVWmyS?Tl{C^Ed0ff z+^$1XzVI15vLQNOWwwTGjm;J!q%aNLI7H=t3}HLueK7%JF|d`e)d!hbads-3kY8a_ zMv|-yFImEN(QaV3CNIi^+vyz3tP7uP-u62ip5JmL@&JajS=+HJ7IWL7Y~bC09^UQ9 zyLJ+{^6nPpYs{|0O$=pUx2g~Xq})z_CMBdrp26AREysKN z+IV%69!$%XSSOzy0h&nt$)~|90kXEPI^e0eiNp{@;Q-*)PAc zvYf^6ajQ6Q$^zg7cEk6(tk08o!OmlOS3ZF432d`sJ9hVYc`Cme-xZva|!7Zv~j literal 0 HcmV?d00001 diff --git a/out/production/resources/comment.png b/out/production/resources/comment.png new file mode 100644 index 0000000000000000000000000000000000000000..9b4061f5bb9b9add1b1a1737642890a9cb7a3b2e GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE(}6TtKSPDj(q%x-8c!F;5Rc<;Cv44Oa?MZ#2kVW+_>6(sgH>#{Nw@KW%S+ct6o!@VvNo+$6?8|FqVNXaCmR zVxEy7t;)~9-jOB7%Xm4VzA$1L|8e!j2_ijBiJUF&2CEJivFu`7#qeWQ+SPT_j%;3P z7PZPFY5nm%xnc>I3avv`w=R|c^W9ahKyceOolSbuTe+t&e+W_88QT?myqkT3`Oj^- Vrl((R>;}4(}6TtKf@3Ihqge@Gfx-C5Rc<;FBoPyIf}4es6L)=CB0fe=a7Dq zqecQ8N*P+bW-Ck9U1f3PNd6+-vh!;7hkG*j z7!(yHTW|YXuC(*YVcPL4H9be?RsQ1X9|IrEUh<1!2rH z(%LrH+O<1g)$*{NmYuQ1vcvBEp9e}-b&Fk=bcfAR5pAEnzwYY4KpD;Z1$Q|U8Iu0k ze+XledBDK_qbKp?n$5>D-hAitx%GTaBIC-{#p`C&`>7v2eW~e)Zo{F8XJ@v2`~Bgo f=Ih5!P8%5K)j39J_*dlseaztL>gTe~DWM4fGq8tu literal 0 HcmV?d00001 diff --git a/out/production/resources/gear.png b/out/production/resources/gear.png new file mode 100644 index 0000000000000000000000000000000000000000..7729a56bb17cbb5772c0e2c876cc4cf072672af7 GIT binary patch literal 670 zcmV;P0%84$P)`zN#mH4cas)TBg+Mh24()ulK*sD0Og(DK2nypTBPnZ9>&?>+CHd*AoqUx)Y! znoefc6(08`Zq&-fC&O|BegstXx*u+20bIG_i}PWTB$AnJ6j#ybO6ZkH`=KDKz*t}G ziK5R`Lyv^^O+oG=1nTAD5}=*}iB#qe%2uxv44;!3BjoDuiZ2EPW@qgS$Kh5TG~&y) z^G!JzZ-o>4`-Pvz41QV8#vh9dUqLoOHaq8Y8;W#lbr9?xTvw_h+5*BJSzGN1>t3T! zZ~$VqZH11UJdpEyk<4xb&~%odulO0l0d%HkE*<=>5AF1RIXrB%Cof081IxzThF=wCjIjFY z!|S)*N8v!GIkNT#^A=C08d>VUq;+w0J#J->gD1CqaQy_ zC+0G55EcwlDb*{*^sroi|AT;j@x_fQAS&eT<`N~{RB#nEcdxMo4rk~VUdEu}*ilAid!;+7RK6h3nYa|M zRsI5-Gvre1j>>EH0bdcoUw}kKMH%3;0(E#+wRn!_3+DC5j3HC;n55mosbbO9yTfJ+ zGVCzC4<0fGwi0Prx$=7;3bd_ z_yC@OH{cJuvoQ2joQ#9uyOYTBfOXrz3#t{5GBLlyX1JlDL2lf*p#zk=P*PIz=j7z1 z57ycguUXRPty{O=t*)+?^73-2sHiYNKUGy#0%*1NJz*oACZxfI%1Rl{(c!89PA_~ zW8gqMQ5_u}l9-sNM?^$8d)mA=#^d0Rz!Kg+E_U=)TU&dvprAm)!^3yYvp(n>$;->r zySuw(b#?Uv+Hnjp?y>lBZPpLO(AVIaGiN9E-w1P-?`DzQDZOG{Hs{G$E>U@>Fev0 zsi~>A>0^F={{5bwo}XDa?B9Bi81FMc4E)}O$vNw@$`^3Zq&xEm!Cr_RPWBqgX7<<*ahVP-Fp>p-=RmsfEH1^1N2-c3e zjEoHC(CGWU)>Fs)#>dA?b91xYzkmNrlAB_92X*Jprl z5XEbiGcz+k9f#k+Wz?GWAlTRJo%Z(jS2#cMqCQzP_HaA2;W4jwo3fb;ebrY?qgpKVdBz8yf|mEfNfQ7W3|R3E^f2HV vXuEwn!nWeIWn1xB(KfNEEqpH|wl&QI@B#wxgDgnb;75bM+wi*r4%7G>cfM4I literal 0 HcmV?d00001 diff --git a/out/production/resources/icon.png b/out/production/resources/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..606ae39bcb6e25763a18b25fb25e4728bf10a54c GIT binary patch literal 728 zcmV;}0w?{6P)P000;W1^@s654Bdt00006VoOIv00000 z008+zyMF)x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-UJc^G%XU0>2&}A03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00KNoL_t(Y$Gw(4tRYbp z$Il&vVv1Rn>0ZW1bR<3sr36up>QxGbP9Yfy(WoYoP*VvBqS$RjbPAzUAyFWBZ*=!b<%jLVzo2F?X2m@2mmhbo?#fZ2$|34H@Bb5<#0Zq7ss_)?P?Qh zG#X$S=DVng)oOjZDaPY*P$(4d!uxza2w-3n@v0z z3}Cn0iHo#a?Zt#Dl?qsv6}8jr^(}6TtKSPDj(q%wSn5T h@c{cp4T%Z{2JP=Q0{kZx4g+mq@O1TaS?83{1OW0IIbHw& literal 0 HcmV?d00001 diff --git a/out/production/resources/log4j.file.properties b/out/production/resources/log4j.file.properties new file mode 100644 index 000000000..8606390e9 --- /dev/null +++ b/out/production/resources/log4j.file.properties @@ -0,0 +1,18 @@ +# define the file appender +log4j.appender.FILE = org.apache.log4j.RollingFileAppender +log4j.appender.FILE.File = ripme.log +log4j.appender.FILE.ImmediateFlush = true +log4j.appender.FILE.Threshold = warn +log4j.appender.FILE.maxFileSize = 20MB +log4j.appender.FILE.layout = org.apache.log4j.PatternLayout +log4j.appender.FILE.layout.ConversionPattern = %d %-5p %c{2} %x.%M() %m%n + +# define the console appender +log4j.appender.stdout = org.apache.log4j.ConsoleAppender +log4j.appender.stdout.Target = System.out +log4j.appender.stdout.Threshold = info +log4j.appender.stdout.layout = org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern = %m%n + +# now map our console appender as a root logger, means all log messages will go to this appender +log4j.rootLogger = debug, stdout, FILE \ No newline at end of file diff --git a/out/production/resources/log4j2-example.xml b/out/production/resources/log4j2-example.xml new file mode 100644 index 000000000..dbc0888cd --- /dev/null +++ b/out/production/resources/log4j2-example.xml @@ -0,0 +1,30 @@ + + + + # Console appender + + # Pattern of log message for console appender + + + + # Rolling appender + + + %d{yyyy-MM-dd HH:mm:ss} %p %m%n + + + + + + + + + + + + + + + diff --git a/out/production/resources/rip.properties b/out/production/resources/rip.properties new file mode 100644 index 000000000..35d6c1230 --- /dev/null +++ b/out/production/resources/rip.properties @@ -0,0 +1,50 @@ + +# Download threads to use per ripper +threads.size = 5 + +# Overwrite existing files +file.overwrite = false + +# Number of retries on failed downloads +download.retries = 1 + +# File download timeout (in milliseconds) +download.timeout = 60000 + +# Page download timeout (in milliseconds) +page.timeout = 5000 + +# Maximum size of downloaded files in bytes (required) +download.max_size = 104857600 + +# Any URLs ending with one of these comma-separated values will be skipped +#download.ignore_extensions = mp4,gif,m4v,webm,html + +# Don't retry on 404 errors +error.skip404 = true + +# API creds +twitter.auth = VW9Ybjdjb1pkd2J0U3kwTUh2VXVnOm9GTzVQVzNqM29LQU1xVGhnS3pFZzhKbGVqbXU0c2lHQ3JrUFNNZm8= +tumblr.auth = JFNLu3CbINQjRdUvZibXW9VpSEVYYtiPJ86o8YmvgLZIoKyuNX +gw.api = gonewild + +twitter.max_requests = 10 +twitter.rip_retweets = false + +clipboard.autorip = false + +download.save_order = true + +## Reddit ripper configs +# Determines whether or not to filter reddit ripping by upvote +# Enables the reddit.min_upvotes and reddit.max_upvotes properties when true +reddit.rip_by_upvote = false + +# Only rips file if the number of upvotes is equal to or greater than this value +# Requires reddit.rip_by_upvote = true +reddit.min_upvotes = 0 + +# Only rips files if the number of upvotes is less than this value +# Requires reddit.rip_by_upvote = true +reddit.max_upvotes = 10000 + diff --git a/out/production/resources/stop.png b/out/production/resources/stop.png new file mode 100644 index 0000000000000000000000000000000000000000..7a570dd074269c5c4fd71c2b304d601ee48141b1 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE(}6TtKSPDj(q%x7zNd?0h{y5d1PRu~4M7JwydP;XAFdDLxpXX1 tOn7arLDs<)tc%5X*ty*fYAldpV7Oh%B++7@8w%9Q;OXk;vd$@?2>|jXC-ndT literal 0 HcmV?d00001 diff --git a/out/production/resources/time.png b/out/production/resources/time.png new file mode 100644 index 0000000000000000000000000000000000000000..c9208a40737a3d367f80c20573245b835ec74547 GIT binary patch literal 690 zcmV;j0!{siP)$oFBGx9>RN?%0RS=79l~KHj+ze)zUvA+!eSB z3Jrp26NRRQz9zF;;hU)G&GSjP=Q);@3L6A4h#aF0;0k?FfZtXm8DUH0=UrQ zQIiRsT4}XhUaR|KXOJuQ4~0g8sQ9KTrWr}`sNzz{UK4l*mo(CWg~3S5g_*cH;y5S z-2ffz?)6Je0YGm6i0DK!S>mi31Y06H0T5cf*&IL^0I;F+G;Q&^)pG9{X-)532>H!Wp`H{d3Jhly8^ItvMn#6 zUJ>Coa1QutRjyT+7ha_Tfb{Dcbk2l2`uXGAO00f|3EcSMMAvJ;ycM0UE(On1%;`V2 YpXBG(FK^B}P5=M^07*qoM6N<$f{}(aegFUf literal 0 HcmV?d00001 diff --git a/out/production/resources/wrench.png b/out/production/resources/wrench.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6cd81005ae5a6e2900e7ec5c528e36ab1993e5 GIT binary patch literal 607 zcmV-l0-*hgP)0v@6o#L3BiR&b%|*%0hqy_)2nBNmdl4(ag^CD@f}s8YUAV4`B7Uvh zxDZ|V2V5wwMAub{Z7H_PO1khX;fC5`WFz)&Xj-1X9l zD6GzzRHBGPVdbR>z^RXCKpqYI!FcNifn9B4S4>;v6bglSW1?_>xES1M%=3P5OJSll zNjuzKJ4xMW4H(=pP;QD418#T7`&OQx*=GXSE?;C4)w4TP;a-lKZDtYhOQitpH%RY+grruzf%y4Tx;L?pDcP ze^K5)Jf=8T1x^BkAS;T_37i7rZ9IOcI;WQw-n}&fbW*N3dO<{<+Cq#0y+W)2y+Eu1 zwve6xHW0_wxS^$m*%zvM8Q5&IJRod6gQj=zuOZ^-W3c!YJ8896T}&j?iz0Ha$?r~i te)ev^-hU|P2j}zt==Yo-O!V(&q2CZ5wSBj+*TMh*002ovPDHLkV1i_;03-ka literal 0 HcmV?d00001 diff --git a/src/main/java/com/rarchives/ripme/ripper/AbstractRipper.java b/src/main/java/com/rarchives/ripme/ripper/AbstractRipper.java index 8ccff6481..4ca7cdc6e 100644 --- a/src/main/java/com/rarchives/ripme/ripper/AbstractRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/AbstractRipper.java @@ -354,16 +354,18 @@ protected boolean addURLToDownload(URL url, String subdirectory, String referrer return false; } - if (Utils.getConfigBoolean("remember.url_history", true) && !isThisATest()) { - logger.info("Writing " + url.toExternalForm() + " to file"); - try { - writeDownloadedURL(url.toExternalForm() + "\n"); - } catch (IOException e) { - logger.debug("Unable to write URL history file"); + boolean fileDownloadStatus = addURLToDownload(url, saveAs, referrer, cookies, getFileExtFromMIME); + if(fileDownloadStatus){ + if (Utils.getConfigBoolean("remember.url_history", true) && !isThisATest()) { + logger.info("Writing " + url.toExternalForm() + " to file"); + try { + writeDownloadedURL(url.toExternalForm() + "\n"); + } catch (IOException e) { + logger.debug("Unable to write URL history file"); + } } } - - return addURLToDownload(url, saveAs, referrer, cookies, getFileExtFromMIME); + return fileDownloadStatus; } protected boolean addURLToDownload(URL url, String prefix, String subdirectory, String referrer, diff --git a/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java b/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java index e9c6f2427..524543240 100644 --- a/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java +++ b/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java @@ -7,9 +7,13 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.TimeUnit; import javax.net.ssl.HttpsURLConnection; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jsoup.HttpStatusException; @@ -101,172 +105,186 @@ public void run() { observer.sendUpdate(STATUS.DOWNLOAD_STARTED, url.toExternalForm()); // Setup HTTP request - HttpURLConnection huc; - if (this.url.toString().startsWith("https")) { - huc = (HttpsURLConnection) urlToDownload.openConnection(); - } else { - huc = (HttpURLConnection) urlToDownload.openConnection(); - } - huc.setInstanceFollowRedirects(true); - // It is important to set both ConnectTimeout and ReadTimeout. If you don't then - // ripme will wait forever - // for the server to send data after connecting. - huc.setConnectTimeout(TIMEOUT); - huc.setReadTimeout(TIMEOUT); - huc.setRequestProperty("accept", "*/*"); - if (!referrer.equals("")) { - huc.setRequestProperty("Referer", referrer); // Sic - } - huc.setRequestProperty("User-agent", AbstractRipper.USER_AGENT); - StringBuilder cookie = new StringBuilder(); - for (String key : cookies.keySet()) { - if (!cookie.toString().equals("")) { - cookie.append("; "); - } - cookie.append(key).append("=").append(cookies.get(key)); - } - huc.setRequestProperty("Cookie", cookie.toString()); - if (observer.tryResumeDownload()) { - if (fileSize != 0) { - huc.setRequestProperty("Range", "bytes=" + fileSize + "-"); - } - } - logger.debug(Utils.getLocalizedString("request.properties") + ": " + huc.getRequestProperties()); - huc.connect(); + OkHttpClient client = new OkHttpClient.Builder() + .followRedirects(true) + .connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS) + .readTimeout(TIMEOUT, TimeUnit.MILLISECONDS) + .build(); - int statusCode = huc.getResponseCode(); - logger.debug("Status code: " + statusCode); - // If the server doesn't allow resuming downloads error out - if (statusCode != 206 && observer.tryResumeDownload() && saveAs.exists()) { - // TODO find a better way to handle servers that don't support resuming - // downloads then just erroring out - throw new IOException(Utils.getLocalizedString("server.doesnt.support.resuming.downloads")); - } - if (statusCode / 100 == 3) { // 3xx Redirect - if (!redirected) { - // Don't increment retries on the first redirect - tries--; - redirected = true; + // Build cookies string + StringBuilder cookieBuilder = new StringBuilder(); + for (Map.Entry entry : cookies.entrySet()) { + if (!cookieBuilder.isEmpty()) { + cookieBuilder.append("; "); } - String location = huc.getHeaderField("Location"); - urlToDownload = new URI(location).toURL(); - // Throw exception so download can be retried - throw new IOException("Redirect status code " + statusCode + " - redirect to " + location); - } - if (statusCode / 100 == 4) { // 4xx errors - logger.error("[!] " + Utils.getLocalizedString("nonretriable.status.code") + " " + statusCode - + " while downloading from " + url); - observer.downloadErrored(url, Utils.getLocalizedString("nonretriable.status.code") + " " - + statusCode + " while downloading " + url.toExternalForm()); - return; // Not retriable, drop out. + cookieBuilder.append(entry.getKey()).append("=").append(entry.getValue()); } - if (statusCode / 100 == 5) { // 5xx errors - observer.downloadErrored(url, Utils.getLocalizedString("retriable.status.code") + " " + statusCode - + " while downloading " + url.toExternalForm()); - // Throw exception so download can be retried - throw new IOException(Utils.getLocalizedString("retriable.status.code") + " " + statusCode); + + Request.Builder requestBuilder = new Request.Builder() + .url(urlToDownload) + .header("Accept", "*/*") + .header("User-Agent", AbstractRipper.USER_AGENT); + + if (!referrer.isEmpty()) { + requestBuilder.header("Referer", referrer); } - if (huc.getContentLength() == 503 && urlToDownload.getHost().endsWith("imgur.com")) { - // Imgur image with 503 bytes is "404" - logger.error("[!] Imgur image is 404 (503 bytes long): " + url); - observer.downloadErrored(url, "Imgur image is 404: " + url.toExternalForm()); - return; + + if (!cookieBuilder.isEmpty()) { + requestBuilder.header("Cookie", cookieBuilder.toString()); } - // If the ripper is using the bytes progress bar set bytesTotal to - // huc.getContentLength() - if (observer.useByteProgessBar()) { - bytesTotal = huc.getContentLength(); - observer.setBytesTotal(bytesTotal); - observer.sendUpdate(STATUS.TOTAL_BYTES, bytesTotal); - logger.debug("Size of file at " + this.url + " = " + bytesTotal + "b"); + // Handle partial download + if (observer.tryResumeDownload() && fileSize != 0) { + requestBuilder.header("Range", "bytes=" + fileSize + "-"); } - // Save file - InputStream bis; - bis = new BufferedInputStream(huc.getInputStream()); + Request request = requestBuilder.build(); - // Check if we should get the file ext from the MIME type - if (getFileExtFromMIME) { - String fileExt = URLConnection.guessContentTypeFromStream(bis); - if (fileExt != null) { - fileExt = fileExt.replaceAll("image/", ""); - saveAs = new File(saveAs.toString() + "." + fileExt); - } else { - logger.error("Was unable to get content type from stream"); - // Try to get the file type from the magic number - byte[] magicBytes = new byte[8]; - bis.read(magicBytes, 0, 5); - bis.reset(); - fileExt = Utils.getEXTFromMagic(magicBytes); - if (fileExt != null) { - saveAs = new File(saveAs.toString() + "." + fileExt); - } else { - logger.error(Utils.getLocalizedString("was.unable.to.get.content.type.using.magic.number")); - logger.error( - Utils.getLocalizedString("magic.number.was") + ": " + Arrays.toString(magicBytes)); - } + try (Response httpCallResponse = client.newCall(request).execute()) { + + + int statusCode = httpCallResponse.code(); + logger.debug("Status code: " + statusCode); + // If the server doesn't allow resuming downloads error out + if (statusCode != 206 && observer.tryResumeDownload() && saveAs.exists()) { + // TODO find a better way to handle servers that don't support resuming + // downloads then just erroring out + throw new IOException(Utils.getLocalizedString("server.doesnt.support.resuming.downloads")); } - } - // If we're resuming a download we append data to the existing file - OutputStream fos = null; - if (statusCode == 206) { - fos = new FileOutputStream(saveAs, true); - } else { - try { - fos = new FileOutputStream(saveAs); - } catch (FileNotFoundException e) { - // We do this because some filesystems have a max name length - if (e.getMessage().contains("File name too long")) { - logger.error("The filename " + saveAs.getName() - + " is to long to be saved on this file system."); - logger.info("Shortening filename"); - String[] saveAsSplit = saveAs.getName().split("\\."); - // Get the file extension so when we shorten the file name we don't cut off the - // file extension - String fileExt = saveAsSplit[saveAsSplit.length - 1]; - // The max limit for filenames on Linux with Ext3/4 is 255 bytes - logger.info(saveAs.getName().substring(0, 254 - fileExt.length()) + fileExt); - String filename = saveAs.getName().substring(0, 254 - fileExt.length()) + "." + fileExt; - // We can't just use the new file name as the saveAs because the file name - // doesn't include the - // users save path, so we get the user save path from the old saveAs - saveAs = new File(saveAs.getParentFile().getAbsolutePath() + File.separator + filename); - fos = new FileOutputStream(saveAs); - } else if (saveAs.getAbsolutePath().length() > 259 && Utils.isWindows()) { - // This if is for when the file path has gone above 260 chars which windows does - // not allow - fos = Files.newOutputStream( - Utils.shortenSaveAsWindows(saveAs.getParentFile().getPath(), saveAs.getName())); - assert fos != null: "After shortenSaveAsWindows: " + saveAs.getAbsolutePath(); + if (statusCode / 100 == 3) { // 3xx Redirect + if (!redirected) { + // Don't increment retries on the first redirect + tries--; + redirected = true; } - assert fos != null: e.getStackTrace(); + String location = httpCallResponse.header("Location"); + urlToDownload = new URI(location).toURL(); + // Throw exception so download can be retried + throw new IOException("Redirect status code " + statusCode + " - redirect to " + location); } - } - byte[] data = new byte[1024 * 256]; - int bytesRead; - boolean shouldSkipFileDownload = huc.getContentLength() / 1000000 >= 10 && AbstractRipper.isThisATest(); - // If this is a test rip we skip large downloads - if (shouldSkipFileDownload) { - logger.debug("Not downloading whole file because it is over 10mb and this is a test"); - } else { - while ((bytesRead = bis.read(data)) != -1) { - try { - observer.stopCheck(); - } catch (IOException e) { - observer.downloadErrored(url, Utils.getLocalizedString("download.interrupted")); - return; + if (statusCode / 100 == 4) { // 4xx errors + logger.error("[!] " + Utils.getLocalizedString("nonretriable.status.code") + " " + statusCode + + " while downloading from " + url); + observer.downloadErrored(url, Utils.getLocalizedString("nonretriable.status.code") + " " + + statusCode + " while downloading " + url.toExternalForm()); + return; // Not retriable, drop out. + } + if (statusCode / 100 == 5) { // 5xx errors + observer.downloadErrored(url, Utils.getLocalizedString("retriable.status.code") + " " + statusCode + + " while downloading " + url.toExternalForm()); + // Throw exception so download can be retried + throw new IOException(Utils.getLocalizedString("retriable.status.code") + " " + statusCode); + } + if (httpCallResponse.body() != null && httpCallResponse.body().contentLength() == 503 && urlToDownload.getHost().endsWith("imgur.com")) { + // Imgur image with 503 bytes is "404" + logger.error("[!] Imgur image is 404 (503 bytes long): " + url); + observer.downloadErrored(url, "Imgur image is 404: " + url.toExternalForm()); + return; + } + + // If the ripper is using the bytes progress bar set bytesTotal to + // huc.getContentLength() + if (observer.useByteProgessBar()) { + bytesTotal = (int) (httpCallResponse.body() != null ? httpCallResponse.body().contentLength() : 0); + observer.setBytesTotal(bytesTotal); + observer.sendUpdate(STATUS.TOTAL_BYTES, bytesTotal); + logger.debug("Size of file at " + this.url + " = " + bytesTotal + "b"); + } + + // Save file + InputStream bis; + if (httpCallResponse.body() != null) { + bis = new BufferedInputStream(httpCallResponse.body().byteStream()); + + // Check if we should get the file ext from the MIME type + if (getFileExtFromMIME) { + String fileExt = URLConnection.guessContentTypeFromStream(bis); + if (fileExt != null) { + fileExt = fileExt.replaceAll("image/", ""); + saveAs = new File(saveAs.toString() + "." + fileExt); + } else { + logger.error("Was unable to get content type from stream"); + // Try to get the file type from the magic number + byte[] magicBytes = new byte[8]; + bis.read(magicBytes, 0, 5); + bis.reset(); + fileExt = Utils.getEXTFromMagic(magicBytes); + if (fileExt != null) { + saveAs = new File(saveAs.toString() + "." + fileExt); + } else { + logger.error(Utils.getLocalizedString("was.unable.to.get.content.type.using.magic.number")); + logger.error( + Utils.getLocalizedString("magic.number.was") + ": " + Arrays.toString(magicBytes)); + } + } } - fos.write(data, 0, bytesRead); - if (observer.useByteProgessBar()) { - bytesDownloaded += bytesRead; - observer.setBytesCompleted(bytesDownloaded); - observer.sendUpdate(STATUS.COMPLETED_BYTES, bytesDownloaded); + // If we're resuming a download we append data to the existing file + OutputStream fos = null; + if (statusCode == 206) { + fos = new FileOutputStream(saveAs, true); + } else { + try { + fos = new FileOutputStream(saveAs); + } catch (FileNotFoundException e) { + // We do this because some filesystems have a max name length + if (e.getMessage().contains("File name too long")) { + logger.error("The filename " + saveAs.getName() + + " is to long to be saved on this file system."); + logger.info("Shortening filename"); + String[] saveAsSplit = saveAs.getName().split("\\."); + // Get the file extension so when we shorten the file name we don't cut off the + // file extension + String fileExt = saveAsSplit[saveAsSplit.length - 1]; + // The max limit for filenames on Linux with Ext3/4 is 255 bytes + logger.info(saveAs.getName().substring(0, 254 - fileExt.length()) + fileExt); + String filename = saveAs.getName().substring(0, 254 - fileExt.length()) + "." + fileExt; + // We can't just use the new file name as the saveAs because the file name + // doesn't include the + // users save path, so we get the user save path from the old saveAs + saveAs = new File(saveAs.getParentFile().getAbsolutePath() + File.separator + filename); + fos = new FileOutputStream(saveAs); + } else if (saveAs.getAbsolutePath().length() > 259 && Utils.isWindows()) { + // This if is for when the file path has gone above 260 chars which windows does + // not allow + fos = Files.newOutputStream( + Utils.shortenSaveAsWindows(saveAs.getParentFile().getPath(), saveAs.getName())); + assert fos != null: "After shortenSaveAsWindows: " + saveAs.getAbsolutePath(); + } + assert fos != null: e.getStackTrace(); + } } + byte[] data = new byte[1024 * 256]; + int bytesRead; + boolean shouldSkipFileDownload = httpCallResponse.body().contentLength() / 1000000 >= 10 && AbstractRipper.isThisATest(); + // If this is a test rip we skip large downloads + if (shouldSkipFileDownload) { + logger.debug("Not downloading whole file because it is over 10mb and this is a test"); + } else { + while ((bytesRead = bis.read(data)) != -1) { + try { + observer.stopCheck(); + } catch (IOException e) { + observer.downloadErrored(url, Utils.getLocalizedString("download.interrupted")); + return; + } + fos.write(data, 0, bytesRead); + if (observer.useByteProgessBar()) { + bytesDownloaded += bytesRead; + observer.setBytesCompleted(bytesDownloaded); + observer.sendUpdate(STATUS.COMPLETED_BYTES, bytesDownloaded); + } + } + } + bis.close(); + fos.close(); } + + + // You can now access headers, body, etc. + logger.debug("Request headers: " + httpCallResponse.request().headers()); + // Example: read httpCallResponse body + // InputStream in = httpCallResponse.body().byteStream(); } - bis.close(); - fos.close(); break; // Download successful: break out of infinite loop } catch (SocketTimeoutException timeoutEx) { // Handle the timeout diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/DanbooruRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/DanbooruRipper.java index 765edea43..f88a3b993 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/DanbooruRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/DanbooruRipper.java @@ -6,7 +6,9 @@ import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -24,6 +26,8 @@ import okhttp3.Request; import okhttp3.Response; +import static com.rarchives.ripme.utils.RipUtils.getCookiesFromString; + public class DanbooruRipper extends AbstractJSONRipper { private static final Logger logger = LogManager.getLogger(DanbooruRipper.class); @@ -35,6 +39,8 @@ public class DanbooruRipper extends AbstractJSONRipper { private Pattern gidPattern = null; private int currentPageNum = 1; + private Map cookies = new HashMap<>(); + public DanbooruRipper(URL url) throws IOException { super(url); @@ -44,6 +50,15 @@ public DanbooruRipper(URL url) throws IOException { .build(); } + private void setCookies(String currentCookie) { + if (Utils.getConfigBoolean("danbooru.login", true)) { + logger.info("Logging in using cookies"); +// String faCookies = Utils.getConfigString("danbooru.cookies", currentCookie); + String[] cookieInfo = currentCookie.split("="); + cookies.put(cookieInfo[0], cookieInfo[1]); + } + } + @Override protected String getDomain() { return DOMAIN; @@ -68,6 +83,44 @@ protected JSONObject getNextPage(JSONObject doc) throws IOException { return getCurrentPage(); } + private String getSubUrlFromUrl(String url){ + Request request = new Request.Builder() + .url(url) + .header("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1") + .header("Accept", "application/json,text/javascript,*/*;q=0.01") + .header("Accept-Language", "en-US,en;q=0.9") + .header("Sec-Fetch-Dest", "empty") + .header("Sec-Fetch-Mode", "cors") + .header("Sec-Fetch-Site", "same-origin") + .header("Referer", "https://danbooru.donmai.us/") + .header("X-Requested-With", "XMLHttpRequest") + .header("Connection", "keep-alive") + .build(); + Response response = null; + try { + response = client.newCall(request).execute(); + if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); + + String responseData = response.body().string(); + System.out.println(url); + System.out.println(responseData); + JSONObject json = new JSONObject(responseData); + if(json.has("file_url")){ + return json.getString("file_url"); + }else{ + return null; + } + + } catch (Exception e) { + e.printStackTrace(); + } finally { + if(response !=null) { + response.body().close(); + } + } + return null; + } + @Nullable private JSONObject getCurrentPage() throws MalformedURLException { Request request = new Request.Builder() @@ -87,14 +140,27 @@ private JSONObject getCurrentPage() throws MalformedURLException { try { response = client.newCall(request).execute(); if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); - + if(response.headers().get("set-cookie") != null) { + setCookies(response.headers().get("set-cookie")); + } String responseData = response.body().string(); JSONArray jsonArray = new JSONArray(responseData); if(!jsonArray.isEmpty()){ - String newCompatibleJSON = "{ \"resources\":" + jsonArray + " }"; + JSONArray resultsToUse = new JSONArray(); + for(Object currentObject : jsonArray){ + JSONObject currentJSONObject = (JSONObject) currentObject; + //tag_string_artist + //https://danbooru.donmai.us/posts/6677739?q=jagerctm1 + JSONObject objectToAdd = new JSONObject(); + objectToAdd.put("file_url", getSubUrlFromUrl("https://danbooru.donmai.us/posts/" + currentJSONObject.get("id") + "?q="+ currentJSONObject.getString("tag_string_artist") + "&z=1")); + //"https://danbooru.donmai.us/posts/" + currentJSONObject.get("id") + "?q="+ currentJSONObject.getString("tag_string_artist") + "&z=1" + + resultsToUse.put(objectToAdd); + } + String newCompatibleJSON = "{ \"resources\":" + resultsToUse + " }"; return new JSONObject(newCompatibleJSON); } - } catch (IOException e) { + } catch (Exception e) { e.printStackTrace(); } finally { if(response !=null) { @@ -129,7 +195,8 @@ public String getGID(URL url) throws MalformedURLException { @Override protected void downloadURL(URL url, int index) { - addURLToDownload(url, getPrefix(index)); +// addURLToDownload(url, getPrefix(index)); + addURLToDownload(url, getPrefix(index), "", "https://danbooru.donmai.us", cookies); } private String getTag(URL url) throws MalformedURLException { diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/FileFinishCallBack.java b/src/main/java/com/rarchives/ripme/ripper/rippers/FileFinishCallBack.java new file mode 100644 index 000000000..bdde0d970 --- /dev/null +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/FileFinishCallBack.java @@ -0,0 +1,9 @@ +package com.rarchives.ripme.ripper.rippers; + +import java.net.URL; + +public interface FileFinishCallBack { + void onComplete(String result, URL currentUrl); + + void onFail(String result, URL currentUrl); +} diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/test.json b/src/main/java/com/rarchives/ripme/ripper/rippers/test.json new file mode 100644 index 000000000..ea2eede58 --- /dev/null +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/test.json @@ -0,0 +1,99 @@ +{ + "id": 7695707, + "created_at": "2024-06-10T07:34:42.266-04:00", + "uploader_id": 923344, + "score": 24, + "source": "https://i.pximg.net/img-original/img/2023/08/26/23/21/34/111185876_p0.jpg", + "md5": "3e9a0edcabcb9eda6d33ab5a1b1956b8", + "last_comment_bumped_at": null, + "rating": "g", + "image_width": 939, + "image_height": 1127, + "tag_string": "1girl bankai black_hair black_kimono bleach bleach:_sennen_kessen-hen blue_eyes colored_eyelashes commentary_request expressionless from_side hair_between_eyes hakka_no_togame_(bankai) hara_hikaru ice ice_crystal ice_flower japanese_clothes kimono kuchiki_rukia looking_up shihakusho shinigami short_hair solo white_background", + "fav_count": 20, + "file_ext": "jpg", + "last_noted_at": null, + "parent_id": null, + "has_children": false, + "approver_id": null, + "tag_count_general": 21, + "tag_count_artist": 1, + "tag_count_character": 1, + "tag_count_copyright": 2, + "file_size": 626956, + "up_score": 24, + "down_score": 0, + "is_pending": false, + "is_flagged": false, + "is_deleted": false, + "tag_count": 26, + "updated_at": "2024-06-10T07:34:55.158-04:00", + "is_banned": false, + "pixiv_id": 111185876, + "last_commented_at": null, + "has_active_children": false, + "bit_flags": 0, + "tag_count_meta": 1, + "has_large": true, + "has_visible_children": false, + "media_asset": { + "id": 21386805, + "created_at": "2024-06-10T07:33:08.944-04:00", + "updated_at": "2024-06-10T07:33:10.406-04:00", + "md5": "3e9a0edcabcb9eda6d33ab5a1b1956b8", + "file_ext": "jpg", + "file_size": 626956, + "image_width": 939, + "image_height": 1127, + "duration": null, + "status": "active", + "file_key": "EhecRBrsv", + "is_public": true, + "pixel_hash": "fb40ecb11db5e990438f223ba0314ba7", + "variants": [ + { + "type": "180x180", + "url": "https://cdn.donmai.us/180x180/3e/9a/3e9a0edcabcb9eda6d33ab5a1b1956b8.jpg", + "width": 150, + "height": 180, + "file_ext": "jpg" + }, + { + "type": "360x360", + "url": "https://cdn.donmai.us/360x360/3e/9a/3e9a0edcabcb9eda6d33ab5a1b1956b8.jpg", + "width": 300, + "height": 360, + "file_ext": "jpg" + }, + { + "type": "720x720", + "url": "https://cdn.donmai.us/720x720/3e/9a/3e9a0edcabcb9eda6d33ab5a1b1956b8.webp", + "width": 600, + "height": 720, + "file_ext": "webp" + }, + { + "type": "sample", + "url": "https://cdn.donmai.us/sample/3e/9a/sample-3e9a0edcabcb9eda6d33ab5a1b1956b8.jpg", + "width": 850, + "height": 1020, + "file_ext": "jpg" + }, + { + "type": "original", + "url": "https://cdn.donmai.us/original/3e/9a/3e9a0edcabcb9eda6d33ab5a1b1956b8.jpg", + "width": 939, + "height": 1127, + "file_ext": "jpg" + } + ] + }, + "tag_string_general": "1girl bankai black_hair black_kimono blue_eyes colored_eyelashes expressionless from_side hair_between_eyes hakka_no_togame_(bankai) ice ice_crystal ice_flower japanese_clothes kimono looking_up shihakusho shinigami short_hair solo white_background", + "tag_string_character": "kuchiki_rukia", + "tag_string_copyright": "bleach bleach:_sennen_kessen-hen", + "tag_string_artist": "hara_hikaru", + "tag_string_meta": "commentary_request", + "file_url": "https://cdn.donmai.us/original/3e/9a/3e9a0edcabcb9eda6d33ab5a1b1956b8.jpg", + "large_file_url": "https://cdn.donmai.us/sample/3e/9a/sample-3e9a0edcabcb9eda6d33ab5a1b1956b8.jpg", + "preview_file_url": "https://cdn.donmai.us/180x180/3e/9a/3e9a0edcabcb9eda6d33ab5a1b1956b8.jpg" +} \ No newline at end of file diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/test2.json b/src/main/java/com/rarchives/ripme/ripper/rippers/test2.json new file mode 100644 index 000000000..199212c97 --- /dev/null +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/test2.json @@ -0,0 +1,92 @@ +{ + "file_url": "https://cdn.donmai.us/original/6c/42/6c42e7758e9d884ceb5d1301e66486a3.jpg", + "uploader_id": 1052903, + "media_asset": { + "created_at": "2025-03-16T05:40:50.241-04:00", + "image_width": 752, + "pixel_hash": "12f077cb2fc2ef012b083b283c7f30d5", + "variants": [ + { + "file_ext": "jpg", + "width": 106, + "type": "180x180", + "url": "https://cdn.donmai.us/180x180/6c/42/6c42e7758e9d884ceb5d1301e66486a3.jpg", + "height": 180 + }, + { + "file_ext": "jpg", + "width": 212, + "type": "360x360", + "url": "https://cdn.donmai.us/360x360/6c/42/6c42e7758e9d884ceb5d1301e66486a3.jpg", + "height": 360 + }, + { + "file_ext": "webp", + "width": 423, + "type": "720x720", + "url": "https://cdn.donmai.us/720x720/6c/42/6c42e7758e9d884ceb5d1301e66486a3.webp", + "height": 720 + }, + { + "file_ext": "jpg", + "width": 752, + "type": "original", + "url": "https://cdn.donmai.us/original/6c/42/6c42e7758e9d884ceb5d1301e66486a3.jpg", + "height": 1280 + } + ], + "file_size": 157074, + "duration": null, + "file_key": "1iTvjZpV6", + "file_ext": "jpg", + "image_height": 1280, + "updated_at": "2025-03-16T05:40:52.442-04:00", + "is_public": true, + "id": 25223325, + "md5": "6c42e7758e9d884ceb5d1301e66486a3", + "status": "active" + }, + "tag_string": "1girl aqua_marine_(aqua000marine) blue_eyes breasts crossed_legs duel_monster gloves grey_hair hat highres long_hair sideboob silent_magician simple_background solo tabard white_gloves white_hat white_tabard wizard_hat yu-gi-oh!", + "rating": "s", + "tag_string_artist": "aqua_marine_(aqua000marine)", + "created_at": "2025-03-16T05:59:13.093-04:00", + "last_comment_bumped_at": null, + "last_commented_at": null, + "source": "https://pawoo.net/@rokomoko0/101675723688106698", + "score": 19, + "has_large": false, + "fav_count": 18, + "large_file_url": "https://cdn.donmai.us/original/6c/42/6c42e7758e9d884ceb5d1301e66486a3.jpg", + "image_height": 1280, + "is_deleted": false, + "tag_count": 21, + "updated_at": "2025-08-03T19:24:08.070-04:00", + "pixiv_id": null, + "bit_flags": 0, + "tag_count_character": 1, + "id": 9004519, + "tag_count_artist": 1, + "tag_string_meta": "highres", + "down_score": 0, + "tag_string_general": "1girl blue_eyes breasts crossed_legs duel_monster gloves grey_hair hat long_hair sideboob simple_background solo tabard white_gloves white_hat white_tabard wizard_hat", + "has_children": false, + "tag_count_copyright": 1, + "approver_id": null, + "tag_string_character": "silent_magician", + "image_width": 752, + "last_noted_at": null, + "up_score": 19, + "tag_string_copyright": "yu-gi-oh!", + "file_size": 157074, + "has_visible_children": false, + "file_ext": "jpg", + "has_active_children": false, + "parent_id": null, + "tag_count_general": 17, + "preview_file_url": "https://cdn.donmai.us/180x180/6c/42/6c42e7758e9d884ceb5d1301e66486a3.jpg", + "tag_count_meta": 1, + "is_banned": false, + "is_flagged": false, + "md5": "6c42e7758e9d884ceb5d1301e66486a3", + "is_pending": false +} \ No newline at end of file From 66b3469dde3e8e04fab89af47a8d66a03c0abc12 Mon Sep 17 00:00:00 2001 From: Undid Iridium Date: Thu, 9 Oct 2025 01:38:16 -0400 Subject: [PATCH 2/7] Adding KemonoPartyRipper --- src/main/java/com/rarchives/ripme/App.java | 20 +- .../ripper/rippers/KemonoPartyRipper.java | 208 ++++++++++++++++++ .../java/com/rarchives/ripme/ui/History.java | 4 +- .../com/rarchives/ripme/ui/MainWindow.java | 2 + 4 files changed, 231 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/rarchives/ripme/ripper/rippers/KemonoPartyRipper.java diff --git a/src/main/java/com/rarchives/ripme/App.java b/src/main/java/com/rarchives/ripme/App.java index bd373a4e0..7c0b26314 100644 --- a/src/main/java/com/rarchives/ripme/App.java +++ b/src/main/java/com/rarchives/ripme/App.java @@ -1,5 +1,6 @@ package com.rarchives.ripme; +import com.oracle.truffle.regex.tregex.util.json.JsonArray; import com.rarchives.ripme.ripper.AbstractRipper; import com.rarchives.ripme.ui.History; import com.rarchives.ripme.ui.HistoryEntry; @@ -17,6 +18,8 @@ import org.apache.commons.lang.SystemUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.json.JSONArray; +import org.json.JSONObject; import javax.swing.*; import java.awt.*; @@ -354,8 +357,23 @@ private static void loadHistory() throws IOException { HISTORY.clear(); if (Files.exists(historyFile)) { try { - logger.info("Loading history from " + historyFile); + logger.info("Loading history from file: " + historyFile); HISTORY.fromFile(historyFile.toString()); +// JSONArray json = HISTORY.toJSON(); +// JSONArray rebuildArray = new JSONArray(); +// for (Object currentJsonItem : json) { +// JSONObject jsonData = (JSONObject) currentJsonItem; +// if(jsonData.has("url")){ +// String url = jsonData.getString("url"); +// if(url.contains("reddit")){ +// rebuildArray.put(jsonData); +// } +// } +// } +// HISTORY.clear(); +// HISTORY.fromJSON(rebuildArray); +// HISTORY.toFile(historyFile.toString()); + } catch (IOException e) { logger.error("Failed to load history from file " + historyFile, e); logger.warn( diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/KemonoPartyRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/KemonoPartyRipper.java new file mode 100644 index 000000000..f9887d3bd --- /dev/null +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/KemonoPartyRipper.java @@ -0,0 +1,208 @@ +package com.rarchives.ripme.ripper.rippers; + +import com.rarchives.ripme.ripper.AbstractJSONRipper; +import com.rarchives.ripme.utils.Http; +import com.rarchives.ripme.utils.Utils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +/** + * See this link for the API schema. + */ +public class KemonoPartyRipper extends AbstractJSONRipper { + private static final Logger LOGGER = LogManager.getLogger(KemonoPartyRipper.class); + private static final String IMG_URL_BASE = "https://c3.kemono.su/data"; + private static final String VID_URL_BASE = "https://c1.kemono.su/data"; + private static final Pattern IMG_PATTERN = Pattern.compile("^.*\\.(jpg|jpeg|png|gif|apng|webp|tif|tiff)$", Pattern.CASE_INSENSITIVE); + private static final Pattern VID_PATTERN = Pattern.compile("^.*\\.(webm|mp4|m4v)$", Pattern.CASE_INSENSITIVE); + + // just so we can return a JSONObject from getFirstPage + private static final String KEY_WRAPPER_JSON_ARRAY = "array"; + + private static final String KEY_FILE = "file"; + private static final String KEY_PATH = "path"; + private static final String KEY_ATTACHMENTS = "attachments"; + + // One of "onlyfans" or "fansly", but might have others in future? + private final String service; + + // Username of the page to be ripped + private final String user; + private JSONObject current_page_data; + private int internalFileLimit; + + public KemonoPartyRipper(URL url) throws IOException { + super(url); + List pathElements = Arrays.stream(url.getPath().split("/")) + .filter(element -> !element.isBlank()) + .collect(Collectors.toList()); + + service = pathElements.get(0); + user = pathElements.get(2); + + if (service == null || user == null || service.isBlank() || user.isBlank()) { + LOGGER.warn("service=" + service + ", user=" + user); + throw new MalformedURLException("Invalid kemono.party URL: " + url); + } + LOGGER.debug("Parsed service=" + service + " and user=" + user + " from " + url); + } + + @Override + protected String getDomain() { + return "kemono.party"; + } + + @Override + public String getHost() { + return "kemono.party"; + } + + @Override + public boolean canRip(URL url) { + String host = url.getHost(); + return host.endsWith("kemono.party") || host.endsWith("kemono.su"); + } + + @Override + public String getGID(URL url) { + return Utils.filesystemSafe(String.format("%s_%s", service, user)); + } + + @Override + protected JSONObject getFirstPage() throws IOException { + String apiUrl = String.format("https://kemono.su/api/v1/%s/user/%s", service, user); + String jsonArrayString = Http.url(apiUrl) + .ignoreContentType() + .response() + .body(); + JSONArray jsonArray = new JSONArray(jsonArrayString); + internalFileLimit += 50; + // Ideally we'd just return the JSONArray from here, but we have to wrap it in a JSONObject + JSONObject wrapperObject = new JSONObject(); + wrapperObject.put(KEY_WRAPPER_JSON_ARRAY, jsonArray); + return wrapperObject; + } + + @Override + public String getAlbumTitle(URL url) throws MalformedURLException { + String title; + try { + //Gets artist name + title = getHost() + "_" + getGID(url) + "_" + Http.url(url).get().select("meta[name=artist_name][content]").attr("content"); + }catch (Exception e){ + LOGGER.info("Failed to get album title, using id."); + title = getGID(url); + } + return title; + } + + @Override + protected JSONObject getNextPage(JSONObject doc) throws IOException, URISyntaxException { + String apiUrl = String.format("https://kemono.su/api/v1/%s/user/%s?o=%s", service, user, internalFileLimit); + String jsonArrayString = Http.url(apiUrl) + .ignoreContentType() + .response() + .body(); + JSONArray jsonArray = new JSONArray(jsonArrayString); + + // Ideally we'd just return the JSONArray from here, but we have to wrap it in a JSONObject + JSONObject wrapperObject = new JSONObject(); + wrapperObject.put(KEY_WRAPPER_JSON_ARRAY, jsonArray); + internalFileLimit += 50; + if(jsonArray.isEmpty()){ + return null; + } + return wrapperObject; + } + + @Override + protected List getURLsFromJSON(JSONObject json) { + // extract the array from our wrapper JSONObject + JSONArray posts = json.getJSONArray(KEY_WRAPPER_JSON_ARRAY); + ArrayList urls = new ArrayList<>(); + for (int i = 0; i < posts.length(); i++) { + JSONObject post = posts.getJSONObject(i); + pullFileUrl(post, urls); + pullAttachmentUrls(post, urls); + } + LOGGER.debug("Pulled " + urls.size() + " URLs from " + posts.length() + " posts"); + return urls; + } + + @Override + protected void downloadURL(URL url, int index) { + addURLToDownload(url, getPrefix(index)); + } + + /** + * Retrieves the URL of a file from a given JSONObject and adds it to the provided list. + * + * @param post The JSONObject containing information about the file. + * @param results The list to which the URL of the file will be added. + */ + private void pullFileUrl(JSONObject post, ArrayList results) { + try { + JSONObject file = post.getJSONObject(KEY_FILE); + String path = file.getString(KEY_PATH); + if (isImage(path)) { + String url = IMG_URL_BASE + path; + results.add(url); + } else if (isVideo(path)) { + String url = VID_URL_BASE + path; + results.add(url); + } else { + LOGGER.error("Unknown extension for kemono.su path: " + path); + } + } catch (JSONException e) { + /* No-op */ + } + } + + /** + * Retrieves the URLs of attachments from a given JSONObject and adds them to the provided list. + * + * @param post The JSONObject containing information about the post. + * @param results The list to which the URLs of the attachments will be added. + */ + private void pullAttachmentUrls(JSONObject post, ArrayList results) { + try { + JSONArray attachments = post.getJSONArray(KEY_ATTACHMENTS); + for (int i = 0; i < attachments.length(); i++) { + JSONObject attachment = attachments.getJSONObject(i); + pullFileUrl(attachment, results); + } + } catch (JSONException e) { + /* No-op */ + } + } + + /** + * Checks if the given path represents an image file. + * + * @param path The path of the file to be checked. + * @return True if the file is an image, false otherwise. + */ + private boolean isImage(String path) { + Matcher matcher = IMG_PATTERN.matcher(path); + return matcher.matches(); + } + + private boolean isVideo(String path) { + Matcher matcher = VID_PATTERN.matcher(path); + return matcher.matches(); + } +} diff --git a/src/main/java/com/rarchives/ripme/ui/History.java b/src/main/java/com/rarchives/ripme/ui/History.java index 190eeeb8e..0a54804c5 100644 --- a/src/main/java/com/rarchives/ripme/ui/History.java +++ b/src/main/java/com/rarchives/ripme/ui/History.java @@ -90,7 +90,7 @@ public HistoryEntry getEntryByURL(String url) { throw new RuntimeException("Could not find URL " + url + " in History"); } - private void fromJSON(JSONArray jsonArray) { + public void fromJSON(JSONArray jsonArray) { JSONObject json; for (int i = 0; i < jsonArray.length(); i++) { json = jsonArray.getJSONObject(i); @@ -116,7 +116,7 @@ public void fromList(List stringList) { } } - private JSONArray toJSON() { + public JSONArray toJSON() { JSONArray jsonArray = new JSONArray(); for (HistoryEntry entry : list) { jsonArray.put(entry.toJSON()); diff --git a/src/main/java/com/rarchives/ripme/ui/MainWindow.java b/src/main/java/com/rarchives/ripme/ui/MainWindow.java index 35357830c..a493a0ee0 100644 --- a/src/main/java/com/rarchives/ripme/ui/MainWindow.java +++ b/src/main/java/com/rarchives/ripme/ui/MainWindow.java @@ -41,6 +41,8 @@ import com.rarchives.ripme.uiUtils.ContextActionProtections; import com.rarchives.ripme.utils.RipUtils; import com.rarchives.ripme.utils.Utils; +import org.json.JSONArray; +import org.json.JSONObject; /** * Everything UI-related starts and ends here. From 9155af75ca3ca7e8872915c4417a07c44e19182f Mon Sep 17 00:00:00 2001 From: Undid Iridium Date: Thu, 9 Oct 2025 21:41:37 -0400 Subject: [PATCH 3/7] Fixing KemonoRipper --- .../rarchives/ripme/ripper/rippers/KemonoPartyRipper.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/KemonoPartyRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/KemonoPartyRipper.java index f9887d3bd..889656a95 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/KemonoPartyRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/KemonoPartyRipper.java @@ -74,7 +74,7 @@ public String getHost() { @Override public boolean canRip(URL url) { String host = url.getHost(); - return host.endsWith("kemono.party") || host.endsWith("kemono.su"); + return host.endsWith("kemono.party") || host.endsWith("kemono.su") || host.endsWith("kemono.cr"); } @Override @@ -84,9 +84,10 @@ public String getGID(URL url) { @Override protected JSONObject getFirstPage() throws IOException { - String apiUrl = String.format("https://kemono.su/api/v1/%s/user/%s", service, user); + String apiUrl = String.format("https://kemono.su/api/v1/%s/user/%s/posts", service, user); String jsonArrayString = Http.url(apiUrl) .ignoreContentType() + .header("Accept", "text/css") .response() .body(); JSONArray jsonArray = new JSONArray(jsonArrayString); @@ -112,9 +113,10 @@ public String getAlbumTitle(URL url) throws MalformedURLException { @Override protected JSONObject getNextPage(JSONObject doc) throws IOException, URISyntaxException { - String apiUrl = String.format("https://kemono.su/api/v1/%s/user/%s?o=%s", service, user, internalFileLimit); + String apiUrl = String.format("https://kemono.su/api/v1/%s/user/%s/posts?o=%s", service, user, internalFileLimit); String jsonArrayString = Http.url(apiUrl) .ignoreContentType() + .header("Accept", "text/css") .response() .body(); JSONArray jsonArray = new JSONArray(jsonArrayString); From 3f34eda695f18782825f61ad977c259145b8ee34 Mon Sep 17 00:00:00 2001 From: Undid Iridium Date: Thu, 9 Oct 2025 21:45:11 -0400 Subject: [PATCH 4/7] Removing system prints. --- .../com/rarchives/ripme/ripper/rippers/DanbooruRipper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/DanbooruRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/DanbooruRipper.java index f88a3b993..f5f33a160 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/DanbooruRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/DanbooruRipper.java @@ -102,8 +102,8 @@ private String getSubUrlFromUrl(String url){ if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); String responseData = response.body().string(); - System.out.println(url); - System.out.println(responseData); +// System.out.println(url); +// System.out.println(responseData); JSONObject json = new JSONObject(responseData); if(json.has("file_url")){ return json.getString("file_url"); From 3b2e239919d7b4c98c5ebbcf9eadd650d15b719e Mon Sep 17 00:00:00 2001 From: Undid Iridium Date: Thu, 9 Oct 2025 21:51:35 -0400 Subject: [PATCH 5/7] Cleanup --- .../ripme/ripper/DownloadFileThread.java | 32 +++++++++---------- .../ripme/ripper/rippers/DanbooruRipper.java | 3 +- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java b/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java index 524543240..58e2b8396 100644 --- a/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java +++ b/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java @@ -192,13 +192,13 @@ public void run() { } // Save file - InputStream bis; + InputStream byteInputDataStream; if (httpCallResponse.body() != null) { - bis = new BufferedInputStream(httpCallResponse.body().byteStream()); + byteInputDataStream = new BufferedInputStream(httpCallResponse.body().byteStream()); // Check if we should get the file ext from the MIME type if (getFileExtFromMIME) { - String fileExt = URLConnection.guessContentTypeFromStream(bis); + String fileExt = URLConnection.guessContentTypeFromStream(byteInputDataStream); if (fileExt != null) { fileExt = fileExt.replaceAll("image/", ""); saveAs = new File(saveAs.toString() + "." + fileExt); @@ -206,8 +206,8 @@ public void run() { logger.error("Was unable to get content type from stream"); // Try to get the file type from the magic number byte[] magicBytes = new byte[8]; - bis.read(magicBytes, 0, 5); - bis.reset(); + byteInputDataStream.read(magicBytes, 0, 5); + byteInputDataStream.reset(); fileExt = Utils.getEXTFromMagic(magicBytes); if (fileExt != null) { saveAs = new File(saveAs.toString() + "." + fileExt); @@ -219,12 +219,12 @@ public void run() { } } // If we're resuming a download we append data to the existing file - OutputStream fos = null; + OutputStream fileOutputDataStream = null; if (statusCode == 206) { - fos = new FileOutputStream(saveAs, true); + fileOutputDataStream = new FileOutputStream(saveAs, true); } else { try { - fos = new FileOutputStream(saveAs); + fileOutputDataStream = new FileOutputStream(saveAs); } catch (FileNotFoundException e) { // We do this because some filesystems have a max name length if (e.getMessage().contains("File name too long")) { @@ -242,15 +242,15 @@ public void run() { // doesn't include the // users save path, so we get the user save path from the old saveAs saveAs = new File(saveAs.getParentFile().getAbsolutePath() + File.separator + filename); - fos = new FileOutputStream(saveAs); + fileOutputDataStream = new FileOutputStream(saveAs); } else if (saveAs.getAbsolutePath().length() > 259 && Utils.isWindows()) { // This if is for when the file path has gone above 260 chars which windows does // not allow - fos = Files.newOutputStream( + fileOutputDataStream = Files.newOutputStream( Utils.shortenSaveAsWindows(saveAs.getParentFile().getPath(), saveAs.getName())); - assert fos != null: "After shortenSaveAsWindows: " + saveAs.getAbsolutePath(); + assert fileOutputDataStream != null: "After shortenSaveAsWindows: " + saveAs.getAbsolutePath(); } - assert fos != null: e.getStackTrace(); + assert fileOutputDataStream != null: e.getStackTrace(); } } byte[] data = new byte[1024 * 256]; @@ -260,14 +260,14 @@ public void run() { if (shouldSkipFileDownload) { logger.debug("Not downloading whole file because it is over 10mb and this is a test"); } else { - while ((bytesRead = bis.read(data)) != -1) { + while ((bytesRead = byteInputDataStream.read(data)) != -1) { try { observer.stopCheck(); } catch (IOException e) { observer.downloadErrored(url, Utils.getLocalizedString("download.interrupted")); return; } - fos.write(data, 0, bytesRead); + fileOutputDataStream.write(data, 0, bytesRead); if (observer.useByteProgessBar()) { bytesDownloaded += bytesRead; observer.setBytesCompleted(bytesDownloaded); @@ -275,8 +275,8 @@ public void run() { } } } - bis.close(); - fos.close(); + byteInputDataStream.close(); + fileOutputDataStream.close(); } diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/DanbooruRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/DanbooruRipper.java index f5f33a160..6f0ba8a49 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/DanbooruRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/DanbooruRipper.java @@ -102,8 +102,7 @@ private String getSubUrlFromUrl(String url){ if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); String responseData = response.body().string(); -// System.out.println(url); -// System.out.println(responseData); + JSONObject json = new JSONObject(responseData); if(json.has("file_url")){ return json.getString("file_url"); From 617bb3f5b96a85c91f0ca02277dd30afcfec0360 Mon Sep 17 00:00:00 2001 From: Undid Iridium Date: Thu, 9 Oct 2025 22:01:12 -0400 Subject: [PATCH 6/7] Somehow included? Gitignore next time? --- .../resources/LabelsBundle.properties | 76 ------------------ .../resources/LabelsBundle_ar_AR.properties | 57 ------------- .../resources/LabelsBundle_de_DE.properties | 57 ------------- .../resources/LabelsBundle_el_GR.properties | 75 ----------------- .../resources/LabelsBundle_en_US.properties | 1 - .../resources/LabelsBundle_es_ES.properties | 76 ------------------ .../resources/LabelsBundle_fi_FI.properties | 57 ------------- .../resources/LabelsBundle_fr_CH.properties | 57 ------------- .../resources/LabelsBundle_in_ID.properties | 59 -------------- .../resources/LabelsBundle_it_IT.properties | 57 ------------- .../resources/LabelsBundle_kr_KR.properties | 57 ------------- .../resources/LabelsBundle_nl_NL.properties | 57 ------------- .../resources/LabelsBundle_pl_PL.properties | 59 -------------- .../LabelsBundle_porrisavvo_FI.properties | 57 ------------- .../resources/LabelsBundle_pt_BR.properties | 58 ------------- .../resources/LabelsBundle_pt_PT.properties | 75 ----------------- .../resources/LabelsBundle_ru_RU.properties | 57 ------------- .../resources/LabelsBundle_zh_CN.properties | 75 ----------------- out/production/resources/camera.wav | Bin 5134 -> 0 bytes out/production/resources/comment.png | Bin 289 -> 0 bytes out/production/resources/folder.png | Bin 347 -> 0 bytes out/production/resources/gear.png | Bin 670 -> 0 bytes out/production/resources/icon.ico | Bin 4286 -> 0 bytes out/production/resources/icon.png | Bin 728 -> 0 bytes out/production/resources/list.png | Bin 203 -> 0 bytes .../resources/log4j.file.properties | 18 ----- out/production/resources/log4j2-example.xml | 30 ------- out/production/resources/rip.properties | 50 ------------ out/production/resources/stop.png | Bin 164 -> 0 bytes out/production/resources/time.png | Bin 690 -> 0 bytes out/production/resources/wrench.png | Bin 607 -> 0 bytes 31 files changed, 1165 deletions(-) delete mode 100644 out/production/resources/LabelsBundle.properties delete mode 100644 out/production/resources/LabelsBundle_ar_AR.properties delete mode 100644 out/production/resources/LabelsBundle_de_DE.properties delete mode 100644 out/production/resources/LabelsBundle_el_GR.properties delete mode 100644 out/production/resources/LabelsBundle_en_US.properties delete mode 100644 out/production/resources/LabelsBundle_es_ES.properties delete mode 100644 out/production/resources/LabelsBundle_fi_FI.properties delete mode 100644 out/production/resources/LabelsBundle_fr_CH.properties delete mode 100644 out/production/resources/LabelsBundle_in_ID.properties delete mode 100644 out/production/resources/LabelsBundle_it_IT.properties delete mode 100644 out/production/resources/LabelsBundle_kr_KR.properties delete mode 100644 out/production/resources/LabelsBundle_nl_NL.properties delete mode 100644 out/production/resources/LabelsBundle_pl_PL.properties delete mode 100644 out/production/resources/LabelsBundle_porrisavvo_FI.properties delete mode 100644 out/production/resources/LabelsBundle_pt_BR.properties delete mode 100644 out/production/resources/LabelsBundle_pt_PT.properties delete mode 100644 out/production/resources/LabelsBundle_ru_RU.properties delete mode 100644 out/production/resources/LabelsBundle_zh_CN.properties delete mode 100644 out/production/resources/camera.wav delete mode 100644 out/production/resources/comment.png delete mode 100644 out/production/resources/folder.png delete mode 100644 out/production/resources/gear.png delete mode 100644 out/production/resources/icon.ico delete mode 100644 out/production/resources/icon.png delete mode 100644 out/production/resources/list.png delete mode 100644 out/production/resources/log4j.file.properties delete mode 100644 out/production/resources/log4j2-example.xml delete mode 100644 out/production/resources/rip.properties delete mode 100644 out/production/resources/stop.png delete mode 100644 out/production/resources/time.png delete mode 100644 out/production/resources/wrench.png diff --git a/out/production/resources/LabelsBundle.properties b/out/production/resources/LabelsBundle.properties deleted file mode 100644 index 63bca351c..000000000 --- a/out/production/resources/LabelsBundle.properties +++ /dev/null @@ -1,76 +0,0 @@ -Log = Log -History = History -created = created -modified = modified -queue = Queue -Configuration = Configuration -open = Open - -# Keys for the Configuration menu -current.version = Current version -check.for.updates = Check for updates -auto.update = Auto-update? -max.download.threads = Maximum download threads: -timeout.mill = Timeout (in milliseconds): -retry.download.count = Retry download count -retry.sleep.mill = Wait between retries (in milliseconds): -overwrite.existing.files = Overwrite existing files? -sound.when.rip.completes = Sound when rip completes -preserve.order = Preserve order -save.logs = Save logs -notification.when.rip.starts = Notification when rip starts -save.urls.only = Save URLs only -save.album.titles = Save album titles -autorip.from.clipboard = Autorip from Clipboard -save.descriptions = Save descriptions -prefer.mp4.over.gif = Prefer MP4 over GIF -restore.window.position = Restore window position -remember.url.history = Remember URL history -loading.history.from = Loading history from - -# Queue keys -queue.remove.all = Remove All -queue.validation = Are you sure you want to remove all elements from the queue? -queue.remove.selected = Remove Selected - -# History -re-rip.checked = Re-rip Checked -remove = Remove -clear = Clear -history.check.all = Check All -history.check.none = Check None -history.check.selected = Check Selected -history.uncheck.selected = Uncheck Selected -history.load.failed.warning = RipMe failed to load the history file at historyFile.getAbsolutePath() \n\nError: %s\n\nClosing RipMe will automatically overwrite the contents of this file,\nso you may want to back the file up before closing RipMe! -history.load.none = There are no history entries to re-rip. Rip some albums first -history.load.none.checked = No history entries have been 'Checked' Check an entry by clicking the checkbox to the right of the URL or Right-click a URL to check/uncheck all items - -# TrayIcon -tray.show = Show -tray.hide = Hide -tray.autorip = Clipboard Autorip -tray.exit = Exit - -# Misc UI keys -loading.history.from.configuration = Loading history from configuration -interrupted.while.waiting.to.rip.next.album = Interrupted while waiting to rip next album -inactive = Inactive -download.url.list = Download url list -select.save.dir = Select Save Directory - -# Keys for the logs generated by DownloadFileThread -nonretriable.status.code = Non-retriable status code -retriable.status.code = Retriable status code -server.doesnt.support.resuming.downloads = Server doesn't support resuming downloads -# A "magic number" can also be called a file signature -was.unable.to.get.content.type.using.magic.number = Was unable to get content type using magic number -magic.number.was = Magic number was -deleting.existing.file = Deleting existing file -request.properties = Request properties -download.interrupted = Download interrupted -exceeded.maximum.retries = Exceeded maximum retries -http.status.exception = HTTP status exception -exception.while.downloading.file = Exception while downloading file -failed.to.download = Failed to download -skipping = Skipping -file.already.exists = file already exists \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_ar_AR.properties b/out/production/resources/LabelsBundle_ar_AR.properties deleted file mode 100644 index 3ec2ca731..000000000 --- a/out/production/resources/LabelsBundle_ar_AR.properties +++ /dev/null @@ -1,57 +0,0 @@ -Log = \u0645\u0644\u0641 \u0627\u0644\u062A\u062A\u0628\u0639 -History = \u0630\u0627\u0643\u0631\u0629 \u0627\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645 -created = \u0627\u0644\u0627\u0646\u0634\u0627\u0621 -modified = \u062A\u0645 \u0627\u0644\u062A\u0639\u062F\u064A\u0644 -queue = \u0637\u0627\u0628\u0648\u0631 -Configuration = \u062A\u0631\u062A\u064A\u0628 - -# Keys for the Configuration menu - -current.version = \u0627\u0644\u0646\u0633\u062E\u0629 \u0627\u0644\u062D\u0627\u0644\u064A\u0629 -check.for.updates = \u0627\u0644\u0628\u062D\u062B \u0639\u0646 \u062A\u062D\u062F\u064A\u062B -auto.update = \u062A\u062D\u062F\u064A\u062B \u062A\u0644\u0642\u0627\u0626\u0649 -max.download.threads = \u0627\u0642\u0635\u0649 \u0639\u062F\u062F \u0644\u0644\u062A\u062D\u0645\u064A\u0644 -timeout.mill = \u0645\u0637\u062D\u0646\u0629 \u0627\u0644\u0645\u0647\u0644\u0629 -retry.download.count = \u0639\u062F\u062F \u0645\u0631\u0627\u062A \u0645\u062D\u0627\u0648\u0644\u0629 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 -overwrite.existing.files = \u0623\u0639\u0627\u062F\u0629 \u0643\u062A\u0627\u0628\u0629 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0642\u062F\u064A\u0645\u0629 -sound.when.rip.completes = \u0635\u0648\u062A \u0639\u0646\u062F \u0627\u0646\u062A\u0647\u0627\u0621 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 -preserve.order = \u062D\u0641\u0638 \u0627\u0644\u062A\u0631\u062A\u064A\u0628 -save.logs = \u062D\u0641\u0638 \u0645\u0644\u0641\u0627\u062A \u0627\u0644\u062A\u062A\u0628\u0639 -notification.when.rip.starts = \u0627\u0634\u0639\u0627\u0631 \u0639\u0646\u062F \u0627\u0644\u0628\u062F\u0621 -save.urls.only = \u062D\u0641\u0638 \u0627\u0644\u0645\u0633\u0627\u0631\u0627\u062A \u0641\u0642\u0637 -save.album.titles = \u062D\u0641\u0638 \u0639\u0646\u0627\u0648\u064A\u0646 \u0627\u0644\u0627\u0644\u0628\u0648\u0645\u0627\u062A -autorip.from.clipboard = autorip.from.clipboard -save.descriptions = \u062D\u0641\u0638 \u0627\u0644\u062A\u0641\u0627\u0635\u064A\u0644 -prefer.mp4.over.gif = Prefer MP4 over GIF -restore.window.position = \u0627\u0639\u0627\u062F\u0647 \u0645\u0648\u0636\u0639 \u0627\u0644\u0646\u0627\u0641\u0630\u0629 -remember.url.history = \u062A\u0630\u0643\u0631 \u0627\u0644\u0639\u0646\u0627\u0648\u064A\u0646 -loading.history.from = \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0630\u0627\u0643\u0631\u0629 \u0645\u0646 - -# Misc UI keys - -loading.history.from.configuration = \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0630\u0627\u0643\u0631\u0629 \u0645\u0646 \u0627\u0644\u062A\u0631\u062A\u064A\u0628\u0627\u062A -interrupted.while.waiting.to.rip.next.album = \u0627\u064A\u0642\u0627\u0641 \u0627\u0646\u062A\u0638\u0627\u0631 \u0627\u0644\u0627\u0644\u0628\u0648\u0645\u0627\u062A \u0627\u0644\u0642\u0627\u062F\u0645\u0629 -inactive = \u063A\u064A\u0631 \u0646\u0634\u0637 -re-rip.checked = \u0627\u0639\u0627\u062F\u0647 -remove = \u0645\u0633\u062D -clear = \u0645\u0633\u062D -download.url.list = \u062A\u0646\u0632\u064A\u0644 \u062C\u0645\u064A\u0639 \u0627\u0644\u0639\u0646\u0627\u0648\u064A\u0646 -select.save.dir = \u0627\u062E\u062A\u0627\u0631 \u0645\u0633\u0627\u0631 \u0627\u0644\u062D\u0641\u0638 - -# Keys for the logs generated by DownloadFileThread - -nonretriable.status.code = Nonretriable status code -retriable.status.code = Retriable status code -server.doesnt.support.resuming.downloads = Server doesnt support resuming downloads -# A "magic number" can also be called a file signature -was.unable.to.get.content.type.using.magic.number = Was unable to get content type using magic number -magic.number.was = Magic number was -deleting.existing.file = \u0645\u0633\u062D \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0645\u0648\u062C\u0648\u062F\u0629 -request.properties = \u062E\u0635\u0627\u0626\u0635 \u0627\u0644\u0637\u0644\u0628 -download.interrupted = \u0623\u064A\u0642\u0627\u0641 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 -exceeded.maximum.retries = \u0623\u0642\u0635\u0649 \u0639\u062F\u062F \u0645\u0631\u0627\u062A \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629 -http.status.exception = HTTP Exception -exception.while.downloading.file = \u0641\u0634\u0644 \u0627\u062B\u0646\u0627\u0621 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0644\u0641 -failed.to.download = \u0641\u0634\u0644 \u0641\u0649 \u0627\u0644\u062A\u062D\u0645\u064A\u0644 -skipping = \u0645\u062A\u0627\u0628\u0639\u0629 -file.already.exists = \u0627\u0644\u0645\u0644\u0641 \u0645\u0648\u062C\u0648\u062F \u0628\u0627\u0644\u0641\u0639\u0644 diff --git a/out/production/resources/LabelsBundle_de_DE.properties b/out/production/resources/LabelsBundle_de_DE.properties deleted file mode 100644 index 9e7675669..000000000 --- a/out/production/resources/LabelsBundle_de_DE.properties +++ /dev/null @@ -1,57 +0,0 @@ -Log = Log -History = Verlauf -created = erstellt -modified = geändert -queue = Queue -Configuration = Konfiguration - -# Keys for the Configuration menu - -current.version = Aktuelle Version -check.for.updates = Suche nach Aktualisierungen -auto.update = Automatisch Aktualisieren? -max.download.threads = Maximale Download-Threads -timeout.mill = Timeout (in Milliseconds): -retry.download.count = Anzahl der Downloadversuche -overwrite.existing.files = Überschreibe bereits existierende Dateien? -sound.when.rip.completes = Ton abspielen bei fertigem Download -preserve.order = Reihenfolge beibehalten -save.logs = Speichere Logs -notification.when.rip.starts = Benachrichtigung wenn Download startet -save.urls.only = Speicher nur URLs -save.album.titles = Speichere Albumtitels -autorip.from.clipboard = Automatisch Downloaden von der Zwischenablage -save.descriptions = Speichere Beschreibungen -prefer.mp4.over.gif = Bevorzuge MP4 über GIF -restore.window.position = Wieder herstellen der Fensterposition -remember.url.history = Speichere URL Verlauf -loading.history.from = Lade Verlauf von - -# Misc UI keys - -loading.history.from.configuration = Lade Verlauf aus Konfiguration -interrupted.while.waiting.to.rip.next.album = Unterbrochen während Download des nächsten Albums -inactive = Inaktiv -re-rip.checked = Re-rip Ausgewählte -remove = Entfernen -clear = Leeren -download.url.list = Download URL Liste -select.save.dir = Wähle Zielverzeichnis - -# Keys for the logs generated by DownloadFileThread - -nonretriable.status.code = Non-retriable status code -retriable.status.code = Retriable status code -server.doesnt.support.resuming.downloads = Server doesn't support resuming downloads -# A "magic number" can also be called a file signature -was.unable.to.get.content.type.using.magic.number = Was unable to get content type using magic number -magic.number.was = Magic number was -deleting.existing.file = Deleting existing file -request.properties = Request properties -download.interrupted = Download interrupted -exceeded.maximum.retries = Exceeded maximum retries -http.status.exception = HTTP status exception -exception.while.downloading.file = Exception while downloading file -failed.to.download = Failed to download -skipping = Skipping -file.already.exists = file already exists diff --git a/out/production/resources/LabelsBundle_el_GR.properties b/out/production/resources/LabelsBundle_el_GR.properties deleted file mode 100644 index 573e76e68..000000000 --- a/out/production/resources/LabelsBundle_el_GR.properties +++ /dev/null @@ -1,75 +0,0 @@ -Log = Log -History = Ιστορικό -created = δημιουργήθηκε -modified = τροποποιήθηκε -queue = Ουρά -Configuration = Ρυθμίσεις -open = Άνοιγμα - -# Keys for the Configuration menu -current.version = Τρέχουσα έκδοση -check.for.updates = Έλεγχος για ενημερώσεις -auto.update = Αυτόματη ενημέρωση? -max.download.threads = Μέγιστος αριθμός παράλληλων συνδέσεων: -timeout.mill = Λήξη (σε χιλιοστά του δευτερολέπτου): -retry.download.count = Αριθμός επανάληψεων μεταφόρτωσης -overwrite.existing.files = Να αντικατασταθούν τα υπάρχοντα αρχεία? -sound.when.rip.completes = Ήχος όταν το rip ολοκληρωθεί -preserve.order = Διατήρηση σειράς -save.logs = Αποθήκευση logs -notification.when.rip.starts = Ειδοποίηση όταν αρχισει το rip -save.urls.only = Αποθήκευση μόνο των URL -save.album.titles = Αποθήκευση τίτλων των αλμπουμ -autorip.from.clipboard = Αυτόματο rip-άρισμα απο το πρόχειρο (clipboard) -save.descriptions = Αποθήκευση περιγραφής -prefer.mp4.over.gif = Προτίμηση MP4 απο GIF -restore.window.position = Επαναφορά θέσης παραθύρου -remember.url.history = Να θυμάμαι ιστορικο απο URL -loading.history.from = Φόρτωση ιστορικού από - -# Queue keys -queue.remove.all = Διαγραφή όλων -queue.validation = Είσαι σίγουρος οτι θέλεις να διαγράφουν όλα τα στοιχεια της ουράς? -queue.remove.selected = Διαγραφή επιλεγμένου - -# History -re-rip.checked = Re-rip Τσεκαρισμένο -remove = Διαγραφή -clear = Καθάρισμα -history.check.all = Επιλογή όλων -history.check.none = Επιλογή κανενός -history.check.selected = Επιλογή επιλεγμένου -history.uncheck.selected = απο-επιλογή επιλεγμένου -history.load.failed.warning = Το RipMe απέτυχε να φορτώσει το αρχείο ιστορικού απο historyFile.getAbsolutePath() \n\nΛάθος %s\n\n Κλέισιμο του RipMe, θα επιφέρει αυτοματη αντικατάσταση των περιεχόμενων αυτού του αρχείου,\nάρα ίσως θα ήταν καλή ιδέα να πάρεις ένα αντίγραφο ασφαλείας πρίν κλέισεις το RipMe! -history.load.none = Δεν υπάρχουν ιστορικές εγγραφές για να ξαναripάρω. Rip-αρε καποια αλμπουμς πρώτα -history.load.none.checked = Δεν έχει τσεκαριστεί καμια ιστορική εγγραφή. Τσέκαρε μια εγγραφή κλικάροντας το checkbox στα αριστερλα του URL, ή πάτα δεξί κλίκ σε ένα URL για να επιλέξεις/αποεπιλέξεις ολα τα στοιχεία - -# TrayIcon -tray.show = Εμφάνιση -tray.hide = Απόκρυψη -tray.autorip = Αυτόματο rip του προχειρου(clipboard) -tray.exit = Έξοδος - -# Misc UI keys -loading.history.from.configuration = Φόρτωση ιστορικού απο τίς ρυθμίσεις -interrupted.while.waiting.to.rip.next.album = Διεκόπη ενω ήμουν σε αναμονή για να ripάρω το επόμενο άλμπουμ -inactive = Αδρανής -download.url.list = Μεταφόρτωση λίστας URL -select.save.dir = Επιλογή τοποθεσίας απθήκευσης - -# Keys for the logs generated by DownloadFileThread -nonretriable.status.code = Non-retriable status code -retriable.status.code = Retriable status code -server.doesnt.support.resuming.downloads = Ο διακομιστής δεν υποστηρίζει συνέχιση της μεταφόρτωσης -# A "magic number" can also be called a file signature -was.unable.to.get.content.type.using.magic.number = Δεν ευρέθη ο τύπος του αρχείου χρησιμοποιώντας τον μαγικό αριθμό -magic.number.was = Ο μαγικός αριθμός ήταν -deleting.existing.file = Διαγραφή υπάρχοντος αρχείου -request.properties = Ιδιότητες της αίτησης -download.interrupted = Η μεταφόρτωση διεκόπη -exceeded.maximum.retries = Υπέρβαση του μέγιστου αριθμου προσπαθειών -http.status.exception = HTTP status λάθος -exception.while.downloading.file = Λάθος ενω μεταφορτώνοταν ενα αρχειο -failed.to.download = Αποτυχία μεταφόρτωσης -skipping = Παράκαμψη -file.already.exists = το αρχείο υπάρχει ήδη \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_en_US.properties b/out/production/resources/LabelsBundle_en_US.properties deleted file mode 100644 index 7eb1fb85a..000000000 --- a/out/production/resources/LabelsBundle_en_US.properties +++ /dev/null @@ -1 +0,0 @@ -# This need to be empty since EN is the default language in the bundles \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_es_ES.properties b/out/production/resources/LabelsBundle_es_ES.properties deleted file mode 100644 index fea84e5d5..000000000 --- a/out/production/resources/LabelsBundle_es_ES.properties +++ /dev/null @@ -1,76 +0,0 @@ -Log = Log -History = Historia -created = creado -modified = modificado -queue = Cola -Configuration = Configuracion -open = Abrir - -# Keys for the Configuration menu -current.version = Version Actual -check.for.updates = Buscar actualizaciones -auto.update = Actualizar automáticamente? -max.download.threads = Número de descargas simultáneas: -timeout.mill = Tiempo máximo de espera (milisegundos): -retry.download.count = Número de reintentos de descarga: -retry.sleep.mill = Espera entre reintentos (milisegundos): -overwrite.existing.files = Sobreescribir archivos existentes? -sound.when.rip.completes = Notificar cuando el rip termina -preserve.order = Mantener el orden -save.logs = Guardar logs -notification.when.rip.starts = Notificar cuando el rip comienza -save.urls.only = Guardar solamente URLs -save.album.titles = Guardar títulos de álbumes -autorip.from.clipboard = Autorip desde el portapapeles -save.descriptions = Guardar descripciones -prefer.mp4.over.gif = Preferir MP4 sobre GIF -restore.window.position = Restaurar posicion de la ventana -remember.url.history = Recordar historia URL -loading.history.from = Cargando historia desde - -# Queue keys -queue.remove.all = Eliminar todos los elementos -queue.validation = ¿Está seguro que desea eliminar todos los elementos de la lista? -queue.remove.selected = Eliminar elementos seleccionados - -# History -re-rip.checked = Re-rip Marcados -remove = Remover -clear = Limpiar -history.check.all = Marcar Todos -history.check.none = Desmarcar Todos -history.check.selected = Marcar Seleccionados -history.uncheck.selected = Desmarcar Seleccionados -history.load.failed.warning = RipMe falló al cargar la historia de historyFile.getAbsolutePath() \n\nError: %s\n\nSi cierras RipMe los contenidos de este archivo se sobreescribirán,\nhaz un backup antes de cerrar RipMe! -history.load.none = El historial está vacío. Ripea algunos álbumes primero -history.load.none.checked = Ninguna entrada del historial fue 'marcada'. Selecciona una entrada clickeando la casilla a la derecha de la URL o haz click derecho sobre una URL para marcar/desmarcar todas las entradas. - -# TrayIcon -tray.show = Mostrar -tray.hide = Esconder -tray.autorip = Autorip desde el portapapeles -tray.exit = Salida - -# Misc UI keys -loading.history.from.configuration = Cargando historia desde la configuración -interrupted.while.waiting.to.rip.next.album = Interrumpido esperando el rip del próximo álbum -inactive = Inactivo -download.url.list = Lista de URLs a descargar -select.save.dir = Seleccione el directorio de guardado - -# Keys for the logs generated by DownloadFileThread -nonretriable.status.code = Código de estado no recuperable -retriable.status.code = Código de estado recuperable -server.doesnt.support.resuming.downloads = El servidor no soporta resumir las descargas -# A "magic number" can also be called a file signature -was.unable.to.get.content.type.using.magic.number = Imposible obtener el tipo de contenido utilizando el número mágico -magic.number.was = El número mágico era -deleting.existing.file = Eliminando el archivo existente -request.properties = Propiedades del pedido -download.interrupted = Descarga interrumpida -exceeded.maximum.retries = Máximo número de reintentos excedido -http.status.exception = Error de estado HTTP -exception.while.downloading.file = Error al descargar archivo -failed.to.download = Descarga fallida -skipping = Saltando -file.already.exists = el fichero ya existe \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_fi_FI.properties b/out/production/resources/LabelsBundle_fi_FI.properties deleted file mode 100644 index 6edd4e45f..000000000 --- a/out/production/resources/LabelsBundle_fi_FI.properties +++ /dev/null @@ -1,57 +0,0 @@ -Log = Logi -History = Historia -created = luotu -modified = muokattu -queue = Jono -Configuration = Asetukset - -# Keys for the Configuration menu - -current.version = Nykyinen versio -check.for.updates = Tarkista päivitykset -auto.update = Automaattipäivitys? -max.download.threads = Yhtäaikaiset lataukset -timeout.mill = Aikakatkaisu (millisekunneissa): -retry.download.count = Latauksen uudelleenyritykset -overwrite.existing.files = Korvaa nykyiset tiedostot? -sound.when.rip.completes = Valmistumisääni -preserve.order = Pidä järjestys -save.logs = Tallenna logit -notification.when.rip.starts = Valmistumisilmoitus -save.urls.only = Tallenna vain osoitteet -save.album.titles = Tallenna albumiotsikot -autorip.from.clipboard = Ota linkit leikepöydältä -save.descriptions = Tallenna kuvaukset -prefer.mp4.over.gif = Suosi MP4:jää GIF:fin sijasta -restore.window.position = Palauta ikkunan sijainti -remember.url.history = Muista osoitehistoria -loading.history.from = Ladataan historiaa kohteesta - -# Misc UI keys - -loading.history.from.configuration = Ladataan historiaa asetustiedostosta -interrupted.while.waiting.to.rip.next.album = Keskeytetty odottaessa seuraavaa albumia -inactive = Toimeton -re-rip.checked = Uudelleenlataa merkatut -remove = Poista -clear = Tyhjennä -download.url.list = Download url list -select.save.dir = Valitse tallennuskansio - -# Keys for the logs generated by DownloadFileThread - -nonretriable.status.code = Uudelleenyrityskelvoton tilakoodi -retriable.status.code = Uudelleenyritettävä tilakoodi -server.doesnt.support.resuming.downloads = Serveri ei tue latausten uudelleen jatkamista -# A "magic number" can also be called a file signature -was.unable.to.get.content.type.using.magic.number = Sisältötyyppiä ei pystytty taikanumerolla selvittämään -magic.number.was = Taikanumero on -deleting.existing.file = Poistetaan nykyinen tiedosto -request.properties = Pyyntöominaisuudet -download.interrupted = Lataus keskeytetty -exceeded.maximum.retries = Max-uudelleenyritykset saavutettu -http.status.exception = HTTP-tilapoikkeus -exception.while.downloading.file = Poikkeus ladattaessa tiedostoa -failed.to.download = Lataaminen epäonnistui -skipping = Ohitetaan -file.already.exists = tiedosto on jo olemassa \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_fr_CH.properties b/out/production/resources/LabelsBundle_fr_CH.properties deleted file mode 100644 index b489e3e3a..000000000 --- a/out/production/resources/LabelsBundle_fr_CH.properties +++ /dev/null @@ -1,57 +0,0 @@ -Log = Journal -History = Historique -created = créé le -modified = modifié le -queue = File d'attente -Configuration = Configuration - -# Keys for the Configuration menu - -current.version = Version actuelle -check.for.updates = Vérifier mises à jour -auto.update = Mises à jour automatiques? -max.download.threads = Nombre de téléchargements parallèles maximum -timeout.mill = Délai d'expiration (en millisecondes): -retry.download.count = Nombre d'essais téléchargement -overwrite.existing.files = Remplacer fichiers existants ? -sound.when.rip.completes = Son lorsque le rip est terminé -preserve.order = Conserver l'ordre -save.logs = Enregistrer journaux -notification.when.rip.starts = Notification lorsqu'un rip commence -save.urls.only = Enregistrer URL uniquement -save.album.titles = Enregistrer titres d'album -autorip.from.clipboard = Autorip depuis presse-papier -save.descriptions = Enregistrer descriptions -prefer.mp4.over.gif = Préférer MP4 à GIF -restore.window.position = Restaurer la position de la fenêtre -remember.url.history = Se souvenir de l'historique des URL -loading.history.from = Charger l'historique depuis - -# Misc UI keys - -loading.history.from.configuration = Charger l'historique depuis la configuration -interrupted.while.waiting.to.rip.next.album = Interrompu lors de l'attente pour ripper le prochain album -inactive = Inactif -re-rip.checked = Re-rip vérifié -remove = Enlever -clear = Effacer -download.url.list = Télécharger la liste d'URL -select.save.dir = Sélectionner répertoire de sauvegarde - -# Keys for the logs generated by DownloadFileThread - -nonretriable.status.code = Code statut non-réessayable -retriable.status.code = Code statut réessayable -server.doesnt.support.resuming.downloads = Le serveur ne supporte pas la reprise de téléchargements -# A "magic number" can also be called a file signature -was.unable.to.get.content.type.using.magic.number = A été incapable de récupérer le type de contenu en utilisant le Magic Number -magic.number.was = Le Magic Number était -deleting.existing.file = Suppression du fichier existant -request.properties = Demande des propriétés -download.interrupted = Téléchargement interrompu -exceeded.maximum.retries = Nombre maximal de tentatives dépassé -http.status.exception = Exception de statut HTTP -exception.while.downloading.file = Exception lors du téléchargement d'un fichier -failed.to.download = Échec du téléchargement -skipping = Sauter -file.already.exists = fichier existe déjà \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_in_ID.properties b/out/production/resources/LabelsBundle_in_ID.properties deleted file mode 100644 index b5e773d5b..000000000 --- a/out/production/resources/LabelsBundle_in_ID.properties +++ /dev/null @@ -1,59 +0,0 @@ -Log = Log -History = Riwayat -created = dibuat pada -modified = diubah pada -queue = Antrian -Configuration = Pengaturan - -# Keys for the Configuration menu - -current.version = Versi saat ini -check.for.updates = Periksa update -auto.update = Update otomatis? -max.download.threads = Thread unduh maksimal -timeout.mill = Batas waktu (dalam milidetik): -retry.download.count = Jumlah percobaan unduh -overwrite.existing.files = Timpa file yang ada? -sound.when.rip.completes = Hidupkan suara saat rip selesai -preserve.order = Pertahankan urutan -save.logs = Simpan log -notification.when.rip.starts = Pemberitahuan saat rip dimulai -save.urls.only = Simpan URL saja -save.album.titles = Simpan judul album -autorip.from.clipboard = Rip otomatis dari clipboard -save.descriptions = Simpan deskripsi -prefer.mp4.over.gif = Utamakan MP4 dari GIF -restore.window.position = Kembalikan ukuran Window -remember.url.history = Ingat riwayat URL -loading.history.from = Ambil riwayat dari - -# Misc UI keys - -loading.history.from.configuration = Ambil riwayat dari pengaturan -interrupted.while.waiting.to.rip.next.album = Terputus saat menunggu rip album selanjutnya -inactive = Tidak aktif -re-rip.checked = Rip Ulang -remove = Hapus -clear = Hapus Semua -download.url.list = Unduh daftar url -select.save.dir = Pilih Tempat Penyimpanan - -# Keys for the logs generated by DownloadFileThread - -nonretriable.status.code = Kode status tidak dapat diulang -retriable.status.code = Kode status dapat diulang -server.doesnt.support.resuming.downloads = Server tidak punya fitur melanjutkan unduhan - -# A "magic number" can also be called a file signature - -was.unable.to.get.content.type.using.magic.number = Tidak dapat mengetahui tipe file menggunakan magic number -magic.number.was = Magic number nya -deleting.existing.file = Menghapus file yang sudah ada -request.properties = Membutuhkan data properties -download.interrupted = Unduhan terputus -exceeded.maximum.retries = Mencapai percobaan maksimum -http.status.exception = Pengecualian status HTTP -exception.while.downloading.file = Pengecualian saat mengunduh file -failed.to.download = Gagal mengunduh -skipping = Melewatkan -file.already.exists = file sudah ada \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_it_IT.properties b/out/production/resources/LabelsBundle_it_IT.properties deleted file mode 100644 index de00612b7..000000000 --- a/out/production/resources/LabelsBundle_it_IT.properties +++ /dev/null @@ -1,57 +0,0 @@ -Log = Log -History = Cronologia -created = creato -modified = modificato -queue = Coda -Configuration = Configurazione - -# Keys for the Configuration menu - -current.version = Versione corrente -check.for.updates = Controlla aggiornamenti -auto.update = Aggiornamento automatico? -max.download.threads = Thread di download massimi: -timeout.mill = Timeout (in millisecondi): -retry.download.count = Tentativi di download -overwrite.existing.files = Sovrascrivi file esistenti? -sound.when.rip.completes = Suono al completamento del rip -preserve.order = Preserva ordine -save.logs = Salva log -notification.when.rip.starts = Notifica quando inizia il rip -save.urls.only = Salva solo gli URL -save.album.titles = Salva titoli album -autorip.from.clipboard = Autorip da appunti -save.descriptions = Salva descrizioni -prefer.mp4.over.gif = Preferisci MP4 a GIF -restore.window.position = Ripristina posizione della finestra -remember.url.history = Ricorda la cronologia degli URL -loading.history.from = Carica cronologia da - -# Misc UI keys - -loading.history.from.configuration = Caricamento cronologia da configurazione -interrupted.while.waiting.to.rip.next.album = Interrotto mentre attendevo il rip dell'album successivo -inactive = Inattivo -re-rip.checked = Re-rip selezionato -remove = Rimuovi -clear = Pulisci -download.url.list = Download lista degli url -select.save.dir = Seleziona cartella salvataggio - -# Keys for the logs generated by DownloadFileThread - -nonretriable.status.code = Codice di stato irreversibile -retriable.status.code = Codice di stato reversibile -server.doesnt.support.resuming.downloads = Il server non supporta la ripresa dei download -# A "magic number" can also be called a file signature -was.unable.to.get.content.type.using.magic.number = Non � stato possibile ottenere il tipo del contenuto usando magic number -magic.number.was = Magic number era -deleting.existing.file = Cancellazione file esistente -request.properties = Richiesta propriet� -download.interrupted = Download interrotto -exceeded.maximum.retries = Superato il numero massimo di tentativi -http.status.exception = Eccezione stato HTTP -exception.while.downloading.file = Eccezione durante il download del file -failed.to.download = Download non riuscito -skipping = Saltare -file.already.exists = il file esiste gi� \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_kr_KR.properties b/out/production/resources/LabelsBundle_kr_KR.properties deleted file mode 100644 index e01100552..000000000 --- a/out/production/resources/LabelsBundle_kr_KR.properties +++ /dev/null @@ -1,57 +0,0 @@ -Log = \uB85C\uADF8 -History = \uD788\uC2A4\uD1A0\uB9AC -created = \uC0DD\uC0B0\uB428 -modified = \uC218\uC815\uB428 -queue = \uB300\uAE30\uC5F4 -Configuration = \uAD6C\uC131 - -# Keys for the Configuration menu - -current.version = \uD604\uC7AC \uBC84\uC804 -check.for.updates = \uC5C5\uB370\uC774\uD2B8 \uD655\uC778 -auto.update = \uC790\uB3D9 \uC5C5\uB370\uC774\uD2B8 -max.download.threads = \uCD5C\uB300 \uB2E4\uC6B4\uB85C\uB4DC \uC4F0\uB808\uB4DC \uC218 -timeout.mill = \uC2DC\uAC04 \uC81C\uD55C (\uBC00\uB9AC\uCD08): -retry.download.count = \uB2E4\uC6B4\uB85C\uB4DC \uC7AC\uC2DC\uB3C4 \uD68C\uC218 -overwrite.existing.files = \uC911\uBCF5\uD30C\uC77C \uB36E\uC5B4\uC4F0\uAE30 -sound.when.rip.completes = \uC644\uB8CC\uC2DC \uC54C\uB9BC -preserve.order = \uBA85\uB839 \uAE30\uC5B5\uD558\uAE30 -save.logs = \uB85C\uADF8 \uC800\uC7A5 -notification.when.rip.starts = \uC2DC\uC791\uC2DC \uC54C\uB9BC -save.urls.only = URL\uB9CC \uC800\uC7A5\uD558\uAE30 -save.album.titles = \uC568\uBC94 \uC81C\uBAA9 \uC800\uC7A5 -autorip.from.clipboard = \uD074\uB9BD\uBCF4\uB4DC\uC5D0\uC11C \uC790\uB3D9\uC73C\uB85C \uAC00\uC838\uC624\uAE30 -save.descriptions = \uC568\uBC94 \uC124\uBA85 \uC800\uC7A5 -prefer.mp4.over.gif = GIF\uBCF4\uB2E4 MP4 \uC120\uD638 -restore.window.position = \uCC3D \uC704\uCE58 \uBCF5\uC6D0 -remember.url.history = URL \uD788\uC2A4\uD1A0\uB9AC \uAE30\uC5B5\uD558\uAE30 -loading.history.from = \uD788\uC2A4\uD1A0\uB9AC \uAC00\uC838\uC624\uAE30 - -# Misc UI keys - -loading.history.from.configuration = \uAD6C\uC131\uC5D0\uC11C \uD788\uC2A4\uD1A0\uB9AC \uBD88\uB7EC\uC624\uAE30 -interrupted.while.waiting.to.rip.next.album = \uB2E4\uC74C \uC568\uBC94 \uBCF5\uC0AC\uB97C \uAE30\uB2E4\uB9AC\uB294\uB3D9\uC548 \uC911\uB2E8\uB428 -inactive = \uBE44\uD65C\uC131\uD654 -re-rip.checked = \uB2E4\uC2DC \uBCF5\uC0AC\uD558\uAE30 \uCCB4\uD06C\uB428 -remove = \uC120\uD0DD\uD55C \uAE30\uB85D \uC0AD\uC81C -clear = \uD788\uC2A4\uD1A0\uB9AC \uBAA8\uB450 \uC0AD\uC81C -download.url.list = URL \ubAA9\uB85D\uC744 \uB2E4\uC6B4\uB85C\uB4DC\uD558\uAE30 -select.save.dir = \uC800\uC7A5\uC744 \uB514\uB809\uD1A0\uB9AC \uC120\uD0DD\uD558\uAE30 - -# Keys for the logs generated by DownloadFileThread - -nonretriable.status.code = \uBCF5\uAD6C\uD560 \uC218 \uC5C6\uB294 \uC0C1\uD0DC \uCF54\uB4DC -retriable.status.code = \uBCF5\uAD6C\uD560 \uC218 \uC788\uB294 \uC0C1\uD0DC \uCF54\uB4DC -server.doesnt.support.resuming.downloads = \uC11C\uBC84 \uB2E4\uC6B4\uB85C\uB4DC \uC7AC\uAC1C\uB97C \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB2E4 -# A "magic number" can also be called a file signature -was.unable.to.get.content.type.using.magic.number = \uC2DC\uADF8\uB108\uCC98 \uD30C\uC77C \uC0AC\uC6A9\uD558\uC5EC \uB0B4\uC6A9 \uC720\uD615\uC744 \uAC00\uC838\uC62C \uC218 \uC5C6\uAE30 -magic.number.was = \uC2DC\uADF8\uB108\uCC98 \uD30C\uC77C \uC774\uAC70\uC600\uC2B5\uB2C8\uB2E4 -deleting.existing.file = \uAE30\uC874 \uD30C\uC77C\uC744 \uC0AD\uC81C\uD558\uB294 \uC911\uC785\uB2C8\uB2E4 -request.properties = \uC18D\uC131\uC744 \uC694\uCCAD\uD558\uAE30 -download.interrupted = \uB2E4\uC6B4\uB85C\uB4DC\uAC00 \uC911\uB2E8\uB418\uC5C8\uC2B5\uB2C8\uB2E4 -exceeded.maximum.retries = \uCD5C\uB300 \uC7AC\uC2DC\uB3C4 \uD69F\uC218\uB97C \uCD08\uACFC\uD588\uC2B5\uB2C8\uB2E4 -http.status.exception = HTTP \uC0C1\uD0DC \uC608\uC678\uB97C -exception.while.downloading.file = \uD30C\uC77C\uC744 \uB2E4\uC6B4\uB85C\uB4DC\uD558\uB294 \uB3D9\uC548 \uC608\uC678\uAC00 \uBC1C\uC0DD\uD558\uAE30 -failed.to.download = \uB2E4\uC6B4\uB85C\uB4DC\uD558\uC9C0 \uBABB\uD558\uAE30 -skipping = \uAC74\uB108\uB6F0\uACE0 \uC788\uC2B5\uB2C8\uB2E4 -file.already.exists = \uD30C\uC77C\uC774 \uC774\uBBF8 \uC788\uC2B5\uB2C8\uB2E4 \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_nl_NL.properties b/out/production/resources/LabelsBundle_nl_NL.properties deleted file mode 100644 index e1d9d61c3..000000000 --- a/out/production/resources/LabelsBundle_nl_NL.properties +++ /dev/null @@ -1,57 +0,0 @@ -Log = Logboek -History = Geschiedenis -created = gemaakt -modified = aangepast -queue = Wachtrij -Configuration = Configuratie - -# Keys for the Configuration menu - -current.version = Huidige versie -check.for.updates = Controleer op updates -auto.update = Auto-update? -max.download.threads = Maximale downloadthreads -timeout.mill = Timeout (in milliseconden): -retry.download.count = Aantal keren opnieuw proberen te downloaden -overwrite.existing.files = Bestaande bestanden overschrijven? -sound.when.rip.completes = Geluid wanneer rip klaar is -preserve.order = Volgorde behouden -save.logs = Logbestanden opslaan -notification.when.rip.starts = Notificatie wanneer rip start -save.urls.only = Alleen URLs opslaan -save.album.titles = Album titels opslaan -autorip.from.clipboard = Rip automatisch van klembord -save.descriptions = Beschrijvingen opslaan -prefer.mp4.over.gif = Geef de voorkeur aan MP4 over GIF -restore.window.position = Vensterpositie herstellen -remember.url.history = URL geschiedenis onthouden -loading.history.from = Geschiedenis laden van - -# Misc UI keys - -loading.history.from.configuration = Geschiedenis laden van configuratie -interrupted.while.waiting.to.rip.next.album = Onderbroken tijdens het wachten om volgend album te rippen -inactive = Inactief -re-rip.checked = Re-rip Gecheckt -remove = Verwijderen -clear = Opruimen -download.url.list = Download url list -select.save.dir = Select Save Directory - -# Keys for the logs generated by DownloadFileThread - -nonretriable.status.code = Non-retriable status code -retriable.status.code = Retriable status code -server.doesnt.support.resuming.downloads = Server doesn't support resuming downloads -# A "magic number" can also be called a file signature -was.unable.to.get.content.type.using.magic.number = Was unable to get content type using magic number -magic.number.was = Magic number was -deleting.existing.file = Deleting existing file -request.properties = Request properties -download.interrupted = Download interrupted -exceeded.maximum.retries = Exceeded maximum retries -http.status.exception = HTTP status exception -exception.while.downloading.file = Exception while downloading file -failed.to.download = Failed to download -skipping = Skipping -file.already.exists = file already exists \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_pl_PL.properties b/out/production/resources/LabelsBundle_pl_PL.properties deleted file mode 100644 index dbb74ef1f..000000000 --- a/out/production/resources/LabelsBundle_pl_PL.properties +++ /dev/null @@ -1,59 +0,0 @@ -Log = Logi -History = Historia -created = Stworzono -modified = Zmodyfikowano -queue = Kolejka -Configuration = Konfiguracja - -# Keys for the Configuration menu - -current.version = Obecna Wersja -check.for.updates = Sprawdź dostępność aktualizacji -auto.update = Auto Aktualizacja? -max.download.threads = Maksymalna Ilośc Pobieranych Plików: -timeout.mill = Opóźnienie (w milisekundach): -retry.download.count = Liczba ponownych pobrań -overwrite.existing.files = Nadpisać istniejące pliki? -sound.when.rip.completes = Dźwięk po zakończeniu -preserve.order = Zachować porządek -save.logs = Zapisz Logi -notification.when.rip.starts = Powiadomienie przy uruchomieniu pobierania -save.urls.only = Zapisz tylko linki -save.album.titles = Zapisz nazwy albumów -autorip.from.clipboard = Auto pobieranie ze schowka -save.descriptions = Zapisz opis -prefer.mp4.over.gif = Preferuj MP4 od GIF -restore.window.position = Przywróć pozycję okna -remember.url.history = Zapamiętaj historię linków -loading.history.from = Załaduj historię z... - -# Misc UI keys - -loading.history.from.configuration = Załaduj historię z ustawień -interrupted.while.waiting.to.rip.next.album = Przerwany podczas oczekiwania na zgrywanie następnego albumu -inactive = Nieaktywny -re-rip.checked = Sprawdź pobrane ripy -remove = Usuń -clear = Wyczyść -download.url.list = Pobierz listę linków -select.save.dir = Wybierz ścieżkę zapisu - -# Keys for the logs generated by DownloadFileThread - -nonretriable.status.code = Nieodwracalny kod statusu -retriable.status.code = Odzyskiwanie kodu statusu -server.doesnt.support.resuming.downloads = Serwer nie obsługuje wznowienia pobierania - -# A "magic number" can also be called a file signature - -was.unable.to.get.content.type.using.magic.number = Nie udało się uzyskać typu zawartości za pomocą magicznej liczby -magic.number.was = Magiczną liczbą była -deleting.existing.file = Usuwanie istniejących plików -request.properties = Poproś o uprawnienia -download.interrupted = Pobieranie przerwane -exceeded.maximum.retries = Spodziewana ilośc powtórzeń -http.status.exception = Wyjątek statusu http -exception.while.downloading.file = Wystąpił problem podczas pobierania pliku -failed.to.download = Nie można pobrać pliku -skipping = Pomijanie -file.already.exists = Plik już istnieje \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_porrisavvo_FI.properties b/out/production/resources/LabelsBundle_porrisavvo_FI.properties deleted file mode 100644 index a2ba056e4..000000000 --- a/out/production/resources/LabelsBundle_porrisavvo_FI.properties +++ /dev/null @@ -1,57 +0,0 @@ -Log = Loki -History = Historriijja -created = luatu -modified = muakat -queue = Jono -Configuration = Assetuksse - -# Keys for the Configuration menu - -current.version = Nykyne versijjo -check.for.updates = Tarkist update -auto.update = Automaatpäivvitys? -max.download.threads = Yht'aikasse ripi -timeout.mill = Timeout (millisekois): -retry.download.count = Ripi retry count -overwrite.existing.files = Korvvaa nykysse filu? -sound.when.rip.completes = Valmistummis'ään -preserve.order = Pir järestys -save.logs = Tallen loki -notification.when.rip.starts = Valmistummisilmotus -save.urls.only = Tallen vaa ossottee -save.album.titles = Tallen album'otsiko -autorip.from.clipboard = Ot linki leikpöyrrält -save.descriptions = Tallen kuvvauksse -prefer.mp4.over.gif = Suasi MP4 GIF sijjaa -restore.window.position = Palaut ikkunna sijaant -remember.url.history = Muist osot'hissa -loading.history.from = Larrataa hissaa lähteest - -# Misc UI keys - -loading.history.from.configuration = Larrataa hissaa asetusfilust -interrupted.while.waiting.to.rip.next.album = Keskeytet venates seurraavvaa album -inactive = Idle -re-rip.checked = Re-rip merkatu -remove = Poist -clear = Tyhjen -download.url.list = Download url list -select.save.dir = Valkkaa savekansio - -# Keys for the logs generated by DownloadFileThread - -nonretriable.status.code = retry-kelvvoto statuskoori -retriable.status.code = Retriable statuskoori -server.doesnt.support.resuming.downloads = Servvu ei tue lataaste retryamist -# A "magic number" can also be called a file signature -was.unable.to.get.content.type.using.magic.number = Sissälttötyyppii ei pystyt selvittää taikanumerolla -magic.number.was = Taikanumero o -deleting.existing.file = Deletoirraa nykyne filu -request.properties = Pyynt'omminassuurre -download.interrupted = Lattaus keskeytet -exceeded.maximum.retries = Max-retryet saavvutet -http.status.exception = HTTP-statuspoikkeus -exception.while.downloading.file = Poikkeus larattajjes filuu -failed.to.download = Lattaamminne failas -skipping = Skipataa -file.already.exists = filu ojjo ollemmas \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_pt_BR.properties b/out/production/resources/LabelsBundle_pt_BR.properties deleted file mode 100644 index 882092353..000000000 --- a/out/production/resources/LabelsBundle_pt_BR.properties +++ /dev/null @@ -1,58 +0,0 @@ -Log = Registro -History = Histórico -created = criado -modified = modificado -queue = Fila -Configuration = Configuração - -# Keys for the Configuration menu - -current.version = Versão atual -check.for.updates = Verificar atualizações -auto.update = Atualização automática? -max.download.threads = Número máximo de conexões: -timeout.mill = Tempo limite (em milissegundos): -retry.download.count = Número de tentativas -overwrite.existing.files = Sobrescrever arquivos existentes? -sound.when.rip.completes = Som quando terminar o rip -preserve.order = Preservar ordem -save.logs = Salvar registros -notification.when.rip.starts = Som quando rip começar -save.urls.only = Salvar apenas URLs -save.album.titles = Salvar títulos dos álbums -autorip.from.clipboard = Autorip da área de transferência -save.descriptions = Salvar descrições -prefer.mp4.over.gif = Preferir MP4 a GIF -restore.window.position = Restaurar posição da janela -remember.url.history = Lembrar histórico de URL -loading.history.from = Carregando histórico de - -# Misc UI keys - -loading.history.from.configuration = Carregando o histórico da configuração -interrupted.while.waiting.to.rip.next.album = Interrompido enquanto esperava o rip do próximo álbum -inactive = Inativo -re-rip.checked = Re-ripar selecionados -remove = Remover -clear = Limpar -download.url.list = Baixar lista de URLs -select.save.dir = Selecionar diretório de gravação - -# Keys for the logs generated by DownloadFileThread - -nonretriable.status.code = Código de não retentável -retriable.status.code = Código de retentável -server.doesnt.support.resuming.downloads = O servidor não suporta continuar downloads - -# A "magic number" can also be called a file signature -was.unable.to.get.content.type.using.magic.number = Não foi possível achar o tipo de conteúdo usando o número mágico -magic.number.was = O número mágico foi -deleting.existing.file = Deletar arquivo existente -request.properties = Requerer propriedades -download.interrupted = Download interrompido -exceeded.maximum.retries = Excedeu tentativas máximas -http.status.exception = Exceção de status HTTP -exception.while.downloading.file = Exceção enquanto o arquivo era baixado -failed.to.download = Falha no download -skipping = Pulando -file.already.exists = arquivo já existe \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_pt_PT.properties b/out/production/resources/LabelsBundle_pt_PT.properties deleted file mode 100644 index a0058524e..000000000 --- a/out/production/resources/LabelsBundle_pt_PT.properties +++ /dev/null @@ -1,75 +0,0 @@ -Log = Registo -History = Histórico -created = criado -modified = modificado -queue = Fila -Configuration = Configuração -open = Abrir - -# Keys for the Configuration menu -current.version = Versão atual -check.for.updates = Verificar atualizações -auto.update = Atualização automática? -max.download.threads = Número máximo de processos de transferência -timeout.mill = Tempo de espera (em milissegundos): -retry.download.count = Número de novas tentativas de transferência -overwrite.existing.files = Sobrescrever ficheiros existentes? -sound.when.rip.completes = Notificar quando o rip é concluído -preserve.order = Manter a ordem -save.logs = Guardar registos -notification.when.rip.starts = Notificar quando o rip começar -save.urls.only = Apenas guardar URLs -save.album.titles = Guardar os títulos de álbuns -autorip.from.clipboard = Autorip da área de transferência -save.descriptions = Guardar descrições -prefer.mp4.over.gif = Preferir MP4 a GIF -restore.window.position = Restaurar posição da janela -remember.url.history = Lembrar histórico de URL -loading.history.from = Carregar histórico de - -# Queue keys -queue.remove.all = Remover todos -queue.validation = Tem a certeza de que quer remover todos os elementos da fila? -queue.remove.selected = Remover seleccionados - -# History -re-rip.checked = Re-rip seleccionados -remove = Remover -clear = Limpar -history.check.all = Seleccionar todos -history.check.none = Não seleccionar nenhuma -history.check.selected = Marca seleccionada -history.uncheck.selected = Desmaracar seleccionada -history.load.failed.warning = RipMe não carregou o ficheiro de histórico no historyFile.getAbsolutePath() \n\nErro: %s\n\nFechar o RipMe sobregravará automaticamente o conteúdo deste ficheiro.\nPode querer fazer o backup do ficheiro antes de fechar o RipMe! -history.load.none = Não há entradas no histórico para re-rip. Rip alguns álbuns primeiro. -history.load.none.checked = Não foram seleccionadas entradas no histórico. Selecione uma entrada clicando na caixa à direita do URL ou clique com o botão direito em um URL para selecione/desselecione todos os itens. - -# TrayIcon -tray.show = Mostrar -tray.hide = Esconder -tray.autorip = AutoRip clipboard -tray.exit = Saída - -# Misc UI keys -loading.history.from.configuration = A carregar o histórico da configuração -interrupted.while.waiting.to.rip.next.album = Interrompido durante a espera do rip do próximo álbum -inactive = Inativo -download.url.list = A lista de URLs para download -select.save.dir = Selecione salvar diretório - -# Keys for the logs generated by DownloadFileThread -nonretriable.status.code = Código de estado não recuperável -retriable.status.code = Código de estado recuperável -server.doesnt.support.resuming.downloads = Servidor não suporta o reinício de downloads -# A "magic number" can also be called a file signature -was.unable.to.get.content.type.using.magic.number = Impossibilidade de obter o tipo de conteúdo utilizando o número mágico -magic.number.was = Número mágico foi -deleting.existing.file = Eliminação do ficheiro existente -request.properties = Propriedades do pedido -download.interrupted = Download interrompido -exceeded.maximum.retries = Excedeu tentativas máximas -http.status.exception = Exceção de status HTTP -exception.while.downloading.file = Exceção enquanto o ficheiro era baixado -failed.to.download = Falha no download -skipping = Pulando -file.already.exists = Ficheiro já existe \ No newline at end of file diff --git a/out/production/resources/LabelsBundle_ru_RU.properties b/out/production/resources/LabelsBundle_ru_RU.properties deleted file mode 100644 index a3100df85..000000000 --- a/out/production/resources/LabelsBundle_ru_RU.properties +++ /dev/null @@ -1,57 +0,0 @@ -Log = Лог -History = История -created = создано -modified = изменено -queue = Очередь -Configuration = Настройки - -# Keys for the Configuration menu - -current.version = Текущая версия -check.for.updates = Проверить обновления -auto.update = Автообновление -max.download.threads = Максимальное число потоков: -timeout.mill = Задержка (в миллисекундах): -retry.download.count = Число повторов -overwrite.existing.files = Перезаписать существующие файлы? -sound.when.rip.completes = Звук при завершении -preserve.order = Сохранять порядок -save.logs = Сохранять логи -notification.when.rip.starts = Уведомление при запуске -save.urls.only = Сохранять только ссылки -save.album.titles = Сохранять названия альбомов -autorip.from.clipboard = Автоскачивание из буфера -save.descriptions = Сохранять описания -prefer.mp4.over.gif = Предпочесть MP4 вместо GIF -restore.window.position = Восстановить положение окна -remember.url.history = Запоминать историю запросов -loading.history.from = Загрузить историю из - -# Misc UI keys - -loading.history.from.configuration = Загрузить историю из настроек -interrupted.while.waiting.to.rip.next.album = Прервано во время ожидания скачивания следующего альбома -inactive = Неактивно -re-rip.checked = Перекачать выбранное -remove = Удалить -clear = Очистить -download.url.list = Скачать список ссылок -select.save.dir = Выбрать папку для сохранения - -# Keys for the logs generated by DownloadFileThread - -nonretriable.status.code = Код не возвращаемого статуса -retriable.status.code = Код возвращаемого статуса -server.doesnt.support.resuming.downloads = Сервер не поддерживает возобновление загрузки -# A "magic number" can also be called a file signature -was.unable.to.get.content.type.using.magic.number = Не удалось получить тип контента с использованием магического номера -magic.number.was = Магический номер был -deleting.existing.file = Удаление существующего файла -request.properties = Свойства запроса -download.interrupted = Загрузка прервана -exceeded.maximum.retries = Достигнуто максимальное количество попыток -http.status.exception = Исключение HTTP-статуса -exception.while.downloading.file = Исключение при загрузке файла -failed.to.download = Не удалось загрузить -skipping = Пропуск -file.already.exists = Файл уже существует diff --git a/out/production/resources/LabelsBundle_zh_CN.properties b/out/production/resources/LabelsBundle_zh_CN.properties deleted file mode 100644 index cd43da1ce..000000000 --- a/out/production/resources/LabelsBundle_zh_CN.properties +++ /dev/null @@ -1,75 +0,0 @@ -Log = 日志 -History = 历史 -created = 创建时间 -modified = 修改时间 -queue = 队列 -Configuration = 配置 -open = 打开 - -# Keys for the Configuration menu -current.version = 当前版本 -check.for.updates = 检查更新 -auto.update = 自动更新? -max.download.threads = 最大下载线程数: -timeout.mill = 超时(毫秒): -retry.download.count = 重试下载次数 -overwrite.existing.files = 覆盖现有文件? -sound.when.rip.completes = 抓取完成时播放声音 -preserve.order = 保持顺序 -save.logs = 保存日志 -notification.when.rip.starts = 通知抓取开始 -save.urls.only = 仅保存 URL -save.album.titles = 保存专辑标题 -autorip.from.clipboard = 监视剪贴板上的 URL -save.descriptions = 保存描述 -prefer.mp4.over.gif = 首选 MP4 而非 GIF -restore.window.position = 恢复窗口位置 -remember.url.history = 记住 URL 历史 -loading.history.from = 加载历史从 - -# Queue keys -queue.remove.all = 移除全部 -queue.validation = 您确定要移除队列内的全部项目? -queue.remove.selected = 移除所选项目 - -# History -re-rip.checked = 重新抓取选中的项目 -remove = 移除 -clear = 清除 -history.check.all = 选中全部 -history.check.none = 取消选中全部 -history.check.selected = 选中所选项目 -history.uncheck.selected = 取消选中所选项目 -history.load.failed.warning = RipMe 加载位于 historyFile.getAbsolutePath() 的历史文件失败\n\n错误:%s\n\n关闭 RipMe 会自动覆盖此文件的内容,\n请在关闭 RipMe 前备份它! -history.load.none = 无可重新抓取的历史条目。请先抓取一些专辑 -history.load.none.checked = 未 '选中' 任何历史条目,请通过选中所需 URL 前面的复选框或URL 的右键菜单以选中所需条目 - -# TrayIcon -tray.show = 显示 -tray.hide = 隐藏 -tray.autorip = 监视剪贴板上的 URL -tray.exit = 退出 - -# Misc UI keys -loading.history.from.configuration = 从配置加载历史 -interrupted.while.waiting.to.rip.next.album = 等候抓取下一专辑期间发生中断 -inactive = 非活动 -download.url.list = 下载 URL 列表 -select.save.dir = 选择保存目录 - -# Keys for the logs generated by DownloadFileThread -nonretriable.status.code = 非可重试状态代码 -retriable.status.code = 可重试状态代码 -server.doesnt.support.resuming.downloads = 服务器不支持继续下载(续传) -# A "magic number" can also be called a file signature -was.unable.to.get.content.type.using.magic.number = 不能使用幻数获取内容类型 -magic.number.was = 幻数为 -deleting.existing.file = 删除现有文件 -request.properties = 请求属性 -download.interrupted = 下载中断 -exceeded.maximum.retries = 超过最大重试次数 -http.status.exception = HTTP 状态意外 -exception.while.downloading.file = 下载文件时发生意外 -failed.to.download = 下载失败 -skipping = 跳过 -file.already.exists = 文件已存在 \ No newline at end of file diff --git a/out/production/resources/camera.wav b/out/production/resources/camera.wav deleted file mode 100644 index 617e0f03f802559268e4ef31d294e35f53344cd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5134 zcmZ8ke}rvGe(wz%^H=OjY>corOspr5Wej8Ac=UAirdMlv)Ap|G%3a5vIUG5wq!dN1 zQp!}6R4U3AWll~UP8^53u3TEv(YEvA@o3(@c=8w{^Virh3`-38YlZ3k)V=*?S8nTb z&#fQdU-kWdKHvJQ?|$byzyC*jdp~%4c3AzGed8;8dwXBP-&g;9Z~OnHy;t_if)&5~ z!@a#*%)N2HxSzkZFm zn{J;z|McV)HnP3F{pYv0x1T@QyZ5l-pWS}A`Skk!-X2kpSJ%nA=5^KTO-dm81+xTPMt_4y3W?X|a`zVL5;a+|(+^~vq$w>L%kP#!#-_0M{v z=Vz}yaIaS7lW5%BI1zXoSMT?M&DeA`UXPnj^W}o4*vYz~LN-Lyh6ye>i?x(yUg>!= zXHl``v=9%Mrh9a~Y0T0!R5z=%>8&9|FPL>#?P_F;!USzL%6S(hiK^{fQ!bmvP}>e& z@cx7pq4iW78&go_%*0VR%5>uOvQgb-)W-9M6NYnXIbRke7+BZp&=4w}WA#mYN>A$CR6ELoVs7=x&a zBO5n;n<%9OsbS0*G;10ree_bg&@@uQ2gi-oI7ixcgOL^Qq@tYbZXHa`N}-c!*Vc%N zvfx`IOfs_JQkf7X^O}=ZM`EQ#=1J0#UV83?uTO0^8D@y#Gzp^YGMJR=ZAzFgu=gP$B4U8?BTTwg7ng}GQZH+gKFzY>xQA`@^yrwl*D*4nJg)C7z zIA`HgV%i(8kOQ1qtaCz2f%rHJ$&5-w0-=Qjgjh?XnO5EeW34e#Ssx5EGOI&0QY%TN zwcZ*n7{_kqyC@oNVLJ)2^;|SYwIkxAtH#eYxNSU0qn$=n> zu9A};$IOv&R5_G>G=eH?gZ55xsAa+htQH<1fvoom+2C|?T3V+#aKb5^p8&THA#1071TGB|SE2+AqweKyNmmG<1gmoP!6fVPP5<_YPan^LG78IOT zNp&a+giF{O>D;>{YZR6#$*?Alv38zn{q8^f{I9@ku&L6+` zx9|SPdq4lhUwrSKKTW^7z5T(fC$CP2@BQD&PygkZ{46d0`|oZ){>9_H2Prm&2kKcOl+kgMoKmF)$4*!h*WW`3L(0qlQ4_}Au)}5 zc6PQJ_1@W+S5HryKe)d6`02yr+y9-8YjrT2ub#b7AAIm+K7aF@Z(P`G>K;9!Uw^=7 z{#TzAv7ZXybu+D>y}zkQP2GGkoDVHo?!P{*+P%f)g*|fO-t9+iDvv&U@$l%^;_!d! zLp{FsHJtjUr`&xQ=tFJZe>~o-P9E@T!))7r+8-T~&4}7;__QL0e&*}?VE+0&rdMax zveN7E!BIK&W>T~L2drB))@=G0Nzra1U8kQuUfYXxoKkLiqOl zvJZldoh|yyb#W+Hy5y2En#;?X`gGyPv&8{N9bUsK>}QLMX8%6MS*pc3(-(;c~YmxevA_%KtmO!ZU^j2v#Re`ORhkP&|kU1O9v1V zfl*e4Rchw78%AAPXNRyTb!-8YQ5FJV(1^AbB{#BN_hjkXl?EpX+xDCYGfGl19K>2t zTE~=@r3ypG%S!hbZm~~N8-2BG!uexaicOzA8fXd|=2qCD7DBDkB&RnzzfVFW-C&w&|9mrBgRLmLC z88I~y<8s|Ba3she%KbFRQifoosEJBJR?-Ina0NEEiY^w?r}Ms<>&YX;z}>c`b2COJ zF&|?9L4)jk&r1@AR@a40I;mMHM-U39Omrv%D<~*mf=`T2flC~hs4InVNiAJqa*wh=!S8kZ{b4TwuJn{q_%*3&Uu`0C6365!@4fK^#askGzTyL97qrRcmqDKQ?gVI5dup696 z8{0bYGEfP$#vxa7>beM*5mO}^=*21mpBY6YvQp8Hfz@b1l+jehgqkv~*Ov0sE6{la zMcab+I6v)SHAROxIn8qrtl=DdD;Ps_5;a6>!cC?UUSi0j4^e341QRLZe5mqCHo9vS zS{<|~$O3INhp9O#Xa_iM4ANQj18CcmK@6g;N{z-=d5ccONwjO|Y%F4fMoBkyKsRM+ zgVPmF21)BEFRoeDf9i;TW$(;Rd_l4-GpwD_fZ_5LWGri`dKg`b?}Y?j1Z$Ycz({8%?-4dvkbvApIVyosG}Wrm!__b&bFwLwMnWV5)Eh@5m!dc#2^Y9^ZWYIJR=YjatF>9!Ctg3qhv=+!+2VhW435{z#*38#8t^;I02j(UC>0EVWmyS?Tl{C^Ed0ff z+^$1XzVI15vLQNOWwwTGjm;J!q%aNLI7H=t3}HLueK7%JF|d`e)d!hbads-3kY8a_ zMv|-yFImEN(QaV3CNIi^+vyz3tP7uP-u62ip5JmL@&JajS=+HJ7IWL7Y~bC09^UQ9 zyLJ+{^6nPpYs{|0O$=pUx2g~Xq})z_CMBdrp26AREysKN z+IV%69!$%XSSOzy0h&nt$)~|90kXEPI^e0eiNp{@;Q-*)PAc zvYf^6ajQ6Q$^zg7cEk6(tk08o!OmlOS3ZF432d`sJ9hVYc`Cme-xZva|!7Zv~j diff --git a/out/production/resources/comment.png b/out/production/resources/comment.png deleted file mode 100644 index 9b4061f5bb9b9add1b1a1737642890a9cb7a3b2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE(}6TtKSPDj(q%x-8c!F;5Rc<;Cv44Oa?MZ#2kVW+_>6(sgH>#{Nw@KW%S+ct6o!@VvNo+$6?8|FqVNXaCmR zVxEy7t;)~9-jOB7%Xm4VzA$1L|8e!j2_ijBiJUF&2CEJivFu`7#qeWQ+SPT_j%;3P z7PZPFY5nm%xnc>I3avv`w=R|c^W9ahKyceOolSbuTe+t&e+W_88QT?myqkT3`Oj^- Vrl((R>;}4(}6TtKf@3Ihqge@Gfx-C5Rc<;FBoPyIf}4es6L)=CB0fe=a7Dq zqecQ8N*P+bW-Ck9U1f3PNd6+-vh!;7hkG*j z7!(yHTW|YXuC(*YVcPL4H9be?RsQ1X9|IrEUh<1!2rH z(%LrH+O<1g)$*{NmYuQ1vcvBEp9e}-b&Fk=bcfAR5pAEnzwYY4KpD;Z1$Q|U8Iu0k ze+XledBDK_qbKp?n$5>D-hAitx%GTaBIC-{#p`C&`>7v2eW~e)Zo{F8XJ@v2`~Bgo f=Ih5!P8%5K)j39J_*dlseaztL>gTe~DWM4fGq8tu diff --git a/out/production/resources/gear.png b/out/production/resources/gear.png deleted file mode 100644 index 7729a56bb17cbb5772c0e2c876cc4cf072672af7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 670 zcmV;P0%84$P)`zN#mH4cas)TBg+Mh24()ulK*sD0Og(DK2nypTBPnZ9>&?>+CHd*AoqUx)Y! znoefc6(08`Zq&-fC&O|BegstXx*u+20bIG_i}PWTB$AnJ6j#ybO6ZkH`=KDKz*t}G ziK5R`Lyv^^O+oG=1nTAD5}=*}iB#qe%2uxv44;!3BjoDuiZ2EPW@qgS$Kh5TG~&y) z^G!JzZ-o>4`-Pvz41QV8#vh9dUqLoOHaq8Y8;W#lbr9?xTvw_h+5*BJSzGN1>t3T! zZ~$VqZH11UJdpEyk<4xb&~%odulO0l0d%HkE*<=>5AF1RIXrB%Cof081IxzThF=wCjIjFY z!|S)*N8v!GIkNT#^A=C08d>VUq;+w0J#J->gD1CqaQy_ zC+0G55EcwlDb*{*^sroi|AT;j@x_fQAS&eT<`N~{RB#nEcdxMo4rk~VUdEu}*ilAid!;+7RK6h3nYa|M zRsI5-Gvre1j>>EH0bdcoUw}kKMH%3;0(E#+wRn!_3+DC5j3HC;n55mosbbO9yTfJ+ zGVCzC4<0fGwi0Prx$=7;3bd_ z_yC@OH{cJuvoQ2joQ#9uyOYTBfOXrz3#t{5GBLlyX1JlDL2lf*p#zk=P*PIz=j7z1 z57ycguUXRPty{O=t*)+?^73-2sHiYNKUGy#0%*1NJz*oACZxfI%1Rl{(c!89PA_~ zW8gqMQ5_u}l9-sNM?^$8d)mA=#^d0Rz!Kg+E_U=)TU&dvprAm)!^3yYvp(n>$;->r zySuw(b#?Uv+Hnjp?y>lBZPpLO(AVIaGiN9E-w1P-?`DzQDZOG{Hs{G$E>U@>Fev0 zsi~>A>0^F={{5bwo}XDa?B9Bi81FMc4E)}O$vNw@$`^3Zq&xEm!Cr_RPWBqgX7<<*ahVP-Fp>p-=RmsfEH1^1N2-c3e zjEoHC(CGWU)>Fs)#>dA?b91xYzkmNrlAB_92X*Jprl z5XEbiGcz+k9f#k+Wz?GWAlTRJo%Z(jS2#cMqCQzP_HaA2;W4jwo3fb;ebrY?qgpKVdBz8yf|mEfNfQ7W3|R3E^f2HV vXuEwn!nWeIWn1xB(KfNEEqpH|wl&QI@B#wxgDgnb;75bM+wi*r4%7G>cfM4I diff --git a/out/production/resources/icon.png b/out/production/resources/icon.png deleted file mode 100644 index 606ae39bcb6e25763a18b25fb25e4728bf10a54c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmV;}0w?{6P)P000;W1^@s654Bdt00006VoOIv00000 z008+zyMF)x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-UJc^G%XU0>2&}A03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00KNoL_t(Y$Gw(4tRYbp z$Il&vVv1Rn>0ZW1bR<3sr36up>QxGbP9Yfy(WoYoP*VvBqS$RjbPAzUAyFWBZ*=!b<%jLVzo2F?X2m@2mmhbo?#fZ2$|34H@Bb5<#0Zq7ss_)?P?Qh zG#X$S=DVng)oOjZDaPY*P$(4d!uxza2w-3n@v0z z3}Cn0iHo#a?Zt#Dl?qsv6}8jr^(}6TtKSPDj(q%wSn5T h@c{cp4T%Z{2JP=Q0{kZx4g+mq@O1TaS?83{1OW0IIbHw& diff --git a/out/production/resources/log4j.file.properties b/out/production/resources/log4j.file.properties deleted file mode 100644 index 8606390e9..000000000 --- a/out/production/resources/log4j.file.properties +++ /dev/null @@ -1,18 +0,0 @@ -# define the file appender -log4j.appender.FILE = org.apache.log4j.RollingFileAppender -log4j.appender.FILE.File = ripme.log -log4j.appender.FILE.ImmediateFlush = true -log4j.appender.FILE.Threshold = warn -log4j.appender.FILE.maxFileSize = 20MB -log4j.appender.FILE.layout = org.apache.log4j.PatternLayout -log4j.appender.FILE.layout.ConversionPattern = %d %-5p %c{2} %x.%M() %m%n - -# define the console appender -log4j.appender.stdout = org.apache.log4j.ConsoleAppender -log4j.appender.stdout.Target = System.out -log4j.appender.stdout.Threshold = info -log4j.appender.stdout.layout = org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern = %m%n - -# now map our console appender as a root logger, means all log messages will go to this appender -log4j.rootLogger = debug, stdout, FILE \ No newline at end of file diff --git a/out/production/resources/log4j2-example.xml b/out/production/resources/log4j2-example.xml deleted file mode 100644 index dbc0888cd..000000000 --- a/out/production/resources/log4j2-example.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - # Console appender - - # Pattern of log message for console appender - - - - # Rolling appender - - - %d{yyyy-MM-dd HH:mm:ss} %p %m%n - - - - - - - - - - - - - - - diff --git a/out/production/resources/rip.properties b/out/production/resources/rip.properties deleted file mode 100644 index 35d6c1230..000000000 --- a/out/production/resources/rip.properties +++ /dev/null @@ -1,50 +0,0 @@ - -# Download threads to use per ripper -threads.size = 5 - -# Overwrite existing files -file.overwrite = false - -# Number of retries on failed downloads -download.retries = 1 - -# File download timeout (in milliseconds) -download.timeout = 60000 - -# Page download timeout (in milliseconds) -page.timeout = 5000 - -# Maximum size of downloaded files in bytes (required) -download.max_size = 104857600 - -# Any URLs ending with one of these comma-separated values will be skipped -#download.ignore_extensions = mp4,gif,m4v,webm,html - -# Don't retry on 404 errors -error.skip404 = true - -# API creds -twitter.auth = VW9Ybjdjb1pkd2J0U3kwTUh2VXVnOm9GTzVQVzNqM29LQU1xVGhnS3pFZzhKbGVqbXU0c2lHQ3JrUFNNZm8= -tumblr.auth = JFNLu3CbINQjRdUvZibXW9VpSEVYYtiPJ86o8YmvgLZIoKyuNX -gw.api = gonewild - -twitter.max_requests = 10 -twitter.rip_retweets = false - -clipboard.autorip = false - -download.save_order = true - -## Reddit ripper configs -# Determines whether or not to filter reddit ripping by upvote -# Enables the reddit.min_upvotes and reddit.max_upvotes properties when true -reddit.rip_by_upvote = false - -# Only rips file if the number of upvotes is equal to or greater than this value -# Requires reddit.rip_by_upvote = true -reddit.min_upvotes = 0 - -# Only rips files if the number of upvotes is less than this value -# Requires reddit.rip_by_upvote = true -reddit.max_upvotes = 10000 - diff --git a/out/production/resources/stop.png b/out/production/resources/stop.png deleted file mode 100644 index 7a570dd074269c5c4fd71c2b304d601ee48141b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE(}6TtKSPDj(q%x7zNd?0h{y5d1PRu~4M7JwydP;XAFdDLxpXX1 tOn7arLDs<)tc%5X*ty*fYAldpV7Oh%B++7@8w%9Q;OXk;vd$@?2>|jXC-ndT diff --git a/out/production/resources/time.png b/out/production/resources/time.png deleted file mode 100644 index c9208a40737a3d367f80c20573245b835ec74547..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 690 zcmV;j0!{siP)$oFBGx9>RN?%0RS=79l~KHj+ze)zUvA+!eSB z3Jrp26NRRQz9zF;;hU)G&GSjP=Q);@3L6A4h#aF0;0k?FfZtXm8DUH0=UrQ zQIiRsT4}XhUaR|KXOJuQ4~0g8sQ9KTrWr}`sNzz{UK4l*mo(CWg~3S5g_*cH;y5S z-2ffz?)6Je0YGm6i0DK!S>mi31Y06H0T5cf*&IL^0I;F+G;Q&^)pG9{X-)532>H!Wp`H{d3Jhly8^ItvMn#6 zUJ>Coa1QutRjyT+7ha_Tfb{Dcbk2l2`uXGAO00f|3EcSMMAvJ;ycM0UE(On1%;`V2 YpXBG(FK^B}P5=M^07*qoM6N<$f{}(aegFUf diff --git a/out/production/resources/wrench.png b/out/production/resources/wrench.png deleted file mode 100644 index fb6cd81005ae5a6e2900e7ec5c528e36ab1993e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmV-l0-*hgP)0v@6o#L3BiR&b%|*%0hqy_)2nBNmdl4(ag^CD@f}s8YUAV4`B7Uvh zxDZ|V2V5wwMAub{Z7H_PO1khX;fC5`WFz)&Xj-1X9l zD6GzzRHBGPVdbR>z^RXCKpqYI!FcNifn9B4S4>;v6bglSW1?_>xES1M%=3P5OJSll zNjuzKJ4xMW4H(=pP;QD418#T7`&OQx*=GXSE?;C4)w4TP;a-lKZDtYhOQitpH%RY+grruzf%y4Tx;L?pDcP ze^K5)Jf=8T1x^BkAS;T_37i7rZ9IOcI;WQw-n}&fbW*N3dO<{<+Cq#0y+W)2y+Eu1 zwve6xHW0_wxS^$m*%zvM8Q5&IJRod6gQj=zuOZ^-W3c!YJ8896T}&j?iz0Ha$?r~i te)ev^-hU|P2j}zt==Yo-O!V(&q2CZ5wSBj+*TMh*002ovPDHLkV1i_;03-ka From 042c6a00e9bc90e0029865160f37a3b3acb006bf Mon Sep 17 00:00:00 2001 From: Undid Iridium Date: Thu, 9 Oct 2025 22:06:25 -0400 Subject: [PATCH 7/7] This test seems to be broken because of website itself - images are uh gone and I don't trust to go on that website a second longer than it took to load it. --- .../ripme/tst/ripper/rippers/FreeComicOnlineRipperTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/FreeComicOnlineRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/FreeComicOnlineRipperTest.java index e33b9de25..fe2465d8e 100644 --- a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/FreeComicOnlineRipperTest.java +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/FreeComicOnlineRipperTest.java @@ -4,12 +4,15 @@ import java.net.URI; import java.net.URISyntaxException; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import com.rarchives.ripme.ripper.rippers.FreeComicOnlineRipper; public class FreeComicOnlineRipperTest extends RippersTest { + //Seems broken from the website side. @Test + @Disabled public void testFreeComicOnlineChapterAlbum() throws IOException, URISyntaxException { FreeComicOnlineRipper ripper = new FreeComicOnlineRipper( new URI("https://freecomiconline.me/comic/perfect-half-hentai0003/chapter-01/").toURL());