Firefox e Amulecmd (AmuleGUI) – Linux version

Ecco, finalmente la versione per linux dello stesso programma che ho creato per Windows (leggi qui).

Il programma risolve il problema che genera Firefox nel passare i link ed2k al programma amulecmd, sostituendo alcuni caratteri speciali con l’equivalente esadecimale.

Il programma ed2k_remote (scaricatelo già compilato qui), lo potete copiare direttamente in /usr/bin, con i permessi 755 :P
Il programma necessita di un file di configurazione, da copiare in “~/.ed2k_remote/” chiamato ed2k_remote.ini.
Il file ed2k_remote.ini deve necessariamente essere come illustrato di seguito, altrimenti per il programma sarà impossibile trovare l’IP del server aMule e la password di ingresso.

indirizzo_ip=192.168.1.XXX
password=MiaPassword

Questo è il sorgente del programma:

/***************************************************************************
 *   Copyright (C) 2008 by Xavio   *
 *   xavio2000REMOVE_ME@gmail.com   *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
 
 
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
 
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
int sostituisci(string *stringa, string trovami, string sostituiscimi);
 
int main(int argc, char *argv[])
{
	if (!(argc>1))
	{
		cout << "Errore, nessun parametro passato!\n";
		return 0;
	}
	string temp=getenv("HOME");
	temp+="/.ed2k_remote/ed2k_remote.ini";
	string sInizio="/usr/bin/amulecmd";
	// cout << temp << endl;
	std::ifstream file(temp.c_str());
	if (!file)
	{
		cout << "Errore, impossibile aprire il file della configurazione!\n";
		return 0;
	}
	char buf[250];
	int found=0;
	string sInput(argv[1]);
	cout << sInput << endl;
	file.getline(buf,250);
	temp=(string)buf;
	found=sostituisci(&temp,"indirizzo_ip=","");
	if (!found)
	{
		cout << "Errore, impossibile trovare il parametro indirizzo IP!\n";
		return 0;
	}
	cout << sInput << endl;
	sInizio+=" -h "+temp;
	file.getline(buf,250);
	temp=(string)buf;
	found=sostituisci(&temp,"password=","");
	if (!found)
	{
		cout << "Errore, impossibile trovare il parametro password!\n";
		return 0;
	}
	sInizio+=" -P "+temp;
	sostituisci(&sInput,"%5B","[");
	sostituisci(&sInput,"%5D","]");
	sostituisci(&sInput,"%7C","|");
	sostituisci(&sInput,"%7B","{");
	sostituisci(&sInput,"%7D","}");
	sostituisci(&sInput,"%20"," ");
	sostituisci(&sInput,"&quot;","'");
	sostituisci(&sInput,"&amp;","&");
	sostituisci(&sInput,"&#40;","(");
	sostituisci(&sInput,"&#41;",")");
	sInizio+=" -c \"add "+sInput+"\"";
	cout << sInizio << endl;
	system(sInizio.c_str());
	//cout << "Premi un tasto per continuare...\n";
	//while(!getchar()=='\n');
    return EXIT_SUCCESS;
}
 
int sostituisci(string *stringa, string trovami, string sostituiscimi)
{
    int found,lavoro;
    int i=trovami.size();
    lavoro=0;
    while ((found=stringa->find(trovami))!=string::npos)
    {
        stringa->replace(found,i,sostituiscimi);
        lavoro++;
    }
    return lavoro;
}

La funzione

sostituisci(&#038;sInput,"%5B","[");

(ad esempio) sostituisce nella stringa ricevuta da Firefox il codice %5B con [. Aumentando le voci sostituisci c’è la possibilità di aumentare le conversioni nel caso ce ne siano altre da aggiungere.

L’unica cosa che non sono riuscito a fare è stata quella di far aprire a Firefox una finestra terminale come in Windows per fare il debug del programma, cmq il problema persiste anche in linux (se disattivo la correzione dei codici esadecimali il programma smette di funzionare). Se avete un consiglio per far aprire il terminale a Firefox in linux postatelo pure nei commenti. Grazie

Ciao a tutti :P

P.S: Per ulteriori informazione sulla gestione dei link ed2k con aMule andate qui.

5 Responses to “Firefox e Amulecmd (AmuleGUI) – Linux version”

  1. Ciao, ho provato il tuo programmino ma non funge: o meglio, amulecmd aggiunge i file al server amule remoto ma è come se il link non venisse parsato. Per intederci trovo nel tab trasferimenti del mio server amule ancora i link ed2k con caratteri esadecimali %20 etc…

  2. Ciao, ho provato il tuo programmino ma non funge: o meglio, amulecmd aggiunge i file al server amule remoto ma è come se il link non venisse parsato. Per intederci trovo nel tab trasferimenti del mio server amule ancora i link ed2k con caratteri esadecimali %20 etc….

  3. Ma firefox a chi passa il link? a ed2k_remote?

  4. Si si, cmq ho sistemato! Se vuoi ti passo il sorgente! Il problema con questi ed2k-link è che spesso nn viene intercettato il % o intercettato 2 volte. Ho aggiunto anche qualche altra mappatura (tipo la è e la ò). Ora quando aggiungi i link ad emule, nella sezione trasferimenti il link si legge senza codici hex ma una volta terminato il download, i file completi presentano un underscore (_) invece della è e della ò (!?!?). Vedrò di sistemare anche questo.

  5. i caratteri accentati sono sempre una rogna. Ti consiglio di sostituirli eventualmente con 2 caratteri è = e’

Leave a Reply