source: titan/titan/play.h @ 24079

Last change on this file since 24079 was 24079, checked in by nit, 9 years ago

fix

File size: 42.8 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
73        if(checkbit(status.playercan, 14) == 0) return;
74
75        if((flag == 2) || (flag == 3))
76        {
77                return;
78        }
79        struct skin* playinfobar = getscreen("playinfobar");
80        struct skin* playinfobarpic = getscreen("playinfobarpic");
81        if(mode == 1)
82        {
83                clearscreen(playinfobar);
84                clearscreen(playinfobarpic);
85                drawscreen(skin, 0, 0);
86                return;
87        }
88
89        struct skin* title = getscreennode(playinfobar, "title");
90        struct skin* spos = getscreennode(playinfobar, "pos");
91        struct skin* slen = getscreennode(playinfobar, "len");
92        struct skin* sreverse = getscreennode(playinfobar, "reverse");
93        struct skin* sprogress = getscreennode(playinfobar, "progress");
94        char* tmpstr = NULL;
95        unsigned long long pos = 0, len = 0, reverse = 0;
96
97        // show thumb cover start
98        struct skin* playinfobarcover = getscreen("playinfobarcover");
99        struct skin* cover = getscreennode(playinfobarcover, "cover");
100        cover->hidden = YES;
101        if(file != NULL)
102        {
103                struct mediadb* node = NULL;
104                char* dname = ostrcat(file, NULL, 0, 0);
105                dname = dirname(dname);
106                node = getmediadb(dname, basename(file), 0);
107                free(dname); dname = NULL;
108               
109                if(node != NULL)
110                {
111                        if(ostrncmp("tt", node->id, 2) == 0)
112                        {
113                                tmpstr = ostrcat(tmpstr, getconfig("mediadbpath", NULL), 1, 0);
114                                tmpstr = ostrcat(tmpstr, "/", 1, 0);
115                                tmpstr = ostrcat(tmpstr, node->id, 1, 0);
116                                tmpstr = ostrcat(tmpstr, "_poster.jpg", 0, 0);
117                                if(file_exist(tmpstr))
118                                {
119                                        changepic(cover, tmpstr);
120                                        cover->hidden = NO;
121                                }
122                                free(tmpstr), tmpstr = NULL;
123                        }
124                }
125        }
126        // show thumb cover end
127
128        if(showname == NULL)
129        {
130                tmpstr = ostrcat(file, NULL, 0, 0);
131                if(tmpstr != NULL) changetext(title, basename(tmpstr));
132                free(tmpstr); tmpstr = NULL;
133        }
134        else
135                changetext(title, showname);
136
137        if(playertype == 1)
138        {
139                int ret = 0;
140                unsigned long long startpos = 0;
141                if(flag == 4)
142                        ret = playergetinfots(&len, &startpos, NULL, &pos, NULL, 1);
143                else if(flag == 5)
144                        ret = playergetinfots(&len, &startpos, NULL, &pos, NULL, 2);
145                else
146                        ret = playergetinfots(&len, &startpos, NULL, &pos, NULL, 0);
147                len = len / 90000;
148                pos = (pos - startpos) / 90000;
149                if(ret != 0) change = 0;
150        }
151        else if(playertype == 2)
152        {
153                pos = dvdgetpts() / 90000;
154                len = dvdgetlength();
155        }
156        else
157        {
158                pos = playergetpts() / 90000;
159                len = playergetlength();
160        }
161        if(pos < 0) pos = 0;
162        reverse = len - pos;
163
164        if(change == 1)
165        {
166                if(len == 0)
167                        sprogress->progresssize = 0;
168                else
169                        sprogress->progresssize = pos * 100 / len;
170        }
171
172        tmpstr = convert_timesec(pos);
173        changetext(spos, tmpstr);
174        free(tmpstr); tmpstr = NULL;
175
176        tmpstr = convert_timesec(len);
177        changetext(slen, tmpstr);
178        free(tmpstr); tmpstr = NULL;
179
180        tmpstr = convert_timesec(reverse);
181        changetext(sreverse, tmpstr);
182        free(tmpstr); tmpstr = NULL;
183
184        drawscreen(playinfobar, 0, 0);
185        drawscreen(playinfobarpic, 0, 0);
186        drawscreen(playinfobarcover, 0, 0);
187}
188
189int checktrackname(char* text)
190{
191        int ret = -1;
192        if(text == NULL) return -1;
193       
194        ret = atoi(text);
195        if(ret == 0 && text[0] != '0') return -1;
196       
197        return ret;
198}
199
200void screenplaytracklist(int mode, int playertype, int flag)
201{
202        //mode 1 = audiotracks
203        //mode 2 = subtitle tracks
204
205        if(mode == 1 && checkbit(status.playercan, 1) == 0) return;
206        if(mode == 2 && checkbit(status.playercan, 2) == 0) return;
207
208        if(playertype == 1)
209        {
210                screenplayinfobar(NULL, NULL, 1, playertype, flag);
211                if(mode == 1)
212                        playerchangeaudiotrackts();
213                else if(mode == 2)
214                        playerchangesubtitletrackts();
215                blitfb(0);
216                return;
217        }
218
219        int i = 0;
220        int rcret = 0, curtrackid = 0;
221        struct skin* track = NULL;
222        if(mode == 1)
223                track = getscreen("audiotrack");
224        else if(mode == 2)
225                track = getscreen("subtitle");
226        struct skin* listbox = getscreennode(track, "listbox");
227        struct skin* tmp = NULL;
228        char** tracklist = NULL;
229        char* curtrackencoding = NULL, *curtrackname = NULL;
230        char* tmpstr = NULL;
231
232        playergetcurtrac(mode, &curtrackid, &curtrackencoding, &curtrackname);
233        tracklist = playergettracklist(mode);
234
235        if(tracklist != NULL)
236        {
237                while(tracklist[i] != NULL)
238                {
239                        tmp = addlistbox(track, listbox, tmp, 1);
240                        if(tmp != NULL)
241                        {
242                                if(ostrcmp(tracklist[i], "und") == 0)
243                                        tmpstr = ostrcat(tmpstr, _("undefined"), 1, 0);
244                                else
245                                        tmpstr = ostrcat(tmpstr, _(tracklist[i]), 1, 0);
246                                tmpstr = ostrcat(tmpstr, " (", 1, 0);
247                                tmpstr = ostrcat(tmpstr, tracklist[i + 1], 1, 0);
248                                tmpstr = ostrcat(tmpstr, ")", 1, 0);
249                                changetext(tmp, tmpstr);
250                                free(tmpstr); tmpstr = NULL;
251                                tmp->type = CHOICEBOX;
252                                tmp->del = 1;
253                                if(checktrackname(tracklist[i]) > -1)
254                                        tmp->handle = (char*)checktrackname(tracklist[i]);
255                                else
256                                        tmp->handle = (char*)(i / 2);
257
258                                if((ostrcmp(curtrackname, tracklist[i]) == 0 && ostrcmp(curtrackencoding, tracklist[i + 1]) == 0) || curtrackid == checktrackname(tracklist[i]))
259                                {
260                                        if(checktrackname(curtrackname) > -1)
261                                                tmp->handle1 = (char*)atoi(curtrackname);
262                                        else
263                                                tmp->handle1 = (char*)(i / 2);
264                                        changeinput(tmp, _("running"));
265                                }
266                                else
267                                        changeinput(tmp, "");
268                        }
269                        i += 2;
270                }
271        }
272
273        free(curtrackencoding); curtrackencoding = NULL;
274        free(curtrackname); curtrackname = NULL;
275        playerfreetracklist(tracklist);
276        tracklist = NULL;
277
278        listbox->aktline = 1;
279        listbox->aktpage = -1;
280
281        screenplayinfobar(NULL, NULL, 1, playertype, flag);
282        drawscreen(track, 0, 0);
283        addscreenrc(track, listbox);
284
285        while(1)
286        {
287                rcret = waitrc(track, 0, 0);
288
289                if(rcret == getrcconfigint("rcexit", NULL)) break;
290                if(rcret == getrcconfigint("rcok", NULL))
291                {
292                        if(listbox->select != NULL)
293                        {
294                                if(mode == 1)
295                                        playerchangeaudiotrack((int)listbox->select->handle);
296                                else if(mode == 2)
297                                {
298                                        if(listbox->select->handle1 != NULL)
299                                                playerstopsubtitletrack();
300                                        else   
301                                                playerchangesubtitletrack((int)listbox->select->handle);
302                                }
303                        }
304                        break;
305                }
306        }
307
308        delmarkedscreennodes(track, 1);
309        delownerrc(track);
310        clearscreen(track);
311        blitfb(0);
312}
313
314void playrcyellow(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
315{
316//      if(checkbit(status.playercan, 1) == 0) return;
317
318        screenplaytracklist(1, playertype, flag);
319        if(playinfobarstatus > 0)
320                screenplayinfobar(file, showname, 0, playertype, flag);
321}
322
323void playrctext(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
324{
325//      if(checkbit(status.playercan, 2) == 0) return;
326
327        screenplaytracklist(2, playertype, flag);
328        if(playinfobarstatus > 0)
329                screenplayinfobar(file, showname, 0, playertype, flag);
330}
331
332void playrcgreen(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
333{
334//      if(checkbit(status.playercan, 3) == 0) return;
335
336        screenplayinfobar(file, showname, 1, playertype, flag);
337        if(playertype == 2)
338                screenvideomode(2);
339        else
340                screenvideomode(1);
341        drawscreen(skin, 0, 0);
342        if(playinfobarstatus > 0)
343                screenplayinfobar(file, showname, 0, playertype, flag);
344}
345
346void playrcblue(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
347{
348        if(checkbit(status.playercan, 4) == 0) return;
349
350        screenplayinfobar(file, showname, 1, playertype, flag);
351        screenpowerofftimer();
352        drawscreen(skin, 0, 0);
353        if(playinfobarstatus > 0)
354                screenplayinfobar(file, showname, 0, playertype, flag);
355}
356
357void playrcok(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
358{
359//      if(checkbit(status.playercan, 0) == 0) return;
360
361        free(status.playfile); status.playfile = NULL;
362        status.playfile = ostrcat(file, NULL, 0, 0);
363        screenplaypolicy(file, 1);
364        drawscreen(skin, 0, 0);
365        if(playinfobarstatus > 0)
366                screenplayinfobar(file, showname, 0, playertype, flag);
367}
368
369void id3tag_info(char* file)
370{
371        char* tmpstr = NULL;
372
373        if(file == NULL) return;
374        if(!filelistflt(".mp3 .flac .ogg .wma .ra .wav", file))
375        {
376                struct id3tag* id3tag = NULL;
377                int hash = gethash(file);
378                char* tmphash = olutoa(hash);
379                               
380                id3tag = getid3(file, tmphash, 1);
381                free(tmphash); tmphash = NULL;
382       
383                if(id3tag != NULL)
384                {
385                        tmpstr = ostrcat(tmpstr, _("Title:"), 1, 0);
386                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
387                        tmpstr = ostrcat(tmpstr, id3tag->title, 1, 0);
388                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
389                       
390                        tmpstr = ostrcat(tmpstr, _("Artist:"), 1, 0);
391                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
392                        tmpstr = ostrcat(tmpstr, id3tag->artist, 1, 0);
393                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
394                       
395                        tmpstr = ostrcat(tmpstr, _("Album:"), 1, 0);
396                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
397                        tmpstr = ostrcat(tmpstr, id3tag->album, 1, 0);
398                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
399                       
400                        tmpstr = ostrcat(tmpstr, _("Year:"), 1, 0);
401                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
402                        tmpstr = ostrcat(tmpstr, id3tag->year, 1, 0);
403                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
404               
405                        tmpstr = ostrcat(tmpstr, _("Genre:"), 1, 0);
406                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
407                        tmpstr = ostrcat(tmpstr, id3tag->genretext, 1, 0);
408                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
409
410                        tmpstr = ostrcat(tmpstr, _("Comment:"), 1, 0);
411                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
412                        tmpstr = ostrcat(tmpstr, id3tag->comment, 1, 0);
413                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
414                }
415                freeid3(id3tag); id3tag = NULL;         
416        }
417        else
418        {
419                tmpstr = ostrcat(tmpstr, _("Title:"), 1, 0);
420                tmpstr = ostrcat(tmpstr, " ", 1, 0);
421                tmpstr = ostrcat(tmpstr, playergetinfo("Title"), 1, 1);
422                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
423               
424                tmpstr = ostrcat(tmpstr, _("Artist:"), 1, 0);
425                tmpstr = ostrcat(tmpstr, " ", 1, 0);
426                tmpstr = ostrcat(tmpstr, playergetinfo("Artist"), 1, 1);
427                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
428               
429                tmpstr = ostrcat(tmpstr, _("Album:"), 1, 0);
430                tmpstr = ostrcat(tmpstr, " ", 1, 0);
431                tmpstr = ostrcat(tmpstr, playergetinfo("Album"), 1, 1);
432                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
433               
434                tmpstr = ostrcat(tmpstr, _("Year:"), 1, 0);
435                tmpstr = ostrcat(tmpstr, " ", 1, 0);
436                tmpstr = ostrcat(tmpstr, playergetinfo("Year"), 1, 1);
437                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
438       
439                tmpstr = ostrcat(tmpstr, _("Genre:"), 1, 0);
440                tmpstr = ostrcat(tmpstr, " ", 1, 0);
441                tmpstr = ostrcat(tmpstr, playergetinfo("Genre"), 1, 1);
442                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
443               
444                tmpstr = ostrcat(tmpstr, _("Comment:"), 1, 0);
445                tmpstr = ostrcat(tmpstr, " ", 1, 0);
446                tmpstr = ostrcat(tmpstr, playergetinfo("Comment"), 1, 1);
447                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
448               
449                tmpstr = ostrcat(tmpstr, _("Track:"), 1, 0);
450                tmpstr = ostrcat(tmpstr, " ", 1, 0);
451                tmpstr = ostrcat(tmpstr, playergetinfo("Track"), 1, 1);
452                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
453               
454                tmpstr = ostrcat(tmpstr, _("Copyright:"), 1, 0);
455                tmpstr = ostrcat(tmpstr, " ", 1, 0);
456                tmpstr = ostrcat(tmpstr, playergetinfo("Copyright"), 1, 1);
457                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
458               
459        //      tmpstr = ostrcat(tmpstr, _("TestLibEplayer:"), 1, 0);
460        //      tmpstr = ostrcat(tmpstr, " ", 1, 0);
461        //      tmpstr = ostrcat(tmpstr, playergetinfo("TestLibEplayer"), 1, 1);
462        //      tmpstr = ostrcat(tmpstr, "\n", 1, 0);
463        }
464                       
465        textbox(_("iD3Tag"), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 500, 100, 0);
466        free(tmpstr), tmpstr = NULL;
467}
468
469void imdb_submenu(char* file, int mode)
470{
471        struct skin* pluginnode = NULL;
472        void (*startplugin)(char*, char*, int, char*, char*);
473
474        startplugin = NULL;
475       
476        if(mode == 0)
477                pluginnode = getplugin("IMDb");
478        else if(mode == 1)
479                pluginnode = getplugin("IMDb-API");
480        else if(mode == 2)
481                pluginnode = getplugin("TMDb");
482                       
483        if(pluginnode != NULL)
484        {                       
485                if(mode == 0)
486                        startplugin = dlsym(pluginnode->pluginhandle, "screenimdb");
487                else if(mode == 1)
488                        startplugin = dlsym(pluginnode->pluginhandle, "screenimdbapi");
489                else if(mode == 2)
490                        startplugin = dlsym(pluginnode->pluginhandle, "screentmdb");
491
492                if(startplugin != NULL)
493                {
494                                debug(133, "file=%s", basename(file));
495                        if(file != NULL)
496                        {
497                                if(ostrstr(file, "/") != NULL)
498                                {
499                                        //create imdb search name
500       
501                                        char* dname = ostrcat(file, NULL, 0, 0);
502                                        dname = dirname(dname);
503                               
504                                        char* shortname = ostrcat(basename(file), NULL, 0, 0);
505                                        string_tolower(shortname);
506        //                              shortname = string_shortname(shortname, 1);
507                                        shortname = string_shortname(shortname, 2);
508                                        string_removechar(shortname);
509                                        strstrip(shortname);
510       
511                                        debug(133, "inputfile=%s", file);
512                                        debug(133, "shortname=%s", shortname);
513                                        debug(133, "dname=%s", dname);
514                                        debug(133, "file=%s", basename(file));
515       
516                                        startplugin(shortname, NULL, 2, dname, basename(file));
517       
518                                        free(shortname), shortname = NULL;
519                                        free(dname), dname = NULL;
520                                }
521                                else
522                                {
523                                        startplugin(file, NULL, 2, NULL, NULL);
524                                }
525                               
526                        }                               
527                }
528        }
529}
530
531void get_mediadb_scan_info()
532{
533        int videocount = 0, audiocount = 0, picturecount = 0;
534        getmediadbcounts(&videocount, &audiocount, &picturecount);
535
536        char* tmpstr = NULL;
537        tmpstr = ostrcat(tmpstr, "scanning (", 1, 0);
538        tmpstr = ostrcat(tmpstr, oitoa(videocount), 1, 1);
539        tmpstr = ostrcat(tmpstr, "/", 1, 0);
540        tmpstr = ostrcat(tmpstr, oitoa(status.mediadbfiles), 1, 1);
541        tmpstr = ostrcat(tmpstr, ")", 1, 0);
542       
543        tmpstr = ostrcat(tmpstr, "\n\n ", 1, 0);
544        tmpstr = ostrcat(tmpstr, _("MediaDB directory scan started in Background !"), 1, 0);
545        tmpstr = ostrcat(tmpstr, "\n\n  ", 1, 0);
546        tmpstr = ostrcat(tmpstr, _("Delete MediaDB before scan"), 1, 0);
547        tmpstr = ostrcat(tmpstr, ": \t", 1, 0);
548        if(ostrcmp(getconfig("mediadbscandelall", NULL), "1") == 0)
549                tmpstr = ostrcat(tmpstr, _("yes"), 1, 0);
550        else
551                tmpstr = ostrcat(tmpstr, _("no"), 1, 0);
552        tmpstr = ostrcat(tmpstr, "\n  ", 1, 0);                 
553        tmpstr = ostrcat(tmpstr, _("Delete unused entrys before scan"), 1, 0);
554        tmpstr = ostrcat(tmpstr, ": \t", 1, 0);         
555        if(ostrcmp(getconfig("mediadbscandelnotfound", NULL), "1") == 0)
556                tmpstr = ostrcat(tmpstr, _("yes"), 1, 0);
557        else
558                tmpstr = ostrcat(tmpstr, _("no"), 1, 0);
559        tmpstr = ostrcat(tmpstr, "\n  ", 1, 0);
560        tmpstr = ostrcat(tmpstr, _("scan Directory"), 1, 0);
561        tmpstr = ostrcat(tmpstr, ": \t\t\t", 1, 0);
562        tmpstr = ostrcat(tmpstr, getconfig("mc_vp_path", NULL), 1, 0);
563        tmpstr = ostrcat(tmpstr, "\n  ", 1, 0);         
564        tmpstr = ostrcat(tmpstr, _("MediaDB place"), 1, 0);
565        tmpstr = ostrcat(tmpstr, ": \t\t\t", 1, 0);                             
566        tmpstr = ostrcat(tmpstr, getconfig("mediadbpath", NULL), 1, 0);
567        tmpstr = ostrcat(tmpstr, "\n  ", 1, 0);
568        tmpstr = ostrcat(tmpstr, _("MediaDB Debug"), 1, 0);
569        tmpstr = ostrcat(tmpstr, ": \t\t\t", 1, 0);
570        if(ostrcmp(getconfig("mediadbdebug", NULL), "1") == 0)
571                tmpstr = ostrcat(tmpstr, _("yes"), 1, 0);
572        else
573                tmpstr = ostrcat(tmpstr, _("no"), 1, 0);
574        tmpstr = ostrcat(tmpstr, "\n  ", 1, 0);         
575        tmpstr = ostrcat(tmpstr, _("Backdrop Download Count"), 1, 0);
576        tmpstr = ostrcat(tmpstr, ": \t\t", 1, 0);               
577        if(getconfigint("mediadbbackdrop", NULL) == 0)
578                tmpstr = ostrcat(tmpstr, _("all"), 1, 0);
579        else
580                tmpstr = ostrcat(tmpstr, oitoa(getconfigint("mediadbbackdrop", NULL)), 1, 1);
581
582        textbox(_("Message"), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1100, 500, 10, 0);
583        free(tmpstr), tmpstr = NULL;
584}
585
586// flag 100 = tithek
587int playrcred(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
588{
589        int ret = 1;
590//      if(checkbit(status.playercan, 5) == 0) return;
591        if(status.play == 1)
592                screenplayinfobar(file, showname, 1, playertype, flag);
593
594        int hangtime = status.hangtime;
595
596        struct skin* pluginnode = NULL;
597        void (*startplugin)(void);
598        struct skin* plugin = getscreen("plugin");
599        struct skin* child = plugin->child;
600        struct menulist* mlist = NULL, *mbox = NULL;
601        char* skintitle = "Menu";
602
603        if(flag < 99)
604        {
605                if(status.play == 1)
606                {
607                        addmenulist(&mlist, "Video Settings", NULL, NULL, 0, 0);
608                        addmenulist(&mlist, "AV Settings", NULL, NULL, 0, 0);
609                        addmenulist(&mlist, "iD3Tag Info", NULL, NULL, 0, 0);
610                }
611
612                addmenulist(&mlist, "MediaDB Edit", NULL, NULL, 0, 0);
613       
614                if(status.play == 0)
615                        addmenulist(&mlist, "Delete File", NULL, NULL, 0, 0);
616                       
617                if(status.mediadbfiles > 0)
618                        addmenulist(&mlist, "MediaDB Scan Info", NULL, NULL, 0, 0);
619        }
620        else
621        {
622                if(status.expertmodus >= 11 || file_exist("/mnt/swapextensions/etc/.codecpack") || file_exist("/var/swap/etc/.codecpack") || file_exist("/var/etc/.codecpack"))
623                {
624                        addmenulist(&mlist, "Search on Kinox", NULL, NULL, 0, 0);
625                        addmenulist(&mlist, "Search on Movie4k", NULL, NULL, 0, 0);
626                        addmenulist(&mlist, "Search on Solarmovies (movie)", NULL, NULL, 0, 0);
627                        addmenulist(&mlist, "Search on Solarmovies (serie)", NULL, NULL, 0, 0);
628                        addmenulist(&mlist, "Search on Movie4k", NULL, NULL, 0, 0);
629                }
630                addmenulist(&mlist, "Search on Youtube", NULL, NULL, 0, 0);
631                addmenulist(&mlist, "Search on MyVideo", NULL, NULL, 0, 0);
632        }
633
634        addmenulist(&mlist, "Downloads", NULL, NULL, 0, 0);
635
636        //add plugins
637        while(child != NULL)
638        {
639                if(child->del == PLUGINDELMARK && (status.security == 1 || (status.security == 0 && checkpluginskip(child->name) == 0)))
640                {
641                        if(ostrcmp(child->name, "Streaminfo") == 0 && status.play == 1)
642                                addmenulist(&mlist, child->name, NULL, child->pic, 0, 0);
643                        else if(ostrcmp(child->name, "IMDb") == 0)
644                                addmenulist(&mlist, child->name, NULL, child->pic, 0, 0);
645                        else if(ostrcmp(child->name, "IMDb-API") == 0)
646                                addmenulist(&mlist, child->name, NULL, child->pic, 0, 0);
647                        else if(ostrcmp(child->name, "TMDb") == 0)
648                                addmenulist(&mlist, child->name, NULL, child->pic, 0, 0);
649                }
650                child = child->next;
651        }
652
653        mbox = menulistbox(mlist, NULL, skintitle, NULL, NULL, 1, 0);
654        if(mbox != NULL)
655        {
656                if(ostrcmp(mbox->name, "Video Settings") == 0)
657                        screenvideosettings();
658                else if(ostrcmp(mbox->name, "AV Settings") == 0)
659                        screenavsettings(0);
660                else if(ostrcmp(mbox->name, "IMDb") == 0)
661                        imdb_submenu(file, 0);
662                else if(ostrcmp(mbox->name, "IMDb-API") == 0)
663                        imdb_submenu(file, 1);
664                else if(ostrcmp(mbox->name, "TMDb") == 0)
665                        imdb_submenu(file, 2);
666                else if(ostrcmp(mbox->name, "iD3Tag Info") == 0)
667                        id3tag_info(file);
668                else if(ostrcmp(mbox->name, "MediaDB Scan Info") == 0)
669                        get_mediadb_scan_info();
670                else if(ostrcmp(mbox->name, "MediaDB Edit") == 0)
671                        screenmediadbedit(file, 0, 0);
672                else if(ostrcmp(mbox->name, "Delete File") == 0)
673                {
674                        playcheckdirrcret(file, 1);
675                        ret = 7;
676                }
677                else if(ostrcmp(mbox->name, "Downloads") == 0)
678                        screenbgdownload(1);
679                else if(ostrcmp(mbox->name, "Search on Kinox") == 0)
680                        ret = 2;
681                else if(ostrcmp(mbox->name, "Search on Solarmovies (movie)") == 0)
682                        ret = 3;
683                else if(ostrcmp(mbox->name, "Search on Solarmovies (serie)") == 0)
684                        ret = 4;
685                else if(ostrcmp(mbox->name, "Search on Youtube") == 0)
686                        ret = 5;
687                else if(ostrcmp(mbox->name, "Search on MyVideo") == 0)
688                        ret = 6;
689                else if(ostrcmp(mbox->name, "Search on Movie4k") == 0)
690                        ret = 7;
691                else if(ostrcmp(mbox->name, "Downloads") == 0)
692                {
693                        if(status.play == 1)
694                                screenbgdownload(1);
695                        else
696                                screenbgdownload(0);
697                }                       
698                else
699                {
700                        pluginnode = getplugin(mbox->name);
701
702                        if(pluginnode != NULL)
703                        {
704                                startplugin = dlsym(pluginnode->pluginhandle, "start");
705                                if(startplugin != NULL)
706                                        startplugin();
707                        }
708                }
709        }
710
711        freemenulist(mlist, 1); mlist = NULL;
712        drawscreen(skin, 0, 0);
713        resettvpic();
714        if(playinfobarstatus > 0 &&     status.play == 1)
715                screenplayinfobar(file, showname, 0, playertype, flag);
716
717        status.hangtime = hangtime;
718        return ret;
719}
720
721void playrcinfo(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
722{
723        if(checkbit(status.playercan, 14) == 0) return;
724
725        if(*playinfobarstatus == 0)
726        {
727                *playinfobarstatus = 1;
728                *playinfobarcount = 0;
729                screenplayinfobar(file, showname, 0, playertype, flag);
730        }
731        else if(*playinfobarstatus == 1)
732        {
733                *playinfobarstatus = 0;
734                screenplayinfobar(NULL, NULL, 1, playertype, flag);
735        }
736}
737
738void playrcstop(int playertype, int flag)
739{
740        if(checkbit(status.playercan, 6) == 0) return;
741
742        free(status.playfile); status.playfile = NULL;
743       
744        if(playertype == 1)
745                playerstopts(0, 0);
746        else if(playertype == 2)
747                dvdstop();
748        else
749                playerstop();
750
751        writevfdmenu("Player");
752        screenplayinfobar(NULL, NULL, 1, playertype, flag);
753}
754
755//type 0: only from play
756//type 1: only from pause
757void playrcsf(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int type, int flag)
758{
759        if(checkbit(status.playercan, 15) == 0) return;
760
761        if(status.playspeed == 0 && ((type == 0 && status.pause == 0) || (type == 1 && status.pause == 1)))
762        {
763                status.slowspeed++;
764                if(status.slowspeed > 6) status.slowspeed = 6;
765                if(status.slowspeed > 0)
766                {
767                        status.play = 0;
768
769                        if(playertype == 1)
770                                playerslowts((int)pow(2, status.slowspeed));
771                        else if(playertype == 0)
772                                playerslow(status.playspeed);
773                        *playinfobarstatus = 2;
774                        *playinfobarcount = 0;
775                        screenplayinfobar(file, showname, 0, playertype, flag);
776                }
777                if(status.slowspeed == 0)
778                {
779                        status.pause = 0;
780                        status.play = 1;
781                        if(playertype == 1)
782                        {
783                                playerpausets();
784                                audioclearbuffer(status.aktservice->audiodev);
785                                playercontinuets();
786                                playerresetts();
787                        }
788                        else if(playertype == 2)
789                                dvdcontinue();
790                        else
791                                playercontinue();
792                        *playinfobarstatus = 1;
793                        *playinfobarcount = 0;
794                        screenplayinfobar(file, showname, 0, playertype, flag);
795                }
796        }
797}
798
799//type 0: only from play
800//type 1: only from pause
801void playrcsr(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int type, int flag)
802{
803        if(checkbit(status.playercan, 15) == 0) return;
804
805        if(status.playspeed == 0 && ((type == 0 && status.pause == 0) || (type == 1 && status.pause == 1)))
806        {
807                status.slowspeed--;
808                if(status.slowspeed < 0) status.slowspeed = 0;
809                if(status.slowspeed > 0)
810                {
811                        status.play = 0;
812                        if(playertype == 1)
813                                playerslowts((int)pow(2, status.slowspeed));
814                        else if(playertype == 0)
815                                playerslowts(status.slowspeed);
816                        *playinfobarstatus = 2;
817                        *playinfobarcount = 0;
818                        screenplayinfobar(file, showname, 0, playertype, flag);
819                }
820                if(status.slowspeed == 0)
821                {
822                        status.pause = 0;
823                        status.play = 1;
824                        if(playertype == 1)
825                        {
826                                playerpausets();
827                                audioclearbuffer(status.aktservice->audiodev);
828                                playercontinuets();
829                                playerresetts();
830                        }
831                        else if(playertype == 2)
832                                dvdcontinue();
833                        else
834                                playercontinue();
835                        *playinfobarstatus = 1;
836                        *playinfobarcount = 0;
837                        screenplayinfobar(file, showname, 0, playertype, flag);
838                }
839        }
840}
841
842void playrcff(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
843{
844        if(status.pause == 1)
845        {
846                playrcsf(file, showname, playinfobarstatus, playinfobarcount, playertype, 1, flag);
847                return;
848        }
849
850        if(checkbit(status.playercan, 7) == 0) return;
851
852        if(status.pause == 0 && status.slowspeed == 0)
853        {
854                status.playspeed++;
855                if(status.playspeed > 6) status.playspeed = 6;
856                if(status.playspeed > 0)
857                {
858                        status.play = 0;
859                        if(playertype == 1)
860                                playerffts((int)pow(2, status.playspeed));
861                        else if(playertype == 2)
862                                dvdff(status.playspeed);
863                        else   
864                                playerff(status.playspeed);
865                        *playinfobarstatus = 2;
866                        *playinfobarcount = 0;
867                        screenplayinfobar(file, showname, 0, playertype, flag);
868                }
869                if(status.playspeed < 0)
870                {
871                        status.play = 0;
872                        if(playertype == 1)
873                                playerfrts((int)(pow(2, status.playspeed * -1) * -1), 0);
874                        else if(playertype == 2)
875                                dvdfr(status.playspeed);
876                        else
877                                playerfr(status.playspeed);
878                        *playinfobarstatus = 2;
879                        *playinfobarcount = 0;
880                        screenplayinfobar(file, showname, 0, playertype, flag);
881                }
882                if(status.playspeed == 0)
883                {
884                        status.play = 1;
885                        if(playertype == 1)
886                        {
887                                playerpausets();
888                                playercontinuets();
889                                playerresetts();
890                        }
891                        else if(playertype == 2)
892                                dvdcontinue();
893                        else
894                                playercontinue();
895                        *playinfobarstatus = 1;
896                        *playinfobarcount = 0;
897                        screenplayinfobar(file, showname, 0, playertype, flag);
898                }
899        }
900}
901
902void playrcfr(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
903{
904        if(status.pause == 1)
905        {
906                playrcsr(file, showname, playinfobarstatus, playinfobarcount, playertype, 1, flag);
907                return;
908        }
909       
910        if(checkbit(status.playercan, 8) == 0) return;
911
912        if(status.pause == 0 && status.slowspeed == 0)
913        {
914                status.playspeed--;
915                if(status.playspeed < -6) status.playspeed = -6;
916                if(status.playspeed > 0)
917                {
918                        status.play = 0;
919                        if(playertype == 1)
920                                playerffts((int)pow(2, status.playspeed));
921                        else if(playertype == 2)
922                                dvdff(status.playspeed);
923                        else
924                                playerff(status.playspeed);
925                        *playinfobarstatus = 2;
926                        *playinfobarcount = 0;
927                        screenplayinfobar(file, showname, 0, playertype, flag);
928                }
929                if(status.playspeed < 0)
930                {
931                        status.play = 0;
932                        if(playertype == 1)
933                                playerfrts((int)(pow(2, status.playspeed * -1) * -1), 0);
934                        else if(playertype == 2)
935                                dvdfr(status.playspeed);
936                        else
937                                playerfr(status.playspeed);
938                        *playinfobarstatus = 2;
939                        *playinfobarcount = 0;
940                        screenplayinfobar(file, showname, 0, playertype, flag);
941                }
942                if(status.playspeed == 0)
943                {
944                        status.play = 1;
945                        if(playertype == 1)
946                        {
947                                playerpausets();
948                                playercontinuets();
949                                playerresetts();
950                        }
951                        else if(playertype == 2)
952                                dvdcontinue();
953                        else
954                                playercontinue();
955                        *playinfobarstatus = 1;
956                        *playinfobarcount = 0;
957                        screenplayinfobar(file, showname, 0, playertype, flag);
958                }
959        }
960}
961
962void playrcpause(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
963{
964        if(status.playspeed != 0 || status.slowspeed != 0)
965        {
966                playrcplay(file, showname, playinfobarstatus, playinfobarcount, playertype, flag);
967                return;
968        }
969       
970        if(checkbit(status.playercan, 9) == 0) return;
971
972        if(status.pause == 1)
973        {
974                if(playertype == 1)
975                {
976                        playercontinuets();
977                }
978                else if(playertype == 2)
979                        dvdcontinue();
980                else
981                        playercontinue();
982                status.slowspeed = 0;
983                status.playspeed = 0;
984                status.play = 1;
985                status.pause = 0;
986                *playinfobarstatus = 1;
987                *playinfobarcount = 0;
988                screenplayinfobar(file, showname, 0, playertype, flag);
989        }
990        else
991        {
992                status.slowspeed = 0;
993                status.playspeed = 0;
994                status.play = 0;
995                status.pause = 1;
996                if(playertype == 1)
997                        playerpausets();
998                else if(playertype == 2)
999                        dvdpause();
1000                else
1001                        playerpause();
1002                *playinfobarstatus = 2;
1003                *playinfobarcount = 0;
1004                screenplayinfobar(file, showname, 0, playertype, flag);
1005        }
1006}
1007
1008void playrcplay(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1009{
1010        if(checkbit(status.playercan, 10) == 0) return;
1011
1012        free(status.playfile); status.playfile = NULL;
1013        status.playfile = ostrcat(file, NULL, 0, 0);
1014
1015        if(playertype == 1)
1016        {
1017                if(status.playspeed != 0 || status.slowspeed != 0)
1018                        playerpausets();
1019                if(status.slowspeed != 0)
1020                        audioclearbuffer(status.aktservice->audiodev);
1021                playercontinuets();
1022                if(status.playspeed != 0 || status.slowspeed != 0)
1023                        playerresetts();
1024        }
1025        else if(playertype == 2)
1026                dvdcontinue();
1027        else
1028                playercontinue();
1029        status.slowspeed = 0;
1030        status.playspeed = 0;
1031        status.pause = 0;
1032        status.play = 1;
1033        *playinfobarstatus = 1;
1034        *playinfobarcount = 0;
1035        screenplayinfobar(file, showname, 0, playertype, flag);
1036}
1037
1038void playrcjumpr(char* file, char* showname, int sec, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1039{
1040//      if(checkbit(status.playercan, 11) == 0) return;
1041
1042        unsigned long long pos = 0;
1043       
1044        if(status.pause == 0 && status.playspeed == 0 && status.slowspeed == 0)
1045        {
1046                struct skin* load = getscreen("loading");
1047                drawscreen(load, 0, 0);
1048               
1049                //a jump over the beginning of the
1050                //file, freez the player (type 0)
1051                if(playertype == 1)
1052                        playerseekts(getservice(RECORDPLAY, 0), sec * -1, 0);
1053                else if(playertype == 2)
1054                        pos = dvdgetpts() / 90000;
1055                else
1056                        pos = playergetpts() / 90000;
1057       
1058                if(playertype != 1)
1059                {
1060                        if(pos + 10 > sec)
1061                        {
1062                                if(playertype == 2)
1063                                        dvdseek(sec * -1);
1064                                else
1065                                        playerseek(sec * -1);
1066                        }
1067                        else
1068                        {
1069                                if(playertype == 2)
1070                                {
1071                                        dvdstop();
1072                                        dvdstart(file);
1073                                }
1074                                else
1075                                {
1076                                        playerstop();
1077                                        playerstart(file);
1078                                }
1079                        }
1080                }
1081
1082                *playinfobarstatus = 1;
1083                *playinfobarcount = 0;
1084                //status.play = 0;
1085                clearscreen(load);
1086                screenplayinfobar(file, showname, 0, playertype, flag);
1087                //status.play = 1;
1088                sleep(1);
1089        }
1090}
1091
1092void playrcjumpto(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1093{
1094        if(status.pause == 0 && status.playspeed == 0 && status.slowspeed == 0)
1095        {
1096                char* tmpstr = numinput(_("Jump To (min)"), NULL, "000", 0);
1097                if(tmpstr != NULL)
1098                {
1099                        int jump = atoi(tmpstr) * 60;
1100                        playrcjumpf(file, showname, jump, playinfobarstatus, playinfobarcount, playertype, flag);
1101                }
1102                free(tmpstr), tmpstr = NULL;
1103        }
1104}
1105
1106void playrcjumpf(char* file, char* showname, int sec, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1107{
1108//      if(checkbit(status.playercan, 12) == 0) return;
1109
1110        if(status.pause == 0 && status.playspeed == 0 && status.slowspeed == 0)
1111        {
1112                struct skin* load = getscreen("loading");
1113                drawscreen(load, 0, 0);
1114               
1115                if(playertype == 1)
1116                        playerseekts(getservice(RECORDPLAY, 0), sec, 0);
1117                else if(playertype == 2)
1118                        dvdseek(sec);
1119                else
1120                        playerseek(sec);
1121                *playinfobarstatus = 1;
1122                *playinfobarcount = 0;
1123                //status.play = 0;
1124                clearscreen(load);
1125                screenplayinfobar(file, showname, 0, playertype, flag);
1126                //status.play = 1;
1127        }
1128}
1129
1130void playchangecodec(int playertype)
1131{
1132        if(checkbit(status.playercan, 13) == 0) return;
1133
1134        char** tracklist = NULL;
1135
1136        if(getconfigint("av_ac3default", NULL) == 1)
1137        {
1138                int i = 0;
1139               
1140                tracklist = playergettracklist(1);
1141                if(tracklist != NULL)
1142                {
1143                        while(tracklist[i] != NULL)
1144                        {
1145                                if(ostrcmp(tracklist[i + 1], "A_AC3") == 0)
1146                                {
1147                                        playerchangeaudiotrack(i / 2);
1148                                }
1149                                i += 2;
1150                        }
1151                }
1152                playerfreetracklist(tracklist);
1153                tracklist = NULL;
1154        }
1155}
1156
1157int playcheckdirrcret(char* file, int dirrcret)
1158{
1159        int ret = 0;
1160        char* epgfilename = NULL, *tmpstr = NULL;
1161
1162        if(dirrcret == 4)
1163        {
1164                int sort = screendirsort();
1165                addconfigint("dirsort", sort);
1166                ret = 1;
1167        }
1168        if(dirrcret == 3)
1169        {
1170                epgfilename = changefilenameext(file, ".epg");
1171
1172                tmpstr = readfiletomem(epgfilename, 0);
1173                if(tmpstr != NULL)
1174                        textbox(_("EPG Info"), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 600, 0, 2);
1175                else {
1176                        free(epgfilename); epgfilename = NULL;
1177                        epgfilename = changefilenameext(file, ".eit");
1178                        tmpstr = readeittomem(epgfilename);
1179                        if(tmpstr != NULL)
1180                                textbox(_("EPG Info"), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 600, 0, 2);
1181                }
1182                free(epgfilename); epgfilename = NULL;
1183                free(tmpstr); tmpstr = NULL;
1184                ret = 1;
1185        }
1186        if(dirrcret == 1)
1187        {
1188                if(getservicebyrecname(file, 0, 0) != NULL)
1189                        textbox(_("Message"), _("Record in progress"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0);
1190                else if(textbox(_("Really Delete ?"), file, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0) == 1)
1191                {
1192                        unlink(file);
1193                        epgfilename = changefilenameext(file, ".epg");
1194                        unlink(epgfilename);
1195                        free(epgfilename); epgfilename = NULL;
1196                        epgfilename = changefilenameext(file, ".se");
1197                        unlink(epgfilename);
1198                        free(epgfilename); epgfilename = NULL;
1199                        epgfilename = changefilenameext(file, ".ma");
1200                        unlink(epgfilename);
1201                        free(epgfilename); epgfilename = NULL;
1202                }
1203                ret = 1;
1204        }
1205       
1206        return ret;
1207}
1208
1209void playwritevfd(char* file, char* showname)
1210{
1211        char* tmpstr = NULL;
1212
1213        if(showname == NULL)
1214        {
1215                tmpstr = ostrcat(file, NULL, 0, 0);
1216                if(tmpstr != NULL) writevfdmenu(basename(tmpstr));
1217                free(tmpstr); tmpstr = NULL;
1218        }
1219        else
1220                writevfdmenu(showname);
1221}
1222
1223
1224void playstartservice()
1225{
1226        char* tmpstr = NULL;
1227
1228        if(status.aktservice->channel != NULL)
1229        {
1230                tmpstr = ostrcat(status.aktservice->channellist, NULL, 0, 0);
1231                servicecheckret(servicestart(status.aktservice->channel, tmpstr, NULL, 3), 0);
1232        }
1233        else
1234        {
1235                tmpstr = ostrcat(status.lastservice->channellist, NULL, 0, 0);
1236                servicecheckret(servicestart(status.lastservice->channel, tmpstr, NULL, 0), 0);
1237        }
1238        free(tmpstr); tmpstr = NULL;
1239}
1240
1241// flag 0 = dirlist/playing/infobar
1242// flag 1 = playing/infobar
1243// flag 2 = playing
1244// flag 3 = not stop/start live service
1245// flag 4 = playing with screensaver
1246// startfolder 2 = do nothing with playstop/playstart
1247int screenplay(char* startfile, char* showname, int startfolder, int flag)
1248{
1249        int rcret = 0, playertype = 0, ret = 0, rcwait = 1000, screensaver_delay = 0;
1250        char* file = NULL, *tmpstr = NULL, *tmpstr1 = NULL;
1251        char* tmppolicy = NULL, *startdir = NULL;
1252        char* formats = NULL;
1253        struct skin* playinfobar = getscreen("playinfobar");
1254        struct skin* sprogress = getscreennode(playinfobar, "progress");
1255        struct skin* load = getscreen("loading");
1256
1257        int oldsort = getconfigint("dirsort", NULL);
1258        int skip13 = getconfigint("skip13", NULL);
1259        int skip46 = getconfigint("skip46", NULL);
1260        int skip79 = getconfigint("skip79", NULL);
1261
1262        if(startfolder == 0 && flag != 3)
1263        {
1264                rcret = servicestop(status.aktservice, 1, 1);
1265                if(rcret == 1) return ret;
1266        }
1267
1268        if(status.webplayfile != NULL)
1269        {
1270                startfile = status.webplayfile;
1271                rcret = servicestop(status.aktservice, 1, 1);
1272                if(rcret == 1) return ret;
1273        }
1274
1275        // allowed from atemio avi mkv mpg4 xvid mpg1 mpg2 jpeg png
1276        if(status.expertmodus > 0 && status.security == 1)
1277                formats = ostrcat(formats, ".flac .ogg .mp3 .avi .dat .divx .flv .mkv .m4v .mp4 .mov .mpg .mpeg .mts .m2ts .trp .ts .vdr .vob .wmv .rm", 1, 0);
1278        else
1279                formats = ostrcat(formats, ".ts .mts .m2ts", 1, 0);
1280       
1281        status.updatevfd = PAUSE;
1282        tmppolicy = getpolicy();
1283
1284playerstart:
1285        //reset timeline
1286        sprogress->progresssize = 0;
1287
1288        if(startfolder == 0)
1289                startdir = getconfig("rec_moviepath", NULL);
1290        else
1291                startdir = getconfig("rec_path", NULL);
1292
1293        status.playspeed = 0, status.play = 0, status.pause = 0, status.slowspeed = 0;
1294        int playinfobarcount = 0, playinfobarstatus = 1, dirrcret = 0;
1295
1296        if(startfile == NULL)
1297        {
1298                readmediadb(getconfig("mediadbfile", NULL), 0, 0);
1299
1300                tmpstr = ostrcat(file, NULL, 0, 0);
1301                char* tmpstartdir = startdir;
1302                if(file != NULL)
1303                {
1304                        tmpstr1 = ostrcat(file, NULL, 0, 0);
1305                        startdir = dirname(tmpstr1);
1306                }
1307                free(file); file = NULL;
1308                file = screendir(startdir, formats, basename(tmpstr), &dirrcret, ".epg", _("DEL"), getrcconfigint("rcred", NULL), _("SELECT"), 0, "EPG", getrcconfigint("rcyellow", NULL), "SORT", getrcconfigint("rcblue", NULL), 90, 1, 90, 1, 64);
1309                free(tmpstr); tmpstr = NULL;
1310                free(tmpstr1); tmpstr1 = NULL;
1311                startdir = tmpstartdir;
1312        }
1313        else
1314                file = ostrcat(startfile, NULL, 0, 0);
1315
1316        if(file == NULL)
1317        {
1318                if(playcheckdirrcret(file, dirrcret) == 1)
1319                        goto playerstart;
1320        }
1321
1322        if(file != NULL)
1323        {
1324                if(getconfigint("playertype", NULL) == 1 && (cmpfilenameext(file, ".ts") == 0 || cmpfilenameext(file, ".mts") == 0 || cmpfilenameext(file, ".m2ts") == 0))
1325                        playertype = 1;
1326
1327                if(startfile == NULL)
1328                {
1329                        tmpstr = ostrcat(file, NULL, 0, 0);
1330                        if(tmpstr != NULL && startfolder == 0) addconfig("rec_moviepath", dirname(tmpstr));
1331                        free(tmpstr); tmpstr = NULL;
1332               
1333                        if(playcheckdirrcret(file, dirrcret) == 1)
1334                                goto playerstart;
1335
1336                        if(startfolder == 1 && flag != 3)
1337                        {
1338                                rcret = servicestop(status.aktservice, 1, 1);
1339                                if(rcret == 1)
1340                                {
1341                                        free(tmppolicy);
1342                                        free(file);
1343                                        free(formats);
1344                                        addconfigint("dirsort", oldsort);
1345                                        return ret;
1346                                }
1347                        }
1348                }
1349
1350                drawscreen(skin, 0, 0);
1351                drawscreen(load, 0, 0);
1352                playwritevfd(file, showname);
1353                if(playertype == 1)
1354                        rcret = playerstartts(file, 0);
1355                else if(playertype == 2)
1356                        rcret = playerstart(file);
1357                else
1358                {
1359                        if(ostrstr(file, "http://") == file)
1360                        {
1361                                struct stimerthread* bufferstatus = addtimer(&screenplaybufferstatus, START, 1000, 1, NULL, NULL, NULL);
1362                                rcret = playerstart(file);
1363                                if(bufferstatus != NULL && gettimer(bufferstatus) != NULL)
1364                                {
1365                                        bufferstatus->aktion = STOP;
1366                                        usleep(100000);
1367                                }
1368                        }
1369                        else
1370                                rcret = playerstart(file);
1371                }
1372#ifndef SIMULATE
1373                if(rcret != 0)
1374                {
1375                        textbox(_("Message"), _("Can't start playback !"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 7, 0);
1376                        writevfdmenu("Player");
1377                       
1378                        if(startfile == NULL)
1379                        {
1380                                if(startfolder == 1 && flag != 3) playstartservice();
1381                                goto playerstart;
1382                        }
1383                        else
1384                        {
1385                                ret = 2;
1386                                goto playerend;
1387                        }
1388                }
1389#endif
1390                clearscreen(load);
1391                screenplayinfobar(file, showname, 0, playertype, flag);
1392
1393                if(flag == 4 && getconfigint("screensaver", NULL) == 1)
1394                {
1395                        screensaver_delay = getconfigint("screensaver_delay", NULL);
1396                        initscreensaver();
1397                }                                                               
1398               
1399                //change codec if ac3default and video has ac3
1400                //deaktivate, freeze player, makes a seek -5
1401                //see eplayer container_ffmpeg_switch_audio
1402                //the seek to the beginning of the file freez
1403                //eplayer.
1404                //playchangecodec();
1405                free(status.playfile); status.playfile = NULL;
1406                status.playfile = ostrcat(file, NULL, 0, 0);
1407                status.play = 1;
1408                int count = 0;
1409                while(1)
1410                {
1411                        while((playertype == 0 && playerisplaying()) || (playertype == 1 && playerisplayingts()))
1412                        {
1413                                rcret = waitrc(playinfobar, rcwait, 0);
1414                                playinfobarcount++;
1415                                if(playinfobarstatus > 0)
1416                                        screenplayinfobar(file, showname, 0, playertype, flag);
1417                                if(playinfobarstatus == 1 && playinfobarcount >= getconfigint("infobartimeout", NULL))
1418                                {
1419                                        playinfobarstatus = 0;
1420                                        screenplayinfobar(NULL, NULL, 1, playertype, flag);
1421                                }
1422                               
1423                                if(flag == 4)
1424                                {
1425                                        if(status.play == 1 && screensaver != NULL)
1426                                                count++;
1427       
1428                                        if(count > screensaver_delay && screensaver != NULL)
1429                                        {
1430                                                showscreensaver();
1431                                                rcwait = screensaver->speed;
1432                                        }
1433                                }
1434               
1435                                if(rcret == getrcconfigint("rcyellow", NULL))
1436                                        playrcyellow(file, showname, playinfobarstatus, playertype, flag);
1437                               
1438                                if(rcret == getrcconfigint("rctext", NULL) || rcret == getrcconfigint("rcsubtitel", NULL))
1439                                        playrctext(file, showname, playinfobarstatus, playertype, flag);
1440                                       
1441                                if(rcret == getrcconfigint("rcgreen", NULL))
1442                                        playrcgreen(file, showname, playinfobarstatus, playertype, flag);
1443                                       
1444                                if(rcret == getrcconfigint("rcblue", NULL))
1445                                        playrcblue(file, showname, playinfobarstatus, playertype, flag);
1446                                       
1447                                if(rcret == getrcconfigint("rcok", NULL))
1448                                        playrcok(file, showname, playinfobarstatus, playertype, flag);
1449                               
1450                                if(rcret == getrcconfigint("rcred", NULL))
1451                                        playrcred(file, showname, playinfobarstatus, playertype, flag);
1452
1453                                if(rcret == getrcconfigint("rcinfo", NULL))
1454                                        playrcinfo(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
1455                               
1456                                if(rcret == getrcconfigint("rcstop", NULL) || rcret == getrcconfigint("rcexit", NULL))
1457                                {
1458                                        playrcstop(playertype, flag);
1459                                        if(startfile == NULL)
1460                                        {                                               
1461                                                if(startfolder == 1 && flag != 3) playstartservice();
1462                                                goto playerstart;
1463                                        }
1464                                        else
1465                                        {
1466                                                ret = 1;
1467                                                goto playerend;
1468                                        }
1469                                }
1470                               
1471                                if(rcret == getrcconfigint("rcsf", NULL))
1472                                        playrcsf(file, showname, &playinfobarstatus, &playinfobarcount, playertype, 0, flag);
1473         
1474                        if(rcret == getrcconfigint("rcsr", NULL))
1475                                        playrcsr(file, showname, &playinfobarstatus, &playinfobarcount, playertype, 0, flag);
1476
1477                                if(rcret == getrcconfigint("rcff", NULL))
1478                                        playrcff(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
1479                               
1480                                if(rcret == getrcconfigint("rcfr", NULL))
1481                                        playrcfr(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
1482
1483                                if(rcret == getrcconfigint("rcpause", NULL) || ((checkbox("ATEMIO520") == 1 || checkbox("ATEMIO530") == 1) && rcret == getrcconfigint("rcplay", NULL) && status.pause == 0 && status.slowspeed == 0 && status.playspeed == 0))
1484                                {       
1485                                        playrcpause(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
1486                                        continue;
1487                                }
1488
1489                                if(rcret == getrcconfigint("rcplay", NULL))
1490                                        playrcplay(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
1491
1492                                if(rcret == getrcconfigint("rcleft", NULL))
1493                                        playrcjumpr(file, showname, 60, &playinfobarstatus, &playinfobarcount, playertype, flag);
1494                               
1495                                if(rcret == getrcconfigint("rc1", NULL))
1496                                        playrcjumpr(file, showname, skip13, &playinfobarstatus, &playinfobarcount, playertype, flag);
1497                               
1498                                if(rcret == getrcconfigint("rc4", NULL))
1499                                        playrcjumpr(file, showname, skip46, &playinfobarstatus, &playinfobarcount, playertype, flag);
1500                               
1501                                if(rcret == getrcconfigint("rc7", NULL))
1502                                        playrcjumpr(file, showname, skip79, &playinfobarstatus, &playinfobarcount, playertype, flag);
1503
1504                                if(rcret == getrcconfigint("rc2", NULL))
1505                                        playrcjumpto(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
1506                               
1507                                if(rcret == getrcconfigint("rcright", NULL))
1508                                        playrcjumpf(file, showname, 60, &playinfobarstatus, &playinfobarcount, playertype, flag);
1509                               
1510                                if(rcret == getrcconfigint("rc3", NULL))
1511                                        playrcjumpf(file, showname, skip13, &playinfobarstatus, &playinfobarcount, playertype, flag);
1512                               
1513                                if(rcret == getrcconfigint("rc6", NULL))
1514                                        playrcjumpf(file, showname, skip46, &playinfobarstatus, &playinfobarcount, playertype, flag);
1515                               
1516                                if(rcret == getrcconfigint("rc9", NULL))
1517                                        playrcjumpf(file, showname, skip79, &playinfobarstatus, &playinfobarcount, playertype, flag);
1518
1519                                if(rcret == getrcconfigint("rcdown", NULL))
1520                                        playrcjumpr(file, showname, 300, &playinfobarstatus, &playinfobarcount, playertype, flag);
1521
1522                                if(rcret == getrcconfigint("rcup", NULL))
1523                                        playrcjumpf(file, showname, 300, &playinfobarstatus, &playinfobarcount, playertype, flag);
1524                               
1525                                if(rcret == getrcconfigint("rc0", NULL))
1526                                        setmarker();
1527                                if(rcret == getrcconfigint("rc5", NULL))
1528                                        screenmarker();
1529
1530                        }
1531                        //don't change this sleep, without this
1532                        //the player stops to fast, and a last seek can
1533                        //produce a segfault
1534playerend:
1535                        sleep(1);
1536                        if(playertype == 1)
1537                                playerafterendts();
1538                        else
1539                                playerafterend();
1540
1541                        writevfdmenu("Player");
1542                        screenplayinfobar(file, showname, 1, playertype, flag);
1543
1544                        if(startfile == NULL)
1545                        {
1546                                if(startfolder == 1 && flag != 3) playstartservice();
1547                                goto playerstart;
1548                        }
1549                        else
1550                                break;
1551                }
1552        }
1553        if(startfolder == 0 && flag != 3) playstartservice();
1554        status.updatevfd = START;
1555       
1556        if(status.webplayfile != NULL)
1557        {
1558                playstartservice();
1559                free(status.webplayfile); status.webplayfile = NULL;
1560        }
1561
1562        if(tmppolicy != NULL)
1563        {
1564                setpolicy(tmppolicy);
1565                free(tmppolicy);
1566        }
1567       
1568        if(flag == 4)
1569                deinitscreensaver();
1570
1571        addconfigint("dirsort", oldsort);
1572        free(status.playfile); status.playfile = NULL;
1573        status.slowspeed = 0;
1574        status.playspeed = 0;
1575        status.pause = 0;
1576        status.play = 0;
1577        free(file);
1578        free(formats);
1579
1580        if(status.mediadbthread == NULL)
1581        {
1582                if(status.writemediadb == 1)
1583                        writemediadb(getconfig("mediadbfile", NULL), NULL);
1584                freemediadb(0);
1585        }
1586
1587        return ret;
1588}
1589
1590#endif
Note: See TracBrowser for help on using the repository browser.