source: titan/plugins/autotimer/autotimer.c @ 24056

Last change on this file since 24056 was 24056, checked in by nit, 8 years ago

[titan] add new plugindir system

  • Property svn:executable set to *
File size: 17.2 KB
Line 
1#include "../../titan/struct.h"
2#include "../../titan/debug.h"
3#include "../../titan/header.h"
4
5char pluginname[] = "Auto Timer";
6char plugindesc[] = "Extensions";
7char pluginpic[] = "%pluginpath%/autotimer/plugin.png";
8
9int pluginaktiv = 0;
10int pluginversion = PLUGINVERSION;
11int autostart = 10;
12//struct skin* pluginmenu = NULL;
13//int pluginflag = 1; //don't show the plugin in pluginmanager
14
15struct rectimer *rectimer;
16
17struct searchoption
18{
19        int starttime;
20        int endtime;
21        char* search;
22        char* channelname;
23};
24
25struct stimerthread* autotimerthread = NULL;
26
27
28void autotimer_thread()
29{
30        char* tmpstr = NULL;
31        char* buf = NULL;
32        char* result = NULL;
33        struct searchoption* search1 = NULL;
34        struct searchoption* search2 = NULL;
35        struct searchoption* searchall = NULL;
36        struct channel *channel1 = NULL;
37        struct channel *channel2 = NULL;
38        struct channel *channelall = NULL;
39        struct epg* epgnode = NULL;
40        struct tm *loctime = NULL;
41        struct rectimer *node = NULL;
42        struct rectimer* recnode = rectimer;
43        int channelfind = 0;
44        int epg_starttime = 0;
45        //int epg_endtime = 0;
46        int tageswechsel = 0;
47        int write_note = 0;
48        int i = 0;
49        int konflikt = 0;
50        int searchpos = 0;
51       
52        buf = malloc(MINMALLOC);
53        if(buf == NULL)
54        {
55                err("no mem");
56                return;
57        }
58       
59        if(getconfigint("at1_akt", NULL) == 1)
60        {
61                search1 = (struct searchoption*)calloc(1, sizeof(struct searchoption));
62                if(search1 == NULL)
63                {
64                        err("no memory");
65                        return;
66                }
67                search1->search = getconfig("at1_search", NULL);
68                if(search1->search == NULL)
69                {
70                        autotimerthread->aktion = STOP;
71                }
72                search1->channelname = getconfig("at1_channelname", NULL);
73                if(search1->channelname == NULL)
74                {
75                        autotimerthread->aktion = STOP;
76                }
77                tmpstr = ostrcat(tmpstr, getconfig("at1_starttime", NULL), 1, 0);
78                if(tmpstr == NULL)
79                {
80                        autotimerthread->aktion = STOP;
81                }
82                else
83                {
84                        tmpstr[2] = '\0';
85                        tmpstr[5] = '\0';
86                        search1->starttime = (atoi(tmpstr) * 100) + atoi(tmpstr+3);
87                }
88                free(tmpstr); tmpstr = NULL;
89                tmpstr = ostrcat(tmpstr, getconfig("at1_endtime", NULL), 1, 0);
90                if(tmpstr == NULL)
91                {
92                        autotimerthread->aktion = STOP;
93                }
94                else
95                {
96                        tmpstr[2] = '\0';
97                        tmpstr[5] = '\0';
98                        search1->endtime = (atoi(tmpstr) * 100) + atoi(tmpstr+3);
99                }
100                free(tmpstr); tmpstr = NULL;
101                if( search1->starttime > search1->endtime) {
102                        search1->endtime = search1->endtime + 2400;
103                        tageswechsel = 1;
104                }
105                channel1 = channel;
106                channelfind = 0;
107                while(channel1 != NULL)
108                {
109                        if(ostrcmp(channel1->name, search1->channelname) == 0)
110                                break;
111                        channel1 = channel1->next;
112                }
113                if(channel1 == NULL)
114                {
115                        search1->channelname = NULL;
116                        search1->search = NULL;
117                        free(search1); search1=NULL;
118                }
119        }
120
121        if(getconfigint("at2_akt", NULL) == 1)
122        {
123                search2 = (struct searchoption*)calloc(1, sizeof(struct searchoption));
124                if(search2 == NULL)
125                {
126                        err("no memory");
127                        return;
128                }
129                search2->search = getconfig("at2_search", NULL);
130                if(search2->search == NULL)
131                {
132                        autotimerthread->aktion = STOP;
133                }
134                search2->channelname = getconfig("at2_channelname", NULL);
135                if(search2->channelname == NULL)
136                {
137                        autotimerthread->aktion = STOP;
138                }
139                tmpstr = ostrcat(tmpstr, getconfig("at2_starttime", NULL), 1, 0);
140                if(tmpstr == NULL)
141                {
142                        autotimerthread->aktion = STOP;
143                }
144                else
145                {
146                        tmpstr[2] = '\0';
147                        tmpstr[5] = '\0';
148                        search2->starttime = (atoi(tmpstr) * 100) + atoi(tmpstr+3);
149                }
150                free(tmpstr); tmpstr = NULL;
151                tmpstr = ostrcat(tmpstr, getconfig("at2_endtime", NULL), 1, 0);
152                if(tmpstr == NULL)
153                {
154                        autotimerthread->aktion = STOP;
155                }
156                else
157                {
158                        tmpstr[2] = '\0';
159                        tmpstr[5] = '\0';
160                        search2->endtime = (atoi(tmpstr) * 100) + atoi(tmpstr+3);
161                }
162                free(tmpstr); tmpstr = NULL;
163                if( search2->starttime > search2->endtime) {
164                        search2->endtime = search2->endtime + 2400;
165                        tageswechsel = 1;
166                }
167                channel2 = channel;
168                channelfind = 0;
169                while(channel2 != NULL)
170                {
171                        if(ostrcmp(channel2->name, search2->channelname) == 0)
172                                break;
173                        channel2 = channel2->next;
174                }
175                if(channel2 == NULL)
176                {
177                        search2->channelname = NULL;
178                        search2->search = NULL;
179                        free(search2); search1=NULL;
180                }
181        }
182       
183        if(search1 == NULL && search2 == NULL)
184                autotimerthread->aktion = STOP;
185               
186        while (autotimerthread->aktion != STOP && autostart > 0)
187        {
188                sleep(1);
189                autostart = autostart - 1;
190        }
191               
192        while (autotimerthread->aktion != STOP)
193        {
194                searchall = NULL;
195                channelall = NULL;
196                searchpos = 0;
197                if(search1 != NULL)
198                {
199                        searchall = search1;
200                        channelall = channel1;
201                        searchpos = 1;
202                }
203                else if(search2 != NULL)
204                {
205                        searchall = search2;
206                        channelall = channel2;
207                        searchpos = 2;
208                }
209               
210                while (searchall != NULL)
211                {
212                        i = 0;
213                        node = NULL;
214                        write_note = 0;
215                        epgnode = getepgakt(channelall);
216                        while(epgnode != NULL)
217                        {                                       
218                                result = NULL;
219                                loctime = olocaltime(&epgnode->starttime);
220                                strftime(buf, MINMALLOC, "%H%M", loctime);
221                                epg_starttime = atoi(buf);
222                                free(loctime); loctime = NULL;
223                                if(tageswechsel == 1 && epg_starttime < searchall->starttime)
224                                        epg_starttime = epg_starttime + 2400;
225                                if(epg_starttime >= searchall->starttime &&  epg_starttime <= searchall->endtime)
226                                {
227                                        if(epgnode->title != NULL)
228                                                        result = ostrstrcase(epgnode->title, searchall->search);
229                                        if(result != NULL)
230                                        {
231                                                if(node == NULL)
232                                                {
233                                                        node = addrectimernode(NULL, NULL);
234                                                        node->disabled = 1;
235                                                }
236                                                else if(node->disabled == 0)
237                                                {
238                                                        node = addrectimernode(NULL, NULL);
239                                                        node->disabled = 1;
240                                                }
241       
242                                                node->begin = epgnode->starttime;
243                                                node->begin -= getconfigint("recforerun" , NULL) * 60;
244                                                node->begin -= (node->begin % 60);
245                                                node->end = epgnode->endtime;
246                                                node->end += getconfigint("recoverrun" , NULL) * 60;
247                                                node->end -= (node->end % 60);
248                                                node->transponderid = channelall->transponderid;
249                                                recnode = rectimer;
250                                                konflikt = 0;
251                                               
252                                                //gleiche Sendung, gleicher Sender?
253                                                while(recnode != NULL)
254                                                {
255                                                        if(recnode != node && recnode->status < 2)
256                                                        {
257                                                                if((node->begin >= recnode->begin && node->begin < recnode->end) || (node->end >= recnode->begin && node->end < recnode->end))
258                                                                {
259                                                                        if(ostrcmp(epgnode->title, recnode->name) == 0 && channelall->transponderid == recnode->transponderid && channelall->servicetype == recnode->servicetype)
260                                                                        {       
261                                                                                konflikt = 1;
262                                                                                break;
263                                                                        }
264                                                                }
265                                                        }
266                                                        recnode = recnode->next;
267                                                }
268                                               
269                                                //allgemeiner Konflikt?
270                                                recnode = rectimer;
271                                                if(konflikt == 0)
272                                                {
273                                                        if(checkrectimerconflict(recnode) != 0)
274                                                                konflikt = 1;
275                                                }
276                                               
277                                                if(konflikt == 0)
278                                                {
279                                                        node->pincode = ostrcat("0000", NULL, 0, 0);
280                                                        node->recpath = ostrcat(NULL, getconfig("rec_path", NULL), 0, 0);
281                                                        node->afterevent = 0;
282                                                        node->repeate = 0;
283                                                        if(searchpos == 1)
284                                                        {
285                                                                node->justplay = getconfigint("at1_event", NULL);
286                                                                node->afterevent = getconfigint("at1_afterevent", NULL);
287                                                        }
288                                                        else if(searchpos == 2)
289                                                        {
290                                                                node->justplay = getconfigint("at2_event", NULL);
291                                                                node->afterevent = getconfigint("at2_afterevent", NULL);
292                                                        }
293                                                        node->serviceid = channelall->serviceid;
294                                                        node->servicetype = channelall->servicetype;
295                                                        node->disabled = 0;
296                                                        node->name = ostrcat(epgnode->title, NULL, 0, 0);
297                                                        write_note = 1;
298                                                }
299                                        }
300                                }
301                                epgnode = epgnode->next;
302                        }
303                        if(node != NULL)
304                        {
305                                if(write_note == 1)
306                                {
307                                        if(node->disabled == 1)
308                                                delrectimer(node, 1, 0);
309                                        else
310                                        {
311                                                status.writerectimer = 1;
312                                                writerectimer(getconfig("rectimerfile", NULL), 0);
313                                        }
314                                }
315                                else
316                                        delrectimer(node, 0, 0);
317                        }
318                        if(searchpos == 1)
319                        {
320                                if(search2 != NULL)
321                                {
322                                        searchall = search2;
323                                        channelall = channel2;
324                                        searchpos = 2;
325                                }
326                                else
327                                {
328                                        searchall = NULL;
329                                        channelall = NULL;
330                                  searchpos = 0;
331                                }
332                        }
333                        else if(searchpos == 2)
334                        {
335                                searchall = NULL;
336                                channelall = NULL;
337                                searchpos = 0;
338                        }
339                }
340                while (autotimerthread->aktion != STOP && i < 43200)
341                {
342                        sleep(2);
343                }
344        }
345        free(buf); buf = NULL;
346        search1->channelname = NULL;
347        search1->search = NULL;
348        search2->channelname = NULL;
349        search2->search = NULL;
350        free(search1); search1 = NULL;
351        free(search2); search2 = NULL;
352        autotimerthread = NULL;
353  return;
354}
355
356
357void autotimer_main()
358{
359        autostart = 10;
360        if(getconfigint("at1_running", NULL) == 1)
361        {
362                if(autotimerthread == NULL)
363                        autotimerthread = addtimer(&autotimer_thread, START, 10000, 1, NULL, NULL, NULL);
364        }
365        else
366        {
367                if(autotimerthread != NULL)
368                        autotimerthread->aktion = STOP;
369        }
370}       
371                       
372//wird beim laden ausgefuehrt
373void init(void)
374{
375        char* tmpstr = NULL;
376        pluginaktiv = 1;
377        tmpstr = createpluginpath("/autotimer/skin.xml", 0);
378        readscreen(tmpstr, 120, 1);
379        free(tmpstr); tmpstr = NULL;
380        debug(10, "Autot Timer Plugin loadet !!!");
381        if(getconfig("at1_akt", NULL) != NULL)
382        {
383                if(getconfigint("at1_running", NULL) == 1)
384                {
385                        if(autotimerthread == NULL)
386                        {
387                                autostart = 120;
388                                autotimerthread = addtimer(&autotimer_thread, START, 10000, 1, NULL, NULL, NULL);
389                        }
390                }
391        }
392        else
393                addconfigint("at1_running", 0);
394}
395
396//wird beim entladen ausgefuehrt
397void deinit(void)
398{
399        if(autotimerthread != NULL)
400        {
401                autotimerthread->aktion = STOP;
402                sleep(2);
403        }
404        delmarkedscreen(120);
405        pluginaktiv = 0;
406        debug(10, "Autot Timer removed !!!");
407}
408
409//wird in der Pluginverwaltung bzw Menue ausfeguehrt
410void start(void)
411{
412        char* tmpstr = NULL;
413        int rcret;
414 
415        struct skin* autotimer = getscreen("autotimer");
416        struct skin* autotimer_listbox = getscreennode(autotimer, "listbox");
417       
418        struct skin* autotimer_akt = getscreennode(autotimer, "akt");
419        struct skin* autotimer_channel = getscreennode(autotimer, "channel");
420        struct skin* autotimer_search = getscreennode(autotimer, "search");
421        struct skin* autotimer_begin = getscreennode(autotimer, "begin");
422        struct skin* autotimer_end = getscreennode(autotimer, "end");
423        struct skin* autotimer_event = getscreennode(autotimer, "event");
424        struct skin* autotimer_afterevent = getscreennode(autotimer, "afterevent");
425       
426        struct skin* autotimer_akt2 = getscreennode(autotimer, "akt2");
427        struct skin* autotimer_channel2 = getscreennode(autotimer, "channel2");
428        struct skin* autotimer_search2 = getscreennode(autotimer, "search2");
429        struct skin* autotimer_begin2 = getscreennode(autotimer, "begin2");
430        struct skin* autotimer_end2 = getscreennode(autotimer, "end2");
431        struct skin* autotimer_event2 = getscreennode(autotimer, "event2");
432        struct skin* autotimer_afterevent2 = getscreennode(autotimer, "afterevent2");
433       
434        struct skin* autotimer_blue = getscreennode(autotimer, "blue");
435        struct skin* tmp = NULL;
436       
437        autostart = 10;
438       
439        if(autotimerthread == NULL)
440                changetext(autotimer_blue, "start");
441        else
442                changetext(autotimer_blue, "stop");
443
444        //**** Block1
445        addchoicebox(autotimer_akt, "0", _("no"));
446        addchoicebox(autotimer_akt, "1", _("yes"));
447        setchoiceboxselection(autotimer_akt, getconfig("at1_akt", NULL));
448       
449        changemask(autotimer_channel, "abcdefghijklmnopqrstuvwxyz");
450        changeinput(autotimer_channel, getconfig("at1_channelname", NULL));
451       
452        changemask(autotimer_search, "abcdefghijklmnopqrstuvwxyz");
453        changeinput(autotimer_search, getconfig("at1_search", NULL));
454
455        changemask(autotimer_begin, "00:00");
456        if(getconfig("at1_starttime", NULL)== NULL)
457                changeinput(autotimer_begin, "00:00");
458        else
459                changeinput(autotimer_begin, getconfig("at1_starttime", NULL));
460       
461        changemask(autotimer_end, "00:00");
462        if(getconfig("at1_endtime", NULL) == NULL)
463                changeinput(autotimer_end, "23:59");
464        else
465                changeinput(autotimer_end, getconfig("at1_endtime", NULL));
466       
467        addchoicebox(autotimer_event, "0", _("record"));
468        addchoicebox(autotimer_event, "1", _("switch channel"));
469        setchoiceboxselection(autotimer_event, getconfig("at1_event", NULL));
470       
471        addchoicebox(autotimer_afterevent, "0", _("auto"));
472        addchoicebox(autotimer_afterevent, "1", _("nothing"));
473        addchoicebox(autotimer_afterevent, "2", _("standby"));
474        addchoicebox(autotimer_afterevent, "3", _("power off"));
475        setchoiceboxselection(autotimer_afterevent, getconfig("at1_afterevent", NULL));
476       
477        //**** Block2
478        addchoicebox(autotimer_akt2, "0", _("no"));
479        addchoicebox(autotimer_akt2, "1", _("yes"));
480        setchoiceboxselection(autotimer_akt2, getconfig("at2_akt", NULL));
481       
482        changemask(autotimer_channel2, "abcdefghijklmnopqrstuvwxyz");
483        changeinput(autotimer_channel2, getconfig("at2_channelname", NULL));
484       
485        changemask(autotimer_search2, "abcdefghijklmnopqrstuvwxyz");
486        changeinput(autotimer_search2, getconfig("at2_search", NULL));
487
488        changemask(autotimer_begin2, "00:00");
489        if(getconfig("at2_starttime", NULL)== NULL)
490                changeinput(autotimer_begin2, "00:00");
491        else
492                changeinput(autotimer_begin2, getconfig("at2_starttime", NULL));
493       
494        changemask(autotimer_end2, "00:00");
495        if(getconfig("at2_endtime", NULL) == NULL)
496                changeinput(autotimer_end2, "23:59");
497        else
498                changeinput(autotimer_end2, getconfig("at2_endtime", NULL));
499       
500        addchoicebox(autotimer_event2, "0", _("record"));
501        addchoicebox(autotimer_event2, "1", _("switch channel"));
502        setchoiceboxselection(autotimer_event2, getconfig("at2_event", NULL));
503       
504        addchoicebox(autotimer_afterevent2, "0", _("auto"));
505        addchoicebox(autotimer_afterevent2, "1", _("nothing"));
506        addchoicebox(autotimer_afterevent2, "2", _("standby"));
507        addchoicebox(autotimer_afterevent2, "3", _("power off"));
508        setchoiceboxselection(autotimer_afterevent2, getconfig("at2_afterevent", NULL));       
509       
510        drawscreen(autotimer, 0, 0);
511        addscreenrc(autotimer, autotimer_listbox);
512        tmp = autotimer_listbox->select;
513       
514        while(1)
515        {
516                addscreenrc(autotimer, tmp);
517                rcret = waitrc(autotimer, 0, 0);
518                tmp = autotimer_listbox->select;
519               
520                if (rcret == getrcconfigint("rcexit", NULL)) break;
521                if (rcret == getrcconfigint("rcblue", NULL))
522                {
523                        if(autotimerthread != NULL)
524                        {
525                                autotimerthread->aktion = STOP;
526                                sleep(3);
527                                if(autotimerthread == NULL)
528                                {
529                                        textbox(_("Stop AutoTimer"), _("AutoTimer succesfull stopped"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);   
530                                        changetext(autotimer_blue, "start");
531                                        addconfigint("at1_running", 0);
532                                }
533                                else
534                                {
535                                        textbox(_("Stop AutoTimer"), _("ERROR... AutoTimer not stopped"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);         
536                                        addconfigint("at1_running", 1);
537                                }
538                        }
539                        else
540                        {       
541                                addconfig("at1_akt", autotimer_akt->ret);
542                                addconfig("at1_channelname", autotimer_channel->ret);
543                                addconfig("at1_search", autotimer_search->ret);
544                                addconfig("at1_starttime", autotimer_begin->ret);
545                                addconfig("at1_endtime", autotimer_end->ret);
546                                addconfig("at1_event", autotimer_event->ret);
547                                addconfig("at1_afterevent", autotimer_afterevent->ret);
548                                addconfig("at2_akt", autotimer_akt2->ret);
549                                addconfig("at2_channelname", autotimer_channel2->ret);
550                                addconfig("at2_search", autotimer_search2->ret);
551                                addconfig("at2_starttime", autotimer_begin2->ret);
552                                addconfig("at2_endtime", autotimer_end2->ret);
553                                addconfig("at2_event", autotimer_event2->ret);
554                                addconfig("at2_afterevent", autotimer_afterevent2->ret);
555                               
556                                autotimerthread = addtimer(&autotimer_thread, START, 10000, 1, NULL, NULL, NULL);
557                                sleep(1);
558                                if(autotimerthread != NULL)
559                                {
560                                        textbox(_("Start AutoTimer"), _("AutoTimer succesfull started"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);   
561                                        changetext(autotimer_blue, "stop");
562                                        addconfigint("at1_running", 1);
563                                }
564                                else
565                                {
566                                        addconfigint("at1_running", 0);
567                                        textbox(_("Start AutoTimer"), _("ERROR... AutoTimer not started"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);         
568                                }
569                        }
570                }
571                if (rcret == getrcconfigint("rcgreen", NULL))
572                {
573                        addconfig("at1_akt", autotimer_akt->ret);
574                        addconfig("at1_channelname", autotimer_channel->ret);
575                        addconfig("at1_search", autotimer_search->ret);
576                        addconfig("at1_starttime", autotimer_begin->ret);
577                        addconfig("at1_endtime", autotimer_end->ret);
578                        addconfig("at1_event", autotimer_event->ret);
579                        addconfig("at1_afterevent", autotimer_afterevent->ret);
580                        addconfig("at2_akt", autotimer_akt2->ret);
581                        addconfig("at2_channelname", autotimer_channel2->ret);
582                        addconfig("at2_search", autotimer_search2->ret);
583                        addconfig("at2_starttime", autotimer_begin2->ret);
584                        addconfig("at2_endtime", autotimer_end2->ret);
585                        addconfig("at2_event", autotimer_event2->ret);
586                        addconfig("at2_afterevent", autotimer_afterevent2->ret);
587                       
588                        if(getconfigint("at1_running", NULL) == 1)
589                        {
590                                autotimerthread->aktion = STOP;
591                                sleep(2);
592                                if(autotimerthread == NULL)
593                                        autotimerthread = addtimer(&autotimer_thread, START, 10000, 1, NULL, NULL, NULL);
594                        }
595                        textbox(_("Save Settings"), _("Settings succesfull saved"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
596                }
597                if (rcret == getrcconfigint("rcepg", NULL))
598                {
599                        if(status.aktservice->channel != NULL)
600                        {
601                                tmpstr = ostrcat(tmpstr, status.aktservice->channel->name, 1, 0);
602                                if(autotimer_listbox->select != NULL)
603                                {
604                                        if(ostrcmp(autotimer_listbox->select->name, "channel") == 0)
605                                                changeinput(autotimer_channel, tmpstr);
606                                        else if(ostrcmp(autotimer_listbox->select->name, "channel2") == 0)
607                                                changeinput(autotimer_channel2, tmpstr);
608                                }
609                                tmpstr = NULL;
610                        }
611                }
612                       
613
614                drawscreen(autotimer, 0, 0);
615        }
616        delownerrc(autotimer);
617        clearscreen(autotimer);
618}
Note: See TracBrowser for help on using the repository browser.