source: titan/titan/play.h @ 24061

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

fix

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