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

Last change on this file since 42897 was 42897, checked in by obi, 9 months ago

mc update iptv player

File size: 16.8 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(playlist == 0)
159                        {
160                                int sort = screendirsort();
161                                debug(50, "rcred: tmpsort=%d", sort);
162
163                                addconfiginttmp("dirsort", sort);
164                                mc_changeview(tmpview, filelist, apskin, flag);
165
166                                delownerrc(apskin);     
167                                getfilelist(apskin, filelistpath, filelist, filelistpath->text, filemask, tmpview, filelist->select->name);
168                                addscreenrc(apskin, filelist);
169                                drawscreen(apskin, 0, 0);
170                        }
171                }
172                else if(rcret == getrcconfigint("rcgreen", NULL))
173                {
174                        showplaylist(apskin, filelistpath, filelist, listbox, b2, 0, &playlist, &eof, &filename, &currentdirectory, &playertype, flag);
175                        drawscreen(apskin, 0, 0);
176                }
177                else if(rcret == getrcconfigint("rcmenu", NULL))
178                {
179                        if(status.play == 0 && status.pause == 0)
180                        {
181                                debug(50, "rcmenu: settings");
182
183                                view = getconfigint("mc_ip_view", NULL);
184                                printf("view in: %d\n", view);
185                                printf("tmpview in: %d\n", tmpview);
186
187                                screenmc_iptvplayer_settings();
188                                drawscreen(blackscreen, 0, 0);
189                                drawscreen(loadmediadb, 0, 0); 
190                       
191                                if(view != getconfigint("mc_ip_view", NULL))
192                                {
193                                        printf("view changed > change tmpview\n");
194                                        tmpview = getconfigint("mc_ip_view", NULL);
195                                }
196
197                                if(getconfig("mc_ip_dirsort", NULL) != getconfig("dirsort", NULL))
198                                {
199                                        char* tmpstr = NULL;
200                                        tmpstr = ostrcat(getconfig("mc_ip_dirsort", NULL), NULL, 0, 0);
201                                        addconfigtmp("dirsort", tmpstr);
202                                        free(tmpstr), tmpstr = NULL;
203                                }
204
205                                printf("1view in: %d\n", view);
206                                printf("1tmpview in: %d\n", tmpview);
207                               
208                                mc_changeview(tmpview, filelist, apskin, flag);
209                                drawscreen(blackscreen, 0, 0);
210                                drawscreen(loadmediadb, 0, 0); 
211
212                                printf("2view in: %d\n", view);
213                                printf("2tmpview in: %d\n", tmpview);
214
215                                delownerrc(apskin);     
216                                getfilelist(apskin, filelistpath, filelist, filelistpath->text, filemask, tmpview, filelist->select->name);
217                                addscreenrc(apskin, filelist);
218       
219                                screensaver_delay = getconfigint("screensaver_delay", NULL);
220                                deinitscreensaver();
221                                if(getconfigint("screensaver", NULL) == 1)
222                                        initscreensaver();
223
224                                drawscreen(apskin, 0, 0);
225                        }
226                }
227                else if(rcret == getrcconfigint("rcinfo", NULL))
228                {
229                        if(status.play == 0 && status.pause == 0)
230                        {
231                                drawscreen(blackscreen, 0, 0);
232//                              if(filelist->select != NULL && filelist->select->input == NULL)
233//                              {
234                                        filename = createpath(filelistpath->text, filelist->select->name);
235                                        debug(133, "filename: %s", filename);                           
236                                        playrcred(filename, NULL, playinfobarstatus, playertype, flag);
237//                              }
238                        }
239                        else
240                                playrcplay(filename, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
241
242                        if(status.play == 0 && status.pause == 0)
243                        {
244                                drawscreen(skin, 0, 0);
245                                drawscreen(blackscreen, 0, 0);
246                                drawscreen(loadmediadb, 0, 0);
247                                delownerrc(apskin);
248                                getfilelist(apskin, filelistpath, filelist, filelistpath->text, filemask, tmpview, filelist->select->name);
249                                addscreenrc(apskin, filelist);
250                                drawscreen(apskin, 0, 0);
251                        }       
252                }
253                else if(rcret == getrcconfigint("rcstop", NULL) || (rcret == getrcconfigint("rcexit", NULL) && status.play == 1))
254                {
255
256//                      if((status.play == 1) || (status.pause == 1))
257//                      {
258                                debug(50, "rcstop: stopplayback");
259                                drawscreen(blackscreen, 0, 0);
260                                drawscreen(loadmediadb, 0, 0);
261                                playerstop();
262                                singlepicstart("/var/usr/local/share/titan/plugins/mc/skin/default.mvi", 0);
263                       
264                                filelist->hidden = NO;
265                                listbox->hidden = YES;
266                                changetext(filelistpath, _(getconfig("mc_ip_path", NULL)));
267                                changetext(b2, _("Filelist-Mode"));
268
269                                // switch filelist
270                                delownerrc(apskin);
271                                addscreenrc(apskin, filelist);
272
273                                drawscreen(apskin, 0, 0);
274                                clearscreen(loadmediadb);
275                                clearscreen(blackscreen);
276                       
277                                sleep(1);
278                                status.playspeed = 0;
279                                status.pause = 0;
280                                status.play = 0;
281                                playlist = 0;
282
283                                writevfdmenu("iptvplayer Filelist-Mode");
284//                      }
285                }
286                else if(rcret == getrcconfigint("rcexit", NULL))
287                {
288                        debug(50, "exit - save mc_ip_path: %s", filelistpath->text);
289                        debug(50, "exit - save mc_ip_selectedfile: %s", filelistpath->text);
290                        drawscreen(blackscreen, 0, 0);
291                        drawscreen(loadmediadb, 0, 0);
292
293                        if(playlist == 0)
294                        {
295                                if(filelistpath->text != NULL && ostrcmp(getconfig("mc_ip_path", NULL), filelistpath->text) != 0)
296                                        addconfig("mc_ip_path", filelistpath->text);
297                                if(filelist->select != NULL && filelist->select->name != NULL && ostrcmp(getconfig("mc_ip_selectedfile", NULL), filelist->select->name) != 0)
298                                        addconfig("mc_ip_selectedfile", filelist->select->name);
299
300                        }
301
302                        servicestop(status.aktservice, 1, 1);   
303
304                        playerstop();
305                        drawscreen(blackscreen, 0, 0);
306                        drawscreen(loadmediadb, 0, 0);
307       
308                        sleep(1);
309                        filelist->hidden = NO;
310                        listbox->hidden = YES;
311                        changetext(b2, _("Filelist-Mode"));
312                        changetext(b3, _("Random"));
313                        changetext(b4, _("Repeat"));                                                                           
314                        status.playspeed = 0;
315                        status.pause = 0;
316                        status.play = 0;
317                        status.random = 0;
318                        status.repeat = 0;
319                        playlist = 0;
320                        writevfdmenu("Mediacenter");
321                       
322                        printf("exit: view=%d tmpview=%d\n", view, tmpview);
323                        unlink("/tmp/.autoscan");                       
324                        break;
325                }
326                else if(rcret == getrcconfigint("rcok", NULL))
327                {
328////////////
329                        playinfobarcount = 0;
330                        playinfobarstatus = 1;
331                        status.playspeed = 0;
332                        status.pause = 0;
333//                      status.play = 0;
334//                      playlist = 0;
335                        playinfobarcount = 0;
336////////////
337                        if(playlist == 1 && listbox->select != NULL)
338                        {
339                                debug(50, "listbox->select->name: %s", listbox->select->name);
340                                filename = ostrcat(listbox->select->name, NULL, 0, 0);
341                                showname = ostrcat(listbox->select->text, NULL, 0, 0);
342
343                                changetext(b2, _("Playlist-Mode"));
344                       
345                                debug(50, "screensaver title: %s", listbox->select->text);
346//                              if(screensaver != NULL && screensaver->type == 0)
347//                                      screensaver->value = listbox->select->text;
348
349                                debug(50, "playerstop");
350                                playerstop();
351                                sleep(1);
352//                              drawscreen(infobar, 0, 0);
353                                debug(50, "playerstart: %s", filename);
354                                eof = 0;
355
356//////
357                                servicestop(status.aktservice, 1, 1);
358                                drawscreen(skin, 0, 0);
359                                drawscreen(loadmediadb, 0, 0);
360                                setfbtransparent(255);
361//////
362                                playerret = playerstart(filename);
363                                playwritevfd(filename, NULL);
364
365//////
366                                clearscreen(loadmediadb);
367                                if(videooff == 0) screenplayinfobar(listbox->select->name, listbox->select->text, 0, playertype, 0);
368
369                                status.play = 1;
370//////
371
372                                #ifndef SIMULATE
373                                        if(playerret != 0)
374                                        {
375                                                textbox(_("Message"), _("Can't start playback !"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
376/*
377                                                writevfdmenu("iptvplayer Filelist-Mode");
378                                                status.play = 0;
379                                                playlist = 0;
380                                                status.playspeed = 0;
381
382                                                changetext(filelistpath, _(getconfig("mc_ip_path", NULL)));
383                                                filelist->hidden = NO;
384                                                listbox->hidden = YES;
385
386                                                delownerrc(apskin);
387                                                addscreenrc(apskin, filelist);
388                                                drawscreen(apskin, 0, 0);
389*/
390// test
391                                                status.play = 1;
392                                                eof = 2;
393// test
394                                                continue;
395                                        }
396                                #endif
397                       
398                                status.play = 1;
399                        }
400                        else if(filelist->select != NULL && filelist->select->input != NULL)
401                        {
402                                // workaround dont open folder on rcchup
403                                if(skip == 1)
404                                {
405                                        drawscreen(apskin, 0, 0);
406                                        writerc(getrcconfigint("rcok", NULL));
407                                        skip = 0;
408                                }
409                                else
410                                {
411                                        debug(50, "mc_mounter_chk start");
412                                        mc_mounter_chk(filelistpath);
413                                        debug(50, "mc_mounter_chk done");
414
415                                        char* checkautoscan = NULL;
416                                        checkautoscan = readfiletomem("/tmp/.autoscan", 0);
417
418                                        if(filelistpath->text != NULL && ostrcmp(checkautoscan, filelistpath->text) != 0)
419                                                unlink("/tmp/.autoscan");
420
421                                        free(checkautoscan), checkautoscan = NULL;
422                                }                               
423                        }
424                        else if(filelist->select != NULL && filelist->select->input == NULL)
425                        {
426                                if(filelistpath->text != NULL && ostrcmp(getconfig("mc_ip_path", NULL), filelistpath->text) != 0)
427                                        addconfig("mc_ip_path", filelistpath->text);
428                       
429                                debug(50, "filelist->select->text: %s", filelist->select->text);
430                                filename = createpath(filelistpath->text, filelist->select->name);
431                                printf("name: %s\n",filelist->select->name);
432                                printf("text: %s\n",filelist->select->text);
433
434                                if(cmpfilenameext(filename, ".rar") == 0 || cmpfilenameext(filename, ".iso") == 0 || cmpfilenameext(filename, ".img") == 0)
435                                {
436                                        debug(50, "mc_mounter_main filename: %s", filename);
437                                        //addconfig("mc_ip_path", filelistpath->text);
438                                        currentdirectory = ostrcat("", getconfig("mc_ip_path", NULL), 0, 0);
439                                        selectedfile = ostrcat(selectedfile, getconfig("mc_ip_selectedfile", NULL), 0, 0);
440
441                                        mc_mounter_main(0,filename,filelistpath,filelist,apskin,filemask,tmpview,currentdirectory);
442                                        debug(50, "mc_mounter_main done");
443       
444                                        singlepicstart("/var/usr/local/share/titan/plugins/mc/skin/default.mvi", 0);
445                                        continue;
446                                }
447                                else if(cmpfilenameext(filename, ".m3u") == 0 || cmpfilenameext(filename, ".pls") == 0)
448                                {
449                                        showplaylist(apskin, filelistpath, filelist, listbox, b2, 1, &playlist, &eof, &filename, &currentdirectory, &playertype, flag);
450                                        drawscreen(apskin, 0, 0);
451                                        continue;
452                                }
453
454                                changetext(b2, _("Filelist-Mode"));
455                       
456                                if(screensaver != NULL && screensaver->type == 0)
457                                        screensaver->value = (void*)filelist->select->text;
458
459                                debug(50, "playerstop");
460                                if((status.play == 1) || (status.pause == 1))
461                                {
462                                        playerstop();
463                                        sleep(1);
464                                }
465
466//                              drawscreen(infobar, 0, 0);
467                                debug(50, "playerstart: %s", filename);
468                                eof = 0;
469#ifdef MIPSEL
470                                // gstplayer cancelt wenn man showiframe benutzt
471                                // mvi showiframe screensaver not working and playback ok
472                                servicestop(status.aktservice, 0, 4);
473                                // mvi showiframe screensaver working and playback canceld
474                                //servicestop(status.aktservice, 1, 1);
475#endif
476                               
477                                playerret = playerstart(filename);
478                                playwritevfd(filename, NULL);
479
480                                #ifndef SIMULATE
481                                        if(playerret != 0)
482                                        {
483                                                writevfdmenu("iptvplayer Filelist-Mode");
484                                                status.play = 0;
485                                                status.playspeed = 0;
486                                                textbox(_("Message"), _("Can't start playback !"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
487                                                continue;
488                                        }
489                                #endif
490
491                                status.play = 1;
492
493                                singlepicstart("/var/usr/local/share/titan/plugins/mc/skin/default.mvi", 0);
494                                       
495                                if(status.mediadbfiles == 0 && getconfigint("mc_ip_autoscan", NULL) == 1 && !file_exist("/tmp/.autoscan"))
496                                {
497                                        if(filelistpath->text != NULL)
498                                        {
499                                                mediadbscan(filelistpath->text, 1001, 1);
500                                                writesys("/tmp/.autoscan", filelistpath->text, 0);
501                                                status.mediadbfiles = findfiles(currentdirectory, 1, 1, 1, 1); //count only
502                                        }
503                                        else
504                                        {
505                                                mediadbscan(currentdirectory, 1001, 1);
506                                                writesys("/tmp/.autoscan", currentdirectory, 0);
507                                                status.mediadbfiles = findfiles(currentdirectory, 1, 1, 1, 1); //count only
508                                        }
509                                        printf("status.mediadbfiles: %d\n",status.mediadbfiles);
510                                }
511                        }
512                }
513                if(eof >=1 || playerisplaying() == 0)
514                {
515                        if(status.play == 1)
516                                playereof(apskin, filelist, listbox, filelistpath, b2, NULL, NULL, NULL, &skip, &eof, &playlist, playertype, flag);
517                }
518        }
519
520        deinitscreensaver();
521               
522        status.hangtime = getconfigint("hangtime", NULL);
523        delconfigtmp("dirsort");
524
525        delmarkedscreennodes(apskin, FILELISTDELMARK);
526        delownerrc(apskin);
527        clearscreen(apskin);
528
529        free(lastid), lastid = NULL;
530        free(filename), filename = NULL;
531        free(showname), showname = NULL;
532        free(currentdirectory), currentdirectory = NULL;
533        free(selectedfile), selectedfile = NULL;
534
535        if(status.mediadbthread == NULL)
536        {
537                if(status.writemediadb == 1)
538                        writemediadb(getconfig("mediadbfile", NULL), NULL);
539                freemediadb(0);
540        }
541
542        clearscreen(blackscreen);
543        clearscreen(loadmediadb);
544
545        delconfigtmp("playerbuffersize");
546
547        writevfdmenu("Mediacenter");
548        debug(50, "closed");
549}
550
551#endif
552
Note: See TracBrowser for help on using the repository browser.