source: titan/titan/play.h

Last change on this file was 46679, checked in by aafsvn, 7 weeks ago

fix sh4 warnings

File size: 76.3 KB
Line 
1#ifndef PLAY_H
2#define PLAY_H
3
4extern struct screensaver* screensaver;
5
6void screenplaypolicy()
7{
8        if(checkbit(status.playercan, 0) == 0) return;
9
10        int rcret = 0;
11        struct skin* playpolicy = getscreen("playpolicy");
12        char* tmpstr = NULL;
13
14start:
15        changepolicy();
16        tmpstr = getpolicy();
17        changetext(playpolicy, _(tmpstr));
18        free(tmpstr); tmpstr = NULL;
19        drawscreen(playpolicy, 0, 0);
20
21        while(1)
22        {
23                rcret = waitrc(playpolicy, 1000, 0);
24                if(rcret == getrcconfigint("rcok", NULL))
25                        goto start;
26                break;
27        }
28
29        clearscreen(playpolicy);
30}
31
32void screenplaybufferstatus(struct stimerthread* self)
33{
34        int rcret = -1, draw = 50;
35        if(self == NULL) return;
36
37        struct skin* playbufferstatus = getscreen("playbufferstatus");
38
39        playbufferstatus->progresssize = 0;
40       
41        while(self->aktion != STOP)
42        {
43                rcret = waitrc(0, 1, 0);
44                if(rcret == getrcconfigint("rcexit", NULL))
45                {
46                        playerstopbuffer();
47                        break;
48                }
49
50                if(draw == 50)
51                {
52                        draw = 0;
53                        if(playergetbuffersize() > 0)
54                                drawscreen(playbufferstatus, 0, 0);
55                }
56                //usleep(10000);
57                draw++;
58        }
59       
60        if(playergetbuffersize() > 0)
61        {
62                clearscreen(playbufferstatus);
63                drawscreen(skin, 0, 0);
64        }
65}
66
67//flag = 4 ---> timeshift
68//flag = 5 --> timeshift, not in play mode (only recording)
69void screenplayinfobar(char* file, char* showname, int mode, int playertype, int flag)
70{
71        int change = 1;
72        int videodevpts = 1;
73
74        if(checkbit(status.playercan, 14) == 0) return;
75
76        if((flag == 2) || (flag == 3))
77        {
78                return;
79        }
80
81        struct skin* playinfobar = getscreen("playinfobar");
82        struct skin* playinfobarpic = getscreen("playinfobarpic");
83        if(mode == 1)
84        {
85                clearscreen(playinfobar);
86                clearscreen(playinfobarpic);
87                drawscreen(skin, 0, 0);
88                return;
89        }
90
91        struct skin* title = getscreennode(playinfobar, "title");
92        struct skin* spos = getscreennode(playinfobar, "pos");
93        struct skin* slen = getscreennode(playinfobar, "len");
94        struct skin* sreverse = getscreennode(playinfobar, "reverse");
95        struct skin* sprogress = getscreennode(playinfobar, "progress");
96        char* tmpstr = NULL;
97        unsigned long long pos = 0, dpos = 0, len = 0, reverse = 0;
98
99        // show thumb cover start
100        struct skin* playinfobarcover = getscreen("playinfobarcover");
101        struct skin* cover = getscreennode(playinfobarcover, "cover");
102        cover->hidden = YES;
103        if(file != NULL)
104        {
105                struct mediadb* node = NULL;
106                char* dname = ostrcat(file, NULL, 0, 0);
107                dname = dirname(dname);
108                node = getmediadb(dname, basename(file), 0);
109                free(dname); dname = NULL;
110               
111                if(node != NULL)
112                {
113                        if(ostrncmp("tt", node->id, 2) == 0)
114                        {
115                                tmpstr = ostrcat(tmpstr, getconfig("mediadbpath", NULL), 1, 0);
116                                tmpstr = ostrcat(tmpstr, "/", 1, 0);
117                                tmpstr = ostrcat(tmpstr, node->id, 1, 0);
118                                tmpstr = ostrcat(tmpstr, "_poster.jpg", 0, 0);
119                                if(file_exist(tmpstr))
120                                {
121                                        changepic(cover, tmpstr);
122                                        cover->hidden = NO;
123                                }
124                                free(tmpstr), tmpstr = NULL;
125                        }
126                }
127        }
128        // show thumb cover end
129
130        if(showname == NULL)
131        {
132                tmpstr = ostrcat(file, NULL, 0, 0);
133                if(tmpstr != NULL) changetext(title, basename(tmpstr));
134                free(tmpstr); tmpstr = NULL;
135        }
136        else
137                changetext(title, showname);
138
139        videodevpts = 1;
140        if(playertype == 1)
141        {
142                int ret = 0;
143                unsigned long long startpos = 0;
144                if(flag == 4)
145                        ret = playergetinfots(&len, &startpos, NULL, &pos, NULL, 1);
146                else if(flag == 5)
147                        ret = playergetinfots(&len, &startpos, NULL, &pos, NULL, 2);
148                else
149                {
150                        ret = playergetinfots(&len, &startpos, NULL, &pos, NULL, 0);
151                        if(ret == 0)
152                        {
153                                ret = videogetpts(status.aktservice->videodev, &dpos);
154                                if(ret == 0)
155                                {
156                                        pos = dpos;
157                                        videodevpts = 1;
158                                }
159                                else
160                                {
161                                        ret = 0;
162                                        videodevpts = 0;
163                                }
164                        }
165                }
166                len = len / 90000;
167                pos = (pos - startpos) / 90000;
168                if(ret != 0) change = 0;
169        }
170        else if(playertype == 2)
171        {
172                pos = dvdgetpts() / 90000;
173                len = dvdgetlength();
174        }
175        else
176        {
177                pos = playergetpts() / 90000;
178                len = playergetlength();
179        }
180        if(pos < 0) pos = 0;
181        reverse = len - pos;
182
183        if(change == 1)
184        {
185                if(len == 0)
186                        sprogress->progresssize = 0;
187                else
188                        sprogress->progresssize = pos * 100 / len;
189        }
190
191        tmpstr = convert_timesec(pos);
192        if(videodevpts == 1)
193                changetext(spos, tmpstr);
194        else
195                changetext(spos, " ");
196        free(tmpstr); tmpstr = NULL;
197
198        tmpstr = convert_timesec(len);
199        changetext(slen, tmpstr);
200        free(tmpstr); tmpstr = NULL;
201
202        tmpstr = convert_timesec(reverse);
203        changetext(sreverse, tmpstr);
204        free(tmpstr); tmpstr = NULL;
205
206        status.writeplayersub = 0;
207
208        drawscreen(playinfobar, 0, 0);
209        drawscreen(playinfobarpic, 0, 0);
210        drawscreen(playinfobarcover, 0, 0);
211}
212
213void screenplaytracklist(int mode, int playertype, int flag)
214{
215        //mode 1 = audiotracks
216        //mode 2 = subtitle tracks
217
218        if(mode == 1 && checkbit(status.playercan, 1) == 0) return;
219        if(mode == 2 && checkbit(status.playercan, 2) == 0) return;
220               
221        if(playertype == 1)
222        {
223                screenplayinfobar(NULL, NULL, 1, playertype, flag);
224                if(mode == 1)
225                        playerchangeaudiotrackts();
226                else if(mode == 2)
227                        playerchangesubtitletrackts();
228                blitfb(0);
229                return;
230        }
231
232        int i = 0;
233        int rcret = 0, curtrackid = 0;
234        struct skin* track = NULL;
235        if(mode == 1)
236                track = getscreen("audiotrack");
237        else if(mode == 2)
238                track = getscreen("subtitle");
239        struct skin* listbox = getscreennode(track, "listbox");
240        struct skin* tmp = NULL;
241        char** tracklist = NULL;
242        char* curtrackencoding = NULL, *curtrackname = NULL;
243        char* tmpstr = NULL;
244
245        playergetcurtrac(mode, &curtrackid, &curtrackencoding, &curtrackname);
246        tracklist = playergettracklist(mode);
247
248        if(tracklist != NULL)
249        {
250                while(tracklist[i] != NULL)
251                {
252                        printf("tracklist[i]: %s\n", tracklist[i]);
253                        tmp = addlistbox(track, listbox, tmp, 1);
254                        if(tmp != NULL)
255                        {
256                                if(ostrcmp(tracklist[i], "und") == 0)
257                                        tmpstr = ostrcat(tmpstr, _("undefined"), 1, 0);
258                                else
259                                        tmpstr = ostrcat(tmpstr, _(tracklist[i]), 1, 0);
260                                       
261                                if(tracklist[i + 1] != NULL && strlen(tracklist[i + 1]) > 0)
262                                {       
263                                        tmpstr = ostrcat(tmpstr, " (", 1, 0);
264                                        tmpstr = ostrcat(tmpstr, tracklist[i + 1], 1, 0);
265                                        tmpstr = ostrcat(tmpstr, ")", 1, 0);
266                                }
267                               
268                               
269                                changetext(tmp, tmpstr);
270                                free(tmpstr); tmpstr = NULL;
271                                tmp->type = CHOICEBOX;
272                                tmp->del = 1;
273                                if(tracklist[i] != NULL && atoi(tracklist[i]) != 0)
274                                        tmp->handle = (char*)atoi(tracklist[i]);
275                                else
276                                        tmp->handle = (char*)(i / 2);
277
278#if defined (EXTGST)
279                                if(getconfigint("extplayer_type", NULL) == 1)
280                                {
281#endif
282
283        #ifdef EPLAYER4
284                                        if(curtrackid == (i / 2))
285                                        {
286                                                tmp->handle1 = "running";
287                                                changeinput(tmp, _("running"));
288                                        }
289                                        else
290                                                changeinput(tmp, "");
291        #else
292                                        if((ostrcmp(curtrackname, tracklist[i]) == 0 && ostrcmp(curtrackencoding, tracklist[i + 1]) == 0) || (tracklist[i] != NULL && curtrackid == atoi(tracklist[i])))
293                                        {
294                                                tmp->handle1 = "running";
295                                                changeinput(tmp, _("running"));
296                                        }
297                                        else
298                                                changeinput(tmp, "");
299        #endif
300#if defined (EXTGST)
301                                }
302                                else
303                                {
304                                        if((ostrcmp(curtrackname, tracklist[i]) == 0 && ostrcmp(curtrackencoding, tracklist[i + 1]) == 0) || (tracklist[i] != NULL && curtrackid == atoi(tracklist[i])))
305                                        {
306                                                tmp->handle1 = "running";
307                                                changeinput(tmp, _("running"));
308                                        }
309                                        else
310                                                changeinput(tmp, "");
311                                }                               
312#endif
313
314                        }
315                        i += 2;
316                }
317        }
318
319        free(curtrackencoding); curtrackencoding = NULL;
320        free(curtrackname); curtrackname = NULL;
321        playerfreetracklist(tracklist);
322        tracklist = NULL;
323
324        listbox->aktline = 1;
325        listbox->aktpage = -1;
326
327        screenplayinfobar(NULL, NULL, 1, playertype, flag);
328        drawscreen(track, 0, 0);
329        addscreenrc(track, listbox);
330
331        while(1)
332        {
333                rcret = waitrc(track, 0, 0);
334
335                if(rcret == getrcconfigint("rcexit", NULL)) break;
336                if(rcret == getrcconfigint("rcyellow", NULL)) break;
337                if(rcret == getrcconfigint("rcok", NULL))
338                {
339                        if(listbox->select != NULL)
340                        {
341                                if(mode == 1) {
342                                        playerchangeaudiotrack((int)listbox->select->handle);
343#if defined (EXTGST)
344                                        if(getconfigint("extplayer_type", NULL) == 1)
345                                        {
346#endif
347        #ifdef EPLAYER4
348                                                if(playertype == 0)
349                                                        playerseek(-1);
350        #endif
351#if defined (EXTGST)
352                                        }
353#endif
354                                }
355                                else if(mode == 2)
356                                {
357                                        if(listbox->select->handle1 != NULL)
358                                                playerstopsubtitletrack();
359                                        else   
360                                                playerchangesubtitletrack((int)listbox->select->handle);
361                                }
362                        }
363                        break;
364                }
365        }
366
367        delmarkedscreennodes(track, 1);
368        delownerrc(track);
369        clearscreen(track);
370        blitfb(0);
371       
372        if(rcret == getrcconfigint("rcyellow", NULL))
373                screenplaytracklist(2, playertype, flag);
374}
375
376void playrcyellow(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
377{
378//      if(checkbit(status.playercan, 1) == 0) return;
379        status.writeplayersub = 0;
380
381        screenplaytracklist(1, playertype, flag);
382        if(playinfobarstatus > 0)
383                screenplayinfobar(file, showname, 0, playertype, flag);
384
385        status.writeplayersub = 1;
386}
387
388void playrctext(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
389{
390//      if(checkbit(status.playercan, 2) == 0) return;
391        status.writeplayersub = 0;
392
393        screenplaytracklist(2, playertype, flag);
394        if(playinfobarstatus > 0)
395                screenplayinfobar(file, showname, 0, playertype, flag);
396
397        status.writeplayersub = 1;
398}
399
400void playrcgreen(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
401{
402//      if(checkbit(status.playercan, 3) == 0) return;
403        status.writeplayersub = 0;
404
405        screenplayinfobar(file, showname, 1, playertype, flag);
406        if(playertype == 2)
407                screenvideomode(2);
408        else
409                screenvideomode(1);
410        drawscreen(skin, 0, 0);
411        if(playinfobarstatus > 0)
412                screenplayinfobar(file, showname, 0, playertype, flag);
413
414        status.writeplayersub = 1;
415}
416
417void playrcblue(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
418{
419        if(checkbit(status.playercan, 4) == 0) return;
420        status.writeplayersub = 0;
421
422        screenplayinfobar(file, showname, 1, playertype, flag);
423        screenpowerofftimer();
424        drawscreen(skin, 0, 0);
425        if(playinfobarstatus > 0)
426                screenplayinfobar(file, showname, 0, playertype, flag);
427        status.writeplayersub = 1;
428}
429
430void playrcok(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
431{
432//      if(checkbit(status.playercan, 0) == 0) return;
433
434        free(status.playfile); status.playfile = NULL;
435        status.playfile = ostrcat(file, NULL, 0, 0);
436        screenplaypolicy(file, 1);
437        drawscreen(skin, 0, 0);
438        if(playinfobarstatus > 0)
439                screenplayinfobar(file, showname, 0, playertype, flag);
440}
441
442void id3tag_info(char* file)
443{
444        char* tmpstr = NULL;
445
446        if(file == NULL) return;
447        if(!filelistflt(".mp3 .flac .ogg .wma .ra .wav", file))
448        {
449                struct id3tag* id3tag = NULL;
450                int hash = gethash(file);
451                char* tmphash = olutoa(hash);
452                               
453                id3tag = getid3(file, tmphash, 1);
454                free(tmphash); tmphash = NULL;
455       
456                if(id3tag != NULL)
457                {
458                        tmpstr = ostrcat(tmpstr, _("Title:"), 1, 0);
459                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
460                        tmpstr = ostrcat(tmpstr, id3tag->title, 1, 0);
461                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
462                       
463                        tmpstr = ostrcat(tmpstr, _("Artist:"), 1, 0);
464                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
465                        tmpstr = ostrcat(tmpstr, id3tag->artist, 1, 0);
466                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
467                       
468                        tmpstr = ostrcat(tmpstr, _("Album:"), 1, 0);
469                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
470                        tmpstr = ostrcat(tmpstr, id3tag->album, 1, 0);
471                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
472                       
473                        tmpstr = ostrcat(tmpstr, _("Year:"), 1, 0);
474                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
475                        tmpstr = ostrcat(tmpstr, id3tag->year, 1, 0);
476                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
477               
478                        tmpstr = ostrcat(tmpstr, _("Genre:"), 1, 0);
479                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
480                        tmpstr = ostrcat(tmpstr, id3tag->genretext, 1, 0);
481                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
482
483                        tmpstr = ostrcat(tmpstr, _("Comment:"), 1, 0);
484                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
485                        tmpstr = ostrcat(tmpstr, id3tag->comment, 1, 0);
486                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
487                }
488                freeid3(id3tag); id3tag = NULL;         
489        }
490        else
491        {
492                tmpstr = ostrcat(tmpstr, _("Title:"), 1, 0);
493                tmpstr = ostrcat(tmpstr, " ", 1, 0);
494                tmpstr = ostrcat(tmpstr, playergetinfo("Title"), 1, 1);
495                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
496               
497                tmpstr = ostrcat(tmpstr, _("Artist:"), 1, 0);
498                tmpstr = ostrcat(tmpstr, " ", 1, 0);
499                tmpstr = ostrcat(tmpstr, playergetinfo("Artist"), 1, 1);
500                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
501               
502                tmpstr = ostrcat(tmpstr, _("Album:"), 1, 0);
503                tmpstr = ostrcat(tmpstr, " ", 1, 0);
504                tmpstr = ostrcat(tmpstr, playergetinfo("Album"), 1, 1);
505                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
506               
507                tmpstr = ostrcat(tmpstr, _("Year:"), 1, 0);
508                tmpstr = ostrcat(tmpstr, " ", 1, 0);
509                tmpstr = ostrcat(tmpstr, playergetinfo("Year"), 1, 1);
510                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
511       
512                tmpstr = ostrcat(tmpstr, _("Genre:"), 1, 0);
513                tmpstr = ostrcat(tmpstr, " ", 1, 0);
514                tmpstr = ostrcat(tmpstr, playergetinfo("Genre"), 1, 1);
515                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
516               
517                tmpstr = ostrcat(tmpstr, _("Comment:"), 1, 0);
518                tmpstr = ostrcat(tmpstr, " ", 1, 0);
519                tmpstr = ostrcat(tmpstr, playergetinfo("Comment"), 1, 1);
520                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
521               
522                tmpstr = ostrcat(tmpstr, _("Track:"), 1, 0);
523                tmpstr = ostrcat(tmpstr, " ", 1, 0);
524                tmpstr = ostrcat(tmpstr, playergetinfo("Track"), 1, 1);
525                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
526               
527                tmpstr = ostrcat(tmpstr, _("Copyright:"), 1, 0);
528                tmpstr = ostrcat(tmpstr, " ", 1, 0);
529                tmpstr = ostrcat(tmpstr, playergetinfo("Copyright"), 1, 1);
530                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
531               
532        //      tmpstr = ostrcat(tmpstr, _("TestLibEplayer:"), 1, 0);
533        //      tmpstr = ostrcat(tmpstr, " ", 1, 0);
534        //      tmpstr = ostrcat(tmpstr, playergetinfo("TestLibEplayer"), 1, 1);
535        //      tmpstr = ostrcat(tmpstr, "\n", 1, 0);
536        }
537                       
538        textbox(_("iD3Tag"), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 500, 100, 0);
539        free(tmpstr), tmpstr = NULL;
540}
541
542void imdb_submenu(char* file, int mode)
543{
544        struct skin* pluginnode = NULL;
545        void (*startplugin)(char*, char*, int, char*, char*);
546
547        startplugin = NULL;
548       
549        if(mode == 0)
550                pluginnode = getplugin("IMDb");
551        else if(mode == 1)
552                pluginnode = getplugin("IMDb-API");
553        else if(mode == 2)
554                pluginnode = getplugin("TMDb");
555                       
556        if(pluginnode != NULL)
557        {                       
558                if(mode == 0)
559                        startplugin = dlsym(pluginnode->pluginhandle, "screenimdb");
560                else if(mode == 1)
561                        startplugin = dlsym(pluginnode->pluginhandle, "screenimdbapi");
562                else if(mode == 2)
563                        startplugin = dlsym(pluginnode->pluginhandle, "screentmdb");
564
565                if(startplugin != NULL)
566                {
567                                debug(133, "file=%s", basename(file));
568                        if(file != NULL)
569                        {
570                                if(ostrstr(file, "/") != NULL)
571                                {
572                                        //create imdb search name
573       
574                                        char* dname = ostrcat(file, NULL, 0, 0);
575                                        dname = dirname(dname);
576                               
577                                        char* shortname = ostrcat(basename(file), NULL, 0, 0);
578                                        string_tolower(shortname);
579        //                              shortname = string_shortname(shortname, 1);
580                                        shortname = string_shortname(shortname, 2);
581                                        string_removechar(shortname);
582                                        strstrip(shortname);
583       
584                                        debug(133, "inputfile=%s", file);
585                                        debug(133, "shortname=%s", shortname);
586                                        debug(133, "dname=%s", dname);
587                                        debug(133, "file=%s", basename(file));
588       
589                                        startplugin(shortname, NULL, 2, dname, basename(file));
590       
591                                        free(shortname), shortname = NULL;
592                                        free(dname), dname = NULL;
593                                }
594                                else
595                                {
596                                        startplugin(file, NULL, 2, NULL, NULL);
597                                }
598                               
599                        }                               
600                }
601        }
602}
603
604void get_mediadb_scan_info()
605{
606        int videocount = 0, audiocount = 0, picturecount = 0;
607        getmediadbcounts(&videocount, &audiocount, &picturecount);
608
609        char* tmpstr = NULL;
610        tmpstr = ostrcat(tmpstr, "scanning (", 1, 0);
611        tmpstr = ostrcat(tmpstr, oitoa(videocount), 1, 1);
612        tmpstr = ostrcat(tmpstr, "/", 1, 0);
613        tmpstr = ostrcat(tmpstr, oitoa(status.mediadbfiles), 1, 1);
614        tmpstr = ostrcat(tmpstr, ")", 1, 0);
615       
616        tmpstr = ostrcat(tmpstr, "\n\n ", 1, 0);
617        tmpstr = ostrcat(tmpstr, _("MediaDB directory scan started in Background !"), 1, 0);
618        tmpstr = ostrcat(tmpstr, "\n\n  ", 1, 0);
619        tmpstr = ostrcat(tmpstr, _("Delete MediaDB before scan"), 1, 0);
620        tmpstr = ostrcat(tmpstr, ": \t", 1, 0);
621        if(ostrcmp(getconfig("mediadbscandelall", NULL), "1") == 0)
622                tmpstr = ostrcat(tmpstr, _("yes"), 1, 0);
623        else
624                tmpstr = ostrcat(tmpstr, _("no"), 1, 0);
625        tmpstr = ostrcat(tmpstr, "\n  ", 1, 0);                 
626        tmpstr = ostrcat(tmpstr, _("Delete unused entrys before scan"), 1, 0);
627        tmpstr = ostrcat(tmpstr, ": \t", 1, 0);         
628        if(ostrcmp(getconfig("mediadbscandelnotfound", NULL), "1") == 0)
629                tmpstr = ostrcat(tmpstr, _("yes"), 1, 0);
630        else
631                tmpstr = ostrcat(tmpstr, _("no"), 1, 0);
632        tmpstr = ostrcat(tmpstr, "\n  ", 1, 0);
633        tmpstr = ostrcat(tmpstr, _("scan Directory"), 1, 0);
634        tmpstr = ostrcat(tmpstr, ": \t\t\t", 1, 0);
635        tmpstr = ostrcat(tmpstr, getconfig("mc_vp_path", NULL), 1, 0);
636        tmpstr = ostrcat(tmpstr, "\n  ", 1, 0);         
637        tmpstr = ostrcat(tmpstr, _("MediaDB place"), 1, 0);
638        tmpstr = ostrcat(tmpstr, ": \t\t\t", 1, 0);                             
639        tmpstr = ostrcat(tmpstr, getconfig("mediadbpath", NULL), 1, 0);
640        tmpstr = ostrcat(tmpstr, "\n  ", 1, 0);
641        tmpstr = ostrcat(tmpstr, _("MediaDB Debug"), 1, 0);
642        tmpstr = ostrcat(tmpstr, ": \t\t\t", 1, 0);
643        if(ostrcmp(getconfig("mediadbdebug", NULL), "1") == 0)
644                tmpstr = ostrcat(tmpstr, _("yes"), 1, 0);
645        else
646                tmpstr = ostrcat(tmpstr, _("no"), 1, 0);
647        tmpstr = ostrcat(tmpstr, "\n  ", 1, 0);         
648        tmpstr = ostrcat(tmpstr, _("Backdrop Download Count"), 1, 0);
649        tmpstr = ostrcat(tmpstr, ": \t\t", 1, 0);               
650        if(getconfigint("mediadbbackdrop", NULL) == 0)
651                tmpstr = ostrcat(tmpstr, _("all"), 1, 0);
652        else
653                tmpstr = ostrcat(tmpstr, oitoa(getconfigint("mediadbbackdrop", NULL)), 1, 1);
654
655        textbox(_("Message"), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1100, 500, 10, 0);
656        free(tmpstr), tmpstr = NULL;
657}
658
659// flag 100 = tithek
660int playrcred(char* file, char* showname, char* menutitle, char* link, int playinfobarstatus, int playertype, int flag)
661{
662        int ret = 1;
663//      if(checkbit(status.playercan, 5) == 0) return;
664
665        status.writeplayersub = 0;
666
667        if(status.play == 1)
668                screenplayinfobar(file, showname, 1, playertype, flag);
669
670        int hangtime = status.hangtime;
671
672        struct skin* pluginnode = NULL;
673        void (*startplugin)(void);
674        struct skin* plugin = getscreen("plugin");
675        struct skin* child = plugin->child;
676        struct menulist* mlist = NULL, *mbox = NULL;
677        char* skintitle = _("Menu");
678    char* localparser = NULL, *localparser_input = NULL, *cmd = NULL, *tmpstr = NULL, *tmpstr1 = NULL, *tmpstr2 = NULL;
679
680printf("playrcred link: %s flag: %d\n", link, flag);
681
682    if(link != NULL && !ostrncmp("/", link, 1))
683    {
684        localparser_input = ostrcat(link, NULL, 0, 0);
685        localparser_input = stringreplacecharonce(localparser_input, ' ', '\0');
686printf("playrcred set localparser_input: %s\n", localparser_input);
687
688    }
689               
690        if(flag < 99)
691        {
692                if(status.play == 1)
693                {
694                        addmenulist(&mlist, "Video Settings", _("Video Settings"), NULL, 0, 0);
695                        addmenulist(&mlist, "AV Settings", _("AV Settings"), NULL, 0, 0);
696                        addmenulist(&mlist, "iD3Tag Info", _("iD3Tag Info"), NULL, 0, 0);
697                }
698
699                addmenulist(&mlist, "MediaDB Edit", _("MediaDB Edit"), NULL, 0, 0);
700
701printf("status.play %d\n",status.play);
702printf("status.actplay %s\n",status.actplay);
703printf("status.mcaktiv %d\n",status.mcaktiv);
704
705                if(status.play == 0)
706                {
707                        addmenulist(&mlist, "Delete File", _("Delete File"), NULL, 0, 0);
708                        addmenulist(&mlist, "Rename File", _("Delete File"), NULL, 0, 0);
709                        addmenulist(&mlist, "Create Folder", _("Create Folder"), NULL, 0, 0);
710//                      addmenulist(&mlist, "Update Iptv", _("Update Iptv"), NULL, 0, 0);
711                addmenulist(&mlist, "Search on PornHub", _("Search on PornHub"), NULL, 0, 0);
712                addmenulist(&mlist, "Search on Xvideos", _("Search on Xvideos"), NULL, 0, 0);
713                }
714                else if(status.play == 1 && status.mcaktiv != 0)
715                        addmenulist(&mlist, "Delete File", _("Delete File"), NULL, 0, 0);
716                else
717                        addmenulist(&mlist, "Show Streamlink", _("Show Streamlink"), NULL, 0, 0);
718
719
720                if(status.mediadbfiles > 0)
721                        addmenulist(&mlist, "MediaDB Scan Info", _("MediaDB Scan Info"), NULL, 0, 0);           
722        }
723        else
724        {
725                addmenulist(&mlist, "Create Favorites sub folder", _("Create Favorites sub folder"), NULL, 0, 0);
726                addmenulist(&mlist, "Create Favorites sub folder(PIN secured)", _("Create Favorites sub folder(PIN secured)"), NULL, 0, 0);
727
728                if(flag < 199)
729                {
730                        if(file_exist("/mnt/swapextensions/etc/.codecpack") || file_exist("/var/swap/etc/.codecpack") || file_exist("/var/etc/.codecpack"))
731                        {
732                debug(202, "showname: %s", showname);
733                debug(202, "menutitle: %s", menutitle);
734                debug(202, "link: %s", link);
735                    debug(202, "localparser_input: %s", localparser_input);
736                if(localparser_input != NULL && ostrstr(link, " search ") != NULL)
737                {
738                    cmd = ostrcat("cat ", localparser_input, 0, 0);
739                    cmd = ostrcat(cmd, " | grep '^create_service_bouquets()' | wc -l", 1, 0);
740                            debug(202, "cmd: %s", cmd);
741                    if(ostrcmp(string_newline(command(cmd)), "1") == 0)
742                    {
743                                        addmenulist(&mlist, "Create Service Bouquets", _("Create Service Bouquets"), NULL, 0, 0);
744                    }
745                        free(cmd), cmd = NULL;
746                }
747                                addmenulist(&mlist, "Search on KinoX", _("Search on KinoX"), NULL, 0, 0);
748//start
749printf("localparser_input: %s flag: %d\n", localparser_input, flag);
750                if(localparser_input != NULL)
751                {
752                        cmd = ostrcat(cmd, "cat /tmp/tithek/mainmenu.local.list | awk '{ print $1 \" \" $2 \" \" $3 \" \" $4 \" \" $5 }'", 1, 0);
753                    printf("playrcred cmd: %s\n", cmd);
754
755                        tmpstr1 = command(cmd);
756                    free(cmd), cmd= NULL;
757
758                    printf("playrcred tmpstr1: %s\n", tmpstr1);
759                //      tmpstr = readfiletomem(filename, 1);
760
761                    if(tmpstr1 != NULL)
762                    {
763                                struct splitstr* ret1 = NULL;
764                                int count = 0;
765                                int i = 0;
766
767                                ret1 = strsplit(tmpstr1, "\n", &count);
768                       
769                                for(i = 0; i < count; i++)
770                                {
771                            //hid kinox.sh
772                                if(ostrstr((&ret1[i])->part, "kinox.sh") != NULL) continue;
773                                        struct splitstr* ret2 = NULL;
774                                        int count2 = 0;
775                                        tmpstr2 = ostrcat((&ret1[i])->part, NULL, 0, 0);
776                            printf("playrcred tmpstr2: %s\n", tmpstr2);
777                                        ret2 = strsplit(tmpstr2, "#", &count2);
778                            if(ret2 != NULL && count2 >= 1)
779                            {
780                                localparser = ostrcat((&ret2[1])->part, NULL, 0, 0);
781                                printf("playrcred localparser: %s\n", localparser);
782                               
783                                    if(file_exist(localparser))
784                                {
785                                    cmd = ostrcat("cat ", localparser, 0, 0);
786                                    cmd = ostrcat(cmd, " | grep '^search()' | wc -l", 1, 0);
787                                            printf("cmd: %s\n", cmd);
788                                    if(ostrcmp(string_newline(command(cmd)), "1") == 0)
789                                    {
790                                        tmpstr = ostrcat(_("Search on"), " ", 0, 0);
791                                        tmpstr = ostrcat(tmpstr, (&ret2[0])->part, 1, 0);
792
793                                                        addmenulist(&mlist, _(tmpstr), (&ret2[1])->part, NULL, 0, 0);
794                //                                      addmenulist(&mlist, "Search on KinoX", _("Search on KinoX"), NULL, 0, 0);
795                                        free(tmpstr), tmpstr = NULL;
796                                    }
797                                    free(cmd), cmd = NULL;
798                                }
799                                free(localparser), localparser = NULL;
800                            }
801                                        free(ret2), ret2 = NULL;
802                                        free(tmpstr2), tmpstr2 = NULL;
803                                }
804                                free(ret1), ret1 = NULL;
805                    }
806                    free(tmpstr2), tmpstr2 = NULL;
807                }
808//end
809
810/*
811                                addmenulist(&mlist, "Search on KinoX (local)", _("Search on KinoX (local)"), NULL, 0, 0);
812                                addmenulist(&mlist, "Search on Movie4k", NULL, _("Search on Movie4k"), 0, 0);
813                                addmenulist(&mlist, "Search on Movie4k (local)", _("Search on Movie4k (local)"), NULL, 0, 0);
814                                addmenulist(&mlist, "Search on Solarmovies (movie)", _("Search on Solarmovies (movie)"), NULL, 0, 0);
815                                addmenulist(&mlist, "Search on Solarmovies (serie)", _("Search on Solarmovies (serie)"), NULL, 0, 0);
816                                addmenulist(&mlist, "Search on Solarmovies (local)", _("Search on Solarmovies (local)"), NULL, 0, 0);
817                                addmenulist(&mlist, "Search on Mle-HD (local)", _("Search on Mle-HD (local)"), NULL, 0, 0);
818                                addmenulist(&mlist, "Search on Beeg (local)", _("Search on Beeg (local)"), NULL, 0, 0);
819                                addmenulist(&mlist, "Search on Xvideos (local)", _("Search on Xvideos (local)"), NULL, 0, 0);
820                                addmenulist(&mlist, "Search on FilmOn (local)", _("Search on FilmOn (local)"), NULL, 0, 0);
821*/
822                        }
823/*
824                        addmenulist(&mlist, "Search on Netzkino (local)", _("Search on Netzkino (local)"), NULL, 0, 0);
825                        addmenulist(&mlist, "Search on Youtube", _("Search on Youtube"), NULL, 0, 0);
826                        addmenulist(&mlist, "Search on Youtube (local)", _("Search on Youtube (local)"), NULL, 0, 0);
827                        addmenulist(&mlist, "Search on MyVideo", _("Search on MyVideo"), NULL, 0, 0);
828                        addmenulist(&mlist, "Search on MyVideo (local)", _("Search on MyVideo (local)"), NULL, 0, 0);
829                        addmenulist(&mlist, "Search on ARD (local)", _("Search on ARD (local)"), NULL, 0, 0);
830                        addmenulist(&mlist, "Search on ZDF (local)", _("Search on ZDF (local)"), NULL, 0, 0);
831                        addmenulist(&mlist, "Search on TecTime (local)", _("Search on TecTime (local)"), NULL, 0, 0);
832                        addmenulist(&mlist, "Search on Giga (local)", _("Search on Giga (local)"), NULL, 0, 0);
833                        addmenulist(&mlist, "Search on NowTv (local)", _("Search on NowTv (local)"), NULL, 0, 0);
834                        addmenulist(&mlist, "Search on InternetTv (local)", _("Search on InternetTv (local)"), NULL, 0, 0);
835*/
836                        addmenulist(&mlist, "Search on InternetRadio (local)", _("Search on InternetRadio (local)"), NULL, 0, 0);
837//                      addmenulist(&mlist, "Search on All (local)", _("Search on All (local)"), NULL, 0, 0);
838
839                }
840        }
841
842        addmenulist(&mlist, "Downloads", _("Downloads"), NULL, 0, 0);
843
844        if(flag < 199)
845        {
846                //add plugins
847                while(child != NULL)
848                {
849                        if(child->del == PLUGINDELMARK && (status.security >= 1 || (status.security == 0 && checkpluginskip(child->name) == 0)))
850                        {
851                                if(ostrcmp(child->name, "Streaminfo") == 0 && status.play == 1)
852                                        addmenulist(&mlist, child->name, _(child->name), child->pic, 0, 0);
853                                else if(ostrcmp(child->name, "IMDb") == 0)
854                                        addmenulist(&mlist, child->name, _(child->name), child->pic, 0, 0);
855                                else if(ostrcmp(child->name, "IMDb-API") == 0)
856                                        addmenulist(&mlist, child->name, _(child->name), child->pic, 0, 0);
857        //                      else if(ostrcmp(child->name, "TMDb") == 0)
858        //                              addmenulist(&mlist, child->name, _(child->name), child->pic, 0, 0);
859                        }
860                        child = child->next;
861                }
862        }
863
864        mbox = menulistbox(mlist, NULL, skintitle, _("Choose your Red-Menu entry from the following list"), NULL, NULL, 1, 0);
865        if(mbox != NULL)
866        {
867printf("mbox->name=%s\n", mbox->name);
868printf("mbox->text=%s\n", mbox->text);
869
870                if(ostrcmp(mbox->name, "Video Settings") == 0)
871                        screenvideosettings();
872                else if(ostrcmp(mbox->name, "AV Settings") == 0)
873                        screenavsettings(0);
874                else if(ostrcmp(mbox->name, "IMDb") == 0)
875                        imdb_submenu(file, 0);
876                else if(ostrcmp(mbox->name, "IMDb-API") == 0)
877                        imdb_submenu(file, 1);
878                else if(ostrcmp(mbox->name, "TMDb") == 0)
879                        imdb_submenu(file, 2);
880                else if(ostrcmp(mbox->name, "iD3Tag Info") == 0)
881                        id3tag_info(file);
882                else if(ostrcmp(mbox->name, "MediaDB Scan Info") == 0)
883                        get_mediadb_scan_info();
884                else if(ostrcmp(mbox->name, "MediaDB Edit") == 0)
885                        screenmediadbedit(file, 0, 0);
886//              else if(ostrcmp(mbox->name, "Update Iptv") == 0)
887//                      ret = update_iptv(file);
888                else if(ostrcmp(mbox->name, "Delete File") == 0)
889                {
890                        playcheckdirrcret(file, 1);
891                        ret = 9999;
892                }
893                else if(ostrcmp(mbox->name, "Rename File") == 0)
894                {
895                        playcheckdirrcret(file, 6);
896                        ret = 9999;
897                }
898                else if(ostrcmp(mbox->name, "Create Folder") == 0)
899                {
900                        playcheckdirrcret(file, 7);
901                        ret = 9999;
902                }
903                else if(ostrcmp(mbox->name, "Show Streamlink") == 0)
904               textbox(_(mbox->name), file, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1100, 200, 0, 0);
905                else if(ostrcmp(mbox->name, "Downloads") == 0)
906                        screenbgdownload(1);
907                else if(ostrcmp(mbox->name, "Create Favorites sub folder") == 0)
908                        ret = 0;
909                else if(ostrcmp(mbox->name, "Create Favorites sub folder(PIN secured)") == 0)
910                        ret = 1000;
911                else if(ostrcmp(mbox->name, "Search on KinoX") == 0)
912                        ret = 2;
913/*
914                else if(ostrcmp(mbox->name, "Search on KinoX (local)") == 0)
915                        ret = 8;
916
917                else if(ostrcmp(mbox->name, "Search on Solarmovies (movie)") == 0)
918                        ret = 3;
919                else if(ostrcmp(mbox->name, "Search on Solarmovies (serie)") == 0)
920                        ret = 4;
921                else if(ostrcmp(mbox->name, "Search on Solarmovies (local)") == 0)
922                        ret = 9;
923                else if(ostrcmp(mbox->name, "Search on Youtube") == 0)
924                        ret = 5;
925                else if(ostrcmp(mbox->name, "Search on Youtube (local)") == 0)
926                        ret = 10;
927                else if(ostrcmp(mbox->name, "Search on MyVideo") == 0)
928                        ret = 6;
929                else if(ostrcmp(mbox->name, "Search on MyVideo (local)") == 0)
930                        ret = 11;
931                else if(ostrcmp(mbox->name, "Search on Movie4k") == 0)
932                        ret = 7;
933                else if(ostrcmp(mbox->name, "Search on Movie4k (local)") == 0)
934                        ret = 12;
935*/
936                else if(ostrcmp(mbox->name, "Search on InternetRadio (local)") == 0)
937                        ret = 13;
938/*
939                else if(ostrcmp(mbox->name, "Search on InternetTv (local)") == 0)
940                        ret = 14;
941                else if(ostrcmp(mbox->name, "Search on ARD (local)") == 0)
942                        ret = 15;
943                else if(ostrcmp(mbox->name, "Search on ZDF (local)") == 0)
944                        ret = 16;
945                else if(ostrcmp(mbox->name, "Search on TecTime (local)") == 0)
946                        ret = 17;
947                else if(ostrcmp(mbox->name, "Search on Giga (local)") == 0)
948                        ret = 18;
949                else if(ostrcmp(mbox->name, "Search on Beeg (local)") == 0)
950                        ret = 19;
951                else if(ostrcmp(mbox->name, "Search on NowTv (local)") == 0)
952                        ret = 20;
953                else if(ostrcmp(mbox->name, "Search on All (local)") == 0)
954                        ret = 21;
955                else if(ostrcmp(mbox->name, "Search on Xvideos (local)") == 0)
956                        ret = 24;
957        else if(ostrcmp(mbox->name, "Search on Mle-HD (local)") == 0)
958                        ret = 25;
959                else if(ostrcmp(mbox->name, "Search on Netzkino (local)") == 0)
960                        ret = 26;
961                else if(ostrcmp(mbox->name, "Search on FilmOn (local)") == 0)
962                        ret = 27;
963*/
964                else if(ostrcmp(mbox->name, "Search on PornHub") == 0 || ostrcmp(mbox->name, "Search on Xvideos") == 0)
965        {
966            localparser = ostrcat(mbox->name, NULL, 0, 0);
967            localparser = string_replace_all("Search on ", "/tmp/localparser/", localparser, 1);
968            strstrip(localparser);
969                    string_tolower(localparser);
970            localparser = ostrcat(localparser, ".sh", 1, 0);
971                    struct skin* tithekplugin = getplugin("Titan Mediathek");
972                    if(tithekplugin != NULL)
973                    {
974                            struct tithek* (*startplugin)(char*, char*);
975
976                            startplugin = dlsym(tithekplugin->pluginhandle, "localparser_search_file");
977                            if(startplugin != NULL)
978                            {
979                                    startplugin(localparser, file);
980
981                            }
982                    }
983            free(localparser), localparser = NULL;
984        }
985                else if(ostrcmp(mbox->name, "Create Service Bouquets") == 0)
986        {
987                struct skin* load = getscreen("loading");
988                drawscreen(load, 0, 0);
989
990            cmd = ostrcat(link, NULL, 0, 0);
991            cmd = string_replace_all(" search ", " create_service_bouquets ", cmd, 1);
992
993                    if(ostrstr(cmd, "%search%") != NULL)
994                            cmd = string_replace_all("%search%", file, cmd, 1);
995
996            cmd = string_newline(cmd);
997                    debug(202, "cmd2: %s", cmd);
998
999                    tmpstr1 = command(cmd);
1000            tmpstr1 = string_newline(tmpstr1);
1001
1002                free(cmd), cmd = NULL;
1003
1004                debug(202, "return from parser: %s", tmpstr1);
1005
1006                if(!ostrncmp("errormsg=", tmpstr1, 9))
1007                {
1008//                      tmpstr = ostrcat(_(mbox->name), "\n\n", 0, 0);
1009                        tmpstr = ostrcat(tmpstr, "\n\n", 0, 0);
1010                        tmpstr = ostrcat(tmpstr, tmpstr1, 1, 0);
1011                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
1012                        tmpstr = ostrcat(tmpstr, menutitle, 1, 0);
1013                        tmpstr = ostrcat(tmpstr, "-", 1, 0);
1014                        tmpstr = ostrcat(tmpstr, file, 1, 0);
1015                        tmpstr = string_replace("errormsg=", "", tmpstr, 1);
1016                        debug(202, "Found error Msg: %s", tmpstr1);
1017
1018                        textbox(_(mbox->name), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1100, 300, 0, 2);
1019            }
1020            else
1021            {
1022//                      tmpstr = ostrcat(_(mbox->name), "\n\n", 0, 0);
1023                        tmpstr = ostrcat(tmpstr, "\n\n", 0, 0);
1024                        tmpstr = ostrcat(tmpstr, _("Sure to Save the Service Bouquets"), 1, 0);
1025                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
1026                        tmpstr = ostrcat(tmpstr, menutitle, 1, 0);
1027                        tmpstr = ostrcat(tmpstr, "-", 1, 0);
1028                        tmpstr = ostrcat(tmpstr, file, 1, 0);
1029                        tmpstr = ostrcat(tmpstr, "?", 1, 0);
1030
1031//                  if(textbox(_("Message"), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1100, 300, 0, 0) == 1)
1032                    if(textbox(_(mbox->name), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1100, 300, 0, 0) == 1)
1033                    {
1034                    cmd = ostrcat(localparser_input, " ", 0, 0);
1035                    cmd = ostrcat(cmd, " ", 1, 0);
1036                    cmd = ostrcat(cmd, localparser_input, 1, 0);
1037                    cmd = ostrcat(cmd, " save '' '", 1, 0);
1038                    cmd = ostrcat(cmd, file, 1, 0);
1039                    cmd = ostrcat(cmd, "'", 1, 0);
1040
1041                            debug(202, "cmd3: %s", cmd);
1042                    system(cmd);
1043                        free(cmd), cmd = NULL;
1044
1045//                      textbox(_("Message"), _("Titan will be restarted!"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 1000, 200, 0, 0);
1046//                          debug(202, "Titan will be restarted!");
1047
1048                        //sync usb
1049//                      system("sync");
1050                        //write only config file
1051//                      writeallconfig(3);
1052                        //gui restart and write no config
1053//                      oshutdown(3, 2);
1054
1055                        textbox(_("Message"), _("Titan will be reloaded Channellist!"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 1000, 200, 0, 0);
1056                            debug(202, "Titan will be reloaded channellist!");
1057                            freesat();
1058                            freeallbouquet();
1059                            freemainbouquet(0);
1060                            freechannel(0);
1061                            freetransponder();
1062                            freeprovider();
1063                        ret = readsat(getconfig("satfile", NULL));
1064                        ret = readtransponder(getconfig("transponderfile", NULL));
1065                        ret = readprovider(getconfig("providerfile", NULL));
1066                        ret = readchannel(getconfig("channelfile", NULL));
1067                        ret = readtransponderencoding(getconfig("transponderencodingfile", NULL));
1068                        ret = readmainbouquet(getconfig("bouquetfile", NULL));
1069                        ret = readallbouquet();
1070                }
1071                else
1072                {
1073                    cmd = ostrcat(localparser_input, " ", 0, 0);
1074                    cmd = ostrcat(cmd, " ", 1, 0);
1075                    cmd = ostrcat(cmd, localparser_input, 1, 0);
1076                    cmd = ostrcat(cmd, " remove '' '", 1, 0);
1077                    cmd = ostrcat(cmd, file, 1, 0);
1078                    cmd = ostrcat(cmd, "'", 1, 0);
1079                            debug(202, "cmd4: %s", cmd);
1080                    system(cmd);
1081                        free(cmd), cmd = NULL;
1082                }
1083                }
1084
1085            free(tmpstr); tmpstr = NULL;
1086                free(tmpstr1); tmpstr1 = NULL;
1087            free(localparser_input), localparser_input = NULL;
1088        }
1089                else if(ostrncmp("/tmp/localparser/", mbox->text,17) == 0 || ostrncmp("/mnt/parser/", mbox->text,12) == 0)
1090        {
1091                struct skin* load = getscreen("loading");
1092                drawscreen(load, 0, 0);
1093           
1094printf("playrcred mbox->text2: %s\n", mbox->text);
1095printf("playrcred file: %s\n", file);
1096
1097
1098            if(file_exist(mbox->text))
1099            {
1100                        struct skin* tithekplugin = getplugin("Titan Mediathek");
1101                        if(tithekplugin != NULL)
1102                        {
1103                                struct tithek* (*startplugin)(char*, char*);
1104
1105                                startplugin = dlsym(tithekplugin->pluginhandle, "localparser_search_file");
1106                                if(startplugin != NULL)
1107                                {
1108                                        startplugin(mbox->text, file);
1109
1110                                }
1111                        }
1112            }
1113//            free(localparser), localparser = NULL;
1114/*
1115                cmd = ostrcat("cat ", mbox->text, 0, 0);
1116                cmd = ostrcat(cmd, " | grep '$SRC $SRC search ' | cut -d'#' -f2 | sed 's!$SRC!", 1, 0);
1117                cmd = ostrcat(cmd, mbox->text, 1, 0);
1118                cmd = ostrcat(cmd, "!g'", 1, 0);
1119//                    cmd = string_replace_all("%search%", (&ret2[1])->part, cmd, 1);
1120
1121                debug(202, "cmd2: %s", cmd);
1122                printf("playrcred cmd2: %s\n", cmd);
1123
1124                tmpstr = command(cmd);
1125                debug(202, "tmpstr: %s", tmpstr);
1126                printf("playrcred tmpstr: %s\n", tmpstr);
1127
1128                free(cmd), cmd = NULL;
1129                cmd = ostrcat(cmd, tmpstr, 1, 0);
1130
1131//                if(getconfigint("tithek_servicebouquets_autoupdate_allchannels", NULL) == 1)
1132//                    cmd = string_replace_all(" search ", " update_all_channels ", cmd, 1);
1133//                else
1134//                    cmd = string_replace_all(" search ", " update_service_bouquets ", cmd, 1);
1135
1136                cmd = string_replace_all("%search%", file, cmd, 1);
1137                printf("playrcred cmd3: %s\n", cmd);
1138
1139                tmpstr = command(cmd);
1140                printf("playrcred tmpstr: %s\n", tmpstr);
1141
1142                free(cmd), cmd = NULL;
1143            }
1144//            free(localparser), localparser = NULL;
1145
1146            free(tmpstr); tmpstr = NULL;
1147//            free(localparser), localparser = NULL;
1148*/
1149
1150        }
1151                else if(ostrcmp(mbox->name, "Downloads") == 0)
1152                {
1153                        if(status.play == 1)
1154                                screenbgdownload(1);
1155                        else
1156                                screenbgdownload(0);
1157                }                       
1158                else
1159                {
1160                        pluginnode = getplugin(mbox->name);
1161
1162                        if(pluginnode != NULL)
1163                        {
1164                                startplugin = dlsym(pluginnode->pluginhandle, "start");
1165                                if(startplugin != NULL)
1166                                        startplugin();
1167                        }
1168                }
1169        }
1170
1171        freemenulist(mlist, 1); mlist = NULL;
1172        drawscreen(skin, 0, 0);
1173        resettvpic();
1174        if(playinfobarstatus > 0 &&     status.play == 1)
1175                screenplayinfobar(file, showname, 0, playertype, flag);
1176
1177        status.hangtime = hangtime;
1178
1179        status.writeplayersub = 1;
1180
1181        return ret;
1182}
1183
1184void playrcinfo(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1185{
1186        if(checkbit(status.playercan, 14) == 0) return;
1187
1188        if(*playinfobarstatus == 0)
1189        {
1190                *playinfobarstatus = 1;
1191                *playinfobarcount = 0;
1192                screenplayinfobar(file, showname, 0, playertype, flag);
1193        }
1194        else if(*playinfobarstatus == 1)
1195        {
1196                *playinfobarstatus = 0;
1197                screenplayinfobar(NULL, NULL, 1, playertype, flag);
1198                status.writeplayersub = 1;
1199        }
1200}
1201
1202void playrcstop(int playertype, int flag)
1203{
1204        if(checkbit(status.playercan, 6) == 0) return;
1205
1206        free(status.playfile); status.playfile = NULL;
1207       
1208        if(playertype == 1)
1209                playerstopts(0, 0);
1210        else if(playertype == 2)
1211                dvdstop();
1212        else
1213                playerstop();
1214
1215        writevfdmenu("Player");
1216        screenplayinfobar(NULL, NULL, 1, playertype, flag);
1217}
1218
1219//type 0: only from play
1220//type 1: only from pause
1221void playrcsf(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int type, int flag)
1222{
1223        if(checkbit(status.playercan, 15) == 0) return;
1224
1225        if(status.playspeed == 0 && ((type == 0 && status.pause == 0) || (type == 1 && status.pause == 1)))
1226        {
1227                status.slowspeed++;
1228                if(status.slowspeed > 6) status.slowspeed = 6;
1229                if(status.slowspeed > 0)
1230                {
1231                        status.play = 0;
1232
1233                        if(playertype == 1)
1234                                playerslowts((int)pow(2, status.slowspeed));
1235                        else if(playertype == 0)
1236                                playerslow(status.slowspeed);
1237                        *playinfobarstatus = 2;
1238                        *playinfobarcount = 0;
1239                        screenplayinfobar(file, showname, 0, playertype, flag);
1240                }
1241                if(status.slowspeed == 0)
1242                {
1243                        status.pause = 0;
1244                        status.play = 1;
1245                        if(playertype == 1)
1246                        {
1247                                playerpausets();
1248                                audioclearbuffer(status.aktservice->audiodev);
1249                                playercontinuets();
1250                                playerresetts();
1251                        }
1252                        else if(playertype == 2)
1253                                dvdcontinue();
1254                        else
1255                                playercontinue();
1256                        *playinfobarstatus = 1;
1257                        *playinfobarcount = 0;
1258                        screenplayinfobar(file, showname, 0, playertype, flag);
1259                }
1260        }
1261}
1262
1263//type 0: only from play
1264//type 1: only from pause
1265void playrcsr(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int type, int flag)
1266{
1267        if(checkbit(status.playercan, 15) == 0) return;
1268
1269        if(status.playspeed == 0 && ((type == 0 && status.pause == 0) || (type == 1 && status.pause == 1)))
1270        {
1271                status.slowspeed--;
1272                if(status.slowspeed < 0) status.slowspeed = 0;
1273                if(status.slowspeed > 0)
1274                {
1275                        status.play = 0;
1276                        if(playertype == 1)
1277                                playerslowts((int)pow(2, status.slowspeed));
1278                        else if(playertype == 0)
1279                                playerslowts(status.slowspeed);
1280                        *playinfobarstatus = 2;
1281                        *playinfobarcount = 0;
1282                        screenplayinfobar(file, showname, 0, playertype, flag);
1283                }
1284                if(status.slowspeed == 0)
1285                {
1286                        status.pause = 0;
1287                        status.play = 1;
1288                        if(playertype == 1)
1289                        {
1290                                playerpausets();
1291                                audioclearbuffer(status.aktservice->audiodev);
1292                                playercontinuets();
1293                                playerresetts();
1294                        }
1295                        else if(playertype == 2)
1296                                dvdcontinue();
1297                        else
1298                                playercontinue();
1299                        *playinfobarstatus = 1;
1300                        *playinfobarcount = 0;
1301                        screenplayinfobar(file, showname, 0, playertype, flag);
1302                }
1303        }
1304}
1305
1306void playrcff(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1307{
1308        if(status.pause == 1)
1309        {
1310                playrcsf(file, showname, playinfobarstatus, playinfobarcount, playertype, 1, flag);
1311                return;
1312        }
1313
1314        if(checkbit(status.playercan, 7) == 0) return;
1315
1316        if(status.pause == 0 && status.slowspeed == 0)
1317        {
1318                status.playspeed++;
1319                if(status.playspeed > 6) status.playspeed = 6;
1320                if(status.playspeed > 0)
1321                {
1322                        status.play = 0;
1323                        if(playertype == 1)
1324                                playerffts((int)pow(2, status.playspeed));
1325                        else if(playertype == 2)
1326                                dvdff(status.playspeed);
1327                        else   
1328                                playerff(status.playspeed);
1329                               
1330                        //Musik
1331                        if(playertype != 0 || flag != 2)
1332                        {               
1333                                *playinfobarstatus = 2;
1334                                *playinfobarcount = 0;
1335                                screenplayinfobar(file, showname, 0, playertype, flag);
1336                        }
1337                }
1338                if(status.playspeed < 0)
1339                {
1340                        status.play = 0;
1341                        if(playertype == 1)
1342                                playerfrts((int)(pow(2, status.playspeed * -1) * -1), 0);
1343                        else if(playertype == 2)
1344                                dvdfr(status.playspeed);
1345                        else
1346                                playerfr(status.playspeed);
1347                        //Musik
1348                        if(playertype != 0 || flag != 2)
1349                        {               
1350                                *playinfobarstatus = 2;
1351                                *playinfobarcount = 0;
1352                                screenplayinfobar(file, showname, 0, playertype, flag);
1353                        }
1354                }
1355                if(status.playspeed == 0)
1356                {
1357                        status.play = 1;
1358                        if(playertype == 1)
1359                        {
1360                                playerpausets();
1361                                playercontinuets();
1362                                playerresetts();
1363                        }
1364                        else if(playertype == 2)
1365                                dvdcontinue();
1366                        else
1367                                playercontinue();
1368                        //Musik
1369                        if(playertype != 0 || flag != 2)
1370                        {               
1371                                *playinfobarstatus = 1;
1372                                *playinfobarcount = 0;
1373                                screenplayinfobar(file, showname, 0, playertype, flag);
1374                        }
1375                }
1376        }
1377}
1378
1379void playrcfr(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1380{
1381        if(status.pause == 1)
1382        {
1383                playrcsr(file, showname, playinfobarstatus, playinfobarcount, playertype, 1, flag);
1384                return;
1385        }
1386       
1387        if(checkbit(status.playercan, 8) == 0) return;
1388
1389        if(status.pause == 0 && status.slowspeed == 0)
1390        {
1391                status.playspeed--;
1392                if(status.playspeed < -6) status.playspeed = -6;
1393                if(status.playspeed > 0)
1394                {
1395                        status.play = 0;
1396                        if(playertype == 1)
1397                                playerffts((int)pow(2, status.playspeed));
1398                        else if(playertype == 2)
1399                                dvdff(status.playspeed);
1400                        else
1401                                playerff(status.playspeed);
1402                        //Musik
1403                        if(playertype != 0 || flag != 2)
1404                        {               
1405                                *playinfobarstatus = 2;
1406                                *playinfobarcount = 0;
1407                                screenplayinfobar(file, showname, 0, playertype, flag);
1408                        }
1409                }
1410                if(status.playspeed < 0)
1411                {
1412                        status.play = 0;
1413                        if(playertype == 1)
1414                                playerfrts((int)(pow(2, status.playspeed * -1) * -1), 0);
1415                        else if(playertype == 2)
1416                                dvdfr(status.playspeed);
1417                        else
1418                                playerfr(status.playspeed);
1419                        //Musik
1420                        if(playertype != 0 || flag != 2)
1421                        {               
1422                                *playinfobarstatus = 2;
1423                                *playinfobarcount = 0;
1424                                screenplayinfobar(file, showname, 0, playertype, flag);
1425                        }
1426                }
1427                if(status.playspeed == 0)
1428                {
1429                        status.play = 1;
1430                        if(playertype == 1)
1431                        {
1432                                playerpausets();
1433                                playercontinuets();
1434                                playerresetts();
1435                        }
1436                        else if(playertype == 2)
1437                                dvdcontinue();
1438                        else
1439                                playercontinue();
1440                        //Musik
1441                        if(playertype != 0 || flag != 2)
1442                        {               
1443                                *playinfobarstatus = 1;
1444                                *playinfobarcount = 0;
1445                                screenplayinfobar(file, showname, 0, playertype, flag);
1446                        }
1447                }
1448        }
1449}
1450
1451void playrcpause(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1452{
1453        if(status.playspeed != 0 || status.slowspeed != 0)
1454        {
1455                playrcplay(file, showname, playinfobarstatus, playinfobarcount, playertype, flag);
1456                return;
1457        }
1458       
1459        if(checkbit(status.playercan, 9) == 0) return;
1460
1461        if(status.pause == 1)
1462        {
1463                if(playertype == 1)
1464                {
1465                        playercontinuets();
1466                }
1467                else if(playertype == 2)
1468                        dvdcontinue();
1469                else
1470                        playercontinue();
1471                status.slowspeed = 0;
1472                status.playspeed = 0;
1473                status.play = 1;
1474                status.pause = 0;
1475                *playinfobarstatus = 1;
1476                *playinfobarcount = 0;
1477                screenplayinfobar(file, showname, 0, playertype, flag);
1478        }
1479        else
1480        {
1481                status.slowspeed = 0;
1482                status.playspeed = 0;
1483                status.play = 0;
1484                status.pause = 1;
1485                if(playertype == 1)
1486                        playerpausets();
1487                else if(playertype == 2)
1488                        dvdpause();
1489                else
1490                        playerpause();
1491                *playinfobarstatus = 2;
1492                *playinfobarcount = 0;
1493                screenplayinfobar(file, showname, 0, playertype, flag);
1494        }
1495}
1496
1497void playrcplay(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1498{
1499        if(checkbit(status.playercan, 10) == 0) return;
1500
1501        free(status.playfile); status.playfile = NULL;
1502        status.playfile = ostrcat(file, NULL, 0, 0);
1503
1504        debug(10, "playertype: %i, playspeed %i, slowspeed %i", playertype, status.playspeed, status.slowspeed);
1505        if(playertype == 1)
1506        {
1507               
1508                if(status.playspeed != 0 || status.slowspeed != 0)
1509                {
1510                        playerpausets();
1511                        if(checkchipset("HI3798MV200") == 1 || checkbox("DM7020HD") == 1 || checkbox("DM7020HDV2") == 1 || vubox1 == 1)
1512                        {
1513                                videoslowmotion(status.aktservice->videodev, 0);
1514                                videofastforward(status.aktservice->videodev, 0);
1515                                if(checkbox("DM7020HD") == 1 || checkbox("DM7020HDV2") == 1 || vubox1 == 1)
1516                                        dmxstart(status.aktservice->dmxaudiodev);
1517                        }
1518                }
1519                if(status.slowspeed != 0)
1520                        audioclearbuffer(status.aktservice->audiodev);
1521                if((status.playspeed != 0 || status.slowspeed != 0) && checkchipset("HI3798MV200") != 1 && checkbox("DM7020HD") != 1 && checkbox("DM7020HDV2") != 1 && vubox1 != 1)
1522                        playerresetts();
1523                playercontinuets();
1524        }
1525        else if(playertype == 2)
1526                dvdcontinue();
1527        else
1528        {
1529                if(status.playspeed != 0 || status.slowspeed != 0)
1530                        playerpause();
1531                playercontinue();
1532        }
1533        status.slowspeed = 0;
1534        status.playspeed = 0;
1535        status.pause = 0;
1536        status.play = 1;
1537        *playinfobarstatus = 1;
1538        *playinfobarcount = 0;
1539        screenplayinfobar(file, showname, 0, playertype, flag);
1540}
1541
1542void playrcjumpr(char* file, char* showname, int sec, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1543{
1544//      if(checkbit(status.playercan, 11) == 0) return;
1545
1546        unsigned long long pos = 0;
1547       
1548        if(status.pause == 0 && status.playspeed == 0 && status.slowspeed == 0)
1549        {
1550                //Musik
1551                if(playertype == 0 && flag == 2)
1552                {
1553                        pos = playergetpts() / 90000;
1554                        if(pos + 10 > sec)
1555                                        playerseek(sec * -1);
1556                        else
1557                        {
1558                                playerstop();
1559                                playerstart(file);
1560                        }
1561                        return;
1562                }
1563       
1564                struct skin* load = getscreen("loading");
1565                drawscreen(load, 0, 0);
1566               
1567                //a jump over the beginning of the
1568                //file, freez the player (type 0)
1569                if(playertype == 1)
1570                        playerseekts(getservice(RECORDPLAY, 0), sec * -1, 0);
1571                else if(playertype == 2)
1572                        pos = dvdgetpts() / 90000;
1573                else
1574                        pos = playergetpts() / 90000;
1575       
1576                if(playertype != 1)
1577                {
1578                        if(pos + 10 > sec)
1579                        {
1580                                if(playertype == 2)
1581                                        dvdseek(sec * -1);
1582                                else
1583                                        playerseek(sec * -1);
1584                        }
1585                        else
1586                        {
1587                                if(playertype == 2)
1588                                {
1589                                        dvdstop();
1590                                        dvdstart(file);
1591                                }
1592                                else
1593                                {
1594                                        playerstop();
1595                                        playerstart(file);
1596                                }
1597                        }
1598                }
1599
1600                *playinfobarstatus = 1;
1601                *playinfobarcount = 0;
1602                //status.play = 0;
1603                clearscreen(load);
1604                screenplayinfobar(file, showname, 0, playertype, flag);
1605                //status.play = 1;
1606                sleep(1);
1607        }
1608}
1609
1610void playrcjumpto(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1611{
1612        if(status.pause == 0 && status.playspeed == 0 && status.slowspeed == 0)
1613        {
1614                char* tmpstr = numinput(_("Jump To (min)"), NULL, "000", 0);
1615                if(tmpstr != NULL)
1616                {
1617                        int jump = atoi(tmpstr) * 60;
1618                        playrcjumpf(file, showname, jump, playinfobarstatus, playinfobarcount, playertype, flag);
1619                }
1620                free(tmpstr), tmpstr = NULL;
1621        }
1622}
1623
1624void playrcjumpf(char* file, char* showname, int sec, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1625{
1626//      if(checkbit(status.playercan, 12) == 0) return;
1627
1628        if(status.pause == 0 && status.playspeed == 0 && status.slowspeed == 0)
1629        {
1630                //Musik
1631                if(playertype == 0 && flag == 2)
1632                {
1633                        playerseek(sec);
1634                        return;
1635                }
1636                struct skin* load = getscreen("loading");
1637                drawscreen(load, 0, 0);
1638               
1639                if(playertype == 1)
1640                        playerseekts(getservice(RECORDPLAY, 0), sec, 0);
1641                else if(playertype == 2)
1642                        dvdseek(sec);
1643                else
1644                        playerseek(sec);
1645                *playinfobarstatus = 1;
1646                *playinfobarcount = 0;
1647                //status.play = 0;
1648                clearscreen(load);
1649                screenplayinfobar(file, showname, 0, playertype, flag);
1650                //status.play = 1;
1651        }
1652}
1653
1654void playchangecodec(int playertype)
1655{
1656        if(checkbit(status.playercan, 13) == 0) return;
1657
1658        char** tracklist = NULL;
1659
1660        if(getconfigint("av_ac3default", NULL) == 1)
1661        {
1662                int i = 0;
1663               
1664                tracklist = playergettracklist(1);
1665                if(tracklist != NULL)
1666                {
1667                        while(tracklist[i] != NULL)
1668                        {
1669                                if(ostrcmp(tracklist[i + 1], "A_AC3") == 0)
1670                                {
1671                                        playerchangeaudiotrack(i / 2);
1672                                }
1673                                i += 2;
1674                        }
1675                }
1676                playerfreetracklist(tracklist);
1677                tracklist = NULL;
1678        }
1679}
1680
1681// dirrcret 1 = delete
1682// dirrcret 2 =
1683// dirrcret 3 = epg info
1684// dirrcret 4 = sort
1685// dirrcret 5 = exit
1686// dirrcret 6 = rename
1687// dirrcret 7 = create folder
1688
1689int playcheckdirrcret(char* file, int dirrcret)
1690{
1691        int ret = 0;
1692        char* epgfilename = NULL, *tmpstr = NULL;
1693
1694        if(dirrcret == 4)
1695        {
1696                int sort = screendirsort();
1697                addconfigint("dirsort", sort);
1698                ret = 1;
1699        }
1700        if(dirrcret == 3)
1701        {
1702                epgfilename = changefilenameext(file, ".epg");
1703
1704                tmpstr = readfiletomem(epgfilename, 0);
1705                if(tmpstr != NULL)
1706                        textbox(_("EPG Info"), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 600, 0, 2);
1707                else {
1708                        free(epgfilename); epgfilename = NULL;
1709                        epgfilename = changefilenameext(file, ".eit");
1710                        tmpstr = readeittomem(epgfilename);
1711                        if(tmpstr != NULL)
1712                                textbox(_("EPG Info"), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 600, 0, 2);
1713                }
1714                free(epgfilename); epgfilename = NULL;
1715                free(tmpstr); tmpstr = NULL;
1716                ret = 1;
1717        }
1718        if(dirrcret == 1)
1719        {
1720                char* subfile = NULL;
1721                subfile = ostrstr(file, "/movie/");
1722                if(subfile != NULL)
1723                        subfile = subfile + 7;
1724                else
1725                        subfile = file;
1726                if(getservicebyrecname(file, 0, 0) != NULL)
1727                        textbox(_("Message"), _("Record in progress"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0);
1728                else if(textbox(_("Really Delete ?"), subfile, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0) == 1)
1729                {
1730                        unlink(file);
1731                        if(file_exist(file))
1732                        {
1733                                char* cmd = ostrcat("rm -rf \"", file, 0, 0);
1734                                cmd = ostrcat(cmd, "\"", 1, 0);
1735                                debug(10, "cmd: %s", cmd);
1736                                system(cmd);
1737                                free(cmd), cmd = NULL;
1738                        }                       
1739                        epgfilename = changefilenameext(file, ".epg");
1740                        unlink(epgfilename);
1741                        free(epgfilename); epgfilename = NULL;
1742                        epgfilename = changefilenameext(file, ".se");
1743                        unlink(epgfilename);
1744                        free(epgfilename); epgfilename = NULL;
1745                        epgfilename = changefilenameext(file, ".ma");
1746                        unlink(epgfilename);
1747                        free(epgfilename); epgfilename = NULL;
1748                        epgfilename = changefilenameext(file, ".as");
1749                        unlink(epgfilename);
1750                        free(epgfilename); epgfilename = NULL;
1751                }
1752                ret = 1;
1753        }
1754        if(dirrcret == 6)
1755        {
1756                char* subfile = NULL, *dname = NULL, *searchext = NULL;
1757                int overwrite;
1758                subfile = ostrstr(file, "/movie/");
1759                if(subfile != NULL)
1760                        subfile = subfile + 7;
1761                else
1762                        subfile = file;
1763                if(getservicebyrecname(file, 0, 0) != NULL)
1764                        textbox(_("Message"), _("Record in progress"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0);
1765                else if(textbox(_("Really Rename ?"), subfile, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0) == 1)
1766                {
1767                        tmpstr = ostrcat(basename(file), NULL, 0, 0);
1768
1769                        char* search = textinput(_("Rename"), tmpstr);
1770                        free(tmpstr), tmpstr = NULL;
1771
1772                        if(search != NULL)
1773                        {
1774                                dname = ostrcat(file, NULL, 0, 0);
1775                                dname = dirname(dname);
1776                                tmpstr = createpath(dname, search);
1777                                if(file_exist(tmpstr))
1778                                {
1779                                        if(textbox(_("File Exist, Really Rename and Overwrite exist File ?"), search, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0) == 1)
1780                                                overwrite = 1;
1781                                        else
1782                                                overwrite = 0;
1783                                }
1784                                else
1785                                        overwrite = 1;
1786
1787                                if(overwrite == 1)
1788                                {
1789                                        debug(10, "rename %s > %s", file, tmpstr);
1790                                        ret = rename(file, tmpstr);
1791                                        free(tmpstr), tmpstr = NULL;
1792                                        free(dname), dname = NULL;
1793               
1794                                        epgfilename = changefilenameext(file, ".epg");
1795                                        if(file_exist(epgfilename))
1796                                        {
1797                                                tmpstr = ostrcat(basename(epgfilename), NULL, 0, 0);
1798                                                dname = ostrcat(epgfilename, NULL, 0, 0);
1799                                                dname = dirname(dname);
1800                                                searchext = changefilenameext(search, ".epg");
1801                                                tmpstr = createpath(dname, searchext);
1802                                                debug(10, "rename %s > %s", epgfilename, tmpstr);
1803                                                ret = rename(epgfilename, tmpstr);
1804                                                free(tmpstr), tmpstr = NULL;
1805                                                free(dname), dname = NULL;
1806                                        }
1807                                        free(epgfilename); epgfilename = NULL;
1808               
1809                                        epgfilename = changefilenameext(file, ".se");
1810                                        if(file_exist(epgfilename))
1811                                        {
1812                                                tmpstr = ostrcat(basename(epgfilename), NULL, 0, 0);
1813                                                dname = ostrcat(epgfilename, NULL, 0, 0);
1814                                                dname = dirname(dname);
1815                                                searchext = changefilenameext(search, ".se");
1816                                                tmpstr = createpath(dname, searchext);
1817                                                debug(10, "rename %s > %s", epgfilename, tmpstr);
1818                                                ret = rename(epgfilename, tmpstr);
1819                                                free(tmpstr), tmpstr = NULL;
1820                                                free(dname), dname = NULL;
1821                                        }
1822                                        free(epgfilename); epgfilename = NULL;
1823               
1824                                        epgfilename = changefilenameext(file, ".ma");
1825                                        if(file_exist(epgfilename))
1826                                        {
1827                                                tmpstr = ostrcat(basename(epgfilename), NULL, 0, 0);
1828                                                dname = ostrcat(epgfilename, NULL, 0, 0);
1829                                                dname = dirname(dname);
1830                                                searchext = changefilenameext(search, ".ma");
1831                                                tmpstr = createpath(dname, searchext);
1832                                                debug(10, "rename %s > %s", epgfilename, tmpstr);
1833                                                ret = rename(epgfilename, tmpstr);
1834                                                free(tmpstr), tmpstr = NULL;
1835                                                free(dname), dname = NULL;
1836                                        }
1837                                        free(epgfilename); epgfilename = NULL;
1838               
1839                                        epgfilename = changefilenameext(file, ".as");
1840                                        if(file_exist(epgfilename))
1841                                        {
1842                                                tmpstr = ostrcat(basename(epgfilename), NULL, 0, 0);
1843                                                dname = ostrcat(epgfilename, NULL, 0, 0);
1844                                                dname = dirname(dname);
1845                                                searchext = changefilenameext(search, ".as");
1846                                                tmpstr = createpath(dname, searchext);
1847                                                debug(10, "rename %s > %s", epgfilename, tmpstr);
1848                                                ret = rename(epgfilename, tmpstr);
1849                                                free(tmpstr), tmpstr = NULL;
1850                                                free(dname), dname = NULL;
1851                                        }
1852                                        free(epgfilename); epgfilename = NULL;
1853                                }
1854                        }
1855                }
1856//              ret = 1;
1857        }
1858        if(dirrcret == 7)
1859        {
1860                char* dname = NULL;
1861                dname = ostrcat(file, NULL, 0, 0);
1862                dname = dirname(dname);
1863                if(textbox(_("Really Create Folder in ?"), dname, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0) == 1)
1864                {
1865                        tmpstr = ostrcat(basename(file), NULL, 0, 0);
1866
1867                        char* search = textinput(_("Create Folder"), "New Folder");
1868                        free(tmpstr), tmpstr = NULL;
1869
1870                        if(search != NULL)
1871                        {
1872                                tmpstr = createpath(dname, search);
1873                                debug(10, "create %s", tmpstr);
1874                                ret = mkdir(tmpstr, 0777);
1875                        }
1876                }
1877//              ret = 1;
1878        }
1879        return ret;
1880}
1881
1882void playwritevfd(char* file, char* showname)
1883{
1884        char* tmpstr = NULL;
1885
1886        if(showname == NULL)
1887        {
1888                tmpstr = ostrcat(file, NULL, 0, 0);
1889                if(tmpstr != NULL) writevfdmenu(basename(tmpstr));
1890                free(tmpstr); tmpstr = NULL;
1891        }
1892        else
1893                writevfdmenu(showname);
1894}
1895
1896
1897void playstartservice()
1898{
1899        char* tmpstr = NULL;
1900
1901        if(status.aktservice->channel != NULL)
1902        {
1903                tmpstr = ostrcat(status.aktservice->channellist, NULL, 0, 0);
1904                servicecheckret(servicestart(status.aktservice->channel, tmpstr, NULL, 3), 0);
1905        }
1906        else
1907        {
1908                tmpstr = ostrcat(status.lastservice->channellist, NULL, 0, 0);
1909                servicecheckret(servicestart(status.lastservice->channel, tmpstr, NULL, 0), 0);
1910        }
1911        free(tmpstr); tmpstr = NULL;
1912}
1913
1914// flag 0 = dirlist/playing/infobar
1915// flag 1 = playing/infobar
1916// flag 2 = playing
1917// flag 3 = not stop/start live service
1918// flag 4 = playing with screensaver
1919// startfolder 2 = do nothing with playstop/playstart
1920int screenplay(char* startfile, char* showname, int startfolder, int flag)
1921{
1922        int rcret = 0, playertype = 0, ret = 0, rcwait = 1000, screensaver_delay = 0, holdselection = 0, waitofbuffer = 0, videooff = 0;
1923        char* file = NULL, *tmpstr = NULL, *tmpstr1 = NULL;
1924        char* tmppolicy = NULL, *startdir = NULL;
1925        char* formats = NULL;
1926        struct channel* pipchannel = NULL;
1927        struct skin* playinfobar = getscreen("playinfobar");
1928        struct skin* sprogress = getscreennode(playinfobar, "progress");
1929        struct skin* load = getscreen("loading");
1930        struct skin* blackscreen = getscreen("blackscreen");
1931
1932        int oldsort = getconfigint("dirsort", NULL);
1933        int skip13 = getconfigint("skip13", NULL);
1934        int skip46 = getconfigint("skip46", NULL);
1935        int skip79 = getconfigint("skip79", NULL);
1936
1937        resettvpic();
1938
1939        if((startfolder == 0 && flag != 3) || (startfolder == 2 && getconfigint("tithek_delservice", NULL) == 0))
1940        {
1941                rcret = servicestop(status.aktservice, 1, 1);
1942                if(rcret == 1) return ret;
1943        }
1944
1945        if(status.webplayfile != NULL)
1946        {
1947                // stream over tithek enable start
1948                printf("startfile: %s\n", status.webplayfile);
1949                struct skin* tithekplugin = getplugin("Titan Mediathek");
1950                if(tithekplugin != NULL)
1951                {
1952                        struct tithek* (*startplugin)(char*);
1953
1954                        startplugin = dlsym(tithekplugin->pluginhandle, "list_hoster_streams");
1955                        if(startplugin != NULL)
1956                        {
1957                                startfile = (char*)startplugin(status.webplayfile);
1958                                printf("startfile changed: %s\n", startfile);
1959                        }
1960                }
1961                else
1962                        startfile = status.webplayfile;
1963
1964                // stream over tithek enable end
1965
1966                rcret = servicestop(status.aktservice, 1, 1);
1967                if(rcret == 1) return ret;
1968        }
1969
1970        // allowed from atemio avi mkv mpg4 xvid mpg1 mpg2 jpeg png
1971        if(startfolder == 1)
1972                formats = ostrcat(formats, ".ts", 1, 0);
1973        else if(file_exist("/mnt/swapextensions/etc/.codecpack") || file_exist("/var/swap/etc/.codecpack") || file_exist("/var/etc/.codecpack"))
1974                formats = ostrcat(formats, "aac .avi .mkv .mp4 .ts .mov .flv .flac .mp3 .mpg .m2ts .vob .evo .wmv .wma .asf .mp2 .m4v .m4a .fla .divx .dat .mpeg .trp .mts .vdr .ogg .wav .wtv .asx .mvi .png .jpg .jpeg .ra .ram .rm .3gp .amr .rmvb .rm .webm .opus .m3u8 .mpd", 1, 0);
1975        else
1976                formats = ostrcat(formats, ".avi .mkv .mpg .mpeg .ts .mp3 .flac .ogg", 1, 0);
1977       
1978        status.updatevfd = PAUSE;
1979        tmppolicy = getpolicy();
1980
1981playerstart:
1982        //reset timeline
1983        sprogress->progresssize = 0;
1984
1985        if(startfolder == 0)
1986                startdir = getconfig("rec_moviepath", NULL);
1987        else
1988                startdir = getconfig("rec_path", NULL);
1989
1990        status.playspeed = 0, status.play = 0, status.pause = 0, status.slowspeed = 0;
1991        int playinfobarcount = 0, playinfobarstatus = 1, dirrcret = 0;
1992
1993        if(startfile == NULL)
1994        {
1995                readmediadb(getconfig("mediadbfile", NULL), 0, 0);
1996
1997                tmpstr = ostrcat(file, NULL, 0, 0);
1998                char* tmpstartdir = startdir;
1999                if(file != NULL)
2000                {
2001                        tmpstr1 = ostrcat(file, NULL, 0, 0);
2002                        startdir = dirname(tmpstr1);
2003                }
2004                free(file); file = NULL;
2005                file = screendirreal(startdir, formats, basename(tmpstr), &dirrcret, ".epg", _("DEL"), getrcconfigint("rcred", NULL), _("SELECT"), 0, _("EPG"), getrcconfigint("rcyellow", NULL), _("SORT"), getrcconfigint("rcblue", NULL), 90, 1, 90, 1, holdselection, 64);
2006                holdselection = 0;
2007                free(tmpstr); tmpstr = NULL;
2008                free(tmpstr1); tmpstr1 = NULL;
2009                startdir = tmpstartdir;
2010        }
2011        else
2012                file = ostrcat(startfile, NULL, 0, 0);
2013
2014        if(file == NULL)
2015        {
2016                if(playcheckdirrcret(file, dirrcret) == 1)
2017                        goto playerstart;
2018        }
2019
2020        if(file != NULL)
2021        {
2022//              if(cmpfilenameext(file, ".ts") == 0)
2023        if(getconfigint("playertype", NULL) == 1 && (cmpfilenameext(file, ".ts") == 0 || cmpfilenameext(file, ".mts") == 0 || cmpfilenameext(file, ".m2ts") == 0))
2024                {
2025                        playertype = 1;
2026                        addconfig("lastplayertype", "1");
2027                }
2028                else
2029                        addconfig("lastplayertype", "0");       
2030
2031                if(startfile == NULL)
2032                {
2033                        tmpstr = ostrcat(file, NULL, 0, 0);
2034                        if(tmpstr != NULL && startfolder == 0) addconfig("rec_moviepath", dirname(tmpstr));
2035                        free(tmpstr); tmpstr = NULL;
2036               
2037                        if(playcheckdirrcret(file, dirrcret) == 1)
2038                        {
2039                                if(dirrcret == 1) holdselection = 1;
2040                                goto playerstart;
2041                        }
2042
2043                        if(startfolder == 1 && flag != 3)
2044                        {
2045                                rcret = servicestop(status.aktservice, 1, 1);
2046                                if(rcret == 1)
2047                                {
2048                                        free(tmppolicy);
2049                                        free(file);
2050                                        free(formats);
2051                                        addconfigint("dirsort", oldsort);
2052                                        return ret;
2053                                }
2054                        }
2055                }
2056
2057                drawscreen(skin, 0, 0);
2058                drawscreen(load, 0, 0);
2059                playwritevfd(file, showname);
2060                printf("player--> playertype: %i\n", playertype);
2061
2062                if(playertype == 1)
2063                        rcret = playerstartts(file, 0);
2064                else if(playertype == 2)
2065                        rcret = playerstart(file);
2066                else
2067                {
2068#if defined (EXTGST)
2069                        if(getconfigint("extplayer_type", NULL) == 0)
2070                        {
2071#endif
2072        #ifdef EPLAYER3
2073                                if(ostrstr(file, "http://") == file || ostrstr(file, "https://") == file)
2074                                {
2075                                        struct stimerthread* bufferstatus = addtimer(&screenplaybufferstatus, START, 1000, 1, NULL, NULL, NULL);
2076                                        rcret = playerstart(file);
2077                                        if(bufferstatus != NULL && gettimer(bufferstatus) != NULL)
2078                                        {
2079                                                bufferstatus->aktion = STOP;
2080                                                usleep(100000);
2081                                        }
2082                                }
2083                                else
2084                                        rcret = playerstart(file);
2085        #else
2086                                rcret = playerstart(file);
2087        #endif
2088#if defined (EXTGST)
2089                        }
2090                        else
2091                                rcret = playerstart(file);
2092#endif
2093                }
2094
2095#ifndef SIMULATE
2096                if(rcret != 0)
2097                {
2098                        textbox(_("Message"), _("Can't start playback !"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 600, 200, 7, 0);
2099                        writevfdmenu("Player");
2100                       
2101                        if(startfile == NULL)
2102                        {
2103                                if(startfolder == 1 && flag != 3) playstartservice();
2104                                goto playerstart;
2105                        }
2106                        else
2107                        {
2108                                ret = 2;
2109                                goto playerend;
2110                        }
2111                }
2112#endif
2113                if(playertype == 0 && getconfigint("showlastpos", NULL) == 1 && status.actplaypts != NULL && file_exist(status.actplaypts))
2114                {
2115                        FILE* fbseek = fopen(status.actplaypts, "r");
2116                        if(fbseek != NULL)
2117                        {
2118                                if(textbox(_("Message"), _("Start at last position ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 5, 0) == 1)
2119                                {
2120                                        char* skip1 = calloc(1, 20);
2121                                        if(skip1 != NULL)
2122                                        {
2123                                                fscanf(fbseek,"%s",skip1);
2124                                                playrcjumpf(file, showname, atoll(skip1), &playinfobarstatus, &playinfobarcount, playertype, flag);
2125
2126                                        }
2127                                        free(skip1), skip1 = NULL;
2128                                }
2129                                fclose(fbseek);
2130                        }
2131                }
2132
2133                clearscreen(load);
2134                if(status.prefillbuffer == 0)
2135                        screenplayinfobar(file, showname, 0, playertype, flag);
2136                else
2137                        waitofbuffer = 1;
2138               
2139                if(flag == 4 && getconfigint("screensaver", NULL) == 1)
2140                {
2141                        screensaver_delay = getconfigint("screensaver_delay", NULL);
2142                        initscreensaver();
2143                }                                                               
2144               
2145                //change codec if ac3default and video has ac3
2146                //deaktivate, freeze player, makes a seek -5
2147                //see eplayer container_ffmpeg_switch_audio
2148                //the seek to the beginning of the file freez
2149                //eplayer.
2150                //playchangecodec();
2151                free(status.playfile); status.playfile = NULL;
2152                status.playfile = ostrcat(file, NULL, 0, 0);
2153                status.play = 1;
2154                int count = 0;
2155                while(1)
2156                {
2157                        while((playertype == 0 && playerisplaying()) || (playertype == 1 && playerisplayingts()))
2158                        {
2159                                rcret = waitrc(playinfobar, rcwait, 0);
2160#if defined (EXTGST)
2161                                if(getconfigint("extplayer_type", NULL) == 1)
2162                                {
2163#endif
2164        #ifdef EPLAYER4
2165                                        debug(150, "waitofbuffer=%d status.cleaninfobar=%d status.prefillbuffer=%d status.prefillbuffercount=%d playinfobarstatus=%d playinfobarcount=%d",waitofbuffer , status.cleaninfobar, status.prefillbuffer, status.prefillbuffercount, playinfobarstatus, playinfobarcount);
2166
2167                                        if(waitofbuffer == 1 && status.prefillbuffer == 0 && (status.cleaninfobar == 1 || status.prefillbuffercount == 200))
2168                                        {
2169                                                drawscreen(skin, 0, 0);
2170                                                if(videooff == 0) screenplayinfobar(file, showname, 0, playertype, flag);
2171                                                waitofbuffer = 0;
2172                                                status.cleaninfobar = 0;                               
2173                                        }
2174                                        else if(waitofbuffer == 0 && status.prefillbuffer == 0 && (status.cleaninfobar == 0 || status.prefillbuffercount == 200))
2175                                        {
2176                                                playinfobarcount++;
2177                                                if(playinfobarstatus > 0)
2178                                                        if(videooff == 0) screenplayinfobar(file, showname, 0, playertype, flag);
2179                                                if(playinfobarstatus == 1 && playinfobarcount >= getconfigint("infobartimeout", NULL))
2180                                                {
2181                                                        playinfobarstatus = 0;
2182                                                        if(videooff == 0) screenplayinfobar(NULL, NULL, 1, playertype, flag);
2183                                                        status.writeplayersub = 1;
2184                                                }
2185                                        }
2186        #else
2187        #ifdef EXTEPLAYER3
2188                                        getsubtext();
2189        #endif
2190                                        playinfobarcount++;
2191                                        if(playinfobarstatus > 0)
2192                                                if(videooff == 0) screenplayinfobar(file, showname, 0, playertype, flag);
2193                                        if(playinfobarstatus == 1 && playinfobarcount >= getconfigint("infobartimeout", NULL))
2194                                        {
2195                                                playinfobarstatus = 0;
2196                                                if(videooff == 0) screenplayinfobar(NULL, NULL, 1, playertype, flag);
2197                                                status.writeplayersub = 1;
2198                                        }
2199
2200                                        if(waitofbuffer == 1 && status.prefillbuffer == 0)
2201                                        {
2202                                                if(videooff == 0) screenplayinfobar(file, showname, 0, playertype, flag);
2203                                                waitofbuffer = 0;
2204                                        }
2205        #endif
2206#if defined (EXTGST)
2207                                }
2208                                else
2209                                {
2210        #ifdef EXTEPLAYER3
2211                                        getsubtext();
2212        #endif
2213                                        playinfobarcount++;
2214                                        if(playinfobarstatus > 0)
2215                                                if(videooff == 0) screenplayinfobar(file, showname, 0, playertype, flag);
2216                                        if(playinfobarstatus == 1 && playinfobarcount >= getconfigint("infobartimeout", NULL))
2217                                        {
2218                                                playinfobarstatus = 0;
2219                                                if(videooff == 0) screenplayinfobar(NULL, NULL, 1, playertype, flag);
2220                                                status.writeplayersub = 1;
2221                                        }
2222
2223                                        if(waitofbuffer == 1 && status.prefillbuffer == 0)
2224                                        {
2225                                                if(videooff == 0) screenplayinfobar(file, showname, 0, playertype, flag);
2226                                                waitofbuffer = 0;
2227                                        }
2228                                }
2229#endif
2230                                if(flag == 4)
2231                                {
2232                                        if(status.play == 1 && screensaver != NULL)
2233                                                count++;
2234       
2235                                        if(count > screensaver_delay && screensaver != NULL)
2236                                        {
2237                                                showscreensaver();
2238#if defined (EXTGST)
2239                                                if(getconfigint("extplayer_type", NULL) == 1)
2240                                                {
2241#endif
2242
2243        #ifdef EPLAYER4
2244                                                        if(screensaver->speed < 50)
2245                                                                rcwait = screensaver->speed * 10;
2246                                                        else
2247                                                                rcwait = screensaver->speed;
2248        #else
2249                                                        rcwait = screensaver->speed;
2250        #endif
2251#if defined (EXTGST)
2252                                                }
2253#endif
2254
2255                                        }
2256                                }
2257
2258#if defined (EXTGST)
2259                                if(getconfigint("extplayer_type", NULL) == 0)
2260                                {
2261#endif
2262        #ifdef EXTEPLAYER3
2263        //                              if(rcret == getrcconfigint("rchelp", NULL))
2264        //                                      printf("getsubtext: %s\n", getsubtext());
2265        #endif
2266#if defined (EXTGST)
2267                                }
2268#endif
2269
2270                                if(rcret == getrcconfigint("rcpip", NULL))
2271                                {
2272                                        if(status.pipservice->videodev == NULL)
2273                                        {
2274                                                pipchannel = status.lastservice->channel;
2275                                                printf("++++ RC: %i\n",pipstart(pipchannel, NULL, 0));
2276                                        }
2277                                        else
2278                                        {
2279                                                pipstop(status.pipservice, 0);
2280                                                pipchannel = NULL;
2281                                        }
2282                                }                               
2283                               
2284                                if(rcret == getrcconfigint("rcyellow", NULL))
2285                                        playrcyellow(file, showname, playinfobarstatus, playertype, flag);
2286                               
2287                                if(rcret == getrcconfigint("rctext", NULL) || rcret == getrcconfigint("rcsubtitel", NULL))
2288                                        playrctext(file, showname, playinfobarstatus, playertype, flag);
2289                                       
2290                                if(rcret == getrcconfigint("rcgreen", NULL))
2291                                        playrcgreen(file, showname, playinfobarstatus, playertype, flag);
2292                                       
2293                                if(rcret == getrcconfigint("rcblue", NULL))
2294                                        playrcblue(file, showname, playinfobarstatus, playertype, flag);
2295                                       
2296                                if(rcret == getrcconfigint("rcok", NULL))
2297                                        playrcok(file, showname, playinfobarstatus, playertype, flag);
2298                               
2299                                if(rcret == getrcconfigint("rcred", NULL))
2300                                        playrcred(file, showname, NULL, NULL, playinfobarstatus, playertype, flag);
2301
2302                                if(rcret == getrcconfigint("rcinfo", NULL))
2303                                        playrcinfo(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
2304
2305                                if(rcret == getrcconfigint("rcpower", NULL) && status.play == 1 && videooff == 0)
2306                                {
2307                                        videooff = 1;
2308                                        drawscreen(blackscreen, 0, 0);
2309                                }
2310                                else if(rcret == getrcconfigint("rcexit", NULL) && videooff == 1)
2311                                {
2312                                        videooff = 0;
2313                                        drawscreen(skin, 0, 0);
2314                                }
2315                                else if(rcret == getrcconfigint("rcstop", NULL) || rcret == getrcconfigint("rcexit", NULL))
2316                                {
2317                                        if(status.prefillbuffer == 1)
2318                                        {
2319                                                status.prefillbuffer = 2;
2320                                                continue;
2321                                        }
2322
2323                                        if(playertype == 0 && getconfigint("showlastpos", NULL) == 1 && status.actplaypts != NULL && status.play == 1)
2324                                        {
2325                                                FILE* fbseek = fopen(status.actplaypts, "w");
2326                                                if(fbseek != NULL)
2327                                                {
2328                                                        off64_t pos = playergetpts() / 90000;
2329                                                        fprintf(fbseek,"%lld", pos);
2330                                                        fclose(fbseek);
2331                                                }
2332                                        }
2333
2334                                        playrcstop(playertype, flag);
2335                                        if(startfile == NULL)
2336                                        {                                               
2337                                                if(startfolder == 1 && flag != 3) playstartservice();
2338                                                goto playerstart;
2339                                        }
2340                                        else
2341                                        {
2342                                                ret = 1;
2343                                                goto playerend;
2344                                        }
2345                                }
2346                               
2347                                if(rcret == getrcconfigint("rcsf", NULL))
2348                                        playrcsf(file, showname, &playinfobarstatus, &playinfobarcount, playertype, 0, flag);
2349         
2350                        if(rcret == getrcconfigint("rcsr", NULL))
2351                                        playrcsr(file, showname, &playinfobarstatus, &playinfobarcount, playertype, 0, flag);
2352
2353                                if(rcret == getrcconfigint("rcff", NULL))
2354                                        playrcff(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
2355                               
2356                                if(rcret == getrcconfigint("rcfr", NULL))
2357                                        playrcfr(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
2358
2359                                if(rcret == getrcconfigint("rcpause", NULL) || ((checkbox("DM7020HD") == 1 || checkbox("DM7020HDV2") == 1 || checkbox("DM900") == 1 || checkbox("DM920") == 1 || checkbox("DM520") == 1 || checkbox("DM525") == 1 || checkbox("ATEMIO520") == 1 || checkbox("ATEMIO530") == 1) && rcret == getrcconfigint("rcplay", NULL) && status.pause == 0 && status.slowspeed == 0 && status.playspeed == 0 && ostrcmp(getconfig("remotecontrol", NULL), "0") == 0))
2360                                {       
2361                                        playrcpause(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
2362                                        continue;
2363                                }
2364
2365                                if(rcret == getrcconfigint("rcplay", NULL))
2366                                        playrcplay(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
2367
2368                                if(rcret == getrcconfigint("rcleft", NULL))
2369                                        playrcjumpr(file, showname, 60, &playinfobarstatus, &playinfobarcount, playertype, flag);
2370                               
2371                                if(rcret == getrcconfigint("rc1", NULL))
2372                                        playrcjumpr(file, showname, skip13, &playinfobarstatus, &playinfobarcount, playertype, flag);
2373                               
2374                                if(rcret == getrcconfigint("rc4", NULL))
2375                                        playrcjumpr(file, showname, skip46, &playinfobarstatus, &playinfobarcount, playertype, flag);
2376                               
2377                                if(rcret == getrcconfigint("rc7", NULL))
2378                                        playrcjumpr(file, showname, skip79, &playinfobarstatus, &playinfobarcount, playertype, flag);
2379
2380                                if(rcret == getrcconfigint("rc2", NULL))
2381                                        playrcjumpto(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
2382                               
2383                                if(rcret == getrcconfigint("rcright", NULL))
2384                                        playrcjumpf(file, showname, 60, &playinfobarstatus, &playinfobarcount, playertype, flag);
2385                               
2386                                if(rcret == getrcconfigint("rc3", NULL))
2387                                        playrcjumpf(file, showname, skip13, &playinfobarstatus, &playinfobarcount, playertype, flag);
2388                               
2389                                if(rcret == getrcconfigint("rc6", NULL))
2390                                        playrcjumpf(file, showname, skip46, &playinfobarstatus, &playinfobarcount, playertype, flag);
2391                               
2392                                if(rcret == getrcconfigint("rc9", NULL))
2393                                        playrcjumpf(file, showname, skip79, &playinfobarstatus, &playinfobarcount, playertype, flag);
2394
2395                                if(rcret == getrcconfigint("rcdown", NULL))
2396                                        playrcjumpr(file, showname, 300, &playinfobarstatus, &playinfobarcount, playertype, flag);
2397
2398                                if(rcret == getrcconfigint("rcup", NULL))
2399                                        playrcjumpf(file, showname, 300, &playinfobarstatus, &playinfobarcount, playertype, flag);
2400                               
2401                                if(rcret == getrcconfigint("rc0", NULL))
2402                                        setmarker();
2403                                       
2404                                if(rcret == getrcconfigint("rc5", NULL))
2405                                        screenmarker(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
2406                               
2407                                if(rcret == getrcconfigint("rcmenu", NULL)) {
2408                                        char* asfile = changefilenameext(file, ".as");
2409                                        if(status.autoseek == 0) {
2410                                                status.autoseek = 1;
2411                                                textbox(_("Message"), _("Marker autoseek is started"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 600, 200, 10, 0);
2412                                                addtimer(&markerautoseek_thread, START, 10000, 1, NULL, NULL, NULL);
2413                                                FILE* testseek = fopen(asfile, "w");
2414                                                if(testseek != NULL)
2415                                                {
2416                                                        fprintf(testseek,"autoseek is started\n");
2417                                                        fclose(testseek);
2418                                                }
2419                                        }
2420                                        else {
2421                                                status.autoseek = 0;
2422                                                textbox(_("Message"), _("Marker autoseek is stopped"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 600, 200, 10, 0);
2423                                                unlink(asfile);
2424                                        }
2425                                        free(asfile); asfile = NULL;
2426                                }
2427                        }
2428                        //don't change this sleep, without this
2429                        //the player stops to fast, and a last seek can
2430                        //produce a segfault
2431                       
2432                        if(status.repeat == 1)
2433                                goto playerstart;
2434
2435                        if(playertype == 0 && getconfigint("showlastpos", NULL) == 1 && status.actplaypts != NULL && file_exist(status.actplaypts) && status.play == 1)
2436                                unlink(status.actplaypts);
2437
2438playerend:
2439                        sleep(1);
2440                        if(playertype == 1)
2441                                playerafterendts();
2442                        else
2443                                playerafterend();
2444
2445                        writevfdmenu("Player");
2446                        screenplayinfobar(file, showname, 1, playertype, flag);
2447
2448                        if(startfile == NULL)
2449                        {
2450                                if(startfolder == 1 && flag != 3) playstartservice();
2451                                goto playerstart;
2452                        }
2453                        else
2454                                break;
2455                }
2456        }
2457        if(startfolder == 0 && flag != 3) playstartservice();
2458        status.updatevfd = START;
2459       
2460        if(status.webplayfile != NULL)
2461        {
2462                playstartservice();
2463                free(status.webplayfile); status.webplayfile = NULL;
2464        }
2465
2466        if(tmppolicy != NULL)
2467        {
2468                setpolicy(tmppolicy);
2469                free(tmppolicy);
2470        }
2471       
2472        if(flag == 4)
2473                deinitscreensaver();
2474
2475        addconfigint("dirsort", oldsort);
2476        free(status.playfile); status.playfile = NULL;
2477        status.slowspeed = 0;
2478        status.playspeed = 0;
2479        status.pause = 0;
2480        status.play = 0;
2481        free(file);
2482        free(formats);
2483
2484        if(status.mediadbthread == NULL)
2485        {
2486                if(status.writemediadb == 1)
2487                        writemediadb(getconfig("mediadbfile", NULL), NULL);
2488                freemediadb(0);
2489        }
2490
2491        return ret;
2492}
2493
2494void streamplayer(struct channel* chnode, int flag)
2495{
2496    char* newkey = NULL, *oldkey = NULL;
2497    printf("streamplayer playerstart%d name: %s\n", flag, chnode->name);
2498    printf("streamplayer playerstart%d streamurl: %s\n", flag, chnode->streamurl);
2499    printf("streamplayer playerstart%d epgurl: %s\n", flag, chnode->epgurl);
2500    addconfigtmp("playerbuffersize", "0");
2501    addconfigtmp("playerbufferseektime", "0");
2502//    if(/*status.play != 2 && getconfigint("lastplayertype", NULL) == 0 && */checkbox("DM900") == 1)
2503//    sleep(4); //woraround EPG
2504    servicestop(status.aktservice, 1, 5);
2505    printf("for console test add streamplayer_use_console=1 to titan.cfg\n");
2506
2507    if(getconfigint("tithek_servicebouquets_autoupdate", NULL) == 1)
2508    {
2509        if(ostrstr(chnode->streamurl, "vavoo_auth=") != NULL)
2510        {
2511            if(file_exist("/tmp/vavoo.authkey"))
2512            {
2513                oldkey = string_resub("vavoo_auth=", "|User-Agent", chnode->streamurl, 0);
2514                debug(202, "oldkey: %s", oldkey);
2515                newkey = readfiletomem("/tmp/vavoo.authkey", 0);
2516                debug(202, "newkey: %s", newkey);
2517                if(ostrcmp(newkey, oldkey) != 0)
2518                {
2519                    printf("streamplayer playerstart%d set new VaVoo Key\n", flag);
2520                    debug(202, "set newkey: %s", newkey);
2521                    chnode->streamurl = string_replace(oldkey, newkey, chnode->streamurl, 1);
2522                }
2523                free(newkey), newkey = NULL;
2524                free(oldkey), oldkey = NULL;
2525            }
2526        }
2527    }
2528
2529        if(getconfigint("streamplayer_use_console", NULL) == 1)
2530        {
2531            printf("console test:\n");
2532                printf("gst-launch playbin uri=%s\n", chnode->streamurl);
2533                printf("gstplayer %s\n", chnode->streamurl);
2534                printf("eplayer3 %s\n", chnode->streamurl);
2535                printf("exteplayer3 %s\n", chnode->streamurl);
2536        }
2537        else
2538        {
2539                playerstart(chnode->streamurl);
2540#ifdef DREAMBOX
2541        if(getconfigint("extplayer_type", NULL) == 1)
2542        {
2543                playerpause();
2544            usleep(1000000);
2545            playercontinue();
2546        }
2547#endif
2548        }
2549
2550    status.play = 2;
2551    delconfigtmp("playerbuffersize");
2552    delconfigtmp("playerbufferseektime");
2553}
2554
2555#endif
Note: See TracBrowser for help on using the repository browser.