source: titan/titan/epg.h @ 36069

Last change on this file since 36069 was 33672, checked in by tobayer, 9 years ago

[titan] some more changes around translate_time and epg

File size: 10.3 KB
Line 
1#ifndef EPG_H
2#define EPG_H
3
4int screensingleepg(struct channel* chnode, struct epg* epgnode, int flag)
5{
6        int rcret = 0, ret = 0, epgscreenconf = 0, end = 0;
7        struct skin* singleepg = getscreen("singleepg");
8        struct skin* channelname = getscreennode(singleepg, "channelname");
9        struct skin* epgdesc = getscreennode(singleepg, "epgdesc");
10        struct skin* listbox = getscreennode(singleepg, "listbox");
11        struct skin* b2 = getscreennode(singleepg, "b2");
12        struct skin* b3 = getscreennode(singleepg, "b3");
13        struct skin* b4 = getscreennode(singleepg, "b4");
14        struct skin* tmp = NULL;
15        char* tmpstr = NULL, *buf = NULL;
16        struct tm *loctime = NULL;
17        struct epg* tmpepg = NULL;
18
19        epgscreenconf = getconfigint("epg_screen", NULL);
20        listbox->aktline = 1;
21        listbox->aktpage = -1;
22
23        if(chnode == NULL) chnode = status.aktservice->channel;
24        if(chnode == NULL) return 2;
25        if(epgnode == NULL) epgnode = getepgakt(chnode);
26        if(epgnode == NULL) epgnode = getepgnext(chnode);
27        tmpepg = epgnode;
28
29        status.epgchannel = chnode;
30
31        changetext(channelname, chnode->name);
32        tmpstr = epgdescunzip(epgnode);
33        changetext(epgdesc, tmpstr);
34        free(tmpstr); tmpstr = NULL;
35
36start:
37        buf = malloc(MINMALLOC);
38        if(buf == NULL)
39        {
40                err("no mem");
41                return 2;
42        }
43
44        tmp = NULL;
45        delmarkedscreennodes(singleepg, 1);
46        delownerrc(singleepg);
47        epgnode = tmpepg;
48
49        while(epgnode != NULL)
50        {
51                tmp = addlistbox(singleepg, listbox, tmp, 1);
52                if(tmp != NULL)
53                {
54                        tmp->type = MULTIPROGRESSBAR;
55                        tmp->progresscol = listbox->progresscol;
56                        tmp->epgrecord = getepgrecord(chnode, epgnode);
57
58                        loctime = localtime(&epgnode->starttime);
59                        ostrftime(buf, MINMALLOC, listbox->param1, loctime);
60                        buf = translate_time(buf, 1);
61                        changetext(tmp, buf);
62                        changetext2(tmp, epgnode->title);
63                        tmp->handle = (char*)epgnode;
64                }
65                epgnode = epgnode->next;
66        }
67
68        free(buf); buf = NULL;
69
70        if(flag == 0 && epgscreenconf == 1)
71        {
72                b2->hidden = NO;
73                b3->hidden = NO;
74                b4->hidden = NO;
75        }
76        else
77        {
78                b2->hidden = YES;
79                b3->hidden = YES;
80                b4->hidden = YES;
81        }
82
83        drawscreen(singleepg, 0, 0);
84        addscreenrc(singleepg, listbox);
85
86        while(1)
87        {
88                status.epgchannel = chnode;
89                rcret = waitrc(singleepg, 0, 2);
90                if((rcret == getrcconfigint("rcexit", NULL)) || (rcret == getrcconfigint("rcepg", NULL))) break;
91                if(rcret == getrcconfigint("rcinfo", NULL)) break;
92                if(rcret == getrcconfigint("rcok", NULL))
93                {       
94                        int ret = 0;
95                        if(status.servicetype == 0)
96                                ret = servicestart(chnode, getconfig("channellist", NULL), NULL, 0);
97                        else
98                                ret = servicestart(chnode, getconfig("rchannellist", NULL), NULL, 0);
99                        if(ret == 20) writeconfigtmp();
100                        servicecheckret(ret, 0);
101                        end = 1;
102                        break;
103                }
104                if(flag == 0 && epgscreenconf == 1 && rcret == getrcconfigint("rcgreen", NULL))
105                {
106                        if(listbox->select != NULL)
107                        {
108                                clearscreen(singleepg);
109                                end = screenepg(chnode, (struct epg*)listbox->select->handle, 0);
110                                //drawscreen(singleepg, 0, 0);
111                                break;
112                        }
113                }
114                if(flag == 0 && epgscreenconf == 1 && rcret == getrcconfigint("rcyellow", NULL))
115                {
116                        clearscreen(singleepg);
117                        end = screenmultiepg(chnode, NULL, 0);
118                        //drawscreen(singleepg, 0, 0);
119                        break;
120                }
121                if(flag == 0 && epgscreenconf == 1 && rcret == getrcconfigint("rcblue", NULL))
122                {
123                        clearscreen(singleepg);
124                        end = screengmultiepg(chnode, NULL, 0);
125                        //drawscreen(singleepg, 0, 0);
126                        break;
127                }
128                if(rcret == getrcconfigint("rc0", NULL))
129                {
130                        if(listbox->select != NULL && listbox->select->handle != NULL)
131                        {
132                                screenepgsearch(((struct epg*)listbox->select->handle)->title);
133                                resettvpic();
134                                drawscreen(singleepg, 0, 0);
135                                continue;
136                        }
137                }
138                if(listbox->select != NULL)
139                {
140                        tmpstr = epgdescunzip((struct epg*)listbox->select->handle);
141                        changetext(epgdesc, tmpstr);
142                        free(tmpstr); tmpstr = NULL;
143                        if(rcret == getrcconfigint("rcred", NULL))
144                        {
145                                clearscreen(singleepg);
146                                ret = addrecepg(chnode, (struct epg*)listbox->select->handle, NULL);
147                                goto start;
148                        }
149                        drawscreen(singleepg, 0, 0);
150                }
151        }
152
153        status.epgchannel = NULL;
154        delmarkedscreennodes(singleepg, 1);
155        delownerrc(singleepg);
156        clearscreen(singleepg);
157
158        return end;
159}
160
161int screenepg(struct channel* chnode, struct epg* epgnode, int flag)
162{
163        int rcret = 0, ret = 0, epgscreenconf = 0, min = 0, end = 0;
164        struct skin* screenepg = getscreen("epg");
165        struct skin* channelname = getscreennode(screenepg, "channelname");
166        struct skin* channelnr = getscreennode(screenepg, "channelnr");
167        struct skin* epgtitle = getscreennode(screenepg, "epgtitle");
168        struct skin* epgsubtitle = getscreennode(screenepg, "epgsubtitle");
169        struct skin* epgstart = getscreennode(screenepg, "epgstart");
170        struct skin* epgend = getscreennode(screenepg, "epgend");
171        struct skin* epgtimeremaining = getscreennode(screenepg, "epgtimeremaining");
172        struct skin* epgdesc = getscreennode(screenepg, "epgdesc");
173        struct skin* rectimeline = getscreennode(screenepg, "rectimeline");
174        struct skin* b2 = getscreennode(screenepg, "b2");
175        struct skin* b3 = getscreennode(screenepg, "b3");
176        struct skin* b4 = getscreennode(screenepg, "b4");
177        struct skin* b5 = getscreennode(screenepg, "b5");
178        struct tm* loctime = NULL;
179        char* tmpstr = NULL, *buf = NULL;
180        struct tmdb* (*startplugin)(char*, char*, int);
181
182        if(getconfigint("epgbutton", NULL) == 0)
183                changetext(b5, _("Single (EPG)"));
184        else
185                changetext(b5, _("Multi (EPG)"));
186
187        if(chnode == NULL) chnode = status.aktservice->channel;
188        if(chnode == NULL) return 2;
189        if(epgnode == NULL) epgnode = getepgakt(chnode);
190        if(epgnode == NULL) epgnode = getepgnext(chnode);
191
192        status.epgchannel = chnode;
193        epgscreenconf = getconfigint("epg_screen", NULL);
194
195start:
196        epgdesc->aktpage = 1;
197        freeepgrecord(&rectimeline->epgrecord);
198        changetext(channelname, NULL);
199        changetext(epgtitle, NULL);
200        changetext(epgsubtitle, NULL);
201        changetext(epgdesc, NULL);
202        changetext(epgstart, NULL);
203        changetext(epgend, NULL);
204        changetext(epgtimeremaining, NULL);
205        changetext(channelnr, NULL);
206
207        if(flag == 0 && epgscreenconf == 0)
208        {
209                b2->hidden = NO;
210                b3->hidden = NO;
211                b4->hidden = NO;
212        }
213        else
214        {
215                b2->hidden = YES;
216                b3->hidden = YES;
217                b4->hidden = YES;
218        }
219
220        if(epgnode != NULL)
221        {
222                buf = malloc(MINMALLOC);
223                if(buf == NULL)
224                {
225                        err("no memory");
226                        return 2;
227                }
228
229                changetext(channelname, chnode->name);
230                changetext(epgtitle, epgnode->title);
231                changetext(epgsubtitle, epgnode->subtitle);
232                tmpstr = epgdescunzip(epgnode);
233                changetext(epgdesc, tmpstr);
234                free(tmpstr); tmpstr = NULL;
235
236                loctime = olocaltime(&epgnode->starttime);
237                if(loctime != NULL)
238                {
239                        ostrftime(buf, MINMALLOC, epgstart->param1, loctime);
240                        buf = translate_time(buf, 0);
241                        changetext(epgstart, buf);
242                        free(loctime); loctime = NULL;
243                }
244                loctime = olocaltime(&epgnode->endtime);
245                if(loctime != NULL)
246                {
247                        ostrftime(buf, MINMALLOC, epgend->param1, loctime);
248                        buf = translate_time(buf, 0);
249                        changetext(epgend, buf);
250                        free(loctime); loctime = NULL;
251                }
252
253                if(epgnode->starttime <= time(NULL))
254                        min = ((epgnode->endtime - (epgnode->endtime % 60)) - (time(NULL) - (time(NULL) % 60))) / 60;
255                else
256                        min = ((epgnode->endtime - (epgnode->endtime % 60)) - (epgnode->starttime - (epgnode->starttime % 60))) / 60;
257                if(min < 0) min = 0;
258                snprintf(buf, MINMALLOC, epgtimeremaining->param1, min);
259                changetext(epgtimeremaining, buf);
260
261                free(buf); buf = NULL;
262
263                tmpstr = getchannelnr(NULL, chnode);
264                changetext(channelnr, tmpstr);
265                free(tmpstr); tmpstr = NULL;
266
267                rectimeline->epgrecord = getepgrecord(chnode, epgnode);
268        }
269
270        drawscreen(screenepg, 0, 0);
271        addscreenrc(screenepg, epgdesc);
272
273        while(1)
274        {
275                status.epgchannel = chnode;
276                rcret = waitrc(screenepg, 0, 0);
277                if(rcret == getrcconfigint("rcexit", NULL)) break;
278                if(rcret == getrcconfigint("rcinfo", NULL)) break;
279                if(rcret == getrcconfigint("rcok", NULL))
280                {
281                        if(channelnottunable(chnode) == 0)
282                        {
283                                int ret = 0;
284                                if(status.servicetype == 0)
285                                        ret = servicestart(chnode, getconfig("channellist", NULL), NULL, 0);
286                                else
287                                        ret = servicestart(chnode, getconfig("rchannellist", NULL), NULL, 0);
288                                if(ret == 20) writeconfigtmp();
289                                servicecheckret(ret, 0);
290                                end = 1;
291                                break;
292                        }
293                }
294                if(rcret == getrcconfigint("rcright", NULL))
295                {
296                        if(epgnode != NULL && epgnode->next != NULL)
297                                epgnode = epgnode->next;
298                        goto start;
299                }
300                if(rcret == getrcconfigint("rcleft", NULL))
301                {
302                        if(epgnode != NULL && epgnode->prev != NULL && epgnode->endtime > time(NULL))
303                                epgnode = epgnode->prev;
304                        goto start;
305                }
306                if(flag == 0 && epgscreenconf == 0 && rcret == getrcconfigint("rcgreen", NULL))
307                {
308                        clearscreen(screenepg);
309                        end = screensingleepg(chnode, NULL, 0);
310                        //drawscreen(screenepg, 0, 0);
311                        break;
312                }
313                if(flag == 0 && epgscreenconf == 0 && rcret == getrcconfigint("rcyellow", NULL))
314                {
315                        clearscreen(screenepg);
316                        end = screenmultiepg(chnode, NULL, 0);
317                        //drawscreen(screenepg, 0, 0);
318                        break;
319                }
320                if(flag == 0 && epgscreenconf == 0 && rcret == getrcconfigint("rcblue", NULL))
321                {
322                        clearscreen(screenepg);
323                        end = screengmultiepg(chnode, NULL, 0);
324                        //drawscreen(screenepg, 0, 0);
325                        break;
326                }
327                if(rcret == getrcconfigint("rc0", NULL))
328                {
329                        screenepgsearch(epgnode->title);
330                        resettvpic();
331                        drawscreen(screenepg, 0, 0);
332                        continue;
333                }
334                if(rcret == getrcconfigint("rcred", NULL))
335                {
336                        clearscreen(screenepg);
337                        ret = addrecepg(chnode, epgnode, NULL);
338                        //drawscreen(screenepg, 0, 0);
339                        goto start;
340                }
341                if(rcret == getrcconfigint("rcepg", NULL))
342                {
343                        if(getconfigint("epgbutton", NULL) == 0)
344                        {
345                                clearscreen(screenepg);
346                                end = screensingleepg(chnode, NULL, 0);
347                                //drawscreen(screenepg, 0, 0);
348                                break;
349                        }
350                        else
351                        {
352                                clearscreen(screenepg);
353                                end = screenmultiepg(chnode, NULL, 0);
354                                //drawscreen(screenepg, 0, 0);
355                                break;
356                        }
357                }
358                if(rcret == getrcconfigint("rctext", NULL))
359                {
360                        struct skin* pluginnode = getplugin("TMDb");
361
362                        if(pluginnode != NULL)
363                        {
364                                startplugin = dlsym(pluginnode->pluginhandle, "screentmdb");
365                                if(startplugin != NULL && epgnode != NULL)
366                                {
367                                        clearscreen(screenepg);
368                                        startplugin(epgnode->title, NULL, 0);
369                                        drawscreen(screenepg, 0, 0);
370                                }
371                        }
372                }
373        }
374
375        status.epgchannel = NULL;
376        freeepgrecord(&rectimeline->epgrecord);
377        delownerrc(screenepg);
378        clearscreen(screenepg);
379
380        return end;
381}
382
383int epgchoice(struct channel* chnode)
384{
385        int epgscreenconf = 0, ret = 0;
386
387        epgscreenconf = getconfigint("epg_screen", NULL);
388        if(epgscreenconf == 1)
389                ret = screensingleepg(chnode, NULL, 0);
390        else if(epgscreenconf == 2)
391                ret = screenmultiepg(chnode, NULL, 0);
392        else if(epgscreenconf == 3)
393                ret = screengmultiepg(chnode, NULL, 0);
394        else
395                ret = screenepg(chnode, NULL, 0);
396
397        return ret;
398}
399
400#endif
Note: See TracBrowser for help on using the repository browser.