source: titan/plugins/mc/mc_iptvplayer.h @ 45545

Last change on this file since 45545 was 45545, checked in by obi, 4 months ago

mc > iptvplayer add lifestream flag

File size: 17.4 KB
Line 
1#ifndef MC_IPTVPLAYER_H
2#define MC_IPTVPLAYER_H
3
4extern struct skin* skin;
5extern struct screensaver* screensaver;
6
7void screenmc_iptvplayer()
8{
9        // workaround for grey background mvi
10        struct skin* loadmediadb = getscreen("loading");
11        struct skin* blackscreen = getscreen("blackscreen");
12        drawscreen(blackscreen, 0, 0);
13        drawscreen(loadmediadb, 0, 0);
14
15        addconfigtmp("playerbuffersize", "0");
16
17        readmediadb(getconfig("mediadbfile", NULL), 0, 0);
18
19        char* filename = NULL, *title = NULL, *currentdirectory = NULL, *selectedfile = NULL, *lastid = NULL, *tmpstr = NULL, *showname = NULL;
20        int rcret = 0, rcwait = 1000, playerret = 0, flag = 4, skip = 0, eof = 0, playinfobarcount = 0, playinfobarstatus = 1, count = 0, tmpview = 0, playlist = 0, playertype = 0;
21        int videooff = 0;
22
23        tmpstr = ostrcat(getconfig("mc_ip_dirsort", NULL), NULL, 0, 0);
24        addconfigtmp("dirsort", tmpstr);
25        free(tmpstr), tmpstr = NULL;
26
27        // main screen
28        struct skin* apskin = getscreen("mc_iptvplayer");
29        struct skin* filelistpath = getscreennode(apskin, "filelistpath");
30        struct skin* filelist = getscreennode(apskin, "filelist");
31        struct skin* listbox = getscreennode(apskin, "listbox");
32        struct skin* b2 = getscreennode(apskin, "b2");
33        struct skin* b3 = getscreennode(apskin, "b3");
34        struct skin* b4 = getscreennode(apskin, "b4");
35
36        if(getconfigint("mc_ip_uselastdir", NULL) == 1)
37        {
38                currentdirectory = ostrcat(currentdirectory, getconfig("mc_ip_path", NULL), 1, 0);
39                selectedfile = ostrcat(selectedfile, getconfig("mc_ip_selectedfile", NULL), 1, 0);
40        }
41        else
42        {
43                currentdirectory = ostrcat(currentdirectory, getconfig("mc_ip_defaultdir", NULL), 1, 0);               
44        }
45
46        // enable listbox and set hidden
47        listbox->aktpage = -1;
48        listbox->aktline = 0;
49        listbox->hidden = YES;
50
51        // read configs
52        int view = getconfigint("mc_ip_view", NULL);
53        int screensaver_delay = getconfigint("screensaver_delay", NULL);
54
55        // set allowed filemask
56        char* filemask = NULL;
57        if(file_exist("/mnt/swapextensions/etc/.codecpack") || file_exist("/var/swap/etc/.codecpack") || file_exist("/var/etc/.codecpack"))
58                filemask = ostrcat("*.m3u *.pls *.mpg", NULL, 0, 0);
59        else
60                filemask = ostrcat("*.m3u *.pls *.mpg", NULL, 0, 0);
61       
62        // disable global transparent/hangtime
63        setfbtransparent(255);
64        status.hangtime = 99999;
65        status.playspeed = 0, status.play = 0, status.pause = 0, status.random = 0;
66
67        debug(50, "start screenmc_iptvplayer view=%d", view);
68
69        char* defaultmvi = NULL;
70        defaultmvi = createpluginpath("/mc/skin/default.mvi", 0);
71        singlepicstart(defaultmvi, 0);
72
73        if(getconfigint("screensaver", NULL) == 1)
74                initscreensaver();
75
76        tmpview = view;
77        mc_changeview(view, filelist, apskin, flag);
78
79//      clearscreen(loadmediadb);
80        getfilelist(apskin, filelistpath, filelist, currentdirectory, filemask, tmpview, selectedfile);
81        addscreenrc(apskin, filelist);
82
83        while(1)
84        {
85//              if(status.play == 1 && count <= screensaver_delay)
86//                      mc_iptvplayer_infobar(apskin, infobar, spos, slen, sreverse, sprogress, b12, b13, NULL);
87
88                rcret = waitrcext(apskin, rcwait, 0, tmpview);
89//              debug(50, "while status play=%d", status.play);
90                if(status.play == 1 || status.playspeed != 0)
91                {
92                        playinfobarcount ++;
93                        if(playinfobarstatus > 0)
94                        {
95                                if(videooff == 0) screenplayinfobar(filename, showname, 0, playertype, 0);
96                        }
97                        if(playinfobarstatus == 1 && playinfobarcount >= getconfigint("infobartimeout", NULL))
98                        {
99                                playinfobarstatus = 0;
100                                if(videooff == 0) screenplayinfobar(NULL, NULL, 1, playertype, 0);
101                        }
102                }
103                if (rcret == getrcconfigint("rcrecord", NULL))
104                {
105                        system("grab -j 100");
106                        textbox(_("Message"), _("Shooting Background done !\nSave Screenshoot Path: /tmp/screenshot.jpg"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 200, 0, 0);
107                }
108                else if(rcret == getrcconfigint("rcpause", NULL) || ((checkbox("ATEMIO520") == 1 || checkbox("ATEMIO530") == 1) && rcret == getrcconfigint("rcplay", NULL) && status.pause == 0 && status.slowspeed == 0 && status.playspeed == 0 && ostrcmp(getconfig("remotecontrol", NULL), "0") == 0))
109                {
110                        if(status.pause == 1)
111                        {
112                                if(screensaver != NULL && screensaver->type == 3)
113                                        singlepicstart("/var/usr/local/share/titan/plugins/mc/skin/default.mvi", 0);
114                                drawscreen(apskin, 0, 0);
115                        }
116                        if((status.play == 1) || (status.pause == 1) || (status.playspeed != 0))
117                                playrcpause(filename, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
118                }
119                else if(rcret == getrcconfigint("rcplay", NULL))
120                {
121                        if((status.play == 1) || (status.pause == 1) || (status.playspeed != 0))
122                                playrcplay(filename, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
123                        //showplaylist(1);
124                }
125                else if((rcret == getrcconfigint("rcchdown", NULL)) || (rcret == getrcconfigint("rcnext", NULL)))
126                {
127                        if(status.play == 1)
128                                eof = 1;
129                }
130                else if((rcret == getrcconfigint("rcchup", NULL)) || (rcret == getrcconfigint("rcprev", NULL)))
131                {
132                        if(status.play == 1)
133                                eof = 2;
134                }
135                else if(rcret == getrcconfigint("rcblue", NULL))
136                {
137                        debug(50, "rcblue: repeat");
138
139                        if(status.repeat == 0)
140                        {
141                                changetext(b4, _("Repeat-On"));
142                                drawscreen(apskin, 0, 0);
143                                status.repeat = 1;
144                        }
145                        else
146                        {
147                                status.repeat = 0;
148                                changetext(b4, _("Repeat"));
149                                drawscreen(apskin, 0, 0);
150                        }
151                }
152                else if(rcret == getrcconfigint("rcyellow", NULL))
153                {
154                        playerrandom(apskin, filelist, listbox, b3, playlist, flag);
155                }
156                else if(rcret == getrcconfigint("rcred", NULL))
157                {
158                        if(status.play == 1)
159                                playrcred(filename, NULL, playinfobarstatus, playertype, flag);
160                        else
161                        {
162                                if(playlist == 0)
163                                {
164                                        int sort = screendirsort();
165                                        debug(50, "rcred: tmpsort=%d", sort);
166
167                                        // fixt grey if sorting >10s
168                                        drawscreen(skin, 0, 0);
169       
170                                        addconfiginttmp("dirsort", sort);
171                                        mc_changeview(tmpview, filelist, apskin, flag);
172
173                                        delownerrc(apskin);     
174                                        getfilelist(apskin, filelistpath, filelist, filelistpath->text, filemask, tmpview, filelist->select->name);
175                                        addscreenrc(apskin, filelist);
176                                        drawscreen(apskin, 0, 0);
177                                }
178                        }
179                }
180                else if(rcret == getrcconfigint("rcgreen", NULL))
181                {
182                        showplaylist(apskin, filelistpath, filelist, listbox, b2, 0, &playlist, &eof, &filename, &currentdirectory, &playertype, flag);
183                        drawscreen(apskin, 0, 0);
184                }
185                else if(rcret == getrcconfigint("rcmenu", NULL))
186                {
187                        if(status.play == 0 && status.pause == 0)
188                        {
189                                debug(50, "rcmenu: settings");
190
191                                view = getconfigint("mc_ip_view", NULL);
192                                printf("view in: %d\n", view);
193                                printf("tmpview in: %d\n", tmpview);
194
195                                screenmc_iptvplayer_settings();
196                                drawscreen(blackscreen, 0, 0);
197                                drawscreen(loadmediadb, 0, 0); 
198                       
199                                if(view != getconfigint("mc_ip_view", NULL))
200                                {
201                                        printf("view changed > change tmpview\n");
202                                        tmpview = getconfigint("mc_ip_view", NULL);
203                                }
204
205                                if(getconfig("mc_ip_dirsort", NULL) != getconfig("dirsort", NULL))
206                                {
207                                        char* tmpstr = NULL;
208                                        tmpstr = ostrcat(getconfig("mc_ip_dirsort", NULL), NULL, 0, 0);
209                                        addconfigtmp("dirsort", tmpstr);
210                                        free(tmpstr), tmpstr = NULL;
211                                }
212
213                                printf("1view in: %d\n", view);
214                                printf("1tmpview in: %d\n", tmpview);
215                               
216                                mc_changeview(tmpview, filelist, apskin, flag);
217                                drawscreen(blackscreen, 0, 0);
218                                drawscreen(loadmediadb, 0, 0); 
219
220                                printf("2view in: %d\n", view);
221                                printf("2tmpview in: %d\n", tmpview);
222
223                                delownerrc(apskin);     
224                                getfilelist(apskin, filelistpath, filelist, filelistpath->text, filemask, tmpview, filelist->select->name);
225                                addscreenrc(apskin, filelist);
226       
227                                screensaver_delay = getconfigint("screensaver_delay", NULL);
228                                deinitscreensaver();
229                                if(getconfigint("screensaver", NULL) == 1)
230                                        initscreensaver();
231
232                                drawscreen(apskin, 0, 0);
233                        }
234                }
235                else if(rcret == getrcconfigint("rcinfo", NULL))
236                {
237                        if(status.play == 0 && status.pause == 0)
238                        {
239                                drawscreen(blackscreen, 0, 0);
240//                              if(filelist->select != NULL && filelist->select->input == NULL)
241//                              {
242                                        filename = createpath(filelistpath->text, filelist->select->name);
243                                        debug(133, "filename: %s", filename);                           
244                                        int check = playrcred(filename, NULL, playinfobarstatus, playertype, flag);
245                                        if(check == 1)
246                                                textbox(_("Message"), _("Update Iptv M3U ok"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 5, 0);
247
248//                              }
249                        }
250                        else
251                                playrcplay(filename, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
252
253                        if(status.play == 0 && status.pause == 0)
254                        {
255                                drawscreen(skin, 0, 0);
256                                drawscreen(blackscreen, 0, 0);
257                                drawscreen(loadmediadb, 0, 0);
258                                delownerrc(apskin);
259                                getfilelist(apskin, filelistpath, filelist, filelistpath->text, filemask, tmpview, filelist->select->name);
260                                addscreenrc(apskin, filelist);
261                                drawscreen(apskin, 0, 0);
262                        }       
263                }
264                else if(rcret == getrcconfigint("rcstop", NULL) || (rcret == getrcconfigint("rcexit", NULL) && status.play == 1))
265                {
266
267//                      if((status.play == 1) || (status.pause == 1))
268//                      {
269                                debug(50, "rcstop: stopplayback");
270                                drawscreen(blackscreen, 0, 0);
271                                drawscreen(loadmediadb, 0, 0);
272                                playerstop();
273                                singlepicstart("/var/usr/local/share/titan/plugins/mc/skin/default.mvi", 0);
274                       
275                                filelist->hidden = NO;
276                                listbox->hidden = YES;
277                                changetext(filelistpath, _(getconfig("mc_ip_path", NULL)));
278                                changetext(b2, _("Filelist-Mode"));
279
280                                // switch filelist
281                                delownerrc(apskin);
282                                addscreenrc(apskin, filelist);
283
284                                drawscreen(apskin, 0, 0);
285                                clearscreen(loadmediadb);
286                                clearscreen(blackscreen);
287                       
288                                sleep(1);
289                                status.playspeed = 0;
290                                status.pause = 0;
291                                status.play = 0;
292                                playlist = 0;
293
294                                writevfdmenu("iptvplayer Filelist-Mode");
295//                      }
296                }
297                else if(rcret == getrcconfigint("rcexit", NULL))
298                {
299                        debug(50, "exit - save mc_ip_path: %s", filelistpath->text);
300                        debug(50, "exit - save mc_ip_selectedfile: %s", filelistpath->text);
301                        drawscreen(blackscreen, 0, 0);
302                        drawscreen(loadmediadb, 0, 0);
303
304                        if(playlist == 0)
305                        {
306                                if(filelistpath->text != NULL && ostrcmp(getconfig("mc_ip_path", NULL), filelistpath->text) != 0)
307                                        addconfig("mc_ip_path", filelistpath->text);
308                                if(filelist->select != NULL && filelist->select->name != NULL && ostrcmp(getconfig("mc_ip_selectedfile", NULL), filelist->select->name) != 0)
309                                        addconfig("mc_ip_selectedfile", filelist->select->name);
310
311                        }
312
313                        servicestop(status.aktservice, 1, 1);   
314
315                        playerstop();
316                        drawscreen(blackscreen, 0, 0);
317                        drawscreen(loadmediadb, 0, 0);
318       
319                        sleep(1);
320                        filelist->hidden = NO;
321                        listbox->hidden = YES;
322                        changetext(b2, _("Filelist-Mode"));
323                        changetext(b3, _("Random"));
324                        changetext(b4, _("Repeat"));                                                                           
325                        status.playspeed = 0;
326                        status.pause = 0;
327                        status.play = 0;
328                        status.random = 0;
329                        status.repeat = 0;
330                        playlist = 0;
331                        writevfdmenu("Mediacenter");
332                       
333                        printf("exit: view=%d tmpview=%d\n", view, tmpview);
334                        unlink("/tmp/.autoscan");                       
335                        break;
336                }
337                else if(rcret == getrcconfigint("rcok", NULL))
338                {
339////////////
340                        playinfobarcount = 0;
341                        playinfobarstatus = 1;
342                        status.playspeed = 0;
343                        status.pause = 0;
344//                      status.play = 0;
345//                      playlist = 0;
346                        playinfobarcount = 0;
347////////////
348                        if(playlist == 1 && listbox->select != NULL)
349                        {
350                                debug(50, "listbox->select->name: %s", listbox->select->name);
351                                filename = ostrcat(listbox->select->name, NULL, 0, 0);
352                                showname = ostrcat(listbox->select->text, NULL, 0, 0);
353
354                                changetext(b2, _("Playlist-Mode"));
355                       
356                                debug(50, "screensaver title: %s", listbox->select->text);
357//                              if(screensaver != NULL && screensaver->type == 0)
358//                                      screensaver->value = listbox->select->text;
359
360                                debug(50, "playerstop");
361                                playerstop();
362                                sleep(1);
363//                              drawscreen(infobar, 0, 0);
364                                debug(50, "playerstart: %s", filename);
365                                eof = 0;
366
367//////
368                                servicestop(status.aktservice, 1, 1);
369                                drawscreen(skin, 0, 0);
370                                drawscreen(loadmediadb, 0, 0);
371                                setfbtransparent(255);
372//////
373                                playerret = playerstart(filename);
374                                playwritevfd(filename, NULL);
375
376//////
377                                clearscreen(loadmediadb);
378                                if(videooff == 0) screenplayinfobar(listbox->select->name, listbox->select->text, 0, playertype, 0);
379
380                                status.play = 1;
381//////
382
383                                #ifndef SIMULATE
384                                        if(playerret != 0)
385                                        {
386                                                textbox(_("Message"), _("Can't start playback !"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
387/*
388                                                writevfdmenu("iptvplayer Filelist-Mode");
389                                                status.play = 0;
390                                                playlist = 0;
391                                                status.playspeed = 0;
392
393                                                changetext(filelistpath, _(getconfig("mc_ip_path", NULL)));
394                                                filelist->hidden = NO;
395                                                listbox->hidden = YES;
396
397                                                delownerrc(apskin);
398                                                addscreenrc(apskin, filelist);
399                                                drawscreen(apskin, 0, 0);
400*/
401// test
402                                                status.play = 1;
403                                                eof = 2;
404// test
405                                                continue;
406                                        }
407                                #endif
408                       
409                                status.play = 1;
410                        }
411                        else if(filelist->select != NULL && filelist->select->input != NULL)
412                        {
413                                // workaround dont open folder on rcchup
414                                if(skip == 1)
415                                {
416                                        drawscreen(apskin, 0, 0);
417                                        writerc(getrcconfigint("rcok", NULL));
418                                        skip = 0;
419                                }
420                                else
421                                {
422                                        debug(50, "mc_mounter_chk start");
423                                        mc_mounter_chk(filelistpath);
424                                        debug(50, "mc_mounter_chk done");
425
426                                        char* checkautoscan = NULL;
427                                        checkautoscan = readfiletomem("/tmp/.autoscan", 0);
428
429                                        if(filelistpath->text != NULL && ostrcmp(checkautoscan, filelistpath->text) != 0)
430                                                unlink("/tmp/.autoscan");
431
432                                        free(checkautoscan), checkautoscan = NULL;
433                                }                               
434                        }
435                        else if(filelist->select != NULL && filelist->select->input == NULL)
436                        {
437                                if(filelistpath->text != NULL && ostrcmp(getconfig("mc_ip_path", NULL), filelistpath->text) != 0)
438                                        addconfig("mc_ip_path", filelistpath->text);
439                       
440                                debug(50, "filelist->select->text: %s", filelist->select->text);
441                                filename = createpath(filelistpath->text, filelist->select->name);
442                                printf("name: %s\n",filelist->select->name);
443                                printf("text: %s\n",filelist->select->text);
444
445                                if(cmpfilenameext(filename, ".rar") == 0 || cmpfilenameext(filename, ".iso") == 0 || cmpfilenameext(filename, ".img") == 0)
446                                {
447                                        debug(50, "mc_mounter_main filename: %s", filename);
448                                        //addconfig("mc_ip_path", filelistpath->text);
449                                        currentdirectory = ostrcat("", getconfig("mc_ip_path", NULL), 0, 0);
450                                        selectedfile = ostrcat(selectedfile, getconfig("mc_ip_selectedfile", NULL), 0, 0);
451
452                                        mc_mounter_main(0,filename,filelistpath,filelist,apskin,filemask,tmpview,currentdirectory);
453                                        debug(50, "mc_mounter_main done");
454       
455                                        singlepicstart("/var/usr/local/share/titan/plugins/mc/skin/default.mvi", 0);
456                                        continue;
457                                }
458                                else if(cmpfilenameext(filename, ".m3u") == 0 || cmpfilenameext(filename, ".pls") == 0)
459                                {
460                                        showplaylist(apskin, filelistpath, filelist, listbox, b2, 1, &playlist, &eof, &filename, &currentdirectory, &playertype, flag);
461                                        drawscreen(apskin, 0, 0);
462                                        continue;
463                                }
464
465                                changetext(b2, _("Filelist-Mode"));
466                       
467                                if(screensaver != NULL && screensaver->type == 0)
468                                        screensaver->value = (void*)filelist->select->text;
469
470                                debug(50, "playerstop");
471                                if((status.play == 1) || (status.pause == 1))
472                                {
473                                        playerstop();
474                                        sleep(1);
475                                }
476
477//                              drawscreen(infobar, 0, 0);
478                                debug(50, "playerstart: %s", filename);
479                                eof = 0;
480#ifdef MIPSEL
481                                // gstplayer cancelt wenn man showiframe benutzt
482                                // mvi showiframe screensaver not working and playback ok
483                                servicestop(status.aktservice, 0, 4);
484                                // mvi showiframe screensaver working and playback canceld
485                                //servicestop(status.aktservice, 1, 1);
486#endif
487
488                if (ostrstr(filename, "&tslivemode=1") == NULL)
489                    filename = ostrcat(filename, "&tslivemode=1", 1, 0);               
490
491                                debug(50, "playerstart change: %s", filename);
492
493                                playerret = playerstart(filename);
494                                playwritevfd(filename, NULL);
495
496                                #ifndef SIMULATE
497                                        if(playerret != 0)
498                                        {
499                                                writevfdmenu("iptvplayer Filelist-Mode");
500                                                status.play = 0;
501                                                status.playspeed = 0;
502                                                textbox(_("Message"), _("Can't start playback !"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
503                                                continue;
504                                        }
505                                #endif
506
507                                status.play = 1;
508
509                                singlepicstart("/var/usr/local/share/titan/plugins/mc/skin/default.mvi", 0);
510                                       
511                                if(status.mediadbfiles == 0 && getconfigint("mc_ip_autoscan", NULL) == 1 && !file_exist("/tmp/.autoscan"))
512                                {
513                                        if(filelistpath->text != NULL)
514                                        {
515                                                mediadbscan(filelistpath->text, 1001, 1);
516                                                writesys("/tmp/.autoscan", filelistpath->text, 0);
517                                                status.mediadbfiles = findfiles(currentdirectory, 1, 1, 1, 1); //count only
518                                        }
519                                        else
520                                        {
521                                                mediadbscan(currentdirectory, 1001, 1);
522                                                writesys("/tmp/.autoscan", currentdirectory, 0);
523                                                status.mediadbfiles = findfiles(currentdirectory, 1, 1, 1, 1); //count only
524                                        }
525                                        printf("status.mediadbfiles: %d\n",status.mediadbfiles);
526                                }
527                        }
528                }
529                if(eof >=1 || playerisplaying() == 0)
530                {
531                        if(status.play == 1)
532                                playereof(apskin, filelist, listbox, filelistpath, b2, NULL, NULL, NULL, &skip, &eof, &playlist, playertype, flag);
533                }
534        }
535
536        deinitscreensaver();
537               
538        status.hangtime = getconfigint("hangtime", NULL);
539        delconfigtmp("dirsort");
540
541        delmarkedscreennodes(apskin, FILELISTDELMARK);
542        delownerrc(apskin);
543        clearscreen(apskin);
544
545        free(lastid), lastid = NULL;
546        free(filename), filename = NULL;
547        free(showname), showname = NULL;
548        free(currentdirectory), currentdirectory = NULL;
549        free(selectedfile), selectedfile = NULL;
550
551        if(status.mediadbthread == NULL)
552        {
553                if(status.writemediadb == 1)
554                        writemediadb(getconfig("mediadbfile", NULL), NULL);
555                freemediadb(0);
556        }
557
558        clearscreen(blackscreen);
559        clearscreen(loadmediadb);
560
561        delconfigtmp("playerbuffersize");
562
563        writevfdmenu("Mediacenter");
564        debug(50, "closed");
565}
566
567#endif
568
Note: See TracBrowser for help on using the repository browser.