source: titan/titan/play.h @ 24101

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

fix

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