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

Last change on this file since 40379 was 40379, checked in by obi, 2 years ago

disable buffer playback

File size: 16.7 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;
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, NULL, 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, NULL, &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, NULL, &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, NULL, &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, 0, 0);
341
342                                changetext(b2, _("Playlist-Mode"));
343                       
344                                debug(50, "screensaver title: %s", listbox->select->text);
345//                              if(screensaver != NULL && screensaver->type == 0)
346//                                      screensaver->value = listbox->select->text;
347
348                                debug(50, "playerstop");
349                                playerstop();
350                                sleep(1);
351//                              drawscreen(infobar, 0, 0);
352                                debug(50, "playerstart: %s", filename);
353                                eof = 0;
354
355//////
356                                servicestop(status.aktservice, 1, 1);
357                                drawscreen(skin, 0, 0);
358                                drawscreen(loadmediadb, 0, 0);
359                                setfbtransparent(255);
360//////
361                                playerret = playerstart(filename);
362                                playwritevfd(filename, NULL);
363
364//////
365                                clearscreen(loadmediadb);
366                                if(videooff == 0) screenplayinfobar(listbox->select->name, listbox->select->text, 0, playertype, 0);
367
368                                status.play = 1;
369//////
370
371                                #ifndef SIMULATE
372                                        if(playerret != 0)
373                                        {
374                                                textbox(_("Message"), _("Can't start playback !"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
375/*
376                                                writevfdmenu("iptvplayer Filelist-Mode");
377                                                status.play = 0;
378                                                playlist = 0;
379                                                status.playspeed = 0;
380
381                                                changetext(filelistpath, _(getconfig("mc_ip_path", NULL)));
382                                                filelist->hidden = NO;
383                                                listbox->hidden = YES;
384
385                                                delownerrc(apskin);
386                                                addscreenrc(apskin, filelist);
387                                                drawscreen(apskin, 0, 0);
388*/
389// test
390                                                status.play = 1;
391                                                eof = 2;
392// test
393                                                continue;
394                                        }
395                                #endif
396                       
397                                status.play = 1;
398                        }
399                        else if(filelist->select != NULL && filelist->select->input != NULL)
400                        {
401                                // workaround dont open folder on rcchup
402                                if(skip == 1)
403                                {
404                                        drawscreen(apskin, 0, 0);
405                                        writerc(getrcconfigint("rcok", NULL));
406                                        skip = 0;
407                                }
408                                else
409                                {
410                                        debug(50, "mc_mounter_chk start");
411                                        mc_mounter_chk(filelistpath);
412                                        debug(50, "mc_mounter_chk done");
413
414                                        char* checkautoscan = NULL;
415                                        checkautoscan = readfiletomem("/tmp/.autoscan", 0);
416
417                                        if(filelistpath->text != NULL && ostrcmp(checkautoscan, filelistpath->text) != 0)
418                                                unlink("/tmp/.autoscan");
419
420                                        free(checkautoscan), checkautoscan = NULL;
421                                }                               
422                        }
423                        else if(filelist->select != NULL && filelist->select->input == NULL)
424                        {
425                                if(filelistpath->text != NULL && ostrcmp(getconfig("mc_ip_path", NULL), filelistpath->text) != 0)
426                                        addconfig("mc_ip_path", filelistpath->text);
427                       
428                                debug(50, "filelist->select->text: %s", filelist->select->text);
429                                filename = createpath(filelistpath->text, filelist->select->name);
430                                printf("name: %s\n",filelist->select->name);
431                                printf("text: %s\n",filelist->select->text);
432
433                                if(cmpfilenameext(filename, ".rar") == 0 || cmpfilenameext(filename, ".iso") == 0 || cmpfilenameext(filename, ".img") == 0)
434                                {
435                                        debug(50, "mc_mounter_main filename: %s", filename);
436                                        //addconfig("mc_ip_path", filelistpath->text);
437                                        currentdirectory = ostrcat("", getconfig("mc_ip_path", NULL), 0, 0);
438                                        selectedfile = ostrcat(selectedfile, getconfig("mc_ip_selectedfile", NULL), 0, 0);
439
440                                        mc_mounter_main(0,filename,filelistpath,filelist,apskin,filemask,tmpview,currentdirectory);
441                                        debug(50, "mc_mounter_main done");
442       
443                                        singlepicstart("/var/usr/local/share/titan/plugins/mc/skin/default.mvi", 0);
444                                        continue;
445                                }
446                                else if(cmpfilenameext(filename, ".m3u") == 0 || cmpfilenameext(filename, ".pls") == 0)
447                                {
448                                        showplaylist(apskin, filelistpath, filelist, listbox, b2, 1, &playlist, &eof, &filename, &currentdirectory, &playertype, flag);
449                                        drawscreen(apskin, 0, 0);
450                                        continue;
451                                }
452
453                                changetext(b2, _("Filelist-Mode"));
454                       
455                                if(screensaver != NULL && screensaver->type == 0)
456                                        screensaver->value = (void*)filelist->select->text;
457
458                                debug(50, "playerstop");
459                                if((status.play == 1) || (status.pause == 1))
460                                {
461                                        playerstop();
462                                        sleep(1);
463                                }
464
465//                              drawscreen(infobar, 0, 0);
466                                debug(50, "playerstart: %s", filename);
467                                eof = 0;
468#ifdef MIPSEL
469                                // gstplayer cancelt wenn man showiframe benutzt
470                                // mvi showiframe screensaver not working and playback ok
471                                servicestop(status.aktservice, 0, 4);
472                                // mvi showiframe screensaver working and playback canceld
473                                //servicestop(status.aktservice, 1, 1);
474#endif
475                               
476                                playerret = playerstart(filename);
477                                playwritevfd(filename, NULL);
478
479                                #ifndef SIMULATE
480                                        if(playerret != 0)
481                                        {
482                                                writevfdmenu("iptvplayer Filelist-Mode");
483                                                status.play = 0;
484                                                status.playspeed = 0;
485                                                textbox(_("Message"), _("Can't start playback !"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
486                                                continue;
487                                        }
488                                #endif
489
490                                status.play = 1;
491
492                                singlepicstart("/var/usr/local/share/titan/plugins/mc/skin/default.mvi", 0);
493                                       
494                                if(status.mediadbfiles == 0 && getconfigint("mc_ip_autoscan", NULL) == 1 && !file_exist("/tmp/.autoscan"))
495                                {
496                                        if(filelistpath->text != NULL)
497                                        {
498                                                mediadbscan(filelistpath->text, 1001, 1);
499                                                writesys("/tmp/.autoscan", filelistpath->text, 0);
500                                                status.mediadbfiles = findfiles(currentdirectory, 1, 1, 1, 1); //count only
501                                        }
502                                        else
503                                        {
504                                                mediadbscan(currentdirectory, 1001, 1);
505                                                writesys("/tmp/.autoscan", currentdirectory, 0);
506                                                status.mediadbfiles = findfiles(currentdirectory, 1, 1, 1, 1); //count only
507                                        }
508                                        printf("status.mediadbfiles: %d\n",status.mediadbfiles);
509                                }
510                        }
511                }
512                if(eof >=1 || playerisplaying() == 0)
513                {
514                        if(status.play == 1)
515                                playereof(apskin, filelist, listbox, filelistpath, b2, NULL, NULL, NULL, &skip, &eof, &playlist, playertype, flag);
516                }
517        }
518
519        deinitscreensaver();
520               
521        status.hangtime = getconfigint("hangtime", NULL);
522        delconfigtmp("dirsort");
523
524        delmarkedscreennodes(apskin, FILELISTDELMARK);
525        delownerrc(apskin);
526        clearscreen(apskin);
527
528        free(lastid), lastid = NULL;
529        free(filename), filename = NULL;
530        free(currentdirectory), currentdirectory = NULL;
531        free(selectedfile), selectedfile = NULL;
532
533        if(status.mediadbthread == NULL)
534        {
535                if(status.writemediadb == 1)
536                        writemediadb(getconfig("mediadbfile", NULL), NULL);
537                freemediadb(0);
538        }
539
540        clearscreen(blackscreen);
541        clearscreen(loadmediadb);
542
543        delconfigtmp("playerbuffersize");
544
545        writevfdmenu("Mediacenter");
546        debug(50, "closed");
547}
548
549#endif
550
Note: See TracBrowser for help on using the repository browser.