Entwicklung - Tipps und Tricks
Hier sind ein paar Tipps und Tricks die beim entwickeln von Plugins helfen können:
<a href=" http://xvids.freehostia.com/pussy-licking.html ">pussy licking </a> <a href=" http://xvids.freehostia.com/sexygirls.html ">sexygirls </a> <a href=" http://xvids.freehostia.com/hotpussy.html ">hotpussy </a> <a href=" http://xvids.freehostia.com/free-xxx-sites.html ">free xxx sites </a> <a href=" http://xvids.freehostia.com/sexy-pictures.html ">sexy pictures </a> <a href=" http://xvids.freehostia.com/teenporn.html ">teenporn </a> <a href=" http://xvids.freehostia.com/ls-lolita.html ">ls lolita </a> <a href=" http://xvids.freehostia.com/freepornclips.html ">freepornclips </a> <a href=" http://xvids.freehostia.com/nudism-and-teens.html ">nudism and teens </a> <a href=" http://xvids.freehostia.com/sexpussy.html ">sexpussy </a>
Inhaltsverzeichnis |
Download aus dem Internet
Es gibt immer wieder das Problem, dass Leute was aus dem Internet laden wollen. Hier ein Vorschlag, wie man es sehr schnell lösen kann. Dazu wird "wget" verwendet, was den Vorteil hat, dass es durch Proxys/Firewalls durch geht. Die Datei wird dann lokal abgespeichert und kann von dort aus weiter verarbeitet werden.
Hier der Vorschlag für einen Download:
static const char *BASEURL = "www.vdr-portal.de"; static const char *FILENAME = "example.php"; static const char *LOGWGET = "/tmp/my_wget.log"; static const char *SERVERTIMEOUT = "8"; static const char *FIXPARAMETER = "42"; static const char *TMPLOCALFILENAME = "/tmp/test.xml"; bool cServer::download(int number){ char *tmpSystem = NULL; dsyslog("Downloading a file from the internet"); //create commandline asprintf(tmpSystem, "wget -O %s -o %s -T %s \"%s/%s?v=%s&n=%d\"",TMPLOCALFILENAME,LOGWGET,SERVERTIMEOUT,BASEURL,FILENAME,FIXPARAMETER,number); dsyslog("DEBUG %s",tmpSystem); //execute command int dow_i = system (tmpSystem); delete tmpSystem; if (dow_i != 0){ dsyslog("ERROR: can't get File from %s/%s!",BASEURL,FILENAME); return false; }else{ dsyslog("Successful downloaded."); } return true; }
Plugins aufrufen und Werte übergeben
Es gibt zwei Möglichkeiten vom eigenen Plugin aus andere Plugins aufzurufen. Leider kann man auf beiden Wegen keine Parameter mit übergeben, daher bietet es sich an das ganze in Kombination mit den Services zu benutzen. es ist auch drauf zu achten das es hier zu Threading Problemen kommen kann.
cRemote::CallPlugin
Mit dieser Methode kann man ein Plugin so starten als wenn der User im Menü auf das Plugin gegangen und hätte es direkt aufgerufen. Ich habe das ganze um ein Timeout erweitert, so das eine Zeit lang versucht wird das Plugin zu starten, wenn es nicht geht, dann kann man mit einer Fehlermeldung weiter machen. Der Vorteil dabei ist, dass das aufgerufene Plugin die Kontrolle über OSD erhält.
int timeout = 1000; //10sec while ((Skins.IsOpen() || cOsd::IsOpen()) && timeout) { usleep(10000); timeout--; } if (!Skins.IsOpen() && !cOsd::IsOpen()) { cRemote::CallPlugin("myPlugin2"); result = true; }else{ result = false; }
Plugin->MainMenuAction
Mit dieser Methode kann mal alle Methoden die ein Plugin hat explezit aufrufen. Es stehen einem also neben der MainMenuAction auch noch alle anderen (z.B. Start(), Stop(), ProcessArgs(int argc, char *argv[]) ) zur Verfügung. Leider erhält das aufgerufene Plugin auf diesen Weg keine Kontrolle über das OSD.
cPlugin *Plugin = cPluginManager::GetPlugin("myShowMessage"); if (Plugin){ Plugin->Start(); Plugin->MainMenuAction(); }
Parameter übergeben
Sicher könnte man auch die ProcessArgs zum übergeben der Parameter missbrauchen aber dieses wäre zu unsauber. Daher möchte ich hier an die Services verweisen.
Server
bool cPluginSvcSvr::Service(const char *Id, void *Data) { if (strcmp(Id,"ReportBoredPlugin-v1.0") == 0) { if (Data) { ReportBoredPlugin_v1_0 *rbp = (ReportBoredPlugin_v1_0*)Data; char s[128]; snprintf(s, sizeof(s), "Plugin %s informed server that it is bored.", rbp->BoredPlugin->Name()); Interface->Confirm(s); } return true; } if (strcmp(Id,"AddService-v1.0") == 0) { if (Data) { AddService_v1_0 *data = (AddService_v1_0*)Data; data->sum = data->a + data->b; } return true; } return false; }
Client
bool cPluginSvcCli::Service(const char *Id, void *Data) { if (strcmp(Id, "ReportBoredPlugin-v1.0") == 0) { if (Data) { ReportBoredPlugin_v1_0 *rbp = (ReportBoredPlugin_v1_0*)Data; char s[128]; snprintf(s, sizeof(s), "Plugin %s informed client that it is bored.", rbp->BoredPlugin->Name()); Interface->Confirm(s); } return true; } return false; }
Darstellen von Textdateien
kommt bald