From b0e88590b9910c08b14820618cce86249bea91b4 Mon Sep 17 00:00:00 2001 From: Sebastien Helleu Date: Wed, 7 May 2008 13:34:04 +0200 Subject: [PATCH] Xfer file resume (for DCC protocol) is back --- po/cs.po | 81 ++++++++----- po/de.po | 81 ++++++++----- po/es.po | 81 ++++++++----- po/fr.po | 67 ++++++++--- po/hu.po | 81 ++++++++----- po/ru.po | 81 ++++++++----- po/weechat.pot | 44 ++++++- src/plugins/irc/irc-dcc.c | 47 -------- src/plugins/irc/irc-protocol.c | 62 +++++++--- src/plugins/irc/irc-server.c | 112 ++++++++++++++++++ src/plugins/irc/irc-server.h | 5 + src/plugins/irc/irc.c | 2 + src/plugins/xfer/xfer-buffer.c | 21 +++- src/plugins/xfer/xfer-file.c | 4 +- src/plugins/xfer/xfer-network.c | 10 +- src/plugins/xfer/xfer.c | 200 +++++++++++++++++++++++++++++--- 16 files changed, 709 insertions(+), 270 deletions(-) diff --git a/po/cs.po b/po/cs.po index f1590de78..93b224bb5 100644 --- a/po/cs.po +++ b/po/cs.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.2.7-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2008-05-06 16:47+0200\n" +"POT-Creation-Date: 2008-05-07 13:30+0200\n" "PO-Revision-Date: 2007-09-06 12:44+0200\n" "Last-Translator: Jiri Golembiovsky \n" "Language-Team: weechat-dev \n" @@ -4274,13 +4274,13 @@ msgid "%s: sending chat request to %s" msgstr "Posílám požadavek DCC rozhovoru na %s%s\n" #, fuzzy, c-format -msgid "%s: file %s (local filename: %s) will be resumed at position %u" +msgid "%s: file %s (local filename: %s) will be resumed at position %lu" msgstr "" "DCC: soubor %s%s%s (lokální jméno souboru: %s%s%s) bude obnoven na pozici %" "u\n" #, fuzzy, c-format -msgid "%s%s: missing arguments" +msgid "%s%s: missing arguments (%s)" msgstr "%s chybí argument pro volbu \"%s\"\n" #, fuzzy, c-format @@ -4315,6 +4315,26 @@ msgstr "%s nemůžu najít dostupný port pro DCC\n" msgid "%s%s: error creating xfer" msgstr "%s nedostatek paměti pro infobar zprávu\n" +#, fuzzy, c-format +msgid "" +"%s%s: unable to resume file \"%s\" (port: %d, start position: %lu): xfer not " +"found or not ready for transfert" +msgstr "" +"%s nemohu obnovit soubor \"%s\" (port: %d, počáteční pozice: %u): DCC " +"nenalezeno nebo ukončeno\n" + +#, fuzzy, c-format +msgid "%s: file %s resumed at position %lu" +msgstr "DCC: soubor %s%s%s bude obnoven na pozici %u\n" + +#, fuzzy, c-format +msgid "" +"%s%s: unable to accept resume file \"%s\" (port: %d, start position: %lu): " +"xfer not found or not ready for transfert" +msgstr "" +"%s nemohu obnovit soubor \"%s\" (port: %d, počáteční pozice: %u): DCC " +"nenalezeno nebo ukončeno\n" + #, fuzzy, c-format msgid "%s%s: aborting active xfer: \"%s\" from %s" msgstr "Ruším aktivní DCC: \"%s\" od %s\n" @@ -4331,6 +4351,26 @@ msgstr "MB" msgid "GB" msgstr "GB" +msgid "Actions (letter+enter):" +msgstr "" + +msgid " [A] Accept" +msgstr " [A] Akceptovat" + +msgid " [C] Cancel" +msgstr " [C] Storno" + +msgid " [R] Remove" +msgstr " [R] Odebrat" + +#, fuzzy +msgid " [P] Purge finished" +msgstr " [P] Pročistit staré DCC" + +#, fuzzy +msgid " [Q] Close xfer list" +msgstr " [Q] Zavřít DCC pohled" + msgid "ETA" msgstr "ETA" @@ -4353,7 +4393,7 @@ msgstr "" msgid "Open buffer with xfer list" msgstr "Otevřené buffery:\n" -msgid "auto open xfer buffer and switch to it when a new xfer is added to list" +msgid "auto open xfer buffer when a new xfer is added to list" msgstr "" msgid "size of progress bar, in chars (if 0, progress bar is disabled)" @@ -4368,8 +4408,8 @@ msgid "background color" msgstr "pozadí přezdívek" #, fuzzy -msgid "background color for selected line" -msgstr "barva pro vstupní text" +msgid "text color of selected xfer line" +msgstr "barva pro jeméno serveru" #, fuzzy msgid "text color for \"waiting\" status" @@ -4498,6 +4538,10 @@ msgstr "%s DCC: nemohu nastavit 'neblokovaci' volbu na soket\n" msgid "%s%s: timeout for \"%s\" with %s" msgstr "%s chybí argument pro volbu \"%s\"\n" +#, fuzzy +#~ msgid "background color for selected line" +#~ msgstr "barva pro vstupní text" + #, fuzzy #~ msgid "%s%s: filename missing for type \"%s\"" #~ msgstr "%s %s, řádek %d: nevalidní volba \"%s\"\n" @@ -4528,16 +4572,6 @@ msgstr "%s chybí argument pro volbu \"%s\"\n" #~ "%s nemohu přiřadit DCC rozhovor k soukromému bufferu (možná má " #~ "soukromýbuffer již DCC CHAT?)\n" -#~ msgid "DCC: file %s%s%s resumed at position %u\n" -#~ msgstr "DCC: soubor %s%s%s bude obnoven na pozici %u\n" - -#~ msgid "" -#~ "%s can't resume file \"%s\" (port: %d, start position: %u): DCC not found " -#~ "or ended\n" -#~ msgstr "" -#~ "%s nemohu obnovit soubor \"%s\" (port: %d, počáteční pozice: %u): DCC " -#~ "nenalezeno nebo ukončeno\n" - #~ msgid "DCC chat" #~ msgstr "DCC rozhovor" @@ -5866,21 +5900,6 @@ msgstr "%s chybí argument pro volbu \"%s\"\n" #~ msgid "%s server/channel (%s/%s) not found for plugin exec command\n" #~ msgstr "%s server/kanál (%s/%s) nenaleyen pro exec příkaz pluginu\n" -#~ msgid " [A] Accept" -#~ msgstr " [A] Akceptovat" - -#~ msgid " [C] Cancel" -#~ msgstr " [C] Storno" - -#~ msgid " [R] Remove" -#~ msgstr " [R] Odebrat" - -#~ msgid " [P] Purge old DCC" -#~ msgstr " [P] Pročistit staré DCC" - -#~ msgid " [Q] Close DCC view" -#~ msgstr " [Q] Zavřít DCC pohled" - #~ msgid " [Q] Close raw data view" #~ msgstr " [Q] Zavřít čistý pohled na data" diff --git a/po/de.po b/po/de.po index c538b48cd..03561b768 100644 --- a/po/de.po +++ b/po/de.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.2.7-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2008-05-06 16:47+0200\n" +"POT-Creation-Date: 2008-05-07 13:30+0200\n" "PO-Revision-Date: 2007-09-06 12:44+0200\n" "Last-Translator: Thomas Schuetz \n" "Language-Team: weechat-dev \n" @@ -4258,13 +4258,13 @@ msgid "%s: sending chat request to %s" msgstr "Sende DCC-Chatanforderung an %s%s\n" #, fuzzy, c-format -msgid "%s: file %s (local filename: %s) will be resumed at position %u" +msgid "%s: file %s (local filename: %s) will be resumed at position %lu" msgstr "" "DCC: Datei %s%s%s (lokaler Dateiname: %s%s%s) wird an der Position %u " "fortgesetzt\n" #, fuzzy, c-format -msgid "%s%s: missing arguments" +msgid "%s%s: missing arguments (%s)" msgstr "%s fehlende Argumente für die \"--dir\"-Option\n" #, fuzzy, c-format @@ -4300,6 +4300,26 @@ msgstr "%s kann keinen freien Port für DCC ermitteln\n" msgid "%s%s: error creating xfer" msgstr "%s nicht genügend Speicher für Infobar-Nachricht\n" +#, fuzzy, c-format +msgid "" +"%s%s: unable to resume file \"%s\" (port: %d, start position: %lu): xfer not " +"found or not ready for transfert" +msgstr "" +"%s kann die Datei \"%s\" nicht fortsetzen (Port: %d, Startposition: %u): DCC " +"nicht gefunden oder bereits fertig\n" + +#, fuzzy, c-format +msgid "%s: file %s resumed at position %lu" +msgstr "DCC: Datei %s%s%s wird an Position %u fortgesetzt\n" + +#, fuzzy, c-format +msgid "" +"%s%s: unable to accept resume file \"%s\" (port: %d, start position: %lu): " +"xfer not found or not ready for transfert" +msgstr "" +"%s kann die Datei \"%s\" nicht fortsetzen (Port: %d, Startposition: %u): DCC " +"nicht gefunden oder bereits fertig\n" + #, fuzzy, c-format msgid "%s%s: aborting active xfer: \"%s\" from %s" msgstr "Aktiver DCC wird abgebrochen: \"%s\" von %s\n" @@ -4316,6 +4336,26 @@ msgstr "MB" msgid "GB" msgstr "GB" +msgid "Actions (letter+enter):" +msgstr "" + +msgid " [A] Accept" +msgstr " [A] annehmen" + +msgid " [C] Cancel" +msgstr " [C] abbrechen" + +msgid " [R] Remove" +msgstr " [R] entfernen" + +#, fuzzy +msgid " [P] Purge finished" +msgstr " [P] alte DCCs entfernen" + +#, fuzzy +msgid " [Q] Close xfer list" +msgstr " [Q] DCC-Ansicht schließen" + msgid "ETA" msgstr "ETA" @@ -4338,7 +4378,7 @@ msgstr "" msgid "Open buffer with xfer list" msgstr "Offene Puffer:\n" -msgid "auto open xfer buffer and switch to it when a new xfer is added to list" +msgid "auto open xfer buffer when a new xfer is added to list" msgstr "" msgid "size of progress bar, in chars (if 0, progress bar is disabled)" @@ -4353,8 +4393,8 @@ msgid "background color" msgstr "Hintergrundfarbe der Nicknames" #, fuzzy -msgid "background color for selected line" -msgstr "Farbe der Eingabezeile" +msgid "text color of selected xfer line" +msgstr "Farbe des Servernamens" #, fuzzy msgid "text color for \"waiting\" status" @@ -4487,6 +4527,10 @@ msgstr "%s DCC: kann die 'nonblock'-Option für den Socket nicht festlegen\n" msgid "%s%s: timeout for \"%s\" with %s" msgstr "%s fehlende Argumente für die \"--dir\"-Option\n" +#, fuzzy +#~ msgid "background color for selected line" +#~ msgstr "Farbe der Eingabezeile" + #, fuzzy #~ msgid "%s%s: filename missing for type \"%s\"" #~ msgstr "%s %s, Zeile %d: ungültige Option \"%s\"\n" @@ -4517,16 +4561,6 @@ msgstr "%s fehlende Argumente für die \"--dir\"-Option\n" #~ "%s kann keinen DCC Chat mit privatem Puffer assoziieren (ist er bereits " #~ "ein DCC CHAT?)\n" -#~ msgid "DCC: file %s%s%s resumed at position %u\n" -#~ msgstr "DCC: Datei %s%s%s wird an Position %u fortgesetzt\n" - -#~ msgid "" -#~ "%s can't resume file \"%s\" (port: %d, start position: %u): DCC not found " -#~ "or ended\n" -#~ msgstr "" -#~ "%s kann die Datei \"%s\" nicht fortsetzen (Port: %d, Startposition: %u): " -#~ "DCC nicht gefunden oder bereits fertig\n" - #~ msgid "DCC chat" #~ msgstr "DCC Chat" @@ -5866,21 +5900,6 @@ msgstr "%s fehlende Argumente für die \"--dir\"-Option\n" #~ msgstr "" #~ "%s Server/Channel (%s/%s) für den Plugin-Exec-Befehl nicht gefunden\n" -#~ msgid " [A] Accept" -#~ msgstr " [A] annehmen" - -#~ msgid " [C] Cancel" -#~ msgstr " [C] abbrechen" - -#~ msgid " [R] Remove" -#~ msgstr " [R] entfernen" - -#~ msgid " [P] Purge old DCC" -#~ msgstr " [P] alte DCCs entfernen" - -#~ msgid " [Q] Close DCC view" -#~ msgstr " [Q] DCC-Ansicht schließen" - #~ msgid " [Q] Close raw data view" #~ msgstr " [Q] Rohdatenansicht schließen" diff --git a/po/es.po b/po/es.po index 698d11e64..77aaad83c 100644 --- a/po/es.po +++ b/po/es.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.2.7-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2008-05-06 16:47+0200\n" +"POT-Creation-Date: 2008-05-07 13:30+0200\n" "PO-Revision-Date: 2007-09-19 12:09+0200\n" "Last-Translator: Roberto González Cardenete \n" "Language-Team: weechat-dev \n" @@ -4263,13 +4263,13 @@ msgid "%s: sending chat request to %s" msgstr "Envío de petición de charla DCC a %s%s\n" #, fuzzy, c-format -msgid "%s: file %s (local filename: %s) will be resumed at position %u" +msgid "%s: file %s (local filename: %s) will be resumed at position %lu" msgstr "" "DCC: el archivo %s%s%s (nombre de archivo local: %s%s%s) será reanudado en " "la posición %u\n" #, fuzzy, c-format -msgid "%s%s: missing arguments" +msgid "%s%s: missing arguments (%s)" msgstr "%s falta un argumento para la opción --dir\n" #, fuzzy, c-format @@ -4306,6 +4306,26 @@ msgid "%s%s: error creating xfer" msgstr "" "No hay suficiente memoria para el mensaje de la barra de información\n" +#, fuzzy, c-format +msgid "" +"%s%s: unable to resume file \"%s\" (port: %d, start position: %lu): xfer not " +"found or not ready for transfert" +msgstr "" +"%s no puede reanudar el archivo \"%s\" (puerto: %d, posición de inicio: %" +"u): DCC no encontrado o terminado\n" + +#, fuzzy, c-format +msgid "%s: file %s resumed at position %lu" +msgstr "DCC: archivo %s%s%s reanudado en la posición %u\n" + +#, fuzzy, c-format +msgid "" +"%s%s: unable to accept resume file \"%s\" (port: %d, start position: %lu): " +"xfer not found or not ready for transfert" +msgstr "" +"%s no puede reanudar el archivo \"%s\" (puerto: %d, posición de inicio: %" +"u): DCC no encontrado o terminado\n" + #, fuzzy, c-format msgid "%s%s: aborting active xfer: \"%s\" from %s" msgstr "Abandonar el DCC activo: \"%s\" de %s\n" @@ -4322,6 +4342,26 @@ msgstr "" msgid "GB" msgstr "" +msgid "Actions (letter+enter):" +msgstr "" + +msgid " [A] Accept" +msgstr " [A] Aceptar" + +msgid " [C] Cancel" +msgstr " [C] Cancelar" + +msgid " [R] Remove" +msgstr " [R] Eliminar" + +#, fuzzy +msgid " [P] Purge finished" +msgstr " [P] Purgar los viejos DCC" + +#, fuzzy +msgid " [Q] Close xfer list" +msgstr " [Q] Cerrar la vista DCC" + msgid "ETA" msgstr "Tiempo estimado de llegada" @@ -4344,7 +4384,7 @@ msgstr "" msgid "Open buffer with xfer list" msgstr "Búfers abiertos:\n" -msgid "auto open xfer buffer and switch to it when a new xfer is added to list" +msgid "auto open xfer buffer when a new xfer is added to list" msgstr "" msgid "size of progress bar, in chars (if 0, progress bar is disabled)" @@ -4359,8 +4399,8 @@ msgid "background color" msgstr "color de fondo para los nombres de usuario" #, fuzzy -msgid "background color for selected line" -msgstr "color para el texto de entrada" +msgid "text color of selected xfer line" +msgstr "color para el nombre del servidor" #, fuzzy msgid "text color for \"waiting\" status" @@ -4496,6 +4536,10 @@ msgstr "%s no es posible crear el servidor\n" msgid "%s%s: timeout for \"%s\" with %s" msgstr "%s falta un argumento para la opción --dir\n" +#, fuzzy +#~ msgid "background color for selected line" +#~ msgstr "color para el texto de entrada" + #, fuzzy #~ msgid "%s%s: filename missing for type \"%s\"" #~ msgstr "%s %s, línea %d: opción \"%s\" inválida\n" @@ -4526,16 +4570,6 @@ msgstr "%s falta un argumento para la opción --dir\n" #~ "%s no se puede asociar la conversación DCC con el búfer privado (quizá " #~ "el búfer privado ya tiene DCC CHAT)\n" -#~ msgid "DCC: file %s%s%s resumed at position %u\n" -#~ msgstr "DCC: archivo %s%s%s reanudado en la posición %u\n" - -#~ msgid "" -#~ "%s can't resume file \"%s\" (port: %d, start position: %u): DCC not found " -#~ "or ended\n" -#~ msgstr "" -#~ "%s no puede reanudar el archivo \"%s\" (puerto: %d, posición de inicio: %" -#~ "u): DCC no encontrado o terminado\n" - #~ msgid "DCC chat" #~ msgstr "Charla DCC" @@ -5893,21 +5927,6 @@ msgstr "%s falta un argumento para la opción --dir\n" #~ msgstr "" #~ "%s servidor/canal (%s/%s) no encontrado para el plugin de comando exec\n" -#~ msgid " [A] Accept" -#~ msgstr " [A] Aceptar" - -#~ msgid " [C] Cancel" -#~ msgstr " [C] Cancelar" - -#~ msgid " [R] Remove" -#~ msgstr " [R] Eliminar" - -#~ msgid " [P] Purge old DCC" -#~ msgstr " [P] Purgar los viejos DCC" - -#~ msgid " [Q] Close DCC view" -#~ msgstr " [Q] Cerrar la vista DCC" - #~ msgid " [Q] Close raw data view" #~ msgstr " [Q] Cerrar vista de datos basura" diff --git a/po/fr.po b/po/fr.po index 6cd61b2ec..ba962bc5f 100644 --- a/po/fr.po +++ b/po/fr.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.2.7-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2008-05-06 16:47+0200\n" -"PO-Revision-Date: 2008-05-06 16:46+0200\n" +"POT-Creation-Date: 2008-05-07 13:30+0200\n" +"PO-Revision-Date: 2008-05-07 13:30+0200\n" "Last-Translator: FlashCode \n" "Language-Team: weechat-dev \n" "MIME-Version: 1.0\n" @@ -2232,14 +2232,12 @@ msgstr "démarre le DCC (fichier ou discussion)" msgid "action [nickname [file]]" msgstr "action [pseudo [fichier]]" -#, fuzzy msgid "" " action: 'send' (file) or 'chat'\n" "nickname: nickname to send file or chat\n" " file: filename (on local host)" msgstr "" -" action: 'send' (envoi de fichier) ou 'chat' (discussion) ou " -"'close' (fermeture discussion)\n" +" action: 'send' (envoi de fichier) ou 'chat' (discussion)\n" " pseudo: pseudo pour envoyer le fichier ou discuter\n" "fichier: nom du fichier (sur la machine locale)" @@ -4212,12 +4210,12 @@ msgid "%s: sending chat request to %s" msgstr "%s: envoi d'une demande de discussion à %s" #, c-format -msgid "%s: file %s (local filename: %s) will be resumed at position %u" -msgstr "%s: fichier %s (nom local: %s) sera recommencé en position %u" +msgid "%s: file %s (local filename: %s) will be resumed at position %lu" +msgstr "%s: fichier %s (nom local: %s) sera recommencé en position %lu" #, c-format -msgid "%s%s: missing arguments" -msgstr "%s%s: paramètres manquants" +msgid "%s%s: missing arguments (%s)" +msgstr "%s%s: paramètres manquants (%s)" #, c-format msgid "%s%s: unknown xfer type \"%s\"" @@ -4253,6 +4251,26 @@ msgstr "%s%s: impossible de trouver un port disponible pour le xfer" msgid "%s%s: error creating xfer" msgstr "%s%s: erreur de création du xfer" +#, c-format +msgid "" +"%s%s: unable to resume file \"%s\" (port: %d, start position: %lu): xfer not " +"found or not ready for transfert" +msgstr "" +"%s%s: impossible de continuer le fichier \"%s\" (port: %d, position de " +"départ: %lu): xfer non trouvé ou non prêt pour le transfert" + +#, c-format +msgid "%s: file %s resumed at position %lu" +msgstr "%s: fichier %s sera recommencé en position %lu" + +#, c-format +msgid "" +"%s%s: unable to accept resume file \"%s\" (port: %d, start position: %lu): " +"xfer not found or not ready for transfert" +msgstr "" +"%s%s: impossible d'accepter de continuer le fichier \"%s\" (port: %d, " +"position de départ: %lu): xfer non trouvé ou non prêt pour le transfert" + #, c-format msgid "%s%s: aborting active xfer: \"%s\" from %s" msgstr "%s%s: abandon du xfer actif: \"%s\" de %s" @@ -4269,6 +4287,24 @@ msgstr "Mo" msgid "GB" msgstr "Go" +msgid "Actions (letter+enter):" +msgstr "Actions (lettre+entrée):" + +msgid " [A] Accept" +msgstr " [A] Accepter" + +msgid " [C] Cancel" +msgstr " [C] Annuler" + +msgid " [R] Remove" +msgstr " [R] Retirer" + +msgid " [P] Purge finished" +msgstr " [P] Purger terminés" + +msgid " [Q] Close xfer list" +msgstr " [Q] Fermer la liste xfer" + msgid "ETA" msgstr "ETA" @@ -4289,10 +4325,10 @@ msgstr "contrôle xfer" msgid "Open buffer with xfer list" msgstr "Ouverture du tampon avec la liste des xfers" -msgid "auto open xfer buffer and switch to it when a new xfer is added to list" +msgid "auto open xfer buffer when a new xfer is added to list" msgstr "" -"ouvrir automatiquement le tampon xfer et basculer vers celui-ci lorsqu'un " -"nouveau xfer est ajouté à la liste" +"ouvrir automatiquement le tampon xfer lorsqu'un nouveau xfer est ajouté à la " +"liste" msgid "size of progress bar, in chars (if 0, progress bar is disabled)" msgstr "" @@ -4305,8 +4341,8 @@ msgstr "couleur du texte" msgid "background color" msgstr "couleur du fond" -msgid "background color for selected line" -msgstr "couleur du fond pour la ligne sélectionnée" +msgid "text color of selected xfer line" +msgstr "couleur du texte pour la ligne xfer sélectionnée" msgid "text color for \"waiting\" status" msgstr "couleur du texte pour le statut \"en attente\"" @@ -4426,3 +4462,6 @@ msgstr "%s%s: impossible de positionner l'option \"nonblock\" pour la socket" #, c-format msgid "%s%s: timeout for \"%s\" with %s" msgstr "%s%s: délai d'attente dépassé pour \"%s\" avec %s" + +#~ msgid "background color for selected line" +#~ msgstr "couleur du fond pour la ligne sélectionnée" diff --git a/po/hu.po b/po/hu.po index be10b35ef..61b25ca5e 100644 --- a/po/hu.po +++ b/po/hu.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.2.7-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2008-05-06 16:47+0200\n" +"POT-Creation-Date: 2008-05-07 13:30+0200\n" "PO-Revision-Date: 2007-10-10 18:07+0200\n" "Last-Translator: Andras Voroskoi \n" "Language-Team: weechat-dev \n" @@ -4277,12 +4277,12 @@ msgid "%s: sending chat request to %s" msgstr "DCC beszélgetésre felkérés küldése a következőnek: %s%s\n" #, fuzzy, c-format -msgid "%s: file %s (local filename: %s) will be resumed at position %u" +msgid "%s: file %s (local filename: %s) will be resumed at position %lu" msgstr "" "DCC: a %s%s%s fájl (helyi fájlnév: %s%s%s) a(z) %u pozíción fog visszatérni\n" #, fuzzy, c-format -msgid "%s%s: missing arguments" +msgid "%s%s: missing arguments (%s)" msgstr "%s hiányzó argumentum a(z) \"%s\" opciónak\n" #, fuzzy, c-format @@ -4318,6 +4318,26 @@ msgstr "%s nem sikerült elérhető portot találni a DCC-hez\n" msgid "%s%s: error creating xfer" msgstr "%s nincs elég memória az információs pult üzenethez\n" +#, fuzzy, c-format +msgid "" +"%s%s: unable to resume file \"%s\" (port: %d, start position: %lu): xfer not " +"found or not ready for transfert" +msgstr "" +"%s nem sikerült a(z) \"%s\" fájlra visszatérni (port: %d, indulási pozíció: %" +"u): DCC nem található vagy véget ért\n" + +#, fuzzy, c-format +msgid "%s: file %s resumed at position %lu" +msgstr "DCC: a(z) %s%s%s fájl visszatért a(z) %u pozíción\n" + +#, fuzzy, c-format +msgid "" +"%s%s: unable to accept resume file \"%s\" (port: %d, start position: %lu): " +"xfer not found or not ready for transfert" +msgstr "" +"%s nem sikerült a(z) \"%s\" fájlra visszatérni (port: %d, indulási pozíció: %" +"u): DCC nem található vagy véget ért\n" + #, fuzzy, c-format msgid "%s%s: aborting active xfer: \"%s\" from %s" msgstr "\"%s\" aktív DCC megszakítása a következővel: %s\n" @@ -4334,6 +4354,26 @@ msgstr "MB" msgid "GB" msgstr "GB" +msgid "Actions (letter+enter):" +msgstr "" + +msgid " [A] Accept" +msgstr " [A] Elfogadás" + +msgid " [C] Cancel" +msgstr " [C] Mégsem" + +msgid " [R] Remove" +msgstr " [R] Eltávolítás" + +#, fuzzy +msgid " [P] Purge finished" +msgstr " [P] Régi DCC törlése" + +#, fuzzy +msgid " [Q] Close xfer list" +msgstr " [Q] DCC nézet bezárása" + msgid "ETA" msgstr "ETA" @@ -4358,7 +4398,7 @@ msgstr "" msgid "Open buffer with xfer list" msgstr "Nyitott pufferek:\n" -msgid "auto open xfer buffer and switch to it when a new xfer is added to list" +msgid "auto open xfer buffer when a new xfer is added to list" msgstr "" msgid "size of progress bar, in chars (if 0, progress bar is disabled)" @@ -4373,8 +4413,8 @@ msgid "background color" msgstr "nevek háttere" #, fuzzy -msgid "background color for selected line" -msgstr "szövegbeviteli mező színe" +msgid "text color of selected xfer line" +msgstr "szerver nevének színe" #, fuzzy msgid "text color for \"waiting\" status" @@ -4502,6 +4542,10 @@ msgstr "%s DCC: nem sikerült 'nonblock' opciót beállítani a csatornán\n" msgid "%s%s: timeout for \"%s\" with %s" msgstr "%s hiányzó argumentum a(z) \"%s\" opciónak\n" +#, fuzzy +#~ msgid "background color for selected line" +#~ msgstr "szövegbeviteli mező színe" + #, fuzzy #~ msgid "%s%s: filename missing for type \"%s\"" #~ msgstr "%s %s, %d. sor: érvénytelen opció: \"%s\"\n" @@ -4532,16 +4576,6 @@ msgstr "%s hiányzó argumentum a(z) \"%s\" opciónak\n" #~ "%s nem sikerült a DCC beszégetést a privát pufferhez kapcsolni (talán már " #~ "lett DCC CHAT hozzárendelve?)\n" -#~ msgid "DCC: file %s%s%s resumed at position %u\n" -#~ msgstr "DCC: a(z) %s%s%s fájl visszatért a(z) %u pozíción\n" - -#~ msgid "" -#~ "%s can't resume file \"%s\" (port: %d, start position: %u): DCC not found " -#~ "or ended\n" -#~ msgstr "" -#~ "%s nem sikerült a(z) \"%s\" fájlra visszatérni (port: %d, indulási " -#~ "pozíció: %u): DCC nem található vagy véget ért\n" - #~ msgid "DCC chat" #~ msgstr "DCC beszélgetés" @@ -5862,21 +5896,6 @@ msgstr "%s hiányzó argumentum a(z) \"%s\" opciónak\n" #~ msgstr "" #~ "%s (%s/%s) szerver/szoba nem található a modul futtatása parancshoz\n" -#~ msgid " [A] Accept" -#~ msgstr " [A] Elfogadás" - -#~ msgid " [C] Cancel" -#~ msgstr " [C] Mégsem" - -#~ msgid " [R] Remove" -#~ msgstr " [R] Eltávolítás" - -#~ msgid " [P] Purge old DCC" -#~ msgstr " [P] Régi DCC törlése" - -#~ msgid " [Q] Close DCC view" -#~ msgstr " [Q] DCC nézet bezárása" - #~ msgid " [Q] Close raw data view" #~ msgstr " [Q] Nyers adat nézet bezárása" diff --git a/po/ru.po b/po/ru.po index dcf66e81f..a0f82d1b0 100644 --- a/po/ru.po +++ b/po/ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.2.7-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2008-05-06 16:47+0200\n" +"POT-Creation-Date: 2008-05-07 13:30+0200\n" "PO-Revision-Date: 2007-09-06 12:44+0200\n" "Last-Translator: Pavel Shevchuk \n" "Language-Team: weechat-dev \n" @@ -4263,12 +4263,12 @@ msgid "%s: sending chat request to %s" msgstr "Отправляю запрос на DCC-чат %s%s\n" #, fuzzy, c-format -msgid "%s: file %s (local filename: %s) will be resumed at position %u" +msgid "%s: file %s (local filename: %s) will be resumed at position %lu" msgstr "" "DCC: файл %s%s%s (локальное имя файла: %s%s%s) будет продолжен с позиции %u\n" #, fuzzy, c-format -msgid "%s%s: missing arguments" +msgid "%s%s: missing arguments (%s)" msgstr "%s нет аргумента для параметра \"%s\"\n" #, fuzzy, c-format @@ -4303,6 +4303,26 @@ msgstr "%s не могу найти свободный порт для DCC\n" msgid "%s%s: error creating xfer" msgstr "%s недостаточно памяти для сообщения в строке информации\n" +#, fuzzy, c-format +msgid "" +"%s%s: unable to resume file \"%s\" (port: %d, start position: %lu): xfer not " +"found or not ready for transfert" +msgstr "" +"%s не могу продолжить файл \"%s\" (порт: %d, начальная позиция: %u): DCC не " +"найден или завершён\n" + +#, fuzzy, c-format +msgid "%s: file %s resumed at position %lu" +msgstr "DCC: файл %s%s%s продолжается с позиции %u\n" + +#, fuzzy, c-format +msgid "" +"%s%s: unable to accept resume file \"%s\" (port: %d, start position: %lu): " +"xfer not found or not ready for transfert" +msgstr "" +"%s не могу продолжить файл \"%s\" (порт: %d, начальная позиция: %u): DCC не " +"найден или завершён\n" + #, fuzzy, c-format msgid "%s%s: aborting active xfer: \"%s\" from %s" msgstr "Отменяю активное DCC-сединение: \"%s\" от %s\n" @@ -4319,6 +4339,26 @@ msgstr "МБ" msgid "GB" msgstr "ГБ" +msgid "Actions (letter+enter):" +msgstr "" + +msgid " [A] Accept" +msgstr " [A] Принять" + +msgid " [C] Cancel" +msgstr " [C] Отменить" + +msgid " [R] Remove" +msgstr " [R] Удалить" + +#, fuzzy +msgid " [P] Purge finished" +msgstr " [P] Очистить список" + +#, fuzzy +msgid " [Q] Close xfer list" +msgstr " [Q] Закрыть окно" + msgid "ETA" msgstr "осталось" @@ -4341,7 +4381,7 @@ msgstr "" msgid "Open buffer with xfer list" msgstr "Открытые буферы:\n" -msgid "auto open xfer buffer and switch to it when a new xfer is added to list" +msgid "auto open xfer buffer when a new xfer is added to list" msgstr "" msgid "size of progress bar, in chars (if 0, progress bar is disabled)" @@ -4356,8 +4396,8 @@ msgid "background color" msgstr "фон ников" #, fuzzy -msgid "background color for selected line" -msgstr "цвет вводимого текста" +msgid "text color of selected xfer line" +msgstr "цвет названия сервера" #, fuzzy msgid "text color for \"waiting\" status" @@ -4487,6 +4527,10 @@ msgstr "%s DCC: не могу установить неблокирующий р msgid "%s%s: timeout for \"%s\" with %s" msgstr "%s нет аргумента для параметра \"%s\"\n" +#, fuzzy +#~ msgid "background color for selected line" +#~ msgstr "цвет вводимого текста" + #, fuzzy #~ msgid "%s%s: filename missing for type \"%s\"" #~ msgstr "%s %s, строка %d: некорректный параметр \"%s\"\n" @@ -4517,16 +4561,6 @@ msgstr "%s нет аргумента для параметра \"%s\"\n" #~ "%s не могу ассоциировать DCC-чат с буфером (возможно буфер уже имеет DCC-" #~ "чат)\n" -#~ msgid "DCC: file %s%s%s resumed at position %u\n" -#~ msgstr "DCC: файл %s%s%s продолжается с позиции %u\n" - -#~ msgid "" -#~ "%s can't resume file \"%s\" (port: %d, start position: %u): DCC not found " -#~ "or ended\n" -#~ msgstr "" -#~ "%s не могу продолжить файл \"%s\" (порт: %d, начальная позиция: %u): DCC " -#~ "не найден или завершён\n" - #~ msgid "DCC chat" #~ msgstr "DCC чат" @@ -5867,21 +5901,6 @@ msgstr "%s нет аргумента для параметра \"%s\"\n" #~ msgid "%s server/channel (%s/%s) not found for plugin exec command\n" #~ msgstr "%s сервер/канал (%s/%s) не найден для команды plug-inа\n" -#~ msgid " [A] Accept" -#~ msgstr " [A] Принять" - -#~ msgid " [C] Cancel" -#~ msgstr " [C] Отменить" - -#~ msgid " [R] Remove" -#~ msgstr " [R] Удалить" - -#~ msgid " [P] Purge old DCC" -#~ msgstr " [P] Очистить список" - -#~ msgid " [Q] Close DCC view" -#~ msgstr " [Q] Закрыть окно" - #~ msgid " [Q] Close raw data view" #~ msgstr " [Q] Закрыть окно сырых данных" diff --git a/po/weechat.pot b/po/weechat.pot index b235858ec..f55bc7033 100644 --- a/po/weechat.pot +++ b/po/weechat.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2008-05-06 16:47+0200\n" +"POT-Creation-Date: 2008-05-07 13:30+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -3700,11 +3700,11 @@ msgid "%s: sending chat request to %s" msgstr "" #, c-format -msgid "%s: file %s (local filename: %s) will be resumed at position %u" +msgid "%s: file %s (local filename: %s) will be resumed at position %lu" msgstr "" #, c-format -msgid "%s%s: missing arguments" +msgid "%s%s: missing arguments (%s)" msgstr "" #, c-format @@ -3739,6 +3739,22 @@ msgstr "" msgid "%s%s: error creating xfer" msgstr "" +#, c-format +msgid "" +"%s%s: unable to resume file \"%s\" (port: %d, start position: %lu): xfer not " +"found or not ready for transfert" +msgstr "" + +#, c-format +msgid "%s: file %s resumed at position %lu" +msgstr "" + +#, c-format +msgid "" +"%s%s: unable to accept resume file \"%s\" (port: %d, start position: %lu): " +"xfer not found or not ready for transfert" +msgstr "" + #, c-format msgid "%s%s: aborting active xfer: \"%s\" from %s" msgstr "" @@ -3755,6 +3771,24 @@ msgstr "" msgid "GB" msgstr "" +msgid "Actions (letter+enter):" +msgstr "" + +msgid " [A] Accept" +msgstr "" + +msgid " [C] Cancel" +msgstr "" + +msgid " [R] Remove" +msgstr "" + +msgid " [P] Purge finished" +msgstr "" + +msgid " [Q] Close xfer list" +msgstr "" + msgid "ETA" msgstr "" @@ -3775,7 +3809,7 @@ msgstr "" msgid "Open buffer with xfer list" msgstr "" -msgid "auto open xfer buffer and switch to it when a new xfer is added to list" +msgid "auto open xfer buffer when a new xfer is added to list" msgstr "" msgid "size of progress bar, in chars (if 0, progress bar is disabled)" @@ -3787,7 +3821,7 @@ msgstr "" msgid "background color" msgstr "" -msgid "background color for selected line" +msgid "text color of selected xfer line" msgstr "" msgid "text color for \"waiting\" status" diff --git a/src/plugins/irc/irc-dcc.c b/src/plugins/irc/irc-dcc.c index 7557941f1..0cd4aab7b 100644 --- a/src/plugins/irc/irc-dcc.c +++ b/src/plugins/irc/irc-dcc.c @@ -46,25 +46,6 @@ struct t_irc_dcc *irc_last_dcc = NULL; /* last DCC in list */ -/* - * irc_dcc_chat_remove_channel: remove a buffer for DCC chat - */ - /* -void -irc_dcc_chat_remove_channel (struct t_irc_channel *channel) -{ - struct t_irc_dcc *ptr_dcc; - - if (!channel) - return; - - for (ptr_dcc = irc_dcc_list; ptr_dcc; ptr_dcc = ptr_dcc->next_dcc) - { - if (ptr_dcc->channel == channel) - ptr_dcc->channel = NULL; - } -} -*/ /* * irc_dcc_accept_resume: accepts a resume and inform the receiver */ @@ -105,31 +86,3 @@ irc_dcc_accept_resume (struct t_irc_server *server, char *filename, int port, WEECHAT_ERROR, filename, port, pos_start); } */ -/* - * irc_dcc_start_resume: called when "DCC ACCEPT" is received - * (resume accepted by sender) - */ -/* -void -irc_dcc_start_resume (struct t_irc_server *server, char *filename, int port, - unsigned long pos_start) -{ - struct t_irc_dcc *ptr_dcc; - - ptr_dcc = irc_dcc_search (server, IRC_DCC_FILE_RECV, IRC_DCC_CONNECTING, - port); - if (ptr_dcc) - { - ptr_dcc->pos = pos_start; - ptr_dcc->ack = pos_start; - ptr_dcc->start_resume = pos_start; - ptr_dcc->last_check_pos = pos_start; - irc_dcc_recv_connect_init (ptr_dcc); - } - else - gui_chat_printf (server->buffer, - _("%s can't resume file \"%s\" (port: %d, start " - "position: %u): DCC not found or ended\n"), - WEECHAT_ERROR, filename, port, pos_start); -} -*/ diff --git a/src/plugins/irc/irc-protocol.c b/src/plugins/irc/irc-protocol.c index 82657b11d..b084cf056 100644 --- a/src/plugins/irc/irc-protocol.c +++ b/src/plugins/irc/irc-protocol.c @@ -1742,12 +1742,6 @@ irc_protocol_cmd_privmsg (struct t_irc_server *server, char *command, weechat_infolist_free (infolist); } - /* TODO: add DCC file */ - //irc_dcc_add (server, IRC_DCC_FILE_RECV, - // strtoul (pos_addr, NULL, 10), - // atoi (pos_port), nick, -1, pos_file, NULL, - // strtoul (pos_size, NULL, 10)); - weechat_hook_signal_send ("irc_dcc", WEECHAT_HOOK_SIGNAL_STRING, argv_eol[0]); @@ -1827,11 +1821,29 @@ irc_protocol_cmd_privmsg (struct t_irc_server *server, char *command, pos--; } pos[1] = '\0'; - - /* TODO: accept DCC resume */ - //irc_dcc_accept_resume (server, pos_file, atoi (pos_port), - // strtoul (pos_start_resume, NULL, 10)); - + + /* accept resume via xfer plugin */ + infolist = weechat_infolist_new (); + if (infolist) + { + item = weechat_infolist_new_item (infolist); + if (item) + { + weechat_infolist_new_var_string (item, "plugin_name", weechat_plugin->name); + snprintf (plugin_id, sizeof (plugin_id), + "%x", (unsigned int)server); + weechat_infolist_new_var_string (item, "plugin_id", plugin_id); + weechat_infolist_new_var_string (item, "type", "file_recv"); + weechat_infolist_new_var_string (item, "filename", pos_file); + weechat_infolist_new_var_integer (item, "port", atoi (pos_port)); + weechat_infolist_new_var_string (item, "start_resume", pos_start_resume); + weechat_hook_signal_send ("xfer_accept_resume", + WEECHAT_HOOK_SIGNAL_POINTER, + infolist); + } + weechat_infolist_free (infolist); + } + weechat_hook_signal_send ("irc_dcc", WEECHAT_HOOK_SIGNAL_STRING, argv_eol[0]); @@ -1911,11 +1923,29 @@ irc_protocol_cmd_privmsg (struct t_irc_server *server, char *command, pos--; } pos[1] = '\0'; - - /* TODO: resume DCC */ - //irc_dcc_start_resume (server, pos_file, atoi (pos_port), - // strtoul (pos_start_resume, NULL, 10)); - + + /* resume file via xfer plugin */ + infolist = weechat_infolist_new (); + if (infolist) + { + item = weechat_infolist_new_item (infolist); + if (item) + { + weechat_infolist_new_var_string (item, "plugin_name", weechat_plugin->name); + snprintf (plugin_id, sizeof (plugin_id), + "%x", (unsigned int)server); + weechat_infolist_new_var_string (item, "plugin_id", plugin_id); + weechat_infolist_new_var_string (item, "type", "file_recv"); + weechat_infolist_new_var_string (item, "filename", pos_file); + weechat_infolist_new_var_integer (item, "port", atoi (pos_port)); + weechat_infolist_new_var_string (item, "start_resume", pos_start_resume); + weechat_hook_signal_send ("xfer_start_resume", + WEECHAT_HOOK_SIGNAL_POINTER, + infolist); + } + weechat_infolist_free (infolist); + } + weechat_hook_signal_send ("irc_dcc", WEECHAT_HOOK_SIGNAL_STRING, argv_eol[0]); diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c index 9cd9dbded..f3c9bb6bd 100644 --- a/src/plugins/irc/irc-server.c +++ b/src/plugins/irc/irc-server.c @@ -2862,6 +2862,118 @@ irc_server_xfer_send_ready_cb (void *data, char *signal, char *type_data, return WEECHAT_RC_OK; } +/* + * irc_server_xfer_resume_ready_cb: callback called when user receives a file + * and that resume is possible (file is partially + * received) + * in that case, irc plugin send message to + * remote nick with resume position + */ + +int +irc_server_xfer_resume_ready_cb (void *data, char *signal, char *type_data, + void *signal_data) +{ + struct t_plugin_infolist *infolist; + struct t_irc_server *server, *ptr_server; + char *plugin_name, *plugin_id, *filename; + int spaces_in_name; + + /* make C compiler happy */ + (void) data; + (void) signal; + (void) type_data; + + infolist = (struct t_plugin_infolist *)signal_data; + + if (weechat_infolist_next (infolist)) + { + plugin_name = weechat_infolist_string (infolist, "plugin_name"); + plugin_id = weechat_infolist_string (infolist, "plugin_id"); + if (plugin_name && (strcmp (plugin_name, "irc") == 0) && plugin_id) + { + sscanf (plugin_id, "%x", (unsigned int *)&server); + for (ptr_server = irc_servers; ptr_server; + ptr_server = ptr_server->next_server) + { + if (ptr_server == server) + break; + } + if (ptr_server) + { + filename = weechat_infolist_string (infolist, "filename"); + spaces_in_name = (strchr (filename, ' ') != NULL); + irc_server_sendf (server, + "PRIVMSG %s :\01DCC RESUME %s%s%s %d %s\01", + weechat_infolist_string (infolist, "remote_nick"), + (spaces_in_name) ? "\"" : "", + filename, + (spaces_in_name) ? "\"" : "", + weechat_infolist_integer (infolist, "port"), + weechat_infolist_string (infolist, "start_resume")); + } + } + } + + return WEECHAT_RC_OK; +} + +/* + * irc_server_xfer_send_accept_resume_cb: callback called when xfer plugin + * accepted resume request from receiver + * in that case, irc plugin send accept + * message to remote nick with resume + * position + */ + +int +irc_server_xfer_send_accept_resume_cb (void *data, char *signal, + char *type_data, void *signal_data) +{ + struct t_plugin_infolist *infolist; + struct t_irc_server *server, *ptr_server; + char *plugin_name, *plugin_id, *filename; + int spaces_in_name; + + /* make C compiler happy */ + (void) data; + (void) signal; + (void) type_data; + + infolist = (struct t_plugin_infolist *)signal_data; + + if (weechat_infolist_next (infolist)) + { + plugin_name = weechat_infolist_string (infolist, "plugin_name"); + plugin_id = weechat_infolist_string (infolist, "plugin_id"); + if (plugin_name && (strcmp (plugin_name, "irc") == 0) && plugin_id) + { + sscanf (plugin_id, "%x", (unsigned int *)&server); + for (ptr_server = irc_servers; ptr_server; + ptr_server = ptr_server->next_server) + { + if (ptr_server == server) + break; + } + if (ptr_server) + { + filename = weechat_infolist_string (infolist, "filename"); + spaces_in_name = (strchr (filename, ' ') != NULL); + irc_server_sendf (server, + "PRIVMSG %s :\01DCC ACCEPT %s%s%s %d %s\01", + weechat_infolist_string (infolist, "remote_nick"), + (spaces_in_name) ? "\"" : "", + filename, + (spaces_in_name) ? "\"" : "", + weechat_infolist_integer (infolist, "port"), + weechat_infolist_string (infolist, "start_resume")); + } + } + } + + return WEECHAT_RC_OK; +} + /* * irc_server_print_log: print server infos in log (usually for crash dump) */ diff --git a/src/plugins/irc/irc-server.h b/src/plugins/irc/irc-server.h index 1593f3425..c1903d903 100644 --- a/src/plugins/irc/irc-server.h +++ b/src/plugins/irc/irc-server.h @@ -188,6 +188,11 @@ extern void irc_server_free (struct t_irc_server *server); extern void irc_server_free_data (struct t_irc_server *server); extern int irc_server_xfer_send_ready_cb (void *data, char *signal, char *type_data, void *signal_data); +extern int irc_server_xfer_resume_ready_cb (void *data, char *signal, + char *type_data, void *signal_data); +extern int irc_server_xfer_send_accept_resume_cb (void *data, char *signal, + char *type_data, + void *signal_data); extern void irc_server_print_log (); #endif /* irc-server.h */ diff --git a/src/plugins/irc/irc.c b/src/plugins/irc/irc.c index 70dae0e2d..05c4f0ea4 100644 --- a/src/plugins/irc/irc.c +++ b/src/plugins/irc/irc.c @@ -106,6 +106,8 @@ weechat_plugin_init (struct t_weechat_plugin *plugin) irc_debug_init (); weechat_hook_signal ("quit", &irc_signal_quit_cb, NULL); weechat_hook_signal ("xfer_send_ready", &irc_server_xfer_send_ready_cb, NULL); + weechat_hook_signal ("xfer_resume_ready", &irc_server_xfer_resume_ready_cb, NULL); + weechat_hook_signal ("xfer_send_accept_resume", &irc_server_xfer_send_accept_resume_cb, NULL); /* hook completions */ irc_completion_init (); diff --git a/src/plugins/xfer/xfer-buffer.c b/src/plugins/xfer/xfer-buffer.c index d0e9093a0..ab43e52bf 100644 --- a/src/plugins/xfer/xfer-buffer.c +++ b/src/plugins/xfer/xfer-buffer.c @@ -42,8 +42,8 @@ void xfer_buffer_refresh (char *hotlist) { struct t_xfer *ptr_xfer, *xfer_selected; - char str_color[256], status[64], date[128], *progress_bar, format[128]; - char format_per_sec[128], bytes_per_sec[256], eta[128]; + char str_color[256], suffix[32], status[64], date[128], *progress_bar; + char format[128], format_per_sec[128], bytes_per_sec[256], eta[128]; int i, length, line, progress_bar_size, num_bars, num_unit; int num_unit_per_sec; unsigned long pct_complete; @@ -60,8 +60,9 @@ xfer_buffer_refresh (char *hotlist) if (xfer_selected) { weechat_printf_y (xfer_buffer, 0, - "%sActions (letter+enter):%s%s%s%s%s%s", + "%s%s%s%s%s%s%s%s", weechat_color("green"), + _("Actions (letter+enter):"), weechat_color("lightgreen"), /* accept */ (XFER_IS_RECV(xfer_selected->type) @@ -80,6 +81,13 @@ xfer_buffer_refresh (char *hotlist) } for (ptr_xfer = xfer_list; ptr_xfer; ptr_xfer = ptr_xfer->next_xfer) { + suffix[0] = '\0'; + if (ptr_xfer->filename_suffix >= 0) + { + snprintf (suffix, sizeof (suffix), + " (.%d)", ptr_xfer->filename_suffix); + } + snprintf (str_color, sizeof (str_color), "%s,%s", (line == xfer_buffer_selected_line) ? @@ -89,7 +97,7 @@ xfer_buffer_refresh (char *hotlist) /* display first line with remote nick and filename */ weechat_printf_y (xfer_buffer, (line * 2) + 2, - "%s%s%-24s %s%s%s", + "%s%s%-24s %s%s%s%s", weechat_color(str_color), (line == xfer_buffer_selected_line) ? "*** " : " ", @@ -97,8 +105,9 @@ xfer_buffer_refresh (char *hotlist) (XFER_IS_FILE(ptr_xfer->type)) ? "\"" : "", (XFER_IS_FILE(ptr_xfer->type)) ? ptr_xfer->filename : _("xfer chat"), - (XFER_IS_FILE(ptr_xfer->type)) ? "\"" : ""); - + (XFER_IS_FILE(ptr_xfer->type)) ? "\"" : "", + suffix); + snprintf (status, sizeof (status), "%s", _(xfer_status_string[ptr_xfer->status])); length = weechat_utf8_strlen_screen (status); diff --git a/src/plugins/xfer/xfer-file.c b/src/plugins/xfer/xfer-file.c index e43729bd7..fd72a8840 100644 --- a/src/plugins/xfer/xfer-file.c +++ b/src/plugins/xfer/xfer-file.c @@ -56,8 +56,8 @@ xfer_file_resume (struct t_xfer *xfer, char *filename) if ((unsigned long) st.st_size < xfer->size) { xfer->start_resume = (unsigned long) st.st_size; - xfer->pos = st.st_size; - xfer->last_check_pos = st.st_size; + xfer->pos = xfer->start_resume; + xfer->last_check_pos = xfer->start_resume; return 1; } } diff --git a/src/plugins/xfer/xfer-network.c b/src/plugins/xfer/xfer-network.c index e0f26e0b7..e09272c86 100644 --- a/src/plugins/xfer/xfer-network.c +++ b/src/plugins/xfer/xfer-network.c @@ -544,15 +544,7 @@ xfer_network_accept (struct t_xfer *xfer) if (XFER_IS_FILE(xfer->type) && (xfer->start_resume > 0)) { xfer->status = XFER_STATUS_CONNECTING; - xfer_send_signal (xfer, "xfer_accepted"); - /* - irc_server_sendf (dcc->server, - (strchr (dcc->filename, ' ')) ? - "PRIVMSG %s :\01DCC RESUME \"%s\" %d %u\01\n" : - "PRIVMSG %s :\01DCC RESUME %s %d %u\01", - dcc->nick, dcc->filename, - dcc->port, dcc->start_resume); - */ + xfer_send_signal (xfer, "xfer_resume_ready"); xfer_buffer_refresh (WEECHAT_HOTLIST_MESSAGE); } else diff --git a/src/plugins/xfer/xfer.c b/src/plugins/xfer/xfer.c index 86a8cec19..eee29bcc2 100644 --- a/src/plugins/xfer/xfer.c +++ b/src/plugins/xfer/xfer.c @@ -140,13 +140,16 @@ xfer_search_protocol (char *protocol) */ struct t_xfer * -xfer_search (enum t_xfer_type type, enum t_xfer_status status, int port) +xfer_search (char *plugin_name, char *plugin_id, enum t_xfer_type type, + enum t_xfer_status status, int port) { struct t_xfer *ptr_xfer; for (ptr_xfer = xfer_list; ptr_xfer; ptr_xfer = ptr_xfer->next_xfer) { - if ((ptr_xfer->type == type) + if ((weechat_strcasecmp (ptr_xfer->plugin_name, plugin_name) == 0) + && (weechat_strcasecmp (ptr_xfer->plugin_id, plugin_id) == 0) + && (ptr_xfer->type == type) && (ptr_xfer->status = status) && (ptr_xfer->port == port)) return ptr_xfer; @@ -319,6 +322,9 @@ xfer_send_signal (struct t_xfer *xfer, char *signal) snprintf (str_long, sizeof (str_long), "%lu", xfer->size); weechat_infolist_new_var_string (item, "size", str_long); + snprintf (str_long, sizeof (str_long), "%lu", xfer->start_resume); + weechat_infolist_new_var_string (item, "start_resume", + str_long); snprintf (str_long, sizeof (str_long), "%lu", xfer->address); weechat_infolist_new_var_string (item, "address", str_long); @@ -510,7 +516,7 @@ xfer_new (char *plugin_name, char *plugin_id, enum t_xfer_type type, { weechat_printf (NULL, _("%s: file %s (local filename: %s) " - "will be resumed at position %u"), + "will be resumed at position %lu"), "xfer", new_xfer->filename, new_xfer->local_filename, @@ -620,15 +626,11 @@ xfer_add_cb (void *data, char *signal, char *type_data, void *signal_data) (void) signal; (void) type_data; - filename2 = NULL; - short_filename = NULL; - spaces = 0; - if (!signal_data) { weechat_printf (NULL, - _("%s%s: missing arguments"), - weechat_prefix ("error"), "xfer"); + _("%s%s: missing arguments (%s)"), + weechat_prefix ("error"), "xfer", "xfer_add"); return WEECHAT_RC_ERROR; } @@ -637,10 +639,14 @@ xfer_add_cb (void *data, char *signal, char *type_data, void *signal_data) if (!weechat_infolist_next (infolist)) { weechat_printf (NULL, - _("%s%s: missing arguments"), - weechat_prefix ("error"), "xfer"); + _("%s%s: missing arguments (%s)"), + weechat_prefix ("error"), "xfer", "xfer_add"); return WEECHAT_RC_ERROR; } + + filename2 = NULL; + short_filename = NULL; + spaces = 0; plugin_name = weechat_infolist_string (infolist, "plugin_name"); plugin_id = weechat_infolist_string (infolist, "plugin_id"); @@ -654,8 +660,8 @@ xfer_add_cb (void *data, char *signal, char *type_data, void *signal_data) if (!plugin_name || !plugin_id || !str_type || !remote_nick || !local_nick) { weechat_printf (NULL, - _("%s%s: missing arguments"), - weechat_prefix ("error"), "xfer"); + _("%s%s: missing arguments (%s)"), + weechat_prefix ("error"), "xfer", "xfer_add"); return WEECHAT_RC_ERROR; } @@ -671,8 +677,8 @@ xfer_add_cb (void *data, char *signal, char *type_data, void *signal_data) if (XFER_IS_FILE(type) && (!filename || !str_protocol)) { weechat_printf (NULL, - _("%s%s: missing arguments"), - weechat_prefix ("error"), "xfer"); + _("%s%s: missing arguments (%s)"), + weechat_prefix ("error"), "xfer", "xfer_add"); return WEECHAT_RC_ERROR; } @@ -930,7 +936,7 @@ xfer_add_cb (void *data, char *signal, char *type_data, void *signal_data) } /* send signal if type is file or chat "send" */ - if (XFER_IS_SEND(ptr_xfer->type)) + if (XFER_IS_SEND(ptr_xfer->type) && !XFER_HAS_ENDED(ptr_xfer->status)) xfer_send_signal (ptr_xfer, "xfer_send_ready"); if (short_filename) @@ -941,6 +947,166 @@ xfer_add_cb (void *data, char *signal, char *type_data, void *signal_data) return WEECHAT_RC_OK; } +/* + * xfer_start_resume_cb: callback called when resume is accepted by sender + */ + +int +xfer_start_resume_cb (void *data, char *signal, char *type_data, + void *signal_data) +{ + struct t_plugin_infolist *infolist; + struct t_xfer *ptr_xfer; + char *plugin_name, *plugin_id, *filename, *str_start_resume; + int port; + unsigned long start_resume; + + /* make C compiler happy */ + (void) data; + (void) signal; + (void) type_data; + + if (!signal_data) + { + weechat_printf (NULL, + _("%s%s: missing arguments (%s)"), + weechat_prefix ("error"), "xfer", "xfer_start_resume"); + return WEECHAT_RC_ERROR; + } + + infolist = (struct t_plugin_infolist *)signal_data; + + if (!weechat_infolist_next (infolist)) + { + weechat_printf (NULL, + _("%s%s: missing arguments (%s)"), + weechat_prefix ("error"), "xfer", "xfer_start_resume"); + return WEECHAT_RC_ERROR; + } + + plugin_name = weechat_infolist_string (infolist, "plugin_name"); + plugin_id = weechat_infolist_string (infolist, "plugin_id"); + filename = weechat_infolist_string (infolist, "filename"); + port = weechat_infolist_integer (infolist, "port"); + str_start_resume = weechat_infolist_string (infolist, "start_resume"); + + if (!plugin_name || !plugin_id || !filename || !str_start_resume) + { + weechat_printf (NULL, + _("%s%s: missing arguments (%s)"), + weechat_prefix ("error"), "xfer", "xfer_start_resume"); + return WEECHAT_RC_ERROR; + } + + sscanf (str_start_resume, "%lu", &start_resume); + + ptr_xfer = xfer_search (plugin_name, plugin_id, XFER_TYPE_FILE_RECV, + XFER_STATUS_CONNECTING, port); + if (ptr_xfer) + { + ptr_xfer->pos = start_resume; + ptr_xfer->ack = start_resume; + ptr_xfer->start_resume = start_resume; + ptr_xfer->last_check_pos = start_resume; + xfer_network_connect_init (ptr_xfer); + } + else + { + weechat_printf (NULL, + _("%s%s: unable to resume file \"%s\" (port: %d, " + "start position: %lu): xfer not found or not ready " + "for transfert"), + weechat_prefix ("error"), "xfer", filename, port, + start_resume); + } + + return WEECHAT_RC_OK; +} + +/* + * xfer_accept_resume_cb: callback called when sender receives resume request + * from recever + */ + +int +xfer_accept_resume_cb (void *data, char *signal, char *type_data, + void *signal_data) +{ + struct t_plugin_infolist *infolist; + struct t_xfer *ptr_xfer; + char *plugin_name, *plugin_id, *filename, *str_start_resume; + int port; + unsigned long start_resume; + + /* make C compiler happy */ + (void) data; + (void) signal; + (void) type_data; + + if (!signal_data) + { + weechat_printf (NULL, + _("%s%s: missing arguments (%s)"), + weechat_prefix ("error"), "xfer", "xfer_accept_resume"); + return WEECHAT_RC_ERROR; + } + + infolist = (struct t_plugin_infolist *)signal_data; + + if (!weechat_infolist_next (infolist)) + { + weechat_printf (NULL, + _("%s%s: missing arguments (%s)"), + weechat_prefix ("error"), "xfer", "xfer_accept_resume"); + return WEECHAT_RC_ERROR; + } + + plugin_name = weechat_infolist_string (infolist, "plugin_name"); + plugin_id = weechat_infolist_string (infolist, "plugin_id"); + filename = weechat_infolist_string (infolist, "filename"); + port = weechat_infolist_integer (infolist, "port"); + str_start_resume = weechat_infolist_string (infolist, "start_resume"); + + if (!plugin_name || !plugin_id || !filename || !str_start_resume) + { + weechat_printf (NULL, + _("%s%s: missing arguments (%s)"), + weechat_prefix ("error"), "xfer", "xfer_accept_resume"); + return WEECHAT_RC_ERROR; + } + + sscanf (str_start_resume, "%lu", &start_resume); + + ptr_xfer = xfer_search (plugin_name, plugin_id, XFER_TYPE_FILE_SEND, + XFER_STATUS_CONNECTING, port); + if (ptr_xfer) + { + ptr_xfer->pos = start_resume; + ptr_xfer->ack = start_resume; + ptr_xfer->start_resume = start_resume; + ptr_xfer->last_check_pos = start_resume; + xfer_send_signal (ptr_xfer, "xfer_send_accept_resume"); + + weechat_printf (NULL, + _("%s: file %s resumed at position %lu"), + "xfer", + ptr_xfer->filename, + ptr_xfer->start_resume); + xfer_buffer_refresh (WEECHAT_HOTLIST_MESSAGE); + } + else + { + weechat_printf (NULL, + _("%s%s: unable to accept resume file \"%s\" (port: %d, " + "start position: %lu): xfer not found or not ready " + "for transfert"), + weechat_prefix ("error"), "xfer", filename, port, + start_resume); + } + + return WEECHAT_RC_OK; +} + /* * xfer_print_log: print DCC infos in log (usually for crash dump) */ @@ -1042,6 +1208,8 @@ weechat_plugin_init (struct t_weechat_plugin *plugin) xfer_command_init (); weechat_hook_signal ("xfer_add", &xfer_add_cb, NULL); + weechat_hook_signal ("xfer_start_resume", &xfer_start_resume_cb, NULL); + weechat_hook_signal ("xfer_accept_resume", &xfer_accept_resume_cb, NULL); weechat_hook_signal ("debug_dump", &xfer_debug_dump_cb, NULL); return WEECHAT_RC_OK;