From 91ce7a29aa3324a8e321d002e62fbf4e5b1f13ec Mon Sep 17 00:00:00 2001 From: Chloe Surett Date: Sat, 9 Aug 2025 16:17:20 -0400 Subject: [PATCH 01/15] Add .idea to .gitignore (#547) --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index b7b533b4..b70c56b7 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,6 @@ scripts/docker/*.err # nix build output link result + +# IDEA config +.idea/ From e9ddfccfb60f43a66e04f463a2084c666d4cb557 Mon Sep 17 00:00:00 2001 From: Tr3yWay996 <112483771+Tr3yWay996@users.noreply.github.com> Date: Sat, 9 Aug 2025 22:26:52 +0200 Subject: [PATCH 02/15] Add French translation (#486) Add French translation (#486) --------- Signed-off-by: ed Co-authored-by: Packingdustry Co-authored-by: Andrew Lee Co-authored-by: A. Jakubiak --- copyparty/web/browser.js | 631 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 630 insertions(+), 1 deletion(-) diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index b3d174f8..f6b1e3eb 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -3785,6 +3785,635 @@ var Ls = { "lang_set": "ladataanko sivu uudestaan kielen vaihtamiseksi?", }, + "fra": { + "tt": "français", + + "cols": { + "c": "bouton d'action", + "dur": "durée", + "q": "qualité / débit binaire", + "Ac": "codec audio", + "Vc": "codec vidéo", + "Fmt": "format / conteneur", + "Ahash": "somme de contrôle audio", + "Vhash": "somme de contrôle vidéo", + "Res": "résolution", + "T": "type de fichier", + "aq": "qualité audio / débit binaire", + "vq": "qualité vidéo / débit binaire", + "pixfmt": "sous-échantillonnage / structure de pixel", + "resw": "résolution horizontale", + "resh": "résolution verticale", + "chs": "canaux audio", + "hz": "fréquence" + }, + + "hks": [ + [ + "misc", + ["Échap", "ferme divers menus"], + + "gestionaire de fichiers", + ["G", "activer vue en liste / vue en grille"], + ["T", "activer les miniatures / icônes"], + ["⇧ A/D", "taille des miniatures"], + ["ctrl-K", "suprimer la sélection"], + ["ctrl-X", "couper la sélection au presse-papier"], + ["ctrl-C", "copier la sélection au presse-papier"], + ["ctrl-V", "coller (déplacer/copier) ici"], + ["Y", "télécharger la sélection"], + ["F2", "renomer la sélection"], + + "file-list-sel", + ["Espace", "activer la sélection de fichiers"], + ["↑/↓", "déplacer le selecteur"], + ["ctrl ↑/↓", "déplacer le curseur et la zone d'affichage"], + ["⇧ ↑/↓", "sélectioner le fichier précédent/suivant"], + ["ctrl-A", "sélectionner tout les fichiers / dossiers"], + ], [ + "navigation", + ["B", "basculer la vue en fil d'Ariane / panneau de navigation"], + ["I/K", "dossier précédent/suivant"], + ["M", "dossier parent (ou réduire le dossier actuel)"], + ["V", "activer les dossiers / fichiers texte dans le volet de navigation"], + ["A/D", "taille du volet de navigation"], + ], [ + "lecteur-audio", + ["J/L", "chanson précédente/suivante"], + ["U/O", "sauter 10s en arrière/avant"], + ["0..9", "sauter à 0%..90%"], + ["P", "lecture/pause (démarre également la lecture)"], + ["S", "sélectionner la chanson en cours"], + ["Y", "télécharger le morceau"], + ], [ + "visionneuse d'image", + ["J/L, ←/→", "image précédente/suivante"], + ["Début/Fin, ⭦/Fin", "première/dernière image"], + ["F", "plein écran"], + ["R", "rotation horaire"], + ["⇧ R", "rotation antihoraire"], + ["S", "sélectionner l'image"], + ["Y", "télécharger l'image"], + ], [ + "lecteur vidéo", + ["U/O", "sauter 10s en arrière/avant"], + ["P/K/Espace", "lecture/pause"], + ["C", "continuer de lire la suivante"], + ["V", "lire en boucle"], + ["M", "couper le son"], + ["[ and ]", "définir l'intervalle de boucle"], + ], [ + "visionneuse de texte", + ["I/K", "fichier précédent/suivant"], + ["M", "fermer le fichier texte"], + ["E", "modifier le fichier texte"], + ["S", "sélectioner le fichier (pour le couper/copier/renommer)"], + ] + ], + + "m_ok": "OK", + "m_ng": "Annuler", + + "enable": "Activer", + "danger": "DANGER", + "clipped": "copié dans le presse-papier", + + "ht_s1": "seconde", + "ht_s2": "secondes", + "ht_m1": "minute", + "ht_m2": "minutes", + "ht_h1": "heure", + "ht_h2": "heures", + "ht_d1": "jour", + "ht_d2": "jours", + "ht_and": " et ", + + "goh": "panneau-de-commande", + "gop": 'élément "frère" précédent">précédent', + "gou": 'dossier parent">haut', + "gon": 'dossier suivant">suivant', + "logout": "Déconnexion ", + "access": "accès", + "ot_close": "fermer le sous-menu", + "ot_search": "chercher des fichiers par leurs attributs, chemin / nom, tag musicaux, ou nimporte quelle combinaison de ces options$N$N<code>foo bar</code> = doit contenir à la fois «foo» et «bar»,$N<code>foo -bar</code> = doit contenir «foo» mais pas «bar»,$N<code>^yana .opus$</code> = commence par «yana» et est un fichier «opus»$N<code>"try unite"</code> = contient exactement «try unite»$N$Nle format de date est iso-8601, comme$N<code>2009-12-31</code> ou <code>2020-09-12 23:30:00</code>", + "ot_unpost": "unpost: supprimer vos téléchargements récents, ou annuler ceux en cours", + "ot_bup": "bup: téléverseur de base, prend même en charge netscape 4.0", + "ot_mkdir": "mkdir: créer un nouveau répertoire", + "ot_md": "new-md: créer un nouveau document markdown", + "ot_msg": "msg: envoyer un message au journal du serveur", + "ot_mp": "options du lecteur multimedia", + "ot_cfg": "options de configuration", + "ot_u2i": 'up2k : téléverser des fichiers (si vous avez un accès en écriture) ou basculer en mode recherche pour voir s\'ils existent quelque part sur le serveur$N$Nles téléversements peuvent être repris, ils sont multithreadé, et les horodatages des fichiers sont préservés, mais cela utilise plus de CPU que [🎈]  (le téléverseur de base)

pendant les téléversements, cette icône devient un indicateur de progression!', + "ot_u2w": 'up2k : téléverser des fichiers avec prise en charge de la reprise (fermez votre navigateur et déposez les mêmes fichiers plus tard)$N$multithreadé, et les horodatages des fichiers sont préservés, mais cela utilise plus de CPU que [🎈]  (le téléverseur de base)

pendant les téléversements, cette icône devient un indicateur de progression!', + "ot_noie": 'Utilisez Chrome / Firefox / Edge', + + "ab_mkdir": "créer un nouveau répertoire", + "ab_mkdoc": "faire un nouveau document markdown", + "ab_msg": "envoyer un message au journal du serveur", + + "ay_path": "passer aux dossiers", + "ay_files": "passer aux fichiers", + + "wt_ren": "renommer les éléments sélectionnés$NHotkey: F2", + "wt_del": "supprimer les éléments sélectionnés$NHotkey: ctrl-K", + "wt_cut": "couper les éléments sélectionnés <small>(puis coller ailleurs)</small>$NHotkey: ctrl-X", + "wt_cpy": "copier les éléments sélectionnés dans le presse-papiers$N(pour les coller ailleurs)$NHotkey: ctrl-C", + "wt_pst": "coller une sélection précédemment coupée / copiée$NHotkey: ctrl-V", + "wt_selall": "sélectionner tous les fichiers$NHotkey: ctrl-A (lorsque le fichier est sélectionné)", + "wt_selinv": "inverser la sélection", + "wt_zip1": "télécharger ce dossier en tant qu'archive", + "wt_selzip": "télécharger la sélection en tant qu'archive", + "wt_seldl": "télécharger la sélection en tant que fichiers séparés$NHotkey: Y", + "wt_npirc": "copier les informations de la musique au format irc", + "wt_nptxt": "copier les informations de la musique en texte brut", + "wt_m3ua": "ajouter à la playlist m3u (cliquez sur 📻copier plus tard)", + "wt_m3uc": "copier la playlist m3u dans le presse-papiers", + "wt_grid": "basculer entre la vue en grille / liste$NHotkey: G", + "wt_prev": "musique précédente$NHotkey: J", + "wt_play": "lecture / pause$NHotkey: P", + "wt_next": "musique suivante$NHotkey: L", + + "ul_par": "téléversements parallèles:", + "ut_rand": "attribution de noms de fichiers aléatoires", + "ut_u2ts": "copier l'horodatage de dernière modification$Nde votre système de fichiers vers le serveur\">📅", + "ut_ow": "écraser les fichiers existants sur le serveur?$N🛡️: jamais (générera un nouveau nom de fichier à la place)$N🕒: écraser si le fichier sur le serveur est plus ancien que le vôtre$N♻️: toujours écraser si les fichiers sont différents", + "ut_mt": "continuer à calculer la somme de contrôle d'autres fichiers pendant le téléversement$N$Npeut-être désactiver si votre CPU ou HDD est la cause de perte de performances", + "ut_ask": 'demander confirmation avant le début du téléversement">💭', + "ut_pot": "améliorer la vitesse de téléversement sur les appareils lents$Nen simplifiant l'interface utilisateur", + "ut_srch": "ne pas réellement téléverser, mais vérifier si les fichiers existent déjà$N sur le serveur (scannera tous les dossiers que vous pouvez lire)", + "ut_par": "mettre en pause les téléversements en le réglant sur 0$N$Naugmenter si votre connexion est lente / à forte latence$N$Nle garder à 1 sur le LAN ou si le HDD du serveur est un goulot d'étranglement", + "ul_btn": "déposer des fichiers / dossiers
ici (ou cliquez sur moi)", + "ul_btnu": "T É L É V E R S E R", + "ul_btns": "C H E R C H E R", + + "ul_hash": "somme de contrôle", + "ul_send": "envoyer", + "ul_done": "terminé", + "ul_idle1": "aucun téléversement n'est encore dans la file d'attente", + "ut_etah": "moyenne <em>hashing</em> vitesse, et temps estimé jusqu'à la fin", + "ut_etau": "moyenne <em>upload</em> vitesse et temps estimé jusqu'à la fin", + "ut_etat": "moyenne <em>total</em> vitesse et temps estimé jusqu'à la fin", + + "uct_ok": "terminé avec succès", + "uct_ng": "non réussi : échoué / rejeté / non trouvé", + "uct_done": "terminés et échoué combinés", + "uct_bz": "hachage ou téléversement", + "uct_q": "inactif, en attente", + + "utl_name": "nom de fichier", + "utl_ulist": "liste", + "utl_ucopy": "copie", + "utl_links": "liens", + "utl_stat": "état", + "utl_prog": "progrès", + + // keep short: + "utl_404": "404", + "utl_err": "ERREUR", + "utl_oserr": "OS-ERREUR", + "utl_found": "trouvé", + "utl_defer": "état", + "utl_yolo": "YOLO", + "utl_done": "terminé", + + "ul_flagblk": "les fichiers ont été ajoutés à la file d'attente
cependant, il y a un processus up2k actif dans un autre onglet du navigateur,
en attente qu'il finisse d'abord", + "ul_btnlk": "la configuration du serveur a verrouillé cette options dans cet état", + + "udt_up": "Téléverser", + "udt_srch": "Chercher", + "udt_drop": "déposer ici", + + "u_nav_m": '
aight, ques-que tu à ?
Enter = Fichiers (un ou plus)\nESC = Un dossier (sous-dossiers inclus)', + "u_nav_b": 'FichiersUn dossier', + + "cl_opts": "options", + "cl_themes": "thème", + "cl_langs": "langue", + "cl_ziptype": "téléchargement de dossier", + "cl_uopts": "up2k", + "cl_favico": "favicon", + "cl_bigdir": "gros dossiers", + "cl_hsort": "#sort", + "cl_keytype": "notation des touches", + "cl_hiddenc": "colonnes masquées", + "cl_hidec": "masquer", + "cl_reset": "réinitialiser", + "cl_hpick": "cliquez sur les en-têtes de colonnes pour les masquer dans le tableau ci-dessous", + "cl_hcancel": "masquage des colonnes annulé", + + "ct_grid": '田 grille', + "ct_ttips": '◔ ◡ ◔">ℹ️ infobulles', + "ct_thumb": 'vue en grille, activer les icônes ou les miniatures$NHotkey: T">🖼️ minia', + "ct_csel": 'utiliser CTRL et MAJ pour selectioner des fichiers en vue en grille">sel', + "ct_ihop": 'quand le visionneuse d\'image est fermé, faire defiller vers le bas jusqu\'au dernier fichier">g⮯', + "ct_dots": 'voir les fichiers caché (si le serveur le permet)">dotfiles', + "ct_qdel": 'ne demander qu\'une confirmation lors de la suppression de fichiers>qdel', + "ct_dir1st": 'trier les dossiers avant les fichiers">📁 first', + "ct_nsort": 'triage par numérotation (pour les nom de fichiers qui sont numérotés)">nsort', + "ct_utc": 'voir tout les horodatage en format UTC">UTC', + "ct_readme": 'voir le fichier README.md dans le listage des dossiers">📜 readme', + "ct_idxh": 'voir une version html (index.html) au-lieu du listage des dossiers normal">htm', + "ct_sbars": 'montrer la barre de defilement">⟊', + + "cut_umod": "si un fichier existe déjà sur le server, mettre à jour l'horodatage de dernière modification du serveur pour qu'il corresponde à votre fichier local (nécessite des autorisations d'écriture et de suppression)\">re📅", + + "cut_turbo": "le bouton yolo, vous ne voulez probablement PAS activer ceci:$N$Nutilisez ceci si vous téléchargez une grande quantité de fichiers et que vous devez redémarrer pour une raison quelconque, et que vous souhaitez continuer le téléchargement dès que possible$N$Ncela remplace la vérification de hachage par une simple "est-ce que cela a la même taille de fichier sur le serveur?" donc si le contenu du fichier est différent, il ne sera PAS téléchargé$N$Nvous devriez désactiver cela lorsque le téléchargement est terminé, puis "télécharger" les mêmes fichiers à nouveau pour laisser le client les vérifier\">turbo", + + "cut_datechk": "n'a aucun effet à moins que le bouton turbo ne soit activé$N$Nréduit le facteur yolo d'un tout petit peu ; vérifie si les horodatages des fichiers sur le serveur correspondent aux vôtres$N$Ndevrait théoriquement attraper la plupart des téléchargements inachevés / corrompus, mais n'est pas un substitut à un passage de vérification avec turbo désactivé par la suite\">date-chk", + + "cut_u2sz": "taille (en MiB) de chaque morceau de téléversement; des grosse valeurs vont mieux passer si la distance entre le serveur et vous est trés grande. Si vous avez une connection trés instable, essayer de plus petites valeurs", + + "cut_flag": "s'assurer qu'un seul onglet est entrain de mettre un fichier en ligne a la fois $N -- les autres onglets doivent avoir cette option activé aussi $N -- affecte seulement les onglets qui sont sur le même domaine", + + "cut_az": "mettre en ligne les fichiers dans l'ordre alphabétique, plutôt que le plus petit fichier en premier$N$Nl'ordre alphabétique peut rendre la lecture plus douce sur pour les yeux si quelque chose s'est mal passé sur le serveur, mais cela rend le téléversement légèrement plus lent sur fibre / LAN", + + "cut_nag": "recevoir une notification via l'OS quand un téléversement finit$N(seulement si le navigateur ou l'onglet n'est pas actif)", + "cut_sfx": "alerte audible quand le téléversement finit$N(seulement si le navigateur ou l'onglet n'est pas actif)", + + "cut_mt": "utiliser le calcul de somme de contrôle multithreadé pour accelerer le processus$N$Ncela utilise des web-workers et nécessite$Nplus de RAM (jusqu'à 512 MiB supplémentaires)$N$NCela rend https 30% plus rapide, http 4.5x plus rapide\">mt", + + "cut_wasm": "utiliser wasm au lieu du hachage intégré du navigateur; améliore la vitesse sur les navigateurs basés sur chrome mais augmente la charge CPU, et de nombreuses anciennes versions de chrome ont des bugs qui font que le navigateur consomme toute la RAM et plante si cela est activé\">wasm", + + "cft_text": "text favicon (laisser vide et rafraîchir pour désactiver)", + "cft_fg": "couleur de premier plan", + "cft_bg": "couleur d'arrière-plan", + + "cdt_lim": "nombre maximum de fichiers à afficher dans un dossier", + "cdt_ask": "lorsque vous faites défiler vers le bas,$Nau lieu de charger plus de fichiers,$Ndemander quoi faire", + "cdt_hsort": "combien de règles de tri (<code>,sorthref</code>) à inclure dans les media-URLs. Définir cette valeur à 0 ignorera également les règles de tri incluses dans les liens média lorsque vous cliquez dessus.", + + "tt_entree": "afficher le panneau de navigation (arborescence des dossiers)$NHotkey: B", + "tt_detree": "afficher le fil d’Ariane$NHotkey: B", + "tt_visdir": "faire défiler jusqu'au dossier sélectionné", + "tt_ftree": "basculer l'arborescence des dossiers / fichiers texte$NHotkey: V", + "tt_pdock": "afficher les dossiers parents dans un panneau ancré en haut", + "tt_dynt": "croissance automatique à mesure que l'arborescence s'étend", + "tt_wrap": "retour à la ligne", + "tt_hover": "révéler les lignes débordantes au survol$N( interrompt le défilement à moins que le curseur de la souris ne soit dans la gouttière gauche )", + + "ml_pmode": "à la fin du dossier…", + "ml_btns": "cmds", + "ml_tcode": "transcoder", + "ml_tcode2": "transcoder vers", + "ml_tint": "teinte", + "ml_eq": "égaliseur audio", + "ml_drc": "compresseur de plage dynamique", + + "mt_loop": "répéter en boucle une musique\">🔁", + "mt_one": "stopper après une musique\">1️⃣", + "mt_shuf": "mélanger les musiques dans chaque dossiers\">🔀", + "mt_aplay": "jouer automatiquement si le lien utilisé pour accéder au serveur a un song-ID $N$N, désactiver cela arrêtera également la mise à jour de l'URL de la page avec les song-IDs lors de la lecture de la musique, pour éviter la lecture automatique si ces paramètres sont perdus mais que l'URL reste\">a▶", + "mt_preload": "commencer à charger la prochaine chanson près de la fin pour une lecture sans interruption\">preload", + "mt_prescan": "explorer le dossier suivant avant la dernière musique$Nne finisse, pour garder le navigateur content$Npour qu'il n'arrête pas la lecture\">nav", + "mt_fullpre": "essayer de pré-charger la musique entière;$N✅ activer en cas de connection instable,$N❌ désactiver en revanche sur une connection lente va probablement être mieux\">full", + "mt_fau": "sur téléphone, empêche la musique de s'arrêter de jouer si la prochaine n'est pas pré-chargée assez rapidement (peut rendre l'affichage des tags buggé)\">☕️", + "mt_waves": "barre de progression en spectrograme:$Nmontrer l'amplitude audio dans la miniature\">~s", + "mt_npclip": "montrer les boutons pour copier le morceau en cours de lecture\">/np", + "mt_m3u_c": "montrer les boutons pour copier les$morceaux sélectionnées en tant qu'entrées de playlist m3u8\">📻", + "mt_octl": "intégration os (touches de raccourci multimédia / osd)\">os-ctl", + "mt_oseek": "permettre la recherche via l'intégration os$N$Nremarque : sur certains appareils (iPhones),$Ncela remplace le bouton de la chanson suivante\">seek", + "mt_oscv": "montrer la couverture de l'album dans l'osd\">art", + "mt_follow": "garder la piste en cours défilée dans la vue\">🎯", + "mt_compact": "contrôles compacts\">⟎", + "mt_uncache": "effacer le cache  (essayez ceci si votre navigateur a mis en cache$Nun copie défectueuse d'une chanson, ce qui empêche sa lecture)\">uncache", + "mt_mloop": "lire en boucle le dossier ouvert\">🔁 loop", + "mt_mnext": "charger le dossier suivant et continuer\">📂 next", + "mt_mstop": "arrêter la lecture\">⏸ stop", + "mt_cflac": "convertir flac / wav en opus\">flac", + "mt_caac": "convertir aac / m4a en opus\">aac", + "mt_coth": "convertir tout les autres (pas mp3) en opus\">oth", + "mt_c2opus": "meilleur choix pour PC fixe, PC portable, android\">opus", + "mt_c2owa": "opus-weba, pour iOS 17.5 et supérieur\">owa", + "mt_c2caf": "opus-caf, pour iOS 11 à 17\">caf", + "mt_c2mp3": "utilisez ceci sur des appareils très anciens\">mp3", + "mt_c2flac": "meilleure qualité sonore, mais téléchargements énormes\">flac", + "mt_c2wav": "lecture non compressée (encore plus gros)\">wav", + "mt_c2ok": "bien, bon choix", + "mt_c2nd": "ce n'est pas le format de sortie recommandé pour votre appareil, mais ça devrait aller", + "mt_c2ng": "votre appareil ne semble pas prendre en charge ce format de sortie, mais essayons quand même", + "mt_xowa": "il y a des bugs dans iOS qui empeche d'avoir une lecture en ariere plan en utilisant ce format; utilisez caf ou mp3 à la place", + "mt_tint": "niveau d’arrière-plan (0–100) de la barre de progression$Npour rendre la mise en mémoire tampon moins gênante", + "mt_eq": "active l'égaliseur et le contrôle de gain;$N$Nboost <code>0</code> = volume standard 100% (non modifié)$N$Nwidth <code>1  </code> = stéréo standard (non modifié)$Nwidth <code>0.5</code> = 50% de crossfeed gauche-droite$Nwidth <code>0  </code> = mono$N$Nboost <code>-0.8</code> & width <code>10</code> = suppression vocale :^)$N$Nl'activation de l'égaliseur rend les albums gapless entièrement gapless, alors laissez-le activé avec toutes les valeurs à zéro (sauf largeur = 1) si vous vous en souciez", + "mt_drc": "active le compresseur de plage dynamique (aplanisseur de volume / brickwaller); activera également l'EQ pour équilibrer les choses, donc définissez tous les champs EQ sauf 'width' sur 0 si vous ne le voulez pas$N$Ndiminue le volume de l'audio au-dessus de THRESHOLD dB; pour chaque RATIO dB au-delà de THRESHOLD, il y a 1 dB de sortie, donc des valeurs par défaut de tresh -24 et ratio 12 signifient qu'il ne devrait jamais être plus fort que -22 dB et qu'il est sûr d'augmenter le boost de l'égaliseur à 0.8, ou même 1.8 avec ATK 0 et un énorme RLS comme 90 (ne fonctionne que dans firefox; RLS est max 1 dans les autres navigateurs)$N$N(voir wikipedia, ils expliquent cela beaucoup mieux)", + + "mb_play": "lecture", + "mm_hashplay": "lire ce fichier audio ?", + "mm_m3u": "appuyez sur Entrée/OK pour lire\nappuyez sur Échap/Annuler pour modifier", + "mp_breq": "nécessite firefox 82+ ou chrome 73+ ou iOS 15+", + "mm_bload": "chargement en cours…", + "mm_bconv": "conversion en {0}, veuillez patienter…", + "mm_opusen": "votre navigateur ne peut pas lire les fichiers aac / m4a ;\nle transcodage en opus est maintenant activé", + "mm_playerr": "échec de la lecture : ", + "mm_eabrt": "La tentative de lecture a été annulée", + "mm_enet": "Votre connexion internet est instable ou inexistante", + "mm_edec": "Ce fichier est supposément corrompu??", + "mm_esupp": "Votre navigateur ne comprend pas ce format audio", + "mm_eunk": "Erreur inconnue", + "mm_e404": "Impossible de lire l'audio ; erreur 404 : fichier introuvable.", + "mm_e403": "Impossible de lire l'audio ; erreur 403 : accès refusé.\n\nEssayez d'appuyer sur F5 pour recharger, peut-être que vous avez été déconnecté", + "mm_e500": "Impossible de lire l'audio ; erreur 500 : vérifiez les journaux du serveur.", + "mm_e5xx": "Impossible de lire l'audio ; erreur serveur ", + "mm_nof": "Pas d'autres fichiers audio trouvés par ici", + "mm_prescan": "En recherche d'une autre musique à lire…", + "mm_scank": "Prochaine musique trouvée :", + "mm_uncache": "cache vidé ; toutes les chansons seront retéléchargées lors de la prochaine lecture", + "mm_hnf": "cette chanson n'existe plus", + + "im_hnf": "cette image n'existe plus", + + "f_empty": 'ce dossier est vide', + "f_chide": 'ceci va cacher les colonnes «{0}»\n\ntu peut les réafficher dans les options', + "f_bigtxt": "ce fichier fait {0} MiB -- tu veut vraiment le voir en tant que texte ?", + "f_bigtxt2": "voir seulement la fin du fichier à la place ? ceci activera aussi le suivi en temps réel, affichant les nouvelles lignes de texte au fur et à mesure", + "fbd_more": '
showing {0} of {1} files; show {2} or show all
', + "fbd_all": '
showing {0} of {1} files; show all
', + "f_anota": "seulement {0} des {1} elements sont selectioné;\npour selectioner le dossier entier, fait défiler jusqu'au fond", + + "f_dls": 'le lien de fichier dans le répertoire actuel\nà été changé en lien de téléchargement', + + "f_partial": "Pour télécharger de façon sécurisée un fichier qui est entrain de se faire téléverser, cliquez sur le fichier qui a le même nom, mais sans l'extension de fichier .PARTIAL. Choisissez CANCEL ou appuiez sur la touche Échap pour faire cela.\n\nAppuyer sur OK / Entrée ignorera cet avertissement et continuera à télécharger le fichier temporaire .PARTIAL à la place, ce qui donnera presque certainement des données corrompues.", + + "ft_paste": "coller {0} éléments$NHotkey: ctrl-V", + "fr_eperm": 'impossible de renommer:\n vous n\'avez pas la permission “move” dans ce dossier', + "fd_eperm": 'impossible de supprimer:\nvous n\'avez pas la permission “delete” dans ce dossier', + "fc_eperm": 'impossible de couper:\nvous n\'avez pas la permission “move” dans ce dossier', + "fp_eperm": 'impossible de coller:\nvous n\'avez pas la permission “write” dans ce dossier', + "fr_emore": "sélectionnez au moins un élément à renommer", + "fd_emore": "sélectionnez au moins un élément à supprimer", + "fc_emore": "sélectionnez au moins un élément à couper", + "fcp_emore": "sélectionnez au moins un élément à copier dans le presse-papiers", + + "fs_sc": "partager le dossier dans lequel vous vous trouvez", + "fs_ss": "partager les fichiers sélectionnés", + "fs_just1d": "vous ne pouvez pas sélectionner plus d'un dossier,\nou mélanger des fichiers et des dossiers dans une seule sélection", + "fs_abrt": "❌ abandonner", + "fs_rand": "🎲 nom.aleatoire", + "fs_go": "✅ créer partage", + "fs_name": "nom", + "fs_src": "source", + "fs_pwd": "mdp", + "fs_exp": "expiration", + "fs_tmin": "min", + "fs_thrs": "heures", + "fs_tdays": "jours", + "fs_never": "éternel", + "fs_pname": "nom de lien optionnel ; sera aléatoire si vide", + "fs_tsrc": "le fichier ou le dossier à partager", + "fs_ppwd": "mot de passe optionnel", + "fs_w8": "création du partage…", + "fs_ok": "appuyez sur Entrée/OK pour le Presse-papiers\nappuyez sur Échap/Annuler pour fermer", + + "frt_dec": "peut potentiellement réparer certaines instances de noms de fichiers cassés\">url-decode", + "frt_rst": "réinitialiser les noms de fichiers modifiés à leurs originaux\">↺ reset", + "frt_abrt": "abandonner et fermer cette fenêtre\">❌ cancel", + "frb_apply": "APPLIQUER RENOMMER", + "fr_adv": "renommage par lot / métadonnées / motif\">advanced", + "fr_case": "regex sensible à la casse\">case", + "fr_win": "noms windows-safe; remplacer <>:"\\|?* par des caractères japonais en pleine largeur\">win", + "fr_slash": "remplacer / par un caractère qui ne provoque pas la création de nouveaux dossiers\">no /", + "fr_re": "modèle de recherche regex à appliquer aux noms de fichiers originaux ; les groupes capturés peuvent être référencés dans le champ de format ci-dessous comme <code>(1)</code> et <code>(2)</code> et ainsi de suite", + "fr_fmt": "inspiré par foobar2000 : $N<code>(title)</code> est remplacé par le titre de la chanson, $N<code>[(artist) - ](title)</code> saute [cette] partie si l'artiste est vide, $N<code>$lpad((tn),2,0)</code> remplit le numéro de piste à 2 chiffres", + "fr_pdel": "supprimer", + "fr_pnew": "enregistrer sous", + "fr_pname": "donnez un nom pour le nouveau preset", + "fr_aborted": "abandonné", + "fr_lold": "ancien nom", + "fr_lnew": "nouveau nom", + "fr_tags": "tags pour les fichier selectioné (lecture-seule, juste pour référence):", + "fr_busy": "renomage de {0} items…\n\n{1}", + "fr_efail": "renomage a échoué:\n", + "fr_nchg": "{0} des nouveaux noms ont été modifiés en raison de win et/ou no /\n\nOK pour continuer avec ces nouveaux noms modifiés ?", + + "fd_ok": "suppression réussie", + "fd_err": "impossible de supprimer:\n", + "fd_none": "rien n'a été supprimé ; peut-être bloqué par la configuration du serveur (xbd) ?", + "fd_busy": "suppression de {0} éléments…\n\n{1}", + "fd_warn1": "SUPPRIMER ces {0} éléments ?", + "fd_warn2": "Dernière chance ! Impossible de revenir en arrière. Supprimer ?", + + "fc_ok": "couper {0} éléments", + "fc_warn": 'couper {0} éléments\n\nmais : seul cet onglets peut les coller\n(puisque la sélection est si absolument massive)', + + "fcc_ok": "copié {0} éléments dans le presse-papiers", + "fcc_warn": 'copié {0} éléments dans le presse-papiers\n\nmais : seul cet onglet peut les coller\n(puisque la sélection est si absolument massive)', + + "fp_apply": "utiliser ces noms", + "fp_ecut": "en premier, coupez ou copiez quelques fichiers / dossiers à coller / déplacer\n\nnote: vous pouvez couper / coller a travers different onglets", + "fp_ename": "{0} éléments ne peuvent pas être déplacés ici parceque leurs noms sont déjà pris. Donnez leurs un nouveau nom ci-dessous pour continuer, ou laissez les vides pour les sauter:", + "fcp_ename": "{0} éléments ne peuvent pas être copiés ici parce que les noms sont déjà pris. Donnez-leur un nouveau nom ci-dessous pour continuer, ou laissez-les vides pour les sauter :", + "fp_emore": "il reste encore des collisions de noms de fichiers à corriger", + "fp_ok": "déplacement OK", + "fcp_ok": "copie OK", + "fp_busy": "déplacement de {0} éléments…\n\n{1}", + "fcp_busy": "copie de {0} éléments…\n\n{1}", + "fp_err": "deplacement échoué:\n", + "fcp_err": "copie échouée:\n", + "fp_confirm": "déplacer ces {0} éléments ici ?", + "fcp_confirm": "copier ces {0} éléments ici ?", + "fp_etab": 'lecture du presse-papier venant d\'un autre onglet échoué', + "fp_name": "téléversement d'un fichier de votre apareil. Donnez lui un nom:", + "fp_both_m": '
choisisez ce qu\'il faut coller
Entrer = Déplacer {0} fichiers de «{1}»\nESC = Téléverser {2} fichiers de votre appareil', + "fcp_both_m": '
choisissez ce qu\'il faut coller
Entrer = Copier {0} fichiers de «{1}»\nESC = Téléverser {2} fichiers de votre appareil', + "fp_both_b": 'DéplacerTéléverser', + "fcp_both_b": 'CopierTéléverser', + + "mk_noname": "entrez un nom dans le champ de texte à gauche avant de faire ça :p", + + "tv_load": "Chargement du document texte:\n\n{0}\n\n{1}% ({2} de {3} MiB chargés)", + "tv_xe1": "impossible de charger le fichier texte:\n\nerreur", + "tv_xe2": "404, fichier introuvable", + "tv_lst": "liste des fichiers texte dans", + "tvt_close": "retour a la vue de dossier$NHotkey: M (ou Échap)\">❌ fermer", + "tvt_dl": "télécharger ce fichier$NHotkey: Y\">💾 télécharger", + "tvt_prev": "montrer le document précédent$NHotkey: i\">⬆ précédent", + "tvt_next": "montrer le document suivant$NHotkey: K\">⬇ suivant", + "tvt_sel": "sélectionner le fichier   ( pour couper / copier / supprimer / … )$NHotkey: S\">sel", + "tvt_edit": "ouvrir le fichier dans l'éditeur de texte$NHotkey: E\">✏️ modifier", + "tvt_tail": "surveiller le fichier pour les changements; montrer les nouvelles lignes en temps réel\">📡 suivre", + "tvt_wrap": "retour à la ligne\">↵", + "tvt_atail": "ancrer le défilement au fond de la page\">⚓", + "tvt_ctail": "décoder les couleurs du terminal (ansi escape codes)\">🌈", + "tvt_ntail": "limite de défilement en arrière (combien d'octets de texte à garder chargé)", + + "m3u_add1": "musique ajoutée à la playlist m3u", + "m3u_addn": "{0} musiques ajoutées à la playlist m3u", + "m3u_clip": "la playlist m3u est maintenant copiée dans le presse-papier\n\nvous devriez créer un nouveau fichier texte nommé par exemple playlist.m3u et coller la playlist dans ce fichier ; cela la rendra lisible en tant que playlist", + + "gt_vau": "ne pas voir les vidéos, juste jouer l'audio\">🎧", + "gt_msel": "activer la séléction de fichiers ; ctrl-clic sur un fichier pour override écraser$N$Nquand actif : double-cliquer sur un fichier / dossier pour l'ouvrir$N$NHotkey: S\">multiséléction", + "gt_crop": "rogner les miniatures au centre\">rogner", + "gt_3x": "miniatures haute résolution\">3x", + "gt_zoom": "zoomer", + "gt_chop": "rogner", + "gt_sort": "trier par", + "gt_name": "nom", + "gt_sz": "taille", + "gt_ts": "date", + "gt_ext": "type", + "gt_c1": "tronquer les noms de fichiers (montrer moins)", + "gt_c2": "tronquer les noms de fichiers (montrer plus)", + + "sm_w8": "recherche…", + "sm_prev": "les résultats de recherche ci-dessous proviennent d'une requête précédente:\n ", + "sl_close": "fermer les résultats de recherche", + "sl_hits": "affichage de {0} résultats", + "sl_moar": "chercher plus", + + "s_sz": "taille", + "s_dt": "date", + "s_rd": "chemin", + "s_fn": "nom", + "s_ta": "tags", + "s_ua": "up@", + "s_ad": "adv.", + "s_s1": "minimum MiB", + "s_s2": "maximum MiB", + "s_d1": "min. iso8601", + "s_d2": "max. iso8601", + "s_u1": "téléverser après", + "s_u2": "et/ou avant", + "s_r1": "le chemin contient   (séparé par des espaces)", + "s_f1": "le nom contient   (négation avec -nope)", + "s_t1": "les tags contiennent   (^=début, fin=$)", + "s_a1": "propriétés de métadonnées spécifiques", + + "md_eshow": "impossible d'afficher le rendu ", + "md_off": "[📜readme] disabled in [⚙️] -- document caché", + + "badreply": "Échec de l'analyse de la réponse du serveur", + + "xhr403": "403: Accès refusé\n\nessayez d'appuyer sur F5, peut-être que vous avez été déconnecté", + "xhr0": "inconnu (vous avez probablement perdu la connexion au serveur, ou le serveur est hors ligne)", + "cf_ok": "désolé pour cela -- la protection DD" + wah + "oS a été déclenché\n\nles choses devraient reprendre dans environ 30 secondes\n\nsi rien ne se passe, appuyez sur F5 pour recharger la page", + "tl_xe1": "impossible de lister les sous-dossiers:\n\nerreur ", + "tl_xe2": "404: Dossier introuvable", + "fl_xe1": "impossible de lister les fichiers dans le dossier:\n\nerreur ", + "fl_xe2": "404: Dossier introuvable", + "fd_xe1": "impossible de créer le sous-dossier:\n\nerreur ", + "fd_xe2": "404: Dossier parent introuvable", + "fsm_xe1": "impossible d'envoyer le message:\n\nerreur ", + "fsm_xe2": "404: Dossier parent introuvable", + "fu_xe1": "échec du chargement de la liste des unpost du serveur:\n\nerreur ", + "fu_xe2": "404: Fichier introuvable??", + + "fz_tar": "fichier gnu-tar non compressé (linux / mac)", + "fz_pax": "tar au format pax non compressé (plus lent)", + "fz_targz": "gnu-tar avec compression gzip niveau 3$N$Ncela est généralement très lent, donc$Nutilisez plutôt tar non compressé", + "fz_tarxz": "gnu-tar avec compression xz niveau 1$N$Ncela est généralement très lent, donc$Nutilisez plutôt tar non compressé", + "fz_zip8": "zip avec noms de fichiers utf8 (peut être instable sur windows 7 et versions antérieures)", + "fz_zipd": "zip avec noms de fichiers cp437 traditionnels, pour les très anciens logiciels", + "fz_zipc": "cp437 avec crc32 calculé tôt,$Nfor MS-DOS PKZIP v2.04g (octobre 1993)$N(prend plus de temps à charger avant que le téléchargement ne commence)", + + "un_m1": "vous pouvez supprimer vos téléchargements récents (ou annuler ceux en cours) ci-dessous", + "un_upd": "rafraîchir", + "un_m4": "ou partager les fichiers visibles ci-dessous:", + "un_ulist": "montrer", + "un_ucopy": "copier", + "un_flt": "filtre optionnel:  l'URL doit contenir", + "un_fclr": "effacer le filtre", + "un_derr": 'échec de l\'unpost-delete:\n', + "un_f5": 'quelque chose a cassé, veuillez essayer de rafraîchir ou d\'appuyer sur F5', + "un_uf5": "désolé mais vous devez rafraîchir la page (par exemple en appuyant sur F5 ou CTRL-R) avant que ce téléchargement puisse être annulé", + "un_nou": 'warning: serveur trop occupé pour afficher les téléversements non finis; cliquez sur le lien "rafraîchir" dans un instant', + "un_noc": 'warning: unpost des fichiers entièrement téléchargés n\'est pas activé/permis dans la configuration du serveur', + "un_max": "affichage des 2000 premiers fichiers (utilisez le filtre)", + "un_avail": "{0} téléchargements récents peuvent être supprimés
{1} ceux en cours peuvent être annulés", + "un_m2": "triés par date de téléchargement; les plus récents en premier:", + "un_no1": "sike! aucun téléchargement n'est suffisamment récent", + "un_no2": "sike! aucun téléchargement correspondant à ce filtre n'est suffisamment récent", + "un_next": "supprimer les {0} fichiers suivants ci-dessous", + "un_abrt": "abandonner", + "un_del": "supprimer", + "un_m3": "chargement de vos téléchargements récents…", + "un_busy": "suppression de {0} fichiers…", + "un_clip": "{0} liens copiés dans le presse-papiers", + + "u_https1": "vous devriez", + "u_https2": "passer à https", + "u_https3": "pour de meilleure performances", + "u_ancient": 'votre navigateur est impressionnamment ancien -- vous devriez peut-être utiliser bup à la place', + "u_nowork": "nécessite firefox 53+ ou chrome 57+ ou iOS 11+", + "tail_2old": "nécessite firefox 105+ ou chrome 71+ ou iOS 14.5+", + "u_nodrop": 'votre navigateur est trop ancien pour le téléversement par glisser-déposer', + "u_notdir": "ce n'est pas un dossier!\n\nvotre navigateur est trop ancien,\nveuillez essayer le glisser-déposer à la place", + "u_uri": "pour glisser-déposer des images depuis d'autres fenêtres de navigateur,\nveuillez les déposer sur le gros bouton de téléversement", + "u_enpot": 'passer à l\'interface utilisateur potato (peut améliorer la vitesse de téléversement)', + "u_depot": 'passer à l\'interface utilisateur fancy (peut réduire la vitesse de téléversement)', + "u_gotpot": 'passage à l\'interface utilisateur potato pour une vitesse de téléversement améliorée,\n\nn\'hésitez pas à revenir en arrière si ça ne vous plaît pas !', + "u_pott": "

fichiers:   {0} fini,   {1} échoué,   {2} en cours,   {3} en attente

", + "u_ever": "ceci est le téléverseur de base ; up2k nécessite au moins chrome 21 // firefox 13 // edge 12 // opera 12 // safari 5.1", + "u_su2k": 'ceci est le téléverseur de base; up2k est meilleur', + "u_uput": 'optimiser pour la vitesse (ignorer la somme de contrôle)', + "u_ewrite": 'vous n\'avez pas accès en écriture à ce dossier', + "u_eread": 'vous n\'avez pas accès en lecture à ce dossier', + "u_enoi": 'la recherche de fichiers n\'est pas activée dans la configuration du serveur', + "u_enoow": "l'écrasage ne fonctionnera pas ici; besoin de permissions de suppression", + "u_badf": 'Ces {0} fichiers (sur {1} au total) ont été ignorés, probablement en raison de permissions système de fichiers:\n\n', + "u_blankf": 'Ces {0} fichiers (sur {1} au total) sont vides; les téléverser quand même ?\n\n', + "u_applef": 'Ces {0} fichiers (sur {1} au total) sont probablement indésirables;\nAppuyez sur OK/Enter pour IGNORER les fichiers suivants,\nAppuyez sur Cancel/Échap pour NE PAS exclure, et TÉLÉVERSER ceux-ci également:\n\n', + "u_just1": '\nPeut-être que cela fonctionne mieux si vous sélectionnez juste un fichier', + "u_ff_many": "si vous utilisez Linux / MacOS / Android, alors ce nombre de fichiers peut faire planter Firefox!\nSi cela se produit, veuillez réessayer (ou utiliser Chrome).", + "u_up_life": "Ce téléversement va être supprimé du serveur\n{0} après son achèvement", + "u_asku": 'téléverser ces {0} fichiers vers {1}', + "u_unpt": "vous pouvez défaire / supprimer ce téléversement en utilisant le 🧯 en haut à gauche", + "u_bigtab": 'sur le point d\'afficher {0} fichiers\n\ncela peut faire planter votre navigateur, êtes-vous sûr ?', + "u_scan": 'Analyse des fichiers…', + "u_dirstuck": 'l\'itérateur de répertoire est bloqué en essayant d\'accéder aux {0} éléments suivants ; il sera ignoré :', + "u_etadone": 'Terminé ({0}, {1} fichiers)', + "u_etaprep": '(préparation au téléversement)', + "u_hashdone": 'calcul de la somme de contrôle terminé', + "u_hashing": 'calcul de la somme de contrôle', + "u_hs": 'établissement d\'une liaison…', + "u_started": "les fichiers sont maintenant en cours de téléversement ; voir [🚀]", + "u_dupdefer": "dupliqué ; sera traité après tous les autres fichiers", + "u_actx": "cliquez sur ce texte pour éviter la perte de
performance lors du passage à d'autres fenêtres/onglets", + "u_fixed": "OK!  Résolu 👍", + "u_cuerr": "echec du téléversement du morceau {0} de {1};\nprobablement inoffensif, poursuite\n\nfichier : {2}", + "u_cuerr2": "le serveur a rejeté le téléversement (morceau {0} de {1});\nréessaiera plus tard\n\nfichier : {2}\n\nerreur ", + "u_ehstmp": "réessaiera ; voir en bas à droite", + "u_ehsfin": "le serveur a rejeté la demande de finalisation du téléversement ; nouvelle tentative…", + "u_ehssrch": "le serveur a rejeté la demande d'effectuer une recherche ; nouvelle tentative…", + "u_ehsinit": "le serveur a rejeté la demande d'initier le téléversement ; nouvelle tentative…", + "u_eneths": "erreur réseau lors de l'exécution de l'initialisation du téléversement ; nouvelle tentative…", + "u_enethd": "erreur réseau lors du test de l'existence de la cible ; nouvelle tentative…", + "u_cbusy": "attente que le serveur nous fasse à nouveau confiance après un problème réseau…", + "u_ehsdf": "le serveur est à court d'espace disque !\n\nil va continuer de réessayer, au cas où quelqu'un\nlibérerait suffisamment d'espace pour continuer", + "u_emtleak1": "il semble que votre navigateur web ait une fuite de mémoire ;\nveuillez", + "u_emtleak2": ' passer à https (recommandé) ou ', + "u_emtleak3": ' ', + "u_emtleakc": 'essayez la solution suivante:\n
  • appuyez sur F5 pour rafraîchir la page
  • ensuite désactivez le bouton  mt  dans les  ⚙️ paramètres
  • et réessayez ce téléversement
Les téléversements seront un peu plus lents, mais tant pis.\nDésolé pour le dérangement !\n\nPS : chrome v107 a un correctif pour cela', + "u_emtleakf": 'essayez la solution suivante:\n
  • appuyez sur F5 pour rafraîchir la page
  • ensuite activez 🥔 (pomme de terre) dans l\'interface de téléversement
  • et réessayez ce téléversement
\nPS : firefox aura probablement un correctif à un moment donné', + "u_s404": "pas trouvé sur le serveur", + "u_expl": "expliquer", + "u_maxconn": "la plupart des navigateur limite ceci à 6, mais firefox vous permet de l'augmenter avec connections-per-server dans about:config", + "u_tu": '

WARNING: turbo enclenché,  le client peut ne pas détecter et reprendre les téléversements incomplets ; voir l\'info-bulle du bouton turbo

', + "u_ts": '

WARNING: turbo enclenché,  les résultats de recherche peuvent être incorrects ; voir l\'info-bulle du bouton turbo

', + "u_turbo_c": "turbo est désactivé dans la configuration du serveur", + "u_turbo_g": "désactivation de turbo car vous n'avez pas de\nprivilèges de listing de répertoires dans ce volume", + "u_life_cfg": 'suppression automatique après min (ou heures)', + "u_life_est": 'le téléversement sera supprimé ---', + "u_life_max": 'ce dossier impose une\ndurée de vie maximale de {0}', + "u_unp_ok": 'unpost est autorisé pour {0}', + "u_unp_ng": 'unpost ne sera PAS autorisé', + "ue_ro": 'votre accès à ce dossier est en lecture seule\n\n', + "ue_nl": 'vous n\'êtes actuellement pas connecté', + "ue_la": 'vous êtes actuellement connecté en tant que "{0}"', + "ue_sr": 'vous êtes actuellement en mode recherche de fichiers\n\nchangez en mode téléversement en cliquant sur la loupe 🔎 (à côté du grand bouton RECHERCHER), et essayez de téléverser à nouveau\n\ndésolé', + "ue_ta": 'essayez de téléverser à nouveau, cela devrait fonctionner maintenant', + "ue_ab": "ce fichier a déjà été téléversé dans un autre dossier, et ce téléversement doit être terminé avant que le fichier puisse être téléversé ailleurs.\n\nVous pouvez annuler et oublier le téléversement initial en utilisant le bouton 🧯 en haut à gauche.", + "ur_1uo": "OK: Fichier téléversé avec succès", + "ur_auo": "OK: Tous les {0} fichiers téléversés avec succès", + "ur_1so": "OK: Fichier trouvé sur le serveur", + "ur_aso": "OK: Tous les {0} fichiers trouvés sur le serveur", + "ur_1un": "Échec du téléversement, désolé", + "ur_aun": "Tous les {0} téléversements ont échoué, désolé", + "ur_1sn": "Fichier NON trouvé sur le serveur", + "ur_asn": "Les {0} fichiers n'ont PAS ÉTÉ trouvés sur le serveur", + "ur_um": "Terminé;\n{0} téléversements OK,\n{1} téléversements échoués, désolé", + "ur_sm": "Terminé;\n{0} fichiers trouvés sur le serveur,\n{1} fichiers NON trouvés sur le serveur", + + "lang_set": "rafraîchir pour que les changements prennent effet ?", + }, "grc": { "tt": "Ελληνικά", @@ -8816,7 +9445,7 @@ var Ls = { }, }; -var LANGS = ["eng", "nor", "nno", "chi", "cze", "deu", "fin", "grc", "ita", "nld", "rus", "spa", "ukr"]; +var LANGS = ["eng", "nor", "nno", "chi", "cze", "deu", "fin", "fra", "grc", "ita", "nld", "rus", "spa", "ukr"]; if (window.langmod) langmod(); From 074e106e24afe5cf2cac100d82a78c872446de9a Mon Sep 17 00:00:00 2001 From: icxes Date: Sun, 10 Aug 2025 12:17:00 +0300 Subject: [PATCH 03/15] fix PRTY_CONFIG not reading global flags from the config --- copyparty/__main__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/copyparty/__main__.py b/copyparty/__main__.py index e87fe487..8c630115 100644 --- a/copyparty/__main__.py +++ b/copyparty/__main__.py @@ -1767,6 +1767,10 @@ def main(argv: Optional[list[str]] = None) -> None: ensure_webdeps() + if CFG_DEF: + supp = args_from_cfg(CFG_DEF[0]) + argv.extend(supp) + for k, v in zip(argv[1:], argv[2:]): if k == "-c" and os.path.isfile(v): supp = args_from_cfg(v) From 7aa21483c5789681a4796def4e9ba7f461035358 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sun, 10 Aug 2025 06:06:23 -0400 Subject: [PATCH 04/15] French translation part 2: splash.js #553 --- copyparty/web/browser.js | 2 +- copyparty/web/splash.js | 53 +++++++++++++++++++++++++++++++++++----- 2 files changed, 48 insertions(+), 7 deletions(-) diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index f6b1e3eb..9739e55a 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -3893,7 +3893,7 @@ var Ls = { "gou": 'dossier parent">haut', "gon": 'dossier suivant">suivant', "logout": "Déconnexion ", - "access": "accès", + "access": " accès", "ot_close": "fermer le sous-menu", "ot_search": "chercher des fichiers par leurs attributs, chemin / nom, tag musicaux, ou nimporte quelle combinaison de ces options$N$N<code>foo bar</code> = doit contenir à la fois «foo» et «bar»,$N<code>foo -bar</code> = doit contenir «foo» mais pas «bar»,$N<code>^yana .opus$</code> = commence par «yana» et est un fichier «opus»$N<code>"try unite"</code> = contient exactement «try unite»$N$Nle format de date est iso-8601, comme$N<code>2009-12-31</code> ou <code>2020-09-12 23:30:00</code>", "ot_unpost": "unpost: supprimer vos téléchargements récents, ou annuler ceux en cours", diff --git a/copyparty/web/splash.js b/copyparty/web/splash.js index 2475cb97..d6c3a97f 100644 --- a/copyparty/web/splash.js +++ b/copyparty/web/splash.js @@ -98,33 +98,33 @@ var Ls = { "a1": "obnovit", "b1": "ahoj cizinče   (nejsi přihlášen)", "c1": "odhlásit se", - "d1": "vypsat zásobníku", // TLNote: "d2" is the tooltip for this button + "d1": "vypsat zásobníku", "d2": "zobrazit stav všech aktivních vláken", "e1": "znovu načíst konfiguraci", "e2": "znovu načíst konfigurační soubory (accounts/volumes/volflags),$Na prohledat všechny e2ds úložiště$N$Npoznámka: všechny změny globálních nastavení$Nvyžadují úplné restartování, aby se projevily", "f1": "můžeš procházet:", "g1": "můžeš nahrávat do:", "cc1": "další věci:", - "h1": "zakázat k304", // TLNote: "j1" explains what k304 is + "h1": "zakázat k304", "i1": "povolit k304", "j1": "povolení k304 odpojí vašeho klienta při každém HTTP 304, což může zabránit některým chybovým proxy serverům, aby se zasekly (náhle nenačítaly stránky), ale také to obecně zpomalí věci", "k1": "resetovat nastavení klienta", "l1": "přihlaste se pro více:", - "m1": "vítej zpět,", // TLNote: "welcome back, USERNAME" + "m1": "vítej zpět,", "n1": "404 nenalezeno  ┐( ´ -`)┌", "o1": 'nebo možná nemáš přístup -- zkus heslo nebo jdi domů', "p1": "403 zakázáno  ~┻━┻", "q1": 'použij heslo nebo jdi domů', "r1": "jdi domů", ".s1": "znovu prohledat", - "t1": "akce", // TLNote: this is the header above the "rescan" buttons + "t1": "akce", "u2": "čas od posledního zápisu na server$N( upload / rename / ... )$N$N17d = 17 dní$N1h23 = 1 hodina 23 minut$N4m56 = 4 minuty 56 sekund", "v1": "připojit", "v2": "použít tento server jako místní HDD", "w1": "přepnout na https", "x1": "změnit heslo", - "y1": "upravit sdílení", // TLNote: shows the list of folders that the user has decided to share - "z1": "odblokovat toto sdílení:", // TLNote: the password prompt to see a hidden share + "y1": "upravit sdílení", + "z1": "odblokovat toto sdílení:", "ta1": "nejprve vyplňte své nové heslo", "ta2": "zopakujte pro potvrzení nového hesla:", "ta3": "nalezen překlep; zkuste to prosím znovu", @@ -218,6 +218,47 @@ var Ls = { "af1": "näytä viimeaikaiset lataukset", "ag1": "näytä tunnetut IdP-käyttäjät", }, + "fra": { + "a1": "rafraîchir", + "b1": "salut étranger   (vous n'êtes pas connecté.)", + "c1": "déconnexion", + "d1": "vidange de la pile", + "d2": "affiche l'état de tous les threads actifs", + "e1": "recharger la configuration", + "e2": "recharger le fichier configuration (comptes/volumes/indicateurs de volume),$Net rescanner tous les e2ds volumes$N$Nnote: n'importe quel changement aux paramètres globaux$Nnécessite un redémarrage complet pour prendre effet", + "f1": "vous pouvez naviguer:", + "g1": "vous pouvez télécharger sur:", + "cc1": "autres choses:", + "h1": "désactiver k304", + "i1": "activer k304", + "j1": "activer k304 vouloir déconnecter votre client sur chaque HTTP 304, ce qui peut éviter certains proxys défectueux d'avoir bloqué (les pages ne se chargent soudainement plus), mais cela ralentira également les choses en général", + "k1": "réinitialiser client paramètres", + "l1": "connectez-vous pour en savoir plus:", + "m1": "heureux vous revoir,", + "n1": "404 introuvable  ┐( ´ -`)┌", + "o1": 'ou peut-être que vous n\'y avez pas accès -- essayer un mot de passe ou aller à la page d\'accueil', + "p1": "403 interdita  ~┻━┻", + "q1": 'utiliser un mot de passe or aller à la page d\'accueil', + "r1": "aller à la page d\'accueil", + ".s1": "rescan", + "t1": "action", + "u2": "temps écoulé depuis la dernière écriture sur le serveur$N( télécharger / renommer / ... )$N$N17j = 17 jours$N1h23 = 1 heur 23 minutes$N4m56 = 4 minutes 56 secondes", + "v1": "connecter", + "v2": "utilisez ce serveur en tant que disque dur local", + "w1": "passer à https", + "x1": "changer mot de passe", + "y1": "modifier les partages", + "z1": "déverrouiller ce partage:", + "ta1": "entrez d'abord votre nouveau mot de passe", + "ta2": "répétez pour confirmer le nouveau mot de passe:", + "ta3": "une faute de frappe a été détectée ; veuillez réessayer.", + "aa1": "fichiers entrants:", + "ab1": "désactiver no304", + "ac1": "activer no304", + "ad1": "l'activation de no304 désactivera toute mise en cache; essayez ceci si k304 n'était pas suffisant. Cela va générer un trafic réseau considérable!", + "ae1": "téléchargements actifs:", + "af1": "afficher les derniers téléchargements", + }, "grc": { "a1": "ανανέωση", "b1": "γεια σου ξένε!   (δεν είσαι συνδεδεμένος)", From 3c78c6a880807d78efa754aeb7a559d99d3b6b57 Mon Sep 17 00:00:00 2001 From: ed Date: Sun, 10 Aug 2025 10:03:42 +0000 Subject: [PATCH 05/15] custom mdns domain, closes #549 --- copyparty/__main__.py | 1 + copyparty/mdns.py | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/copyparty/__main__.py b/copyparty/__main__.py index 8c630115..5c2771fe 100644 --- a/copyparty/__main__.py +++ b/copyparty/__main__.py @@ -1201,6 +1201,7 @@ def add_zc_mdns(ap): ap2.add_argument("--zm-lh", metavar="PATH", type=u, default="", help="link a specific folder for http shares") ap2.add_argument("--zm-lf", metavar="PATH", type=u, default="", help="link a specific folder for ftp shares") ap2.add_argument("--zm-ls", metavar="PATH", type=u, default="", help="link a specific folder for smb shares") + ap2.add_argument("--zm-fqdn", metavar="FQDN", type=u, default="--name.local", help="the domain to announce; NOTE: using anything other than .local is nonstandard and could cause problems") ap2.add_argument("--zm-mnic", action="store_true", help="merge NICs which share subnets; assume that same subnet means same network") ap2.add_argument("--zm-msub", action="store_true", help="merge subnets on each NIC -- always enabled for ipv6 -- reduces network load, but gnome-gvfs clients may stop working, and clients cannot be in subnets that the server is not") ap2.add_argument("--zm-noneg", action="store_true", help="disable NSEC replies -- try this if some clients don't see copyparty") diff --git a/copyparty/mdns.py b/copyparty/mdns.py index a9d36fe7..0dde707d 100644 --- a/copyparty/mdns.py +++ b/copyparty/mdns.py @@ -76,7 +76,8 @@ class MDNS(MCast): if not self.args.zm_nwa_1: set_avahi_379() - zs = self.args.name + ".local." + zs = self.args.zm_fqdn or (self.args.name + ".local") + zs = zs.replace("--name", self.args.name).rstrip(".") + "." zs = zs.encode("ascii", "replace").decode("ascii", "replace") self.hn = "-".join(x for x in zs.split("?") if x) or ( "vault-{}".format(random.randint(1, 255)) From 8ba98877ee15af62bac082e28248ef0feb8c6ee6 Mon Sep 17 00:00:00 2001 From: ed Date: Sun, 10 Aug 2025 11:23:22 +0000 Subject: [PATCH 06/15] patch pyftpdlib, fixes #539 upgrading pyftpdlib brings only pain and no benefits so grafting a patch for this instead --- scripts/make-sfx.sh | 1 + scripts/patches/pyftpdlib-win313.patch | 41 ++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 scripts/patches/pyftpdlib-win313.patch diff --git a/scripts/make-sfx.sh b/scripts/make-sfx.sh index a1ee1a06..f752f8a8 100755 --- a/scripts/make-sfx.sh +++ b/scripts/make-sfx.sh @@ -217,6 +217,7 @@ necho() { tar -zxf $f mv pyftpdlib-*/pyftpdlib . rm -rf pyftpdlib-* pyftpdlib/test + patch -p1 <../scripts/patches/pyftpdlib-win313.patch for f in pyftpdlib/_async{hat,ore}.py; do [ -e "$f" ] || continue; iawk 'NR<4||NR>27||!/^#/;NR==4{print"# license: https://opensource.org/licenses/ISC\n"}' $f diff --git a/scripts/patches/pyftpdlib-win313.patch b/scripts/patches/pyftpdlib-win313.patch new file mode 100644 index 00000000..62601108 --- /dev/null +++ b/scripts/patches/pyftpdlib-win313.patch @@ -0,0 +1,41 @@ +Date: Tue, 22 Oct 2024 12:47:30 +0200 +Subject: Workaround for isabs() on Windows + Python 3.13 (#652) + +Starting from Python 3.13, `os.path.isabs("/foo")` on Windows return `False` + +diff --git a/pyftpdlib/filesystems.py b/pyftpdlib/filesystems.py +index 9b9326bf..320ffe40 100644 +--- a/pyftpdlib/filesystems.py ++++ b/pyftpdlib/filesystems.py +@@ -132,6 +132,16 @@ def cwd(self, path): + + # --- Pathname / conversion utilities + ++ @staticmethod ++ def _isabs(path, _windows=os.name == "nt"): ++ # Windows + Python 3.13: isabs() changed so that a path ++ # starting with "/" is no longer considered absolute. ++ # https://github.com/python/cpython/issues/44626 ++ # https://github.com/python/cpython/pull/113829/ ++ if _windows and path.startswith("/"): ++ return True ++ return os.path.isabs(path) ++ + def ftpnorm(self, ftppath): + """Normalize a "virtual" ftp pathname (typically the raw string + coming from client) depending on the current working directory. +@@ -146,3 +156,3 @@ + assert isinstance(ftppath, unicode), ftppath +- if os.path.isabs(ftppath): ++ if self._isabs(ftppath): + p = os.path.normpath(ftppath) +@@ -162,3 +172,3 @@ + # This is for extra protection, maybe not really necessary. +- if not os.path.isabs(p): ++ if not self._isabs(p): + p = u("/") +@@ -201,3 +211,3 @@ + assert isinstance(fspath, unicode), fspath +- if os.path.isabs(fspath): ++ if self._isabs(fspath): + p = os.path.normpath(fspath) From 347cf6a5461d281ef90935d1e9023d95b909230c Mon Sep 17 00:00:00 2001 From: ed Date: Sun, 10 Aug 2025 11:28:22 +0000 Subject: [PATCH 07/15] fix dropdown color --- copyparty/web/browser.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/copyparty/web/browser.css b/copyparty/web/browser.css index b5506f39..298de0ea 100644 --- a/copyparty/web/browser.css +++ b/copyparty/web/browser.css @@ -1377,7 +1377,7 @@ html.y #ops svg circle { .opview select, .opview input[type=text] { color: var(--fg); - background: var(--txt-bg); + background: var(--bg-u5); border: none; box-shadow: 0 0 2px var(--txt-sh); border-bottom: 1px solid #999; From e5e822951d66f5a9b60e3f4a22ffa6b1a46f6b43 Mon Sep 17 00:00:00 2001 From: ed Date: Sun, 10 Aug 2025 11:31:12 +0000 Subject: [PATCH 08/15] fix filter case-sensitivity --- copyparty/httpcli.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/copyparty/httpcli.py b/copyparty/httpcli.py index 402d623f..b981172d 100644 --- a/copyparty/httpcli.py +++ b/copyparty/httpcli.py @@ -5481,13 +5481,13 @@ class HttpCli(object): q = "select sz, rd, fn, at from up where ip=? and at>? order by at desc" for sz, rd, fn, at in cur.execute(q, (self.ip, lim)): vp = "/" + "/".join(x for x in [vol.vpath, rd, fn] if x) - if nfi == 0 or (nfi == 1 and vfi in vp): + if nfi == 0 or (nfi == 1 and vfi in vp.lower()): pass elif nfi == 2: - if not vp.startswith(vfi): + if not vp.lower().startswith(vfi): continue elif nfi == 3: - if not vp.endswith(vfi): + if not vp.lower().endswith(vfi): continue else: continue @@ -5607,13 +5607,13 @@ class HttpCli(object): q = "select sz, rd, fn, ip, at from up where at>0 order by at desc" for sz, rd, fn, ip, at in cur.execute(q): vp = "/" + "/".join(x for x in [vol.vpath, rd, fn] if x) - if nfi == 0 or (nfi == 1 and vfi in vp): + if nfi == 0 or (nfi == 1 and vfi in vp.lower()): pass elif nfi == 2: - if not vp.startswith(vfi): + if not vp.lower().startswith(vfi): continue elif nfi == 3: - if not vp.endswith(vfi): + if not vp.lower().endswith(vfi): continue else: continue From 03acd65e9666c456703a3c73b809556b93577291 Mon Sep 17 00:00:00 2001 From: ed Date: Sun, 10 Aug 2025 11:45:20 +0000 Subject: [PATCH 09/15] avoid ios bug (keystore spam) --- copyparty/web/splash.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/copyparty/web/splash.js b/copyparty/web/splash.js index d6c3a97f..08551999 100644 --- a/copyparty/web/splash.js +++ b/copyparty/web/splash.js @@ -625,7 +625,7 @@ catch (ex) { } tt.init(); var o = QS('input[name="uname"]') || QS('input[name="cppwd"]'); -if (!ebi('c') && o.offsetTop + o.offsetHeight < window.innerHeight) +if (!MOBILE && !ebi('c') && o.offsetTop + o.offsetHeight < window.innerHeight) o.focus(); o = ebi('u'); From 3560eeb10eed1ae6641f6855f8cd1f5e77f8746b Mon Sep 17 00:00:00 2001 From: ed Date: Sun, 10 Aug 2025 13:55:29 +0200 Subject: [PATCH 10/15] better with sessions --- copyparty/httpcli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/copyparty/httpcli.py b/copyparty/httpcli.py index b981172d..29e4c610 100644 --- a/copyparty/httpcli.py +++ b/copyparty/httpcli.py @@ -4971,7 +4971,7 @@ class HttpCli(object): rip = host vp = (self.uparam["hc"] or "").lstrip("/") - pw = self.pw or "hunter2" + pw = self.ouparam.get("pw") or "hunter2" if pw in self.asrv.sesa: pw = "hunter2" From a01870b744dc12292808f2002ad86b1e7f1268f8 Mon Sep 17 00:00:00 2001 From: ed Date: Sun, 10 Aug 2025 13:55:52 +0200 Subject: [PATCH 11/15] avoid macos bug (finder hangs on connect) --- copyparty/httpcli.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/copyparty/httpcli.py b/copyparty/httpcli.py index 29e4c610..72bff45e 100644 --- a/copyparty/httpcli.py +++ b/copyparty/httpcli.py @@ -1599,6 +1599,10 @@ class HttpCli(object): "quota-available-bytes": str(bfree), "quota-used-bytes": str(btot - bfree), } + if "quotaused" in props: # macos finder crazytalk + df["quotaused"] = df["quota-used-bytes"] + if "quota" in props: + df["quota"] = df["quota-available-bytes"] # idk, makes it happy else: df = {} else: From b87f8f1b01dc9e53005bbe9ec004c66fd25b34c8 Mon Sep 17 00:00:00 2001 From: ed Date: Sun, 10 Aug 2025 12:10:54 +0000 Subject: [PATCH 12/15] french improvements by @Equinoxs #553 --- copyparty/web/splash.js | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/copyparty/web/splash.js b/copyparty/web/splash.js index 08551999..8cbca1e6 100644 --- a/copyparty/web/splash.js +++ b/copyparty/web/splash.js @@ -225,38 +225,38 @@ var Ls = { "d1": "vidange de la pile", "d2": "affiche l'état de tous les threads actifs", "e1": "recharger la configuration", - "e2": "recharger le fichier configuration (comptes/volumes/indicateurs de volume),$Net rescanner tous les e2ds volumes$N$Nnote: n'importe quel changement aux paramètres globaux$Nnécessite un redémarrage complet pour prendre effet", - "f1": "vous pouvez naviguer:", - "g1": "vous pouvez télécharger sur:", - "cc1": "autres choses:", + "e2": "recharger le fichier de configuration (comptes/volumes/indicateurs de volume),$Net rescanner tous les volumes e2ds$N$Nnote : n'importe quel changement aux paramètres globaux$Nnécessite un redémarrage complet pour prendre effet", + "f1": "vous pouvez naviguer :", + "g1": "vous pouvez télécharger sur :", + "cc1": "autres choses :", "h1": "désactiver k304", "i1": "activer k304", - "j1": "activer k304 vouloir déconnecter votre client sur chaque HTTP 304, ce qui peut éviter certains proxys défectueux d'avoir bloqué (les pages ne se chargent soudainement plus), mais cela ralentira également les choses en général", - "k1": "réinitialiser client paramètres", - "l1": "connectez-vous pour en savoir plus:", - "m1": "heureux vous revoir,", + "j1": "activer k304 va déconnecter votre client sur chaque HTTP 304, ce qui peut éviter à certains proxies défectueux de rester bloqués (les pages ne se chargent soudainement plus), mais cela ralentira également les choses en général", + "k1": "réinitialiser les paramètres du client", + "l1": "connectez-vous pour en savoir plus :", + "m1": "heureux de vous revoir,", "n1": "404 introuvable  ┐( ´ -`)┌", "o1": 'ou peut-être que vous n\'y avez pas accès -- essayer un mot de passe ou aller à la page d\'accueil', - "p1": "403 interdita  ~┻━┻", - "q1": 'utiliser un mot de passe or aller à la page d\'accueil', + "p1": "403 interdit  ~┻━┻", + "q1": 'utiliser un mot de passe ou aller à la page d\'accueil', "r1": "aller à la page d\'accueil", - ".s1": "rescan", + ".s1": "rescanner", "t1": "action", - "u2": "temps écoulé depuis la dernière écriture sur le serveur$N( télécharger / renommer / ... )$N$N17j = 17 jours$N1h23 = 1 heur 23 minutes$N4m56 = 4 minutes 56 secondes", + "u2": "temps écoulé depuis la dernière écriture sur le serveur$N(téléchargement/renommage/...)$N$N17j = 17 jours$N1h23 = 1 heure 23 minutes$N4m56 = 4 minutes 56 secondes", "v1": "connecter", "v2": "utilisez ce serveur en tant que disque dur local", "w1": "passer à https", "x1": "changer mot de passe", "y1": "modifier les partages", - "z1": "déverrouiller ce partage:", + "z1": "déverrouiller ce partage :", "ta1": "entrez d'abord votre nouveau mot de passe", - "ta2": "répétez pour confirmer le nouveau mot de passe:", + "ta2": "répétez pour confirmer le nouveau mot de passe :", "ta3": "une faute de frappe a été détectée ; veuillez réessayer.", - "aa1": "fichiers entrants:", + "aa1": "fichiers entrants :", "ab1": "désactiver no304", "ac1": "activer no304", - "ad1": "l'activation de no304 désactivera toute mise en cache; essayez ceci si k304 n'était pas suffisant. Cela va générer un trafic réseau considérable!", - "ae1": "téléchargements actifs:", + "ad1": "l'activation de no304 désactivera toute mise en cache ; essayez ceci si k304 n'était pas suffisant. Cela va générer un trafic réseau considérable !", + "ae1": "téléchargements actifs :", "af1": "afficher les derniers téléchargements", }, "grc": { From c2cee222bdc3ae836ca1adb52f2af6381e8a5a1f Mon Sep 17 00:00:00 2001 From: ed Date: Sun, 10 Aug 2025 12:26:12 +0000 Subject: [PATCH 13/15] v1.19.1 --- copyparty/__main__.py | 6 +++--- copyparty/__version__.py | 4 ++-- docs/changelog.md | 46 ++++++++++++++++++++++++++++++++++++++++ scripts/rls.sh | 2 ++ scripts/tl.js | 1 + 5 files changed, 54 insertions(+), 5 deletions(-) diff --git a/copyparty/__main__.py b/copyparty/__main__.py index 5c2771fe..2468afe6 100644 --- a/copyparty/__main__.py +++ b/copyparty/__main__.py @@ -1391,7 +1391,7 @@ def add_shutdown(ap): def add_logging(ap): ap2 = ap.add_argument_group("logging options") ap2.add_argument("-q", action="store_true", help="quiet; disable most STDOUT messages") - ap2.add_argument("-lo", metavar="PATH", type=u, default="", help="logfile, example: \033[32mcpp-%%Y-%%m%%d-%%H%%M%%S.txt.xz\033[0m (NB: some errors may appear on STDOUT only)") + ap2.add_argument("-lo", metavar="PATH", type=u, default="", help="logfile; use .txt for plaintext or .xz for compressed. Example: \033[32mcpp-%%Y-%%m%%d-%%H%%M%%S.txt.xz\033[0m (NB: some errors may appear on STDOUT only)") ap2.add_argument("--no-ansi", action="store_true", default=not VT100, help="disable colors; same as environment-variable NO_COLOR") ap2.add_argument("--ansi", action="store_true", help="force colors; overrides environment-variable NO_COLOR") ap2.add_argument("--no-logflush", action="store_true", help="don't flush the logfile after each write; tiny bit faster") @@ -1494,8 +1494,8 @@ def add_db_general(ap, hcores): ap2.add_argument("-e2vp", action="store_true", help="on hash mismatch: panic and quit copyparty") ap2.add_argument("--hist", metavar="PATH", type=u, default="", help="where to store volume data (db, thumbs); default is a folder named \".hist\" inside each volume (volflag=hist)") ap2.add_argument("--dbpath", metavar="PATH", type=u, default="", help="override where the volume databases are to be placed; default is the same as \033[33m--hist\033[0m (volflag=dbpath)") - ap2.add_argument("--no-hash", metavar="PTN", type=u, default="", help="regex: disable hashing of matching absolute-filesystem-paths during e2ds folder scans (volflag=nohash)") - ap2.add_argument("--no-idx", metavar="PTN", type=u, default=noidx, help="regex: disable indexing of matching absolute-filesystem-paths during e2ds folder scans (volflag=noidx)") + ap2.add_argument("--no-hash", metavar="PTN", type=u, default="", help="regex: disable hashing of matching absolute-filesystem-paths during e2ds folder scans (must be specified as one big regex, not multiple times) (volflag=nohash)") + ap2.add_argument("--no-idx", metavar="PTN", type=u, default=noidx, help="regex: disable indexing of matching absolute-filesystem-paths during e2ds folder scan (must be specified as one big regex, not multiple times) (volflag=noidx)") ap2.add_argument("--no-dirsz", action="store_true", help="do not show total recursive size of folders in listings, show inode size instead; slightly faster (volflag=nodirsz)") ap2.add_argument("--re-dirsz", action="store_true", help="if the directory-sizes in the UI are bonkers, use this along with \033[33m-e2dsa\033[0m to rebuild the index from scratch") ap2.add_argument("--no-dhash", action="store_true", help="disable rescan acceleration; do full database integrity check -- makes the db ~5%% smaller and bootup/rescans 3~10x slower") diff --git a/copyparty/__version__.py b/copyparty/__version__.py index 3350f413..1cea26c5 100644 --- a/copyparty/__version__.py +++ b/copyparty/__version__.py @@ -1,8 +1,8 @@ # coding: utf-8 -VERSION = (1, 19, 0) +VERSION = (1, 19, 1) CODENAME = "usernames" -BUILD_DT = (2025, 8, 7) +BUILD_DT = (2025, 8, 10) S_VERSION = ".".join(map(str, VERSION)) S_BUILD_DT = "{0:04d}-{1:02d}-{2:02d}".format(*BUILD_DT) diff --git a/docs/changelog.md b/docs/changelog.md index a3c0aaae..91fd1b84 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,3 +1,49 @@ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +# 2025-0807-2213 `v1.19.0` usernames + +## 🧪 new features + +* #511 login with username and password (not just password) can now optionally be enabled with `--usernames` 346515cc + * if you have enabled password hashing (`ah-alg: argon2` or similar) then you will need to hash your passwords again after enabling usernames, hashing them as `username:password:` +* #468 add Greek translation (thx @chamdim!) 50f46187 392abd06 +* #471 add Czech translation (thx @kubakubakuba!) c9556583 +* #515 support systemd socket acivation (thx @mati1210!) 9b9d2a92 +* #523 add QR-code to the connectpage bcc3b156 +* #513 optional EOL-conversion for texteditor 8b31ed88 +* controlpanel refresh-button now toggles automatic refresh 7ae84dea + +## 🩹 bugfixes + +* fix stuck uploads when the up2k database (`e2d`) is not enabled 4a043568 + * if more than 60'000 files were uploaded and there were several dupes of some files, they could get stuck and never upload + * upload performance is improved remarkably by enabling `e2d` so such huge uploads non-e2d had not been tested in a long time +* #467 #470 fix ui-crash when exporting links of all uploaded files to clipboard (thx @geekalaa!) 0df1901f +* #487 fix ui-crash when the location url-part is `//` 0f55a1ae +* fix viewing `.MD` files (8a0746c6) + +## 🔧 other changes + +* when a reverse-proxy is detected, force explicit configuration of `--rproxy` to obtain correct client IP 3f8cb7e8 + * a bit inconvenient, but helps prevent potentially-dangerous misconfiguration + * the necessary configuration changes are explained in the serverlog (you can't miss it) + * thanks to @person4268 for pointing out that there was room for improvements! +* failed login attempts now only log a sha512 hash of the provided password + * to see login-attempts with incorrect passwords as plaintext like before, `log-badpwd: 1` +* #502 add systemd user services and templated services (thx @icxes!) 34d98e99 +* #475 improve helptext for multivalue global-options c2ac57a2 +* #475 add [chungus.conf](https://github.com/9001/copyparty/blob/hovudstraum/docs/chungus.conf), massive extensive nonsensical demo config b664ebb0 +* try to detect proxies with incorrect caching behavior 9e980bb5 +* recent-uploads now support ie9 a57f7cc2 +* languages and themes are now dropdowns a9ee4f24 +* copyparty.exe: upgrade python to 3.13.6 a98360f2 +* introduce [copyparty-en.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-en.py), english-only edition of copyparty-sfx.py to save space 33497e6b + +## 🗿 known issues + +* the `copyparty.pyz` in this release is english-only, and does not include the translations -- they got lost in transit while adjusting the buildscripts to make `copyparty-en.py` + + + ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ # 2025-0804-0013 `v1.18.10` idp speedboost diff --git a/scripts/rls.sh b/scripts/rls.sh index 767ca2de..d18f12f2 100755 --- a/scripts/rls.sh +++ b/scripts/rls.sh @@ -43,6 +43,8 @@ while [ "$1" ]; do shift done +./make-pyz.sh + ./make-sfx.sh re lang eng "$@" mv ../dist/copyparty-{sfx,en}.py mv ../dist/copyparty-{int,sfx}.py diff --git a/scripts/tl.js b/scripts/tl.js index 97bf061d..4d4fcaba 100644 --- a/scripts/tl.js +++ b/scripts/tl.js @@ -81,6 +81,7 @@ var tl_cpanel = { "ad1": "enabling no304 will disable all caching; try this if k304 wasn't enough. This will waste a huge amount of network traffic!", "ae1": "active downloads:", "af1": "show recent uploads", + "ag1": "view idp cache", }, }; From db2a03409c7bdbcd0752e4b97dad2139db5c77ef Mon Sep 17 00:00:00 2001 From: ed Date: Sun, 10 Aug 2025 12:44:51 +0000 Subject: [PATCH 14/15] update pkgs to 1.19.1 --- contrib/package/arch/PKGBUILD | 4 ++-- contrib/package/makedeb-mpr/PKGBUILD | 4 ++-- contrib/package/nix/copyparty/pin.json | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/contrib/package/arch/PKGBUILD b/contrib/package/arch/PKGBUILD index e5896fd7..3c6a4abb 100644 --- a/contrib/package/arch/PKGBUILD +++ b/contrib/package/arch/PKGBUILD @@ -3,7 +3,7 @@ # NOTE: You generally shouldn't use this PKGBUILD on Arch, as it is mainly for testing purposes. Install copyparty using pacman instead. pkgname=copyparty -pkgver="1.19.0" +pkgver="1.19.1" pkgrel=1 pkgdesc="File server with accelerated resumable uploads, dedup, WebDAV, FTP, TFTP, zeroconf, media indexer, thumbnails++" arch=("any") @@ -23,7 +23,7 @@ optdepends=("ffmpeg: thumbnails for videos, images (slower) and audio, music tag ) source=("https://github.com/9001/${pkgname}/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz") backup=("etc/${pkgname}/copyparty.conf" ) -sha256sums=("179b027d51e4fe7ebdab2b18c07475d52c57e2ce69256292b157a8efacd82118") +sha256sums=("bbc250db23eb80bc96c27b2efa456ce1e7f49c7dfaabadb91a571f70064b6f91") build() { cd "${srcdir}/${pkgname}-${pkgver}/copyparty/web" diff --git a/contrib/package/makedeb-mpr/PKGBUILD b/contrib/package/makedeb-mpr/PKGBUILD index 645623c0..6201430a 100644 --- a/contrib/package/makedeb-mpr/PKGBUILD +++ b/contrib/package/makedeb-mpr/PKGBUILD @@ -2,7 +2,7 @@ pkgname=copyparty -pkgver=1.19.0 +pkgver=1.19.1 pkgrel=1 pkgdesc="File server with accelerated resumable uploads, dedup, WebDAV, FTP, TFTP, zeroconf, media indexer, thumbnails++" arch=("any") @@ -20,7 +20,7 @@ optdepends=("ffmpeg: thumbnails for videos, images (slower) and audio, music tag ) source=("https://github.com/9001/${pkgname}/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz") backup=("/etc/${pkgname}.d/init" ) -sha256sums=("179b027d51e4fe7ebdab2b18c07475d52c57e2ce69256292b157a8efacd82118") +sha256sums=("bbc250db23eb80bc96c27b2efa456ce1e7f49c7dfaabadb91a571f70064b6f91") build() { cd "${srcdir}/${pkgname}-${pkgver}/copyparty/web" diff --git a/contrib/package/nix/copyparty/pin.json b/contrib/package/nix/copyparty/pin.json index c0d8c68a..55f1c2e1 100644 --- a/contrib/package/nix/copyparty/pin.json +++ b/contrib/package/nix/copyparty/pin.json @@ -1,5 +1,5 @@ { - "url": "https://github.com/9001/copyparty/releases/download/v1.19.0/copyparty-sfx.py", - "version": "1.19.0", - "hash": "sha256-9A+zPtkVtUuGHB/JJV3fhVtJderLUGxHqvuJQz0/1+Q=" + "url": "https://github.com/9001/copyparty/releases/download/v1.19.1/copyparty-sfx.py", + "version": "1.19.1", + "hash": "sha256-Orn0N//DD5/5rIWK9yYRcvyOnt/bKCE9CeoxkfNO76s=" } \ No newline at end of file From 0da93659a4def6c3adbba71c4887d368a7e3a1cd Mon Sep 17 00:00:00 2001 From: Bevinsky Date: Sun, 10 Aug 2025 17:19:43 +0200 Subject: [PATCH 15/15] Add missing translated string in up2k. --- copyparty/web/up2k.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/copyparty/web/up2k.js b/copyparty/web/up2k.js index 2743ea36..6ae7046f 100644 --- a/copyparty/web/up2k.js +++ b/copyparty/web/up2k.js @@ -2831,7 +2831,7 @@ function up2k_init(subtle) { if (!t.t_uploading) t.t_uploading = Date.now(); - pvis.seth(t.n, 1, "🚀 send"); + pvis.seth(t.n, 1, "🚀 " + L.ul_send); var chunksize = get_chunksize(t.size), car = pcar * chunksize,