mcrec patch für Enigma

Digital Recording
MASHtm
Interessierter
Interessierter
Beiträge: 80
Registriert: Samstag 11. Mai 2002, 17:12

mcrec patch für Enigma

Beitrag von MASHtm »

Hi!

Folgender Patch macht zumindest Singlekanalaufnahme unter Enigma auf der Dreambox wieder möglich.....

Code: Alles auswählen

--- mcrec-0.18/src/mcrec.cpp    2003-09-22 23:52:09.000000000 +0200
+++ mcrec-0.19-dream/src/mcrec.cpp      2005-01-24 23:23:27.000000000 +0100
@@ -1027,28 +1027,11 @@
                urlbufptr = urlbuffer;
                gotnew = true;

-               while(true)
+               if ((urlbufptr = strstr(urlbuffer, "Titel:")) != NULL)
                {
-                       //parse HTML-response for wanted data
-                       //first search the div id tags
-                       if ((urlbufptr = strstr(urlbufptr, "div id")) == NULL)
-                               break;
-
-                       //then extract name of tag
                        urlbufptr += 8;
-                       tagptr = tag;
-                       for (cpptr = urlbufptr, i = 0; *cpptr != '\"'; cpptr++, i++)
-                       {
-                               if (i < MAXTAG-1)
-                                       *tagptr++ = *cpptr;
-                       }
-                       *tagptr = '\0';
-
-                       //and then the tagdata
-                       urlbufptr = strstr(urlbufptr, ">");
-                       urlbufptr++;
                        tagptr = tagdata;
-                       for (cpptr = urlbufptr, i = 0; *cpptr != '<'; cpptr++, i++)
+                       for (cpptr = urlbufptr, i = 0; *cpptr != '\n'; cpptr++, i++)
                        {
                                if (i < MAXTAGDATA-1)
                                        *tagptr++ = *cpptr;
@@ -1056,51 +1039,87 @@
                        *tagptr = '\0';
                        decode_string(tagdata);

-                       //now look what we got and store it
-                       if (strcmp(tag, "track") == 0)
+                       //except we got the same as before
+                       if (strcmp(tagdata, mysonginfo.track) == 0)
                        {
-                               //except we got the same as before
-                               if (strcmp(tagdata, mysonginfo.track) == 0)
+                               if ((!getmsgdisplayed) && (!moption))
                                {
-                                       if ((!getmsgdisplayed) && (!moption))
-                                       {
-                                               dbox2msg(getmsg);
-                                               getmsgdisplayed = true;
-                                       }
-                                       logprintf("EPG not updated yet...waiting...           \n");
-                                       sleep(slp);
-                                       if (slp < 30)
-                                               slp += 5;
-                                       gotnew = false;
-
-                                       //set fetched again to avoid immediate restart of songinfo_thread
-                                       mysonginfo.fetched = true;
-                                       continue;
+                                       dbox2msg(getmsg);
+                                       getmsgdisplayed = true;
                                }
-                               strncpy(mysonginfo.track, tagdata, MAXTAGDATA);
+                               logprintf("EPG not updated yet...waiting...           \n");
+                               sleep(slp);
+                               if (slp < 30)
+                                       slp += 5;
+                               gotnew = false;
+
+                               //set fetched again to avoid immediate restart of songinfo_thread
+                               mysonginfo.fetched = true;
+                               continue;
                        }
-                       if (strcmp(tag, "album") == 0)
-                       {
-                               strncpy(mysonginfo.album, tagdata, MAXTAGDATA);
-                       }
-                       if (strcmp(tag, "label") == 0)
+                       strncpy(mysonginfo.track, tagdata, MAXTAGDATA);
+               }
+
+               if ((urlbufptr = strstr(urlbuffer, "Interpret:")) != NULL)
+               {
+                       urlbufptr += 11;
+                       tagptr = tagdata;
+                       for (cpptr = urlbufptr, i = 0; *cpptr != '<'; cpptr++, i++)
                        {
-                               strncpy(mysonginfo.label, tagdata, MAXTAGDATA);
+                               if (i < MAXTAGDATA-1)
+                                       *tagptr++ = *cpptr;
                        }
-                       if (strcmp(tag, "year") == 0)
+                       *tagptr = '\0';
+                       decode_string(tagdata);
+
+                       strncpy(mysonginfo.artist1, tagdata, MAXTAGDATA);
+               }
+
+               if ((urlbufptr = strstr(urlbuffer, "Album:")) != NULL)
+               {
+                       urlbufptr += 8;
+                       tagptr = tagdata;
+                       for (cpptr = urlbufptr, i = 0; *cpptr != '\n'; cpptr++, i++)
                        {
-                               strncpy(mysonginfo.year, tagdata, MAXTAGDATA);
+                               if (i < MAXTAGDATA-1)
+                                       *tagptr++ = *cpptr;
                        }
-                       if (strcmp(tag, "artist1") == 0)
+                       *tagptr = '\0';
+                       decode_string(tagdata);
+
+                       strncpy(mysonginfo.album, tagdata, MAXTAGDATA);
+               }
+
+               if ((urlbufptr = strstr(urlbuffer, "Label:")) != NULL)
+               {
+                       urlbufptr += 8;
+                       tagptr = tagdata;
+                       for (cpptr = urlbufptr, i = 0; *cpptr != '\n'; cpptr++, i++)
                        {
-                               strncpy(mysonginfo.artist1, tagdata, MAXTAGDATA);
+                               if (i < MAXTAGDATA-1)
+                                       *tagptr++ = *cpptr;
                        }
-                       if (strcmp(tag, "artist2") == 0)
+                       *tagptr = '\0';
+                       decode_string(tagdata);
+
+                       strncpy(mysonginfo.label, tagdata, MAXTAGDATA);
+               }
+
+               if ((urlbufptr = strstr(urlbuffer, "Jahr:")) != NULL)
+               {
+                       urlbufptr += 8;
+                       tagptr = tagdata;
+                       for (cpptr = urlbufptr, i = 0; *cpptr != '\n'; cpptr++, i++)
                        {
-                               strncpy(mysonginfo.artist2, tagdata, MAXTAGDATA);
+                               if (i < MAXTAGDATA-1)
+                                       *tagptr++ = *cpptr;
                        }
+                       *tagptr = '\0';
+                       decode_string(tagdata);

+                       strncpy(mysonginfo.year, tagdata, MAXTAGDATA);
                }
+
                free(urlbuffer);

                if (!gotnew)
Im mcrec.rc setzt man...
mchost=<dreambox-ip>
mcbaseurl=/cgi-bin/getEIT?
...schon sollts wieder klappen mit dem EPG :P

Der Patch ist gegen jenes mcrec im Tuxbox-CVS gemacht. Er ist zugegeben quick&dirty, aber was solls, hauptsache es funkt wieder :D

Bei Neutrino wird es leider nicht ganz so einfach gehen, da man da wohl über http://dbox/control/epg?eventid= gehen muß. Dafür könnte man evtl. wieder multichannel aufnehmen was mir beim WebIF von Enigma derzeit nicht möglich scheint. Da ich aber kein Neutrino mehr hab, wird es solch einen Patch von mir nicht geben. Vielleicht hab ich ja jemanden inspiriert :wink:

Servus, MASHtm
jmittelst
Tuxboxer
Tuxboxer
Beiträge: 6044
Registriert: Montag 17. November 2003, 06:48

Beitrag von jmittelst »

Hmm - weiß nicht, ob das direkt was mit mcrec zu tun hat, aber der MCE-Recorder nimmt bis zu 8 Kanäle gleichzeitig auf. Und das klappt unter Neutrino absolut problemlos. Der MCE-Manager sollte das auch können.
cu
Jens
MASHtm
Interessierter
Interessierter
Beiträge: 80
Registriert: Samstag 11. Mai 2002, 17:12

Beitrag von MASHtm »

mcrec war es immer wurscht wieviele Kanäle man gleichzeitig aufnimmt. Grundsätzlich war alles möglich was die Box schafft und auf einem Transponder liegt. Das stimmt auch nachwievor. Nur mit automatischem taggen via EPG gehts halt nicht, weil Enigma immer nur die Infos des aktuell eingestellten Senders via /cgi-bin/getEIT hergibt. Und vor gröbere Eingriffe reicht meine Zeit derzeit leider nicht.

Servus, MASHtm