source: titan/plugins/mc/mc_videoplayer.h @ 40251

Last change on this file since 40251 was 40251, checked in by obi, 5 years ago

[mc] videoplayer optimize iptv m3u support show channel name and allowed ch+/- on playlist playback switch to next/prev file

File size: 31.8 KB
Line 
1#ifndef MC_VIDEOPLAYER_H
2#define MC_VIDEOPLAYER_H
3
4extern struct skin* skin;
5extern struct screensaver* screensaver;
6extern struct mediadb* mediadb;
7
8void screenmc_videoplayer()
9{
10        int videooff = 0;
11        // workaround for grey background mvi
12        struct skin* loadmediadb = getscreen("loading");
13        struct skin* blackscreen = getscreen("blackscreen");
14        drawscreen(blackscreen, 0, 0);
15        drawscreen(loadmediadb, 0, 0);
16
17        readmediadb(getconfig("mediadbfile", NULL), 0, 0);
18
19        char* lastid = NULL, *filename = NULL, *tmppolicy = NULL ,*currentdirectory = NULL, *selectedfile = NULL, *tmpstr = NULL;
20        int rcret = 0, rcwait = 1000, playerret = 0, flag = 1, skip = 0, eof = 0, playinfobarcount = 0, playinfobarstatus = 1, tmpview = 0, playlist = 0, playertype = 0, mviwait = 0, mvinum = 0, exit = 0;
21
22        tmpstr = ostrcat(getconfig("mc_vp_dirsort", NULL), NULL, 0, 0);
23        addconfigtmp("dirsort", tmpstr);
24        free(tmpstr), tmpstr = NULL;
25
26        // main screen
27        struct skin* apskin = getscreen("mc_videoplayer");
28        struct skin* filelistpath = getscreennode(apskin, "filelistpath");
29        struct skin* filelist = getscreennode(apskin, "filelist");
30        struct skin* listbox = getscreennode(apskin, "listbox");
31        struct skin* b2 = getscreennode(apskin, "b2");
32        struct skin* b3 = getscreennode(apskin, "b3");
33        struct skin* b4 = getscreennode(apskin, "b4");
34        struct skin* plot = getscreennode(apskin, "plot");
35        struct skin* title = getscreennode(apskin, "title");
36        struct skin* thumb = getscreennode(apskin, "thumb");
37        struct skin* stars = getscreennode(apskin, "stars");
38
39//      apskin->bgcol = getskinconfigint("black", NULL);
40       
41        if(getconfigint("mc_vp_uselastdir", NULL) == 1)
42        {
43                currentdirectory = ostrcat(currentdirectory, getconfig("mc_vp_path", NULL), 1, 0);
44                selectedfile = ostrcat(selectedfile, getconfig("mc_vp_selectedfile", NULL), 1, 0);
45        }
46        else
47        {
48                currentdirectory = ostrcat(currentdirectory, getconfig("mc_vp_defaultdir", NULL), 1, 0);               
49        }
50
51        // enable listbox and set hidden
52        listbox->aktpage = -1;
53        listbox->aktline = 0;
54        listbox->hidden = YES;
55
56        // read configs
57        int view = getconfigint("mc_vp_view", NULL);
58        int skip13 = getconfigint("skip13", NULL);
59        int skip46 = getconfigint("skip46", NULL);
60        int skip79 = getconfigint("skip79", NULL);
61
62        // save policy
63        tmppolicy = getpolicy();
64       
65        // set allowed filemask
66        char* filemask = NULL;
67        if(file_exist("/mnt/swapextensions/etc/.codecpack") || file_exist("/var/swap/etc/.codecpack") || file_exist("/var/etc/.codecpack"))
68                filemask = ostrcat("*.m3u8 *.m3u *.pls *.ifo *.rar *.iso *.img *.avi *.dat *.divx *.flv *.mkv *.m4v *.mp4 *.mov *.mpg *.mpeg *.mts *.m2ts *.trp *.ts *.vdr *.vob *.rm *.wmv", NULL, 0, 0);
69        else
70                filemask = ostrcat("*.m3u *.pls *.avi *.mkv *.mpg *.mpeg *.ts *.mp2t", NULL, 0, 0);
71       
72        // disable global transparent/hangtime
73//      setfbtransparent(255);
74        status.hangtime = 99999;
75        status.playspeed = 0, status.play = 0, status.pause = 0, status.random = 0;
76
77        debug(50, "start screenmc_videoplayer view=%d", view);
78
79//      singlepicstart("/var/usr/local/share/titan/plugins/mc/skin/default.mvi", 0);
80        char* defaultmvi = NULL;
81        defaultmvi = createpluginpath("/mc/skin/default.mvi", 0);
82        singlepicstart(defaultmvi, 0);
83
84        if(getconfigint("screensaver", NULL) == 1)
85                initscreensaver();
86
87        tmpview = view;
88        mc_changeview(view, filelist, apskin, flag);
89        thumb->hidden = YES;
90        plot->hidden = YES;
91        title->hidden = YES;
92        stars->hidden = YES;
93
94//      clearscreen(loadmediadb);       
95        getfilelist(apskin, filelistpath, filelist, currentdirectory, filemask, tmpview, selectedfile);
96        addscreenrc(apskin, filelist);
97
98        char* savecmd = NULL;
99
100        if(!file_exist("/mnt/swapextensions/player"))   
101                mkdir("/mnt/swapextensions/player", 0777);
102       
103        int refresh = 0;                       
104        while(1)
105        {
106               
107                rcret = waitrcext(apskin, rcwait, 0, tmpview);
108                if(filelist->select != NULL && filelist->select->input != NULL)
109                        refresh = 1;
110                else
111                        refresh = 0;
112                       
113                if(status.play == 1 || status.playspeed != 0)
114                {
115                        playinfobarcount ++;
116                        if(playinfobarstatus > 0)
117                        {
118                                if(videooff == 0) screenplayinfobar(filename, NULL, 0, playertype, 0);
119                        }
120                        if(playinfobarstatus == 1 && playinfobarcount >= getconfigint("infobartimeout", NULL))
121                        {
122                                playinfobarstatus = 0;
123                                if(videooff == 0) screenplayinfobar(NULL, NULL, 1, playertype, 0);
124                        }
125                }
126                else if(exit == 0 && tmpview == 3 && filelist->select != NULL && status.play == 0 && status.pause == 0)
127                {
128                        char* cmd = NULL;
129                        char* pic = NULL;
130
131                        int waittime = 5, foundthumb = 0, foundplot = 0, foundtitle = 0, foundstars = 0;
132                        waittime = getconfigint("mc_vp_backdrop_interval", NULL);
133
134                        if(filelist->select != NULL && filelist->select->input == NULL)
135                        {
136                                struct mediadb* mnode = getmediadb(filelistpath->text, filelist->select->name, 0);
137
138                                if(mnode != NULL)
139                                {
140                                        if(mnode->id != NULL)
141                                        {
142                                                if(ostrcmp(lastid, mnode->id) != 0)                                     
143                                                {
144                                                        free(lastid), lastid = NULL;
145                                                        lastid = ostrcat(lastid, mnode->id, 1, 0);
146                                                        mvinum = 1;
147                                                        mviwait = waittime;
148                                                }
149                                                else
150                                                {
151                                                        if(mvinum == mnode->backdropcount)
152                                                                mvinum = 1;
153
154                                                        if(mviwait > waittime && mvinum < mnode->backdropcount)
155                                                                mvinum++;
156                                                }
157
158                                                tmpstr = ostrcat(tmpstr, getconfig("mediadbpath", NULL), 1, 0);
159                                                tmpstr = ostrcat(tmpstr, "/", 1, 0);                                                                                                                                                   
160                                                tmpstr = ostrcat(tmpstr, mnode->id, 1, 0);
161       
162                                                pic = ostrcat(tmpstr, "_thumb.jpg", 0, 0);
163                                               
164                                                cmd = ostrcat(tmpstr, "_backdrop", 0, 0);
165                                                cmd = ostrcat(cmd, oitoa(mvinum), 1, 0);
166                                                cmd = ostrcat(cmd, ".mvi", 1, 0);
167                                                free(tmpstr), tmpstr = NULL;
168                                        }
169                                        if(mnode->plot != NULL)
170                                                changetext(plot, mnode->plot);
171                                        if(mnode->title != NULL)
172                                                changetext(title, mnode->title);
173
174                                        if(mnode->poster == NULL)
175                                        {
176                                                thumb->hidden = YES;
177                                                free(pic), pic = NULL;
178                                                foundthumb = 0;
179                                        }
180                                        else
181                                        {
182                                                thumb->hidden = NO;
183                                                changepic(thumb, pic);
184                                                free(pic), pic = NULL;
185                                                foundthumb = 1;
186                                        }
187                                       
188                                        if(mnode->plot == NULL)
189                                        {
190                                                foundplot = 0;
191                                                plot->hidden = YES;
192                                        }
193                                        else
194                                        {
195                                                foundplot = 1;
196                                                plot->hidden = NO;
197                                        }
198                                       
199                                        if(mnode->title == NULL)
200                                        {
201                                                foundtitle = 0;
202                                                title->hidden = YES;
203                                        }
204                                        else
205                                        {
206                                                foundtitle = 1;
207                                                title->hidden = NO;
208                                        }
209                                       
210                                        if(mnode->rating != 0)
211                                        {
212                                                foundstars = 1;
213                                                int rating = mnode->rating;
214                                                if(rating == 10)
215                                                        changepic(stars, "%pluginpath%/mc/skin/stars10.png");
216                                                else if(rating > 9)
217                                                        changepic(stars, "%pluginpath%/mc/skin/stars9x.png");
218                                                else if(rating == 9)
219                                                        changepic(stars, "%pluginpath%/mc/skin/stars9.png");
220                                                else if(rating > 8)
221                                                        changepic(stars, "%pluginpath%/mc/skin/stars8x.png");
222                                                else if(rating == 8)
223                                                        changepic(stars, "%pluginpath%/mc/skin/stars8.png");
224                                                else if(rating > 7)
225                                                        changepic(stars, "%pluginpath%/mc/skin/stars7x.png");
226                                                else if(rating == 7)
227                                                        changepic(stars, "%pluginpath%/mc/skin/stars7.png");
228                                                else if(rating > 6)
229                                                        changepic(stars, "%pluginpath%/mc/skin/stars6x.png");
230                                                else if(rating == 6)
231                                                        changepic(stars, "%pluginpath%/mc/skin/stars6.png");
232                                                else if(rating > 5)
233                                                        changepic(stars, "%pluginpath%/mc/skin/stars5x.png");
234                                                else if(rating == 5)
235                                                        changepic(stars, "%pluginpath%/mc/skin/stars5.png");
236                                                else if(rating > 5)
237                                                        changepic(stars, "%pluginpath%/mc/skin/stars5x.png");
238                                                else if(rating == 5)
239                                                        changepic(stars, "%pluginpath%/mc/skin/stars5.png");
240                                                else if(rating > 4)
241                                                        changepic(stars, "%pluginpath%/mc/skin/stars4x.png");
242                                                else if(rating == 4)
243                                                        changepic(stars, "%pluginpath%/mc/skin/stars4.png");
244                                                else if(rating > 3)
245                                                        changepic(stars, "%pluginpath%/mc/skin/stars3x.png");
246                                                else if(rating == 3)
247                                                        changepic(stars, "%pluginpath%/mc/skin/stars3.png");
248                                                else if(rating > 2)
249                                                        changepic(stars, "%pluginpath%/mc/skin/stars2x.png");
250                                                else if(rating == 2)
251                                                        changepic(stars, "%pluginpath%/mc/skin/stars2.png");
252                                                else if(rating > 1)
253                                                        changepic(stars, "%pluginpath%/mc/skin/stars1x.png");
254                                                else if(rating == 1)
255                                                        changepic(stars, "%pluginpath%/mc/skin/stars1.png");
256                                                else if(rating > 0)
257                                                        changepic(stars, "%pluginpath%/mc/skin/stars0x.png");
258                                                else
259                                                        changepic(stars, NULL);
260                                                stars->hidden = NO;
261                                        }
262                                        else
263                                        {
264                                                foundstars = 0;
265                                                changepic(stars, NULL);
266                                                stars->hidden = YES;
267                                        }
268                                }
269                                else   
270                                {
271                                        refresh = 1;                           
272                                        foundthumb = 0;
273                                        foundplot = 0;
274                                        foundtitle = 0;
275                                        foundstars = 0;
276                                        thumb->hidden = YES;
277                                        plot->hidden = YES;
278                                        title->hidden = YES;
279                                        stars->hidden = YES;
280                                        free(pic), pic = NULL;
281                                }
282                                       
283                                drawscreen(apskin, 0, 0);
284                        }
285
286                        debug(50, "cmd: %s", cmd);     
287                        if(!file_exist(cmd))
288                        {
289                                free(cmd), cmd = NULL;
290//                              cmd = ostrcat(cmd, "/var/usr/local/share/titan/plugins/mc/skin/default.mvi", 1, 0);
291                                cmd = ostrcat(cmd, defaultmvi, 1, 0);
292                                mviwait = waittime;
293                                if(foundthumb == 0)
294                                        thumb->hidden = YES;
295                                if(foundplot == 0)
296                                        plot->hidden = YES;
297                                if(foundtitle == 0)
298                                        title->hidden = YES;
299                                if(foundstars == 0)                                     
300                                        stars->hidden = YES;
301
302                                drawscreen(apskin, 0, 0);
303                        }
304
305                        if(savecmd == NULL)
306                        {
307                                singlepicstart(cmd, 0);
308                                free(savecmd), savecmd = NULL;
309                                savecmd = ostrcat(savecmd, cmd, 1, 0);
310                        }
311                        else
312                        {
313                                if((refresh == 1 ) || (exit == 0 && ostrcmp(savecmd, cmd) != 0 && mviwait > waittime - 1))
314                                {
315                                        singlepicstart(cmd, 0);
316                                        free(savecmd), savecmd = NULL;
317                                        savecmd = ostrcat(savecmd, cmd, 1, 0);
318                                        mviwait = 0;
319                                }
320                                else if(waittime == 0)
321                                {
322                                        debug(50, "disable Backdrop Interval");
323                                }
324                                else
325                                        mviwait++;
326                        }
327                        free(cmd), cmd = NULL;
328                }
329
330                if (rcret == getrcconfigint("rcrecord", NULL))
331                {
332                        system("grab -j 100");
333                        textbox(_("Message"), _("Shooting Background done !\nSave Screenshoot Path: /tmp/screenshot.jpg"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0);
334                }
335                else if(rcret == getrcconfigint("rc2", NULL))
336                {
337                        if((status.play == 1) || (status.playspeed != 0))
338                                playrcjumpto(filename, NULL, &playinfobarstatus, &playinfobarcount, playertype, flag);
339                }
340                else if(rcret == getrcconfigint("rc1", NULL))
341                {
342                        if((status.play == 1) || (status.playspeed != 0))
343                                playrcjumpr(filename, NULL, skip13, &playinfobarstatus, &playinfobarcount, playertype, flag);
344                }
345                else if(rcret == getrcconfigint("rc4", NULL))
346                {
347                        if((status.play == 1) || (status.playspeed != 0))
348                                playrcjumpr(filename, NULL, skip46, &playinfobarstatus, &playinfobarcount, playertype, flag);
349                }
350                else if(rcret == getrcconfigint("rc7", NULL))
351                {
352                        if((status.play == 1) || (status.playspeed != 0))
353                                playrcjumpr(filename, NULL, skip79, &playinfobarstatus, &playinfobarcount, playertype, flag);
354                }
355                else if(rcret == getrcconfigint("rc3", NULL))
356                {
357                        if((status.play == 1) || (status.playspeed != 0))
358                                playrcjumpf(filename, NULL, skip13, &playinfobarstatus, &playinfobarcount, playertype, flag);
359                }
360                else if(rcret == getrcconfigint("rc6", NULL))
361                {
362                        if((status.play == 1) || (status.playspeed != 0))
363                                playrcjumpf(filename, NULL, skip46, &playinfobarstatus, &playinfobarcount, playertype, flag);
364                }
365                else if(rcret == getrcconfigint("rc9", NULL))
366                {
367                        if((status.play == 1) || (status.playspeed != 0))
368                                playrcjumpf(filename, NULL, skip79, &playinfobarstatus, &playinfobarcount, playertype, flag);
369                }
370                else if(rcret == getrcconfigint("rcleft", NULL))
371                {
372                        if((status.play == 1) || (status.playspeed != 0))
373                                playrcjumpr(filename, NULL, 60, &playinfobarstatus, &playinfobarcount, playertype, flag);
374                }
375                else if(rcret == getrcconfigint("rcright", NULL))
376                {
377                        if((status.play == 1) || (status.playspeed != 0))
378                                playrcjumpf(filename, NULL, 60, &playinfobarstatus, &playinfobarcount, playertype, flag);
379                }
380                else if(rcret == getrcconfigint("rcdown", NULL))
381                {
382                        if((status.play == 1) || (status.playspeed != 0))
383                                playrcjumpr(filename, NULL, 600, &playinfobarstatus, &playinfobarcount, playertype, flag);
384                }
385                else if(rcret == getrcconfigint("rcup", NULL))
386                {
387                        if(status.play == 1 || status.playspeed != 0 || status.pause == 1)
388                                playrcjumpf(filename, NULL, 600, &playinfobarstatus, &playinfobarcount, playertype, flag);
389                }
390
391                else if(rcret == getrcconfigint("rcff", NULL))
392                {
393                        if(status.play == 1 || status.playspeed != 0 || status.pause == 1)
394                                playrcff(filename, NULL, &playinfobarstatus, &playinfobarcount, playertype, flag);
395                }       
396                else if(rcret == getrcconfigint("rcfr", NULL))
397                {
398                        if((status.play == 1) || (status.playspeed != 0))
399                                playrcfr(filename, NULL, &playinfobarstatus, &playinfobarcount, playertype, flag);
400                }
401                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))
402                {
403                        if((status.play == 1) || (status.pause == 1) || (status.playspeed != 0))
404                                playrcpause(filename, NULL, &playinfobarstatus, &playinfobarcount, playertype, flag);
405                }
406                else if(rcret == getrcconfigint("rcplay", NULL))
407                {
408                        if((status.play == 1) || (status.pause == 1) || (status.playspeed != 0))
409                                playrcplay(filename, NULL, &playinfobarstatus, &playinfobarcount, playertype, flag);
410                }
411                else if(rcret == getrcconfigint("rcnext", NULL) || rcret == getrcconfigint("rcchdown", NULL))
412                {
413                        if(status.play == 1)
414                                eof = 1;
415                }
416                else if(rcret == getrcconfigint("rcprev", NULL) || rcret == getrcconfigint("rcchup", NULL))
417                {
418                        if(status.play == 1)
419                                eof = 2;
420                }
421                else if(rcret == getrcconfigint("rcblue", NULL))
422                {
423                        if(status.play == 1)
424                                playrcblue(filename, NULL, playinfobarstatus, playertype, flag);
425                        else
426                        {
427                                if(status.repeat == 0)
428                                {
429                                        changetext(b4, _("Repeat-On"));
430                                        drawscreen(apskin, 0, 0);
431                                        status.repeat = 1;
432                                }
433                                else
434                                {
435                                        status.repeat = 0;
436                                        changetext(b4, _("Repeat"));
437                                        drawscreen(apskin, 0, 0);
438                                }
439                        }
440                }
441                else if(rcret == getrcconfigint("rcyellow", NULL))
442                {
443                        if(status.play == 1)
444                                playrcyellow(filename, NULL, playinfobarstatus, playertype, flag);                                             
445                        else
446                                playerrandom(apskin, filelist, listbox, b3, playlist, flag);
447                }
448                else if(rcret == getrcconfigint("rcred", NULL))
449                {
450                        if(status.play == 1)
451                                playrcred(filename, NULL, playinfobarstatus, playertype, flag);
452                        else
453                        {
454                                if(playlist == 0)
455                                {
456                                        int sort = screendirsort();
457                                        debug(50, "rcred: tmpsort=%d", sort);
458
459                                        // fixt grey if sorting >10s
460                                        drawscreen(skin, 0, 0);
461       
462                                        addconfiginttmp("dirsort", sort);
463                                        mc_changeview(tmpview, filelist, apskin, flag);
464
465                                        delownerrc(apskin);     
466                                        getfilelist(apskin, filelistpath, filelist, filelistpath->text, filemask, tmpview, filelist->select->name);
467                                        addscreenrc(apskin, filelist);
468                                        drawscreen(apskin, 0, 0);
469                                }
470                        }
471                }
472                else if(rcret == getrcconfigint("rcgreen", NULL))
473                {
474                        if(status.play == 1)
475                                playrcgreen(filename, NULL, playinfobarstatus, playertype, flag);
476                        else
477                        {
478                                showplaylist(apskin, filelistpath, filelist, listbox, b2, 0, &playlist, &eof, &filename, &currentdirectory, &playertype, flag);
479                                drawscreen(apskin, 0, 0);
480                                continue;                       
481                        }
482                }
483                else if(rcret == getrcconfigint("rctext", NULL) || rcret == getrcconfigint("rcsubtitel", NULL))
484                {               
485                        if(status.play == 1)
486                                playrctext(filename, NULL, playinfobarstatus, playertype, flag);       
487                }
488                else if(rcret == getrcconfigint("rcmenu", NULL))
489                {
490                        if(status.play == 0 && status.pause == 0)
491                        {
492                                refresh = 1;
493                                debug(50, "rcmenu: settings");
494//                              singlepicstart("/var/usr/local/share/titan/plugins/mc/skin/default.mvi", 0);
495                                singlepicstart(defaultmvi, 0);
496                                view = getconfigint("mc_vp_view", NULL);
497                                printf("view in: %d\n", view);
498                                printf("tmpview in: %d\n", tmpview);
499
500                                screenmc_videoplayer_settings();
501                                drawscreen(blackscreen, 0, 0);
502                                drawscreen(loadmediadb, 0, 0);                         
503                                if(view != getconfigint("mc_vp_view", NULL))
504                                {
505                                        printf("view changed > change tmpview\n");
506                                        tmpview = getconfigint("mc_vp_view", NULL);
507                                }
508
509                                if(getconfig("mc_vp_dirsort", NULL) != getconfig("dirsort", NULL))
510                                {
511                                        char* tmpstr = NULL;
512                                        tmpstr = ostrcat(getconfig("mc_vp_dirsort", NULL), NULL, 0, 0);
513                                        addconfigtmp("dirsort", tmpstr);
514                                        free(tmpstr), tmpstr = NULL;
515                                }
516
517                                printf("1view in: %d\n", view);
518                                printf("1tmpview in: %d\n", tmpview);
519                               
520                                mc_changeview(tmpview, filelist, apskin, flag);
521
522                                drawscreen(blackscreen, 0, 0);
523                                drawscreen(loadmediadb, 0, 0);
524                                printf("2view in: %d\n", view);
525                                printf("2tmpview in: %d\n", tmpview);
526       
527                                delownerrc(apskin);
528                                getfilelist(apskin, filelistpath, filelist, filelistpath->text, filemask, tmpview, filelist->select->name);
529                                addscreenrc(apskin, filelist);
530                                drawscreen(apskin, 0, 0);
531                        }
532                }
533                else if(rcret == getrcconfigint("rcinfo", NULL))
534                {
535                        if(status.play == 0 && status.pause == 0)
536                        {
537                                drawscreen(blackscreen, 0, 0);
538//                              if(filelist->select != NULL && filelist->select->input == NULL)
539//                              {
540                                        filename = createpath(filelistpath->text, filelist->select->name);
541                                        debug(133, "filename: %s", filename);                           
542                                        playrcred(filename, NULL, playinfobarstatus, playertype, flag);
543//                              }
544                        }
545                        else
546                                playrcplay(filename, NULL, &playinfobarstatus, &playinfobarcount, playertype, flag);
547
548                        if(status.play == 0 && status.pause == 0)
549                        {
550                                drawscreen(skin, 0, 0);
551                                drawscreen(blackscreen, 0, 0);
552                                drawscreen(loadmediadb, 0, 0);
553                                delownerrc(apskin);
554                                getfilelist(apskin, filelistpath, filelist, filelistpath->text, filemask, tmpview, filelist->select->name);
555                                addscreenrc(apskin, filelist);
556                                drawscreen(apskin, 0, 0);
557                        }       
558                }
559                else if(rcret == getrcconfigint("rcpower", NULL) && status.play == 1 && videooff == 0)
560                {
561                        videooff = 1;
562                        drawscreen(blackscreen, 0, 0);
563                }
564                else if(rcret == getrcconfigint("rcexit", NULL) && videooff == 1)
565                {
566                        videooff = 0;
567                        drawscreen(skin, 0, 0);
568                }
569                else if(rcret == getrcconfigint("rcstop", NULL) || (rcret == getrcconfigint("rcexit", NULL) && status.play == 1))
570                {
571                        debug(50, "rcstop: stopplayback");
572                        drawscreen(blackscreen, 0, 0);
573                        drawscreen(loadmediadb, 0, 0);
574                        if(status.play == 1 && playertype == 0)
575                        {
576                                char* tmpfilename = ostrcat(filename, NULL, 0, 0);
577                                char* fileseek = ostrcat("/mnt/swapextensions/player/", basename(tmpfilename), 0, 0);
578                                fileseek = ostrcat(fileseek, ".se", 0, 0);
579                                FILE* fbseek = fopen(fileseek, "w");
580                                if(fbseek != NULL)
581                                {
582                                        off64_t pos = playergetpts() / 90000;
583                                        fprintf(fbseek,"%lld", pos);
584                                        fclose(fbseek);
585                                }
586                                free(fileseek), fileseek = NULL;
587                                free(tmpfilename), tmpfilename = NULL;
588                        }
589                       
590//                      servicestop(status.aktservice, 1, 1);
591                        playrcstop(playertype, flag);
592                        drawscreen(blackscreen, 0, 0);
593                        drawscreen(loadmediadb, 0, 0);
594                        sleep(2);
595//                      singlepicstart("/var/usr/local/share/titan/plugins/mc/skin/default.mvi", 0);
596                        singlepicstart(defaultmvi, 0);
597
598                        // show skin
599                        setfbtransparent(255);
600
601                        apskin->hidden = NO;
602                        filelist->hidden = NO;
603                        listbox->hidden = YES;
604                        changetext(filelistpath, _(getconfig("mc_vp_path", NULL)));
605                        changetext(b2, _("Filelist-Mode"));
606
607                        // switch filelist
608                        delownerrc(apskin);
609                        addscreenrc(apskin, filelist);
610                        // show skin
611                        drawscreen(apskin, 0, 0);
612
613                        setfbtransparent(255);
614                        clearscreen(loadmediadb);
615                        clearscreen(blackscreen);
616
617                        playinfobarcount = 0;
618                        playinfobarstatus = 1;
619                        status.playspeed = 0;
620                        status.pause = 0;
621                        status.play = 0;
622                        playlist = 0;
623                        playinfobarcount = 0;
624                       
625                        if(playertype == 1)
626                                playerafterendts();
627                        else
628                                playerafterend();
629               
630                        writevfdmenu("VideoPlayer Filelist-Mode");
631                }
632                else if(rcret == getrcconfigint("rcexit", NULL))
633                {
634                        videooff = 0;
635                        exit = 1;
636                        debug(50, "exit - save mc_vp_path: %s", filelistpath->text);
637                        debug(50, "exit - save mc_vp_selectedfile: %s", filelist->select->name);
638                        drawscreen(blackscreen, 0, 0);
639                        drawscreen(loadmediadb, 0, 0);
640
641                        if(playlist == 0)
642                        {
643                                if(filelistpath->text != NULL && ostrcmp(getconfig("mc_vp_path", NULL), filelistpath->text) != 0)
644                                        addconfig("mc_vp_path", filelistpath->text);
645                                if(filelist->select != NULL && filelist->select->name != NULL && ostrcmp(getconfig("mc_vp_selectedfile", NULL), filelist->select->name) != 0)
646                                        addconfig("mc_vp_selectedfile", filelist->select->name);
647                        }
648
649                        if(status.play == 1 && playertype == 0)
650                        {
651                                char* tmpfilename = ostrcat(filename, NULL, 0, 0);
652                                char* fileseek = ostrcat("/mnt/swapextensions/player/", basename(tmpfilename), 0, 0);
653                                fileseek = ostrcat(fileseek, ".se", 0, 0);
654                                FILE* fbseek = fopen(fileseek, "w");
655                                if(fbseek != NULL)
656                                {
657                                        off64_t pos = playergetpts() / 90000;
658                                        fprintf(fbseek,"%lld", pos);
659                                        fclose(fbseek);
660                                }
661                                free(fileseek), fileseek = NULL;
662                                free(tmpfilename), tmpfilename = NULL;
663                        }
664
665//                      setfbtransparent(0);
666                        servicestop(status.aktservice, 1, 1);
667                        playrcstop(playertype, flag);
668                        drawscreen(blackscreen, 0, 0);
669                        drawscreen(loadmediadb, 0, 0);
670                        sleep(2);
671//                      singlepicstart("/var/usr/local/share/titan/plugins/mc/skin/default.mvi", 0);
672                        singlepicstart(defaultmvi, 0);
673
674                        // show skin
675                        setfbtransparent(255);
676                        apskin->hidden = NO;
677                        filelist->hidden = NO;
678                        listbox->hidden = YES;
679                        changetext(b2, _("Filelist-Mode"));
680                        changetext(b3, _("Random"));
681                        changetext(b4, _("Repeat"));                                                                           
682                        status.playspeed = 0;
683                        status.pause = 0;
684                        status.play = 0;
685                        status.random = 0;
686                        status.repeat = 0;
687                        playlist = 0;
688                        writevfdmenu("Mediacenter");
689                        playinfobarcount = 0;
690       
691                        printf("exit: view=%d tmpview=%d\n", view, tmpview);
692                        unlink("/tmp/.autoscan");
693                        break;
694                }
695                else if(rcret == getrcconfigint("rcok", NULL))
696                {
697                        if((status.play == 1) || (status.playspeed != 0))
698                        {
699                                playrcok(filename, NULL, playinfobarstatus, playertype, flag);
700                                continue;
701                        }
702
703                        playinfobarcount = 0;
704                        playinfobarstatus = 1;
705                        status.playspeed = 0;
706                        status.pause = 0;
707//                      status.play = 0;
708//                      playlist = 0;
709                        playinfobarcount = 0;
710
711                        if(playlist == 1 && listbox->select != NULL)
712                        {
713                                debug(50, "listbox->select->name: %s", listbox->select->name);
714                                filename = ostrcat("", listbox->select->name, 0, 0);
715
716                                if(cmpfilenameext(filename, ".ts") == 0 && ostrstr(filename, "://") == NULL)
717                                        playertype = 1;
718                                else
719                                        playertype = 0;
720
721                                changetext(b2, _("Playlist-Mode"));
722                       
723                                debug(50, "screensaver title: %s", listbox->select->text);
724                                if(screensaver != NULL && screensaver->type == 0)
725                                        screensaver->value = listbox->select->text;
726
727                                debug(50, "playerstop");
728                                playrcstop(playertype, flag);
729//                              sleep(1);
730//                              drawscreen(infobar, 0, 0);
731
732                                debug(50, "playerstart: %s", filename);
733                                eof = 0;
734
735                                delownerrc(apskin);
736//                              setfbtransparent(255);
737//////////
738                                servicestop(status.aktservice, 1, 1);
739                                drawscreen(skin, 0, 0);
740//                              setfbtransparent(255);
741                                debug(50, "check");
742                                debug(50, "autostart_playlist: %d", getconfigint("mc_vp_autostart_playlist", NULL));
743                                debug(50, "status.play: %d", status.play);
744                                debug(50, "flag: %d", flag);
745///////////
746                                debug(50, "playertype: %d", playertype);
747                                if(playertype == 1)
748                                        playerret = playerstartts(filename, 0);
749                                else
750                                        playerret = playerstart(filename);
751
752                                playwritevfd(filename, NULL);
753
754                                #ifndef SIMULATE
755                                        if(playerret != 0)
756                                        {
757                                                writevfdmenu("VideoPlayer Filelist-Mode");
758                                                status.play = 0;
759                                                playlist = 0;
760                                                status.playspeed = 0;
761                                                textbox(_("Message"), _("Can't start playback !"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0);
762
763                                                changetext(filelistpath, _(getconfig("mc_vp_path", NULL)));
764                                                filelist->hidden = NO;
765                                                listbox->hidden = YES;
766
767                                                addscreenrc(apskin, filelist);
768                                                drawscreen(apskin, 0, 0);
769                                                continue;
770                                        }
771                                #endif
772
773                                if(videooff == 0) screenplayinfobar(filename, NULL, 0, playertype, 0);                 
774                                status.play = 1;
775                               
776                                free(status.playfile); status.playfile = NULL;
777                                status.playfile = ostrcat(filename, "", 0, 0);
778                        }
779                        else if(filelist->select != NULL && filelist->select->input != NULL)
780                        {
781
782                                char* tmpfilename = ostrcat(filelistpath->text, NULL, 0, 0);                   
783
784                                // workaround dont open folder on rcchup
785                                if(skip == 1)
786                                {
787                                        drawscreen(apskin, 0, 0);
788                                        writerc(getrcconfigint("rcok", NULL));
789                                        skip = 0;
790                                }
791                                else if(!ostrncmp("video_ts", string_tolower(basename(tmpfilename)), 8))
792                                {
793                                        struct skin* dvdplayer = getplugin("DVD Player");
794                                        if(dvdplayer != NULL)
795                                        {
796                                                if(textbox(_("Message"), _("Found VIDEO_TS Folder, start with DVD-Player ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 5, 0) == 1)
797                                                {
798                                                        void (*startplugin)(char*, int);
799                                                        startplugin = dlsym(dvdplayer->pluginhandle, "screendvdplay");
800                                                        if(startplugin != NULL)
801                                                        {
802                                                                debug(50, "filelist->select->name: %s", filelist->select->name);
803                                                                filename = createpath(filelistpath->text, filelist->select->name);
804                                                                printf("start dvdplayer plugin\n");
805                                                                startplugin(filename,0);
806                                                        }
807                                                }
808                                                drawscreen(apskin, 0, 0);
809//                                              singlepicstart("/var/usr/local/share/titan/plugins/mc/skin/default.mvi", 0);
810                                                singlepicstart(defaultmvi, 0);
811                                        }
812                                        else
813                                        {
814                                                debug(50, "mc_mounter_chk start");
815                                                mc_mounter_chk(filelistpath);
816                                                debug(50, "mc_mounter_chk done");
817
818                                                char* checkautoscan = NULL;
819                                                checkautoscan = readfiletomem("/tmp/.autoscan", 0);
820       
821                                                if(filelistpath->text != NULL && ostrcmp(checkautoscan, filelistpath->text) != 0)
822                                                        unlink("/tmp/.autoscan");
823       
824                                                free(checkautoscan), checkautoscan = NULL;
825                                        }
826                                }
827                                free(tmpfilename), tmpfilename = NULL;
828                        }
829                        else if(filelist->select != NULL && filelist->select->input == NULL)
830                        {
831                                if(filelistpath->text != NULL && ostrcmp(getconfig("mc_vp_path", NULL), filelistpath->text) != 0)
832                                        addconfig("mc_vp_path", filelistpath->text);
833
834                                debug(50, "filelist->select->text: %s", filelist->select->text);
835                                filename = createpath(filelistpath->text, filelist->select->name);
836
837                                if(cmpfilenameext(filename, ".ts") == 0)               
838                                        playertype = 1;
839                                else
840                                        playertype = 0;
841
842                                if(cmpfilenameext(filename, ".rar") == 0 || cmpfilenameext(filename, ".iso") == 0 || cmpfilenameext(filename, ".img") == 0)
843                                {
844                                        debug(50, "mc_mounter_main filename: %s", filename);
845                                        //addconfig("mc_vp_path", filelistpath->text);
846                                        currentdirectory = ostrcat("", getconfig("mc_vp_path", NULL), 0, 0);
847                                        selectedfile = ostrcat(selectedfile, getconfig("mc_vp_selectedfile", NULL), 0, 0);
848
849                                        mc_mounter_main(0,filename,filelistpath,filelist,apskin,filemask,tmpview,currentdirectory);
850                                        debug(50, "mc_mounter_main done");
851
852//                                      singlepicstart("/var/usr/local/share/titan/plugins/mc/skin/default.mvi", 0);
853                                        singlepicstart(defaultmvi, 0);
854                                        continue;
855                                }
856                                else if(cmpfilenameext(filename, ".m3u") == 0 || cmpfilenameext(filename, ".pls") == 0)
857                                {
858                                        showplaylist(apskin, filelistpath, filelist, listbox, b2, 1, &playlist, &eof, &filename, &currentdirectory, &playertype, flag);
859
860                                        if(getconfigint("mc_vp_autostart_playlist", NULL) == 0)
861                                                drawscreen(apskin, 0, 0);
862                                        continue;
863
864                                }
865
866                                changetext(b2, _("Filelist-Mode"));
867                       
868                                if(screensaver != NULL && screensaver->type == 0)
869                                        screensaver->value = (void*)filelist->select->text;
870
871                                setfbtransparent(0);
872
873//                              debug(50, "playerstop");
874//                              playrcstop(playertype, flag);
875
876                                delownerrc(apskin);
877
878                                debug(50, "playerstart: %s", filename);
879                                eof = 0;
880
881                                servicestop(status.aktservice, 1, 1);
882                                drawscreen(skin, 0, 0);
883                                drawscreen(loadmediadb, 0, 0);
884                                setfbtransparent(255);
885       
886                                debug(50, "playertype: %d", playertype);
887                                if(playertype == 1)
888                                        playerret = playerstartts(filename, 0);
889                                else
890                                        playerret = playerstart(filename);
891
892                                playwritevfd(filename, NULL);
893
894                                #ifndef SIMULATE
895                                        if(playerret != 0)
896                                        {
897                                                writevfdmenu("VideoPlayer Filelist-Mode");
898                                                status.play = 0;
899                                                status.playspeed = 0;
900                                                textbox(_("Message"), _("Can't start playback !"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0);
901                                                addscreenrc(apskin, filelist);
902//                                              drawscreen(apskin, 0, 0);
903                                                continue;
904                                        }
905                                        else
906                                        {
907                                                if(playertype == 0 && getconfigint("showlastpos", NULL) == 1)
908                                                {
909                                                        char* tmpfilename = ostrcat(filename, NULL, 0, 0);
910                                                        char* fileseek = ostrcat("/mnt/swapextensions/player/", basename(tmpfilename), 0, 0);
911                                                        fileseek = ostrcat(fileseek, ".se", 0, 0);
912       
913                                                        FILE* fbseek = fopen(fileseek, "r");
914                                                        if(fbseek != NULL)
915                                                        {
916                                                                if(textbox(_("Message"), _("Start at last position ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 5, 0) == 1)
917                                                                {
918                                                                        char* skip1 = calloc(1, 20);
919                                                                        if(skip1 != NULL)
920                                                                        {
921                                                                                fscanf(fbseek,"%s",skip1);
922                                                                                playrcjumpf(filename, NULL, atoll(skip1), &playinfobarstatus, &playinfobarcount, playertype, flag);             
923                                                                        }
924                                                                        free(skip1), skip1 = NULL;
925                                                                }
926                                                                fclose(fbseek);
927                                                        }
928                                                        free(fileseek), fileseek = NULL;
929                                                        free(tmpfilename), tmpfilename = NULL;
930                                                }
931                                        }
932               
933                                #endif
934
935                                clearscreen(loadmediadb);
936                                if(videooff == 0) screenplayinfobar(filename, NULL, 0, playertype, 0);
937                                status.play = 1;
938
939                                free(status.playfile); status.playfile = NULL;
940                                status.playfile = ostrcat(filename, "", 0, 0);
941
942                                if(status.mediadbfiles == 0 && getconfigint("mc_vp_autoscan", NULL) == 1 && !file_exist("/tmp/.autoscan"))
943                                {
944                                        if(filelistpath->text != NULL)
945                                        {
946                                                mediadbscan(filelistpath->text, 1000, 1);
947                                                writesys("/tmp/.autoscan", filelistpath->text, 0);
948                                                status.mediadbfiles = findfiles(filelistpath->text, 0, 1, 1, 1); //count only
949                                        }
950                                        else
951                                        {
952                                                mediadbscan(currentdirectory, 1000, 1);
953                                                writesys("/tmp/.autoscan", currentdirectory, 0);
954                                                status.mediadbfiles = findfiles(currentdirectory, 0, 1, 1, 1); //count only
955                                        }
956                                }
957                        }
958                }
959
960                if(eof >=1 || (playertype == 0 && playerisplaying() == 0) || (playertype == 1 && playerisplayingts() == 0))
961                {
962                        if(status.play == 1)
963                        {
964                                char* tmpfilename = ostrcat(filename, NULL, 0, 0);
965                                char* fileseek = ostrcat("/mnt/swapextensions/player/", basename(tmpfilename), 0, 0);
966                                fileseek = ostrcat(fileseek, ".se", 0, 0);
967                                unlink(fileseek);
968                       
969                                setfbtransparent(0);
970                                apskin->hidden = NO;
971                                drawscreen(skin, 0, 0);
972                                playereof(apskin, filelist, listbox, filelistpath, b2, NULL, NULL, NULL, &skip, &eof, &playlist, playertype, flag);
973                        }
974                }
975                if(videooff == 1) drawscreen(blackscreen, 0, 0);
976        }
977
978        deinitscreensaver();
979        status.hangtime = getconfigint("hangtime", NULL);
980        delconfigtmp("dirsort");
981        delconfigtmp("mediadbpath");
982        delconfigtmp("mediadbfile");
983        delconfigtmp("mediadbscandelall");
984        delconfigtmp("mediadbscandelnotfound");
985        delconfigtmp("mediadbscantimeout");
986       
987        delmarkedscreennodes(apskin, FILELISTDELMARK);
988        delownerrc(apskin);
989        clearscreen(apskin);
990
991        free(filename), filename = NULL;
992        free(currentdirectory), currentdirectory = NULL;
993        free(selectedfile), selectedfile = NULL;
994        free(lastid), lastid = NULL;
995
996        free(status.playfile); status.playfile = NULL;
997        if(tmppolicy != NULL)
998        {
999                setpolicy(tmppolicy);
1000                free(tmppolicy);
1001        }
1002
1003        if(playertype == 1)
1004                playerafterendts();
1005        else
1006                playerafterend();
1007
1008
1009        if(status.mediadbthread == NULL)
1010        {
1011                if(status.writemediadb == 1)
1012                        writemediadb(getconfig("mediadbfile", NULL), NULL);
1013                freemediadb(0);
1014        }
1015
1016        clearscreen(blackscreen);
1017        clearscreen(loadmediadb);
1018
1019        system("/bin/umount -fl `mount | grep fuse | grep rarfs | grep -v '/dev/' | cut -d ' ' -f3` > /dev/null 2>&1; killall -9 rarfs > /dev/null 2>&1");
1020        system("/bin/umount -fl `mount | grep fuse | grep -v '/dev/' | cut -d ' ' -f3` > /dev/null 2>&1; /bin/umount -fl `mount | grep iso9660 | cut -d ' ' -f3`  `mount | grep udf | cut -d ' ' -f3` > /dev/null 2>&1; killall -9 rarfs fusesmb curlftpfs > /dev/null 2>&1");
1021        system("umount -a -f -t fuse.rarfs,iso9660,udf,fuse.djmount,fuse.fusesmb,fuse.curlftpfs > /dev/null 2>&1");
1022
1023        free(defaultmvi), defaultmvi = NULL;
1024
1025        writevfdmenu("Mediacenter");
1026        debug(50, "closed");
1027}
1028
1029#endif
Note: See TracBrowser for help on using the repository browser.