source: titan/titan/httpdfunc.h @ 10991

Last change on this file since 10991 was 10991, checked in by nit, 11 years ago

[titan] add refresh to web aktservice

File size: 54.8 KB
Line 
1#ifndef HTTPDFUNC_H
2#define HTTPDFUNC_H
3
4time_t webcreatetimeline(char** buf, int* maxlen, int* pos)
5{
6        int i = 0;
7        struct tm *loctime = NULL;
8        int timeadd = 15 * 60;
9        char* buf1 = NULL;
10        time_t akttimeadd = 0;
11
12#ifdef SIMULATE
13        time_t akttime = 1307871000;
14        akttime = 1315614961;
15#else
16        time_t akttime = time(NULL);
17#endif
18
19        akttime -= (((akttime) % 100));
20        akttime -= (((akttime / 60) % 15) * 60);
21        akttimeadd = akttime;
22
23        buf1 = malloc(6);
24        if(buf1 == NULL)
25        {
26                err("no mem");
27                return akttime;
28        }
29
30        //not shown
31        ostrcatbig(buf, "<th class=gepgchannel1> </th><th style=\"width: 1px; max-width: 1px; min-width: 1px;\"></th>", maxlen, pos);
32        for(i = 0; i < 96; i++)
33        {
34                loctime = olocaltime(&akttimeadd);
35                if(loctime != NULL)
36                        strftime(buf1, 6, "%H:%M", loctime);
37                else
38                        snprintf(buf1, 6, "00:00");
39                free(loctime); loctime = NULL;
40
41                ostrcatbig(buf, "<th class=gepgtimelinecell><div class=gepgcellborder>", maxlen, pos);
42                ostrcatbig(buf, buf1, maxlen, pos);
43                ostrcatbig(buf, "</div></th>", maxlen, pos);
44
45                akttimeadd += timeadd;
46        }
47
48        free(buf1);
49        return akttime / 60;
50}
51
52void webcreatetailbig(char** buf, int* maxlen, int* pos, int flag)
53{
54        ostrcatbig(buf, "</table></font></center></body></html>", maxlen, pos);
55}
56
57
58char* webcreatetail(char* buf, int flag)
59{
60        buf = ostrcat(buf, "</table></font></center></body></html>", 1, 0);
61        return buf;
62}
63
64void webcreateheadbig(char** buf, int* maxlen, char* meta, int* pos, int flag)
65{
66        ostrcatbig(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css>", maxlen, pos);
67        if(meta != NULL)
68                ostrcatbig(buf, meta, maxlen, pos);
69        ostrcatbig(buf, "</head><body class=body>", maxlen, pos);
70        if(flag == 0)
71                ostrcatbig(buf, "<center><table border=0 width=100%>", maxlen, pos);
72        else
73                ostrcatbig(buf, "<center><table border=0 width=100% height=100%>", maxlen, pos);
74}
75
76char* webcreatehead(char* buf, char* meta, int flag)
77{
78        buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css>", 1, 0);
79        if(meta != NULL)
80                buf = ostrcat(buf, meta, 1, 0);
81        buf = ostrcat(buf, "</head><body class=body>", 1, 0);
82        if(flag == 0)
83                buf = ostrcat(buf, "<center><table border=0 width=100%>", 1, 0);
84        else
85                buf = ostrcat(buf, "<center><table border=0 width=100% height=100%>", 1, 0);
86        return buf;
87}
88
89void webcreatechannelbody(char** buf, int line, struct channel* chnode, char* channellist, int* maxlen, int* pos, int flag)
90{
91        char* tmpstr = NULL, *buf1 = NULL, *serviceid = NULL, *transponderid = NULL;
92        struct epg* epgnode = getepgakt(chnode);
93        int ret = 0, proz = 0;
94        struct tm *loctime = NULL;
95        time_t max = 0, akt = 0;
96
97        if(chnode == NULL) return;
98        ret = channelnottunable(chnode);
99
100        buf1 = malloc(MINMALLOC);
101        if(buf1 == NULL)
102        {
103                err("no mem");
104                return;
105        }
106
107        if(line == 0)
108                ostrcatbig(buf, "<tr class=line1>", maxlen, pos);
109        else
110                ostrcatbig(buf, "<tr class=line2>", maxlen, pos);
111
112
113        if(epgnode != NULL)
114        {
115                proz = (time(NULL) - epgnode->starttime) * 100 / (epgnode->endtime - epgnode->starttime);
116                if(proz > 100) proz = 100;
117                if(proz < 0) proz = 0;
118        }
119
120        ostrcatbig(buf, "<td width=100% valign=middle nowrap class=link><div class=timelineborder><div class=timelinebar style=\"width: ", maxlen, pos);
121        tmpstr = oitoa(proz);
122        ostrcatbig(buf, tmpstr, maxlen, pos);
123        free(tmpstr); tmpstr = NULL;
124        ostrcatbig(buf, "%;\"> </div></div>", maxlen, pos);
125
126        serviceid = oitoa(chnode->serviceid);
127        transponderid = oitoa(chnode->transponderid);
128
129        if(ret == 0)
130        {
131                ostrcatbig(buf, "<a target=aktservice class=link href=query?switch&", maxlen, pos);
132                ostrcatbig(buf, serviceid, maxlen, pos);
133                ostrcatbig(buf, "&", maxlen, pos);
134                ostrcatbig(buf, transponderid, maxlen, pos);
135                ostrcatbig(buf, "&", maxlen, pos);
136                ostrcatbig(buf, channellist, maxlen, pos);
137                ostrcatbig(buf, ">", maxlen, pos);
138        }
139
140        ostrcatbig(buf, chnode->name, maxlen, pos);
141        if(ret == 0) ostrcatbig(buf, "</a>", maxlen, pos);
142
143        //akt epg
144        if(epgnode != NULL)
145        {
146                if(flag == 0)
147                        ostrcatbig(buf, "<br><a target=main class=smalllink href=query?getepg&", maxlen, pos);
148                else
149                        ostrcatbig(buf, " <a target=main class=smalllink href=query?getepg&", maxlen, pos);
150
151                ostrcatbig(buf, serviceid, maxlen, pos);
152                ostrcatbig(buf, "&", maxlen, pos);
153                ostrcatbig(buf, transponderid, maxlen, pos);
154                ostrcatbig(buf, "&", maxlen, pos);
155                tmpstr = oitoa(epgnode->eventid);
156                ostrcatbig(buf, tmpstr, maxlen, pos);
157                free(tmpstr); tmpstr = NULL;
158                ostrcatbig(buf, ">", maxlen, pos);
159
160                loctime = olocaltime(&epgnode->starttime);
161                if(loctime != NULL)
162                        strftime(buf1, MINMALLOC, "%H:%M -", loctime);
163                free(loctime); loctime = NULL;
164                loctime = olocaltime(&epgnode->endtime);
165                if(loctime != NULL)
166                        strftime(&buf1[7], MINMALLOC - 8, " %H:%M ", loctime);
167                free(loctime); loctime = NULL;
168
169                ostrcatbig(buf, buf1, maxlen, pos);
170                ostrcatbig(buf, epgnode->title, maxlen, pos);
171
172                max = (epgnode->endtime - epgnode->starttime) / 60;
173                akt = (epgnode->endtime - (time(NULL) - 60)) / 60;
174                if(max < 0) max = 0;
175                if(akt < 0) akt = 0;
176                snprintf(buf1, MINMALLOC, " (%ld from %ld min, %d%%)", akt, max, proz);
177                ostrcatbig(buf, buf1, maxlen, pos);
178
179                ostrcatbig(buf, "</a>", maxlen, pos);
180
181                //next epg
182                epgnode = epgnode->next;
183                if(flag == 0 && epgnode != NULL)
184                {
185                        ostrcatbig(buf, "<br><a target=main class=smalllink href=query?getepg&", maxlen, pos);
186                        ostrcatbig(buf, serviceid, maxlen, pos);
187                        ostrcatbig(buf, "&", maxlen, pos);
188                        ostrcatbig(buf, transponderid, maxlen, pos);
189                        ostrcatbig(buf, "&", maxlen, pos);
190                        tmpstr = oitoa(epgnode->eventid);
191                        ostrcatbig(buf, tmpstr, maxlen, pos);
192                        free(tmpstr); tmpstr = NULL;
193                        ostrcatbig(buf, ">", maxlen, pos);
194
195                        loctime = olocaltime(&epgnode->starttime);
196                        if(loctime != NULL)
197                                strftime(buf1, 8, "%H:%M -", loctime);
198                        free(loctime); loctime = NULL;
199                        loctime = olocaltime(&epgnode->endtime);
200                        if(loctime != NULL)
201                                strftime(&buf1[7], 8, " %H:%M ", loctime);
202                        free(loctime); loctime = NULL;
203
204                        ostrcatbig(buf, buf1, maxlen, pos);
205                        ostrcatbig(buf, epgnode->title, maxlen, pos);
206                        ostrcatbig(buf, "</a>", maxlen, pos);
207                }
208        }
209
210        //tv - radio
211        if(chnode->servicetype == 0)
212                ostrcatbig(buf, "</td><td width=100 align=right valign=middle nowrap><img style=\"margin-left: 5\" border=0 src=img/tv.png alt=TV width=16 height=16>", maxlen, pos);
213        else
214                ostrcatbig(buf, "</td><td width=100 align=right valign=middle nowrap><img style=\"margin-left: 5\" border=0 src=img/radio.png alt=Radio width=16 height=16>", maxlen, pos);
215
216        //single epg
217        ostrcatbig(buf, "<a target=main href=query?getsingleepg&", maxlen, pos);
218        ostrcatbig(buf, serviceid, maxlen, pos);
219        ostrcatbig(buf, "&", maxlen, pos);
220        ostrcatbig(buf, transponderid, maxlen, pos);
221        ostrcatbig(buf, "><img style=\"margin-left: 5\" border=0 src=img/singleepg.png alt=\"Single EPG\" width=16 height=16></a>", maxlen, pos);
222
223        //m3u stream + webstream
224        if(ret == 0)
225        {
226                ostrcatbig(buf, "<a target=nothing href=query?getm3u&", maxlen, pos);
227                ostrcatbig(buf, serviceid, maxlen, pos);
228                ostrcatbig(buf, ",", maxlen, pos);
229                ostrcatbig(buf, transponderid, maxlen, pos);
230                ostrcatbig(buf, "><img style=\"margin-left: 5\" border=0 src=img/stream.png alt=Stream width=16 height=16></a>", maxlen, pos);
231
232                ostrcatbig(buf, "<a target=_blank href=query?getvideo&", maxlen, pos);
233                ostrcatbig(buf, serviceid, maxlen, pos);
234                ostrcatbig(buf, ",", maxlen, pos);
235                ostrcatbig(buf, transponderid, maxlen, pos);
236                ostrcatbig(buf, "><img style=\"margin-left: 5\" border=0 src=img/webstream.png alt=WebStream width=16 height=16></a>", maxlen, pos);
237        }
238        else
239                ostrcatbig(buf, "<img style=\"margin-left: 5\" border=0 src=img/cross.png alt=\"Channel not availabel\" width=16 height=16>", maxlen, pos);
240        ostrcatbig(buf, "</td></tr>", maxlen, pos);
241
242        free(buf1);
243        free(serviceid);
244        free(transponderid);
245}
246
247char* webgetbouquetchannel(char* param)
248{
249        char* buf = NULL, *tmpstr = NULL, *tmpstr1 = NULL;
250        struct mainbouquet *mbouquet = NULL;
251        struct bouquet *node = NULL;
252        struct channel* chnode = NULL;
253        int line = 0, maxlen = 0, pos = 0;
254
255        if(param == NULL) return NULL;
256
257        webcreateheadbig(&buf, &maxlen, "<meta http-equiv=refresh content=15>", &pos, 0);
258
259        mbouquet = getmainbouquet(param);
260        if(mbouquet != NULL)
261        {
262                node = mbouquet->bouquet;
263                tmpstr = ostrcat(tmpstr, "(BOUQUET)-", 1, 0);
264                tmpstr = ostrcat(tmpstr, mbouquet->name, 1, 0);
265                tmpstr1 = htmlencode(tmpstr);
266                free(tmpstr); tmpstr = NULL;
267                while(node != NULL)
268                {
269                        chnode = getchannel(node->serviceid, node->transponderid);
270                        if(chnode != NULL)
271                        {
272                                webcreatechannelbody(&buf, line, chnode, tmpstr1, &maxlen, &pos, 0);
273                                if(line == 0)
274                                        line = 1;
275                                else
276                                        line = 0;
277                        }
278                        node = node->next;
279                }
280                free(tmpstr1); tmpstr1 = NULL;
281        }
282        webcreatetailbig(&buf, &maxlen, &pos, 0);
283
284        return buf;
285}
286
287//flag 0: all
288//flag 1: sat
289//flag 2: provider
290//flag 3: A-Z
291char* webgetchannel(int param, int flag, int page)
292{
293        char* buf = NULL, *tmpnr = NULL, *tmpstr = NULL, *tmpstr1 = NULL;
294        struct channel* chnode = channel;
295        int line = 0, maxcount = 0, maxlen = 0, pos = 0;
296
297        webcreateheadbig(&buf, &maxlen, "<meta http-equiv=refresh content=15>", &pos, 0);
298
299        if(flag == 0) tmpstr1 = ostrcat(tmpstr1, "(ALL)", 1, 0);
300        if(flag == 1)
301        {
302                struct sat* node = getsatbyorbitalpos(param);
303                if(node != NULL)
304                {
305                        tmpstr = ostrcat(tmpstr, "(SAT)-", 1, 0);
306                        tmpstr = ostrcat(tmpstr, node->name, 1, 0);
307                        tmpstr1 = htmlencode(tmpstr);
308                        free(tmpstr); tmpstr = NULL;
309                }
310        }
311        if(flag == 2)
312        {
313                struct provider* node = getprovider(param);
314                if(node != NULL)
315                {
316                        tmpstr = ostrcat(tmpstr, "(PROVIDER)-", 1, 0);
317                        tmpstr = ostrcat(tmpstr, node->name, 1, 0);
318                        tmpstr1 = htmlencode(tmpstr);
319                        free(tmpstr); tmpstr = NULL;
320                }
321        }
322        if(flag == 3)
323        {
324                tmpstr = malloc(2);
325                if(tmpstr != NULL)
326                        snprintf(tmpstr, 2, "%c", param);
327                tmpstr = ostrcat("(A-Z)-", tmpstr, 0, 1);
328                tmpstr1 = htmlencode(tmpstr);
329                free(tmpstr); tmpstr = NULL;
330        }
331
332        while(chnode != NULL)
333        {
334                if(chnode->transponder == NULL)
335                {
336                        chnode = chnode->next;
337                        continue;
338                }
339                if(chnode->name == NULL)
340                {
341                        chnode = chnode->next;
342                        continue;
343                }
344                if(flag == 1 && chnode->transponder->orbitalpos != param)
345                {
346                        chnode = chnode->next;
347                        continue;
348                }
349                if(flag == 2 && chnode->providerid != param)
350                {
351                        chnode = chnode->next;
352                        continue;
353                }
354                if(flag == 3 && chnode->name[0] != param && chnode->name[0] != param + 32)
355                {
356                        chnode = chnode->next;
357                        continue;
358                }
359
360                maxcount++;
361                if(maxcount <= (MAXHTMLLINE * page) - MAXHTMLLINE || maxcount > MAXHTMLLINE * page)
362                {
363                        chnode = chnode->next;
364                        continue;
365                }
366                webcreatechannelbody(&buf, line, chnode, tmpstr1, &maxlen, &pos, 0);
367
368                if(line == 0)
369                        line = 1;
370                else
371                        line = 0;
372
373                chnode = chnode->next;
374        }
375        free(tmpstr); tmpstr = NULL;
376
377        if(maxcount > MAXHTMLLINE)
378        {
379                int i;
380                ostrcatbig(&buf, "<tr><td align=center><br>", &maxlen, &pos);
381                for(i = 1; i <= (int)ceil(((float)maxcount / MAXHTMLLINE)); i++)
382                {
383                        if(page == i)
384                                ostrcatbig(&buf, "<a class=pagesellink href=query?getchannelpage&", &maxlen, &pos);
385                        else
386                                ostrcatbig(&buf, "<a class=pagelink href=query?getchannelpage&", &maxlen, &pos);
387                        tmpnr = oitoa(param);
388                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
389                        ostrcatbig(&buf, "&", &maxlen, &pos);
390                        free(tmpnr); tmpnr = NULL;
391                        tmpnr = oitoa(flag);
392                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
393                        ostrcatbig(&buf, "&", &maxlen, &pos);
394                        free(tmpnr); tmpnr = NULL;
395
396                        tmpnr = oitoa(i);
397                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
398                        ostrcatbig(&buf, ">", &maxlen, &pos);
399                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
400                        ostrcatbig(&buf, "</a>", &maxlen, &pos);
401                        free(tmpnr); tmpnr = NULL;
402                }
403                ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
404        }
405
406        webcreatetailbig(&buf, &maxlen, &pos, 0);
407        return buf;
408}
409
410char* webgetprovider()
411{
412        char* buf = NULL, *tmpstr = NULL;
413        struct provider* node = provider;
414        int line = 0, maxlen = 0, pos = 0;
415
416        webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
417
418        while(node != NULL)
419        {
420                if(line == 0)
421                {
422                        ostrcatbig(&buf, "<tr class=line1><td nowrap><a class=link href=\"query?getproviderchannel&", &maxlen, &pos);
423                        tmpstr = oitoa(node->providerid);
424                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
425                        free(tmpstr); tmpstr = NULL;
426                        ostrcatbig(&buf, "\">", &maxlen, &pos);
427                        line = 1;
428                }
429                else
430                {
431                        ostrcatbig(&buf, "<tr class=line2><td nowrap><a class=link href=\"query?getproviderchannel&", &maxlen, &pos);
432                        tmpstr = oitoa(node->providerid);
433                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
434                        free(tmpstr); tmpstr = NULL;
435                        ostrcatbig(&buf, "\">", &maxlen, &pos);
436                        line = 0;
437                }
438                ostrcatbig(&buf, node->name, &maxlen, &pos);
439                ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
440
441                node = node->next;
442        }
443
444        webcreatetailbig(&buf, &maxlen, &pos, 0);
445        return buf;
446}
447
448char* webgetsat()
449{
450        char* buf = NULL, *tmpstr = NULL;
451        struct sat* node = sat;
452        int line = 0, maxlen = 0, pos = 0;
453
454        webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
455
456        while(node != NULL)
457        {
458                if(line == 0)
459                {
460                        ostrcatbig(&buf, "<tr class=line1><td nowrap><a class=link href=\"query?getsatchannel&", &maxlen, &pos);
461                        tmpstr = oitoa(node->orbitalpos);
462                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
463                        free(tmpstr); tmpstr = NULL;
464                        ostrcatbig(&buf, "\">", &maxlen, &pos);
465                        line = 1;
466                }
467                else
468                {
469                        ostrcatbig(&buf, "<tr class=line2><td nowrap><a class=link href=\"query?getsatchannel&", &maxlen, &pos);
470                        tmpstr = oitoa(node->orbitalpos);
471                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
472                        free(tmpstr); tmpstr = NULL;
473                        ostrcatbig(&buf, "\">", &maxlen, &pos);
474                        line = 0;
475                }
476                ostrcatbig(&buf, node->name, &maxlen, &pos);
477                ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
478
479                node = node->next;
480        }
481
482        webcreatetailbig(&buf, &maxlen, &pos, 0);
483        return buf;
484}
485
486char* webgetaz()
487{
488        char* buf = NULL, *tmpstr = NULL, *tmpnr = NULL;
489        int line = 0, maxlen = 0, pos = 0, i;
490
491        tmpstr = malloc(2);
492        if(tmpstr == NULL)
493        {
494                err("no memory");
495                return NULL;
496        }
497
498        webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
499
500        for(i = 65; i < 91; i++)
501        {
502                if(line == 0)
503                {
504                        ostrcatbig(&buf, "<tr class=line1><td nowrap><a class=link href=\"query?getazchannel&", &maxlen, &pos);
505                        tmpnr = oitoa(i);
506                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
507                        free(tmpnr); tmpnr = NULL;
508                        ostrcatbig(&buf, "\">", &maxlen, &pos);
509                        line = 1;
510                }
511                else
512                {
513                        ostrcatbig(&buf, "<tr class=line2><td nowrap><a class=link href=\"query?getazchannel&", &maxlen, &pos);
514                        tmpnr = oitoa(i);
515                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
516                        free(tmpnr); tmpnr = NULL;
517                        ostrcatbig(&buf, "\">", &maxlen, &pos);
518                        line = 0;
519                }
520                snprintf(tmpstr, 2, "%c", i);
521                ostrcatbig(&buf, tmpstr, &maxlen, &pos);
522                ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
523        }
524
525        webcreatetailbig(&buf, &maxlen, &pos, 0);
526        free(tmpstr);
527        return buf;
528}
529
530char* webgetbouquet()
531{
532        char* buf = NULL;
533        struct mainbouquet* node = mainbouquet;
534        int line = 0, maxlen = 0, pos = 0;
535
536        webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
537
538        while(node != NULL)
539        {
540                if(line == 0)
541                {
542                        ostrcatbig(&buf, "<tr class=line1><td width=100% nowrap><a class=link href=\"query?getbouquetchannel&", &maxlen, &pos);
543                        ostrcatbig(&buf, node->name, &maxlen, &pos);
544                        ostrcatbig(&buf, "\">", &maxlen, &pos);
545                        line = 1;
546                }
547                else
548                {
549                        ostrcatbig(&buf, "<tr class=line2><td width=100% nowrap><a class=link href=\"query?getbouquetchannel&", &maxlen, &pos);
550                        ostrcatbig(&buf, node->name, &maxlen, &pos);
551                        ostrcatbig(&buf, "\">", &maxlen, &pos);
552                        line = 0;
553                }
554                ostrcatbig(&buf, node->name, &maxlen, &pos);
555                ostrcatbig(&buf, "</a></td>", &maxlen, &pos);
556
557                ostrcatbig(&buf, "<td width=50 nowrap align=right valign=middle><img style=\"margin-left: 5\" border=0 src=", &maxlen, &pos);
558
559                if(node->type == 0)
560                        ostrcatbig(&buf, "img/tv.png width=16 height=16 alt=TV>", &maxlen, &pos);
561                else
562                        ostrcatbig(&buf, "img/radio.png width=16 height=16 alt=Radio>", &maxlen, &pos);
563                ostrcatbig(&buf, "<a href=\"query?getgmultiepg&", &maxlen, &pos);
564                ostrcatbig(&buf, node->name, &maxlen, &pos);
565                ostrcatbig(&buf, "\">", &maxlen, &pos);
566                ostrcatbig(&buf, "<img style=\"margin-left: 5\" border=0 width=16 height=16 alt=\"Graphical Multi EPG\" src=img/gmultiepg.png></a>", &maxlen, &pos);
567                ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
568
569                node = node->next;
570        }
571
572        webcreatetailbig(&buf, &maxlen, &pos, 0);
573        return buf;
574}
575
576char* websetmute(char* param)
577{
578        char* buf = NULL;
579        int mute = status.mute;
580
581        if(param != NULL)
582                mute = atoi(param);
583
584        buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css></head><body class=body><center>", 1, 0);
585        if(mute == 0)
586                buf = ostrcat(buf, "<a href=query?setmute&1><img src=img/speak_on.png border=0 alt=\"Mute on\"></img></a>", 1, 0);
587        else
588                buf = ostrcat(buf, "<a href=query?setmute&0><img src=img/speak_off.png border=0 alt=\"Mute off\"></img></a>", 1, 0);
589        buf = ostrcat(buf, "</center></body></html>", 1, 0);
590
591        if(mute != status.mute)
592                screenmute(0);
593       
594        return buf;
595}
596
597char* websetvol(char* param)
598{
599        char* buf = NULL;
600        int vol = 30;
601
602        if(param == NULL)
603                vol = getvol();
604        else
605                vol = atoi(param);
606
607        buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css></head><body class=body><center>", 1, 0);
608        if(vol >=10)
609                buf = ostrcat(buf, "<a href=query?setvol&10><img src=img/led_on.png border=0></img></a> ", 1, 0);
610        else
611                buf = ostrcat(buf, "<a href=query?setvol&10><img src=img/led_off.png border=0></img></a> ", 1, 0);
612        if(vol >=20)
613                buf = ostrcat(buf, "<a href=query?setvol&20><img src=img/led_on.png border=0></img></a> ", 1, 0);
614        else
615                buf = ostrcat(buf, "<a href=query?setvol&20><img src=img/led_off.png border=0></img></a> ", 1, 0);
616        if(vol >=30)
617                buf = ostrcat(buf, "<a href=query?setvol&30><img src=img/led_on.png border=0></img></a> ", 1, 0);
618        else
619                buf = ostrcat(buf, "<a href=query?setvol&30><img src=img/led_off.png border=0></img></a> ", 1, 0);
620        if(vol >=40)
621                buf = ostrcat(buf, "<a href=query?setvol&40><img src=img/led_on.png border=0></img></a> ", 1, 0);
622        else
623                buf = ostrcat(buf, "<a href=query?setvol&40><img src=img/led_off.png border=0></img></a> ", 1, 0);
624        if(vol >=50)
625                buf = ostrcat(buf, "<a href=query?setvol&50><img src=img/led_on.png border=0></img></a> ", 1, 0);
626        else
627                buf = ostrcat(buf, "<a href=query?setvol&50><img src=img/led_off.png border=0></img></a> ", 1, 0);
628        if(vol >=60)
629                buf = ostrcat(buf, "<a href=query?setvol&60><img src=img/led_on.png border=0></img></a> ", 1, 0);
630        else
631                buf = ostrcat(buf, "<a href=query?setvol&60><img src=img/led_off.png border=0></img></a> ", 1, 0);
632        if(vol >=70)
633                buf = ostrcat(buf, "<a href=query?setvol&70><img src=img/led_on.png border=0></img></a> ", 1, 0);
634        else
635                buf = ostrcat(buf, "<a href=query?setvol&70><img src=img/led_off.png border=0></img></a> ", 1, 0);
636        if(vol >=80)
637                buf = ostrcat(buf, "<a href=query?setvol&80><img src=img/led_on.png border=0></img></a> ", 1, 0);
638        else
639                buf = ostrcat(buf, "<a href=query?setvol&80><img src=img/led_off.png border=0></img></a> ", 1, 0);
640        if(vol >=90)
641                buf = ostrcat(buf, "<a href=query?setvol&90><img src=img/led_on.png border=0></img></a> ", 1, 0);
642        else
643                buf = ostrcat(buf, "<a href=query?setvol&90><img src=img/led_off.png border=0></img></a> ", 1, 0);
644        if(vol >=100)
645                buf = ostrcat(buf, "<a href=query?setvol&100><img src=img/led_on.png border=0></img></a> ", 1, 0);
646        else
647                buf = ostrcat(buf, "<a href=query?setvol&100><img src=img/led_off.png border=0></img></a> ", 1, 0);
648        buf = ostrcat(buf, "</center></body></html>", 1, 0);
649
650        if(param != NULL)
651        {
652                setvol(vol);
653                if(status.mute == 1)
654                        screenmute(0);
655        }
656        return buf;
657}
658
659char* webgetaktservice()
660{
661        char* buf = NULL;
662        struct channel* chnode = status.aktservice->channel;
663        int line = 0, maxlen = 0, pos = 0;
664
665        webcreateheadbig(&buf, &maxlen, "<meta http-equiv=refresh content=15>", &pos, 1);
666        webcreatechannelbody(&buf, line, chnode, getconfig("channellist", NULL), &maxlen, &pos ,1);
667        webcreatetailbig(&buf, &maxlen, &pos, 1);
668
669        return buf;
670}
671
672char* webswitch(char* param)
673{
674        if(status.channelswitch == 1) goto end;
675
676        int ret = 0;
677        char* param1 = NULL, *param2 = NULL;
678        struct channel* chnode = NULL;
679
680        if(param == NULL) goto end;
681
682        //create param1
683        param1 = strchr(param, '&');
684        if(param1 != NULL)
685        {
686                *param1++ = '\0';
687                param2 = strchr(param1, '&');
688                if(param2 != NULL)
689                        *param2++ = '\0';
690        }
691
692        if(param1 == NULL && param2 == NULL) goto end;
693
694        chnode = getchannel(atoi(param), atoi(param1));
695        if(chnode != NULL)
696        {
697                ret = channelnottunable(chnode);
698                if(ret == 0)
699                        ret = servicestart(chnode, param2, NULL, 0);
700        }
701
702end:
703        return webgetaktservice();
704}
705
706char* webgetm3u(char* param, int connfd)
707{
708        char* buf = NULL, *ip = NULL, *tmpbuf = NULL;
709        struct sockaddr_in sin;
710        socklen_t len = sizeof(sin);
711
712        if(param == NULL) return NULL;
713
714        if(getsockname(connfd, &sin, &len) < 0)
715        {
716                perr("getsockname");
717                return NULL;
718        }
719
720        ip = inet_ntoa(sin.sin_addr);
721        if(ip == NULL) return NULL;
722
723        buf = ostrcat(buf, "#EXTM3U\n", 1, 0);
724        buf = ostrcat(buf, "#EXTVLCOPT--http-reconnect=true\n", 1, 0);
725        buf = ostrcat(buf, "http://", 1, 0);
726        buf = ostrcat(buf, ip, 1, 0);
727        buf = ostrcat(buf, ":", 1, 0);
728        buf = ostrcat(buf, getconfig("streamport", NULL), 1, 0);
729        buf = ostrcat(buf, "/", 1, 0);
730
731        tmpbuf = htmlencode(param);
732        if(tmpbuf != NULL)
733                param = tmpbuf;
734
735        buf = ostrcat(buf, param, 1, 0);
736        free(tmpbuf); tmpbuf = NULL;
737
738        return buf;
739}
740
741char* webgetvideo(char* param, int connfd)
742{
743        char* buf = NULL, *ip = NULL, *tmpbuf = NULL;
744        struct sockaddr_in sin;
745        socklen_t len = sizeof(sin);
746
747        if(param == NULL) return NULL;
748
749        if(getsockname(connfd, &sin, &len) < 0)
750        {
751                perr("getsockname");
752                return NULL;
753        }
754
755        ip = inet_ntoa(sin.sin_addr);
756        if(ip == NULL) return NULL;
757
758        buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css></head><body class=body><table border=0 width=100% height=100%><tr><td align=center valign=middle>", 1, 0);
759        buf = ostrcat(buf, "<embed width=100% height=100% type=application/x-vlc-plugin name=video autoplay=yes target=\"http://", 1, 0);
760        buf = ostrcat(buf, ip, 1, 0);
761        buf = ostrcat(buf, ":", 1, 0);
762        buf = ostrcat(buf, getconfig("streamport", NULL), 1, 0);
763        buf = ostrcat(buf, "/", 1, 0);
764
765        tmpbuf = htmlencode(param);
766        if(tmpbuf != NULL)
767                param = tmpbuf;
768
769        buf = ostrcat(buf, param, 1, 0);
770        free(tmpbuf); tmpbuf = NULL;
771        buf = ostrcat(buf, "\" />", 1, 0);
772        //buf = ostrcat(buf, "<a href=javascript:; onclick='document.video.play()'>Play</a>", 1, 0);
773        //buf = ostrcat(buf, "<a href=javascript:; onclick='document.video.stop()'>Stop</a>", 1, 0);
774        //buf = ostrcat(buf, "<a href=javascript:; onclick='document.video.fullscreen()'>Fullscreen</a>", 1, 0);
775        buf = ostrcat(buf, "</td></tr></body></html>", 1, 0);
776
777        return buf;
778}
779
780char* webgetchannelpage(char* param)
781{
782        char* param1 = NULL, *param2 = NULL;
783
784        if(param == NULL) return NULL;
785
786        //create param1 + 2
787        param1 = strchr(param, '&');
788        if(param1 != NULL)
789        {
790                *param1++ = '\0';
791                param2 = strchr(param1, '&');
792                if(param2 != NULL)
793                        *param2++ = '\0';
794        }
795
796        if(param1 == NULL || param2 == NULL) return NULL;
797
798        return webgetchannel(atoi(param), atoi(param1), atoi(param2));
799}
800
801void webmessage(struct stimerthread* timernode, char* text, int flag)
802{
803        textbox(_("Message"), text, _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, NULL, 0, 600, 200, 0, 0);
804        free(text);
805}
806
807char* websendmessage(char* param)
808{
809        char* text = NULL, *buf = NULL;
810
811        if(param == NULL) return NULL;
812        param = strchr(param, '=');
813        if(param != NULL)
814        {
815                param++;
816                stringreplacechar(param, '+', ' ');
817                text = ostrcat(text, param, 1, 0);
818        }
819        addtimer(&webmessage, START, 1000, 1, (void*)text, NULL, NULL);
820
821        buf = webcreatehead(buf, NULL, 1);
822        buf = ostrcat(buf, "<tr><td align=center valign=top><font class=biglabel><br><br>Message Send !!!</font></td></tr>", 1, 0);
823        buf = webcreatetail(buf, 1);
824
825        return buf;
826}
827
828char* webgetsignal()
829{
830        char* buf = NULL, *tmpnr = NULL;
831        uint16_t snr = 0, signal = 0;
832        uint32_t ber = 0, unc = 0;
833
834        ber = fereadber(status.aktservice->fedev);
835        unc = fereaduncorrectedblocks(status.aktservice->fedev);
836        signal = fereadsignalstrength(status.aktservice->fedev);
837        snr = fereadsnr(status.aktservice->fedev);
838        snr = (snr * 100) / 0xffff;
839
840        buf = webcreatehead(buf, "<meta http-equiv=refresh content=1>", 0);
841
842        buf = ostrcat(buf, "<tr><td align=center><font class=biglabel><br><br>BER: ", 1, 0);
843        tmpnr = oitoa(ber);
844        buf = ostrcat(buf, tmpnr, 1, 0);
845        free(tmpnr); tmpnr = NULL;
846
847        buf = ostrcat(buf, "<br>UNC: ", 1, 0);
848        tmpnr = oitoa(unc);
849        buf = ostrcat(buf, tmpnr, 1, 0);
850        free(tmpnr); tmpnr = NULL;
851
852        buf = ostrcat(buf, "<br>SIG: ", 1, 0);
853        tmpnr = oitoa(signal);
854        buf = ostrcat(buf, tmpnr, 1, 0);
855        free(tmpnr); tmpnr = NULL;
856
857        buf = ostrcat(buf, "<br>SNR: ", 1, 0);
858        tmpnr = oitoa(snr);
859        buf = ostrcat(buf, tmpnr, 1, 0);
860        free(tmpnr); tmpnr = NULL;
861
862        buf = ostrcat(buf, "</font></td></tr>", 1, 0);
863        buf = webcreatetail(buf, 0);
864        return buf;
865}
866
867char* webgetepg(char* param)
868{
869        char* buf = NULL, *buf1 = NULL, *tmpstr = NULL, *param1 = NULL, *param2 = NULL;
870        struct epg* epgnode = NULL;
871        struct channel* chnode = NULL;
872        struct tm *loctime = NULL;
873
874        if(param == NULL) return NULL;
875
876        //create param1 + 2
877        param1 = strchr(param, '&');
878        if(param1 != NULL)
879        {
880                *param1++ = '\0';
881                param2 = strchr(param1, '&');
882                if(param2 != NULL)
883                        *param2++ = '\0';
884        }
885
886        if(param1 == NULL || param2 == NULL) return NULL;
887
888        chnode = getchannel(atoi(param), atoi(param1));
889        if(chnode == NULL) return NULL;
890
891        epgnode = getepg(chnode, atoi(param2), 0);
892        if(epgnode == NULL) return NULL;
893
894        buf = webcreatehead(buf, NULL, 0);
895
896        buf1 = malloc(MINMALLOC);
897        if(buf1 == NULL)
898        {
899                err("no mem");
900                return buf;
901        }
902
903        buf = ostrcat(buf, "<tr><td><font class=biglabel>", 1, 0);
904        if(epgnode->title != NULL)
905        {
906                buf = ostrcat(buf, epgnode->title, 1, 0);
907                buf = ostrcat(buf, " (", 1, 0);
908                loctime = olocaltime(&epgnode->starttime);
909                if(loctime != NULL)
910                        strftime(buf1, MINMALLOC, "%H:%M -", loctime);
911                free(loctime); loctime = NULL;
912                loctime = olocaltime(&epgnode->endtime);
913                if(loctime != NULL)
914                        strftime(&buf1[7], MINMALLOC - 8, " %H:%M", loctime);
915                free(loctime); loctime = NULL;
916                buf = ostrcat(buf, buf1, 1, 0);
917                buf = ostrcat(buf, ")", 1, 0);
918        }
919        buf = ostrcat(buf, "<br><br></font></td></tr>", 1, 0);
920
921        buf = ostrcat(buf, "<tr><td><font class=label>", 1, 0);
922        if(epgnode->subtitle != NULL)
923                buf = ostrcat(buf, epgnode->subtitle, 1, 0);
924        buf = ostrcat(buf, "<br><br></font></td></tr>", 1, 0);
925
926        buf = ostrcat(buf, "<tr><td><font class=label>", 1, 0);
927        tmpstr = epgdescunzip(epgnode);
928        if(tmpstr != NULL)
929                buf = ostrcat(buf, tmpstr, 1, 0);
930        free(tmpstr); tmpstr = NULL;
931        buf = ostrcat(buf, "</font></td></tr>", 1, 0);
932
933        buf = webcreatetail(buf, 0);
934
935        free(buf1);
936        return buf;
937}
938
939char* webgetsingleepg(char* param)
940{
941        int line = 0, maxlen = 0, pos = 0;
942        char* buf = NULL, *buf1 = NULL, *param1 = NULL, *tmpstr = NULL;
943        struct epg* epgnode = NULL;
944        struct channel* chnode = NULL;
945        struct tm *loctime = NULL;
946
947        //create param1
948        param1 = strchr(param, '&');
949        if(param1 != NULL)
950                *param1++ = '\0';
951
952        if(param1 == NULL) return NULL;
953
954        chnode = getchannel(atoi(param), atoi(param1));
955        if(chnode == NULL) return NULL;
956        epgnode = getepgakt(chnode);;
957
958        webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
959
960        buf1 = malloc(MINMALLOC);
961        if(buf1 == NULL)
962        {
963                err("no mem");
964                return buf;
965        }
966
967        while(epgnode != NULL)
968        {
969                if(line == 0)
970                {
971                        ostrcatbig(&buf, "<tr class=line1>", &maxlen, &pos);
972                        line = 1;
973                }
974                else
975                {
976                        ostrcatbig(&buf, "<tr class=line2>", &maxlen, &pos);
977                        line = 0;
978                }
979
980                ostrcatbig(&buf, "<td nowrap><a target=main class=link href=query?getepg&", &maxlen, &pos);
981                tmpstr = oitoa(chnode->serviceid);
982                ostrcatbig(&buf, tmpstr, &maxlen, &pos);
983                free(tmpstr); tmpstr = NULL;
984                ostrcatbig(&buf, "&", &maxlen, &pos);
985                tmpstr = oitoa(chnode->transponderid);
986                ostrcatbig(&buf, tmpstr, &maxlen, &pos);
987                free(tmpstr); tmpstr = NULL;
988                ostrcatbig(&buf, "&", &maxlen, &pos);
989                tmpstr = oitoa(epgnode->eventid);
990                ostrcatbig(&buf, tmpstr, &maxlen, &pos);
991                free(tmpstr); tmpstr = NULL;
992                ostrcatbig(&buf, ">", &maxlen, &pos);
993
994                loctime = olocaltime(&epgnode->starttime);
995                if(loctime != NULL)
996                        strftime(buf1, MINMALLOC, "%H:%M -", loctime);
997                free(loctime); loctime = NULL;
998                loctime = olocaltime(&epgnode->endtime);
999                if(loctime != NULL)
1000                        strftime(&buf1[7], MINMALLOC - 8, " %H:%M ", loctime);
1001                free(loctime); loctime = NULL;
1002                ostrcatbig(&buf, buf1, &maxlen, &pos);
1003                ostrcatbig(&buf, " ", &maxlen, &pos);
1004                ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
1005                if(epgnode->subtitle != NULL)
1006                {
1007                        ostrcatbig(&buf, " (", &maxlen, &pos);
1008                        ostrcatbig(&buf, epgnode->subtitle, &maxlen, &pos);
1009                        ostrcatbig(&buf, ")", &maxlen, &pos);
1010                }
1011                ostrcatbig(&buf, "</a></td></tr>", &maxlen, &pos);
1012       
1013                epgnode = epgnode->next;
1014        }
1015
1016        webcreatetailbig(&buf, &maxlen, &pos, 0);
1017
1018        free(buf1);
1019        return buf;
1020}
1021
1022//TODO: create rectimer line
1023void webcalcrecline(char** buf, int* maxlen, int* pos)
1024{
1025        //ostrcatbig(buf, "<table border=0 cellpadding=0 cellspacing=0 style=\"table-layout: fixed\"><tr><td width=500 style=\"background-color: c0c0c0; height: 2; border-left: 2px solid #303030;\"></td></tr></table>", maxlen, pos);
1026}
1027
1028char* webgetgmultiepg(char* param)
1029{
1030        int page = 1, i, line = 0, treffer = 0, maxlen = 0, pos = 0;
1031        char* buf = NULL, *tmpnr = NULL, *param1 = NULL;
1032        struct mainbouquet *mbouquet = NULL;
1033        struct bouquet *node = NULL;
1034        struct channel* chnode = NULL;
1035        struct epg* epgnode = NULL;
1036        time_t akttime = 0, difftime = 0, starttime = 0, endtime = 0, lastendtime = 0;
1037
1038        if(param == NULL) return NULL;
1039
1040        //create param1
1041        param1 = strchr(param, '&');
1042        if(param1 != NULL)
1043                *param1++ = '\0';
1044
1045        if(param1 != NULL) page = atoi(param1);
1046
1047        ostrcatbig(&buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script></head><body class=body><center><table width=100% height=100%><tr><td height=100%><table cellpadding=0 cellspacing=0 border=0 id=gmultiepg class=scrolltable style=\"table-layout: fixed;\" cellpadding=0><thead><tr>", &maxlen, &pos);
1048
1049        akttime = webcreatetimeline(&buf, &maxlen, &pos);
1050        akttime += ((page - 1) * 1440);
1051        ostrcatbig(&buf, "</tr></thead><tbody>", &maxlen, &pos);
1052
1053        mbouquet = getmainbouquet(param);
1054        if(mbouquet != NULL)
1055        {
1056                node = mbouquet->bouquet;
1057                while(node != NULL)
1058                {
1059                        chnode = getchannel(node->serviceid, node->transponderid);
1060                        if(chnode != NULL)
1061                        {
1062                                if(line == 0)
1063                                {
1064                                        ostrcatbig(&buf, "<tr><th class=gepgchannel1>", &maxlen, &pos);
1065                                        ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1066                                        ostrcatbig(&buf, "</th><td class=gepgchannelcell colspan=1000>", &maxlen, &pos);
1067                                        webcalcrecline(&buf, &maxlen, &pos);
1068                                        ostrcatbig(&buf, "<table border=0 cellpadding=0 cellspacing=0 style=\"table-layout: fixed;\"><tr class=line1>", &maxlen, &pos);
1069                                        line = 1;
1070                                }
1071                                else
1072                                {
1073                                        ostrcatbig(&buf, "<tr><th class=gepgchannel2>", &maxlen, &pos);
1074                                        ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1075                                        ostrcatbig(&buf, "</th><td class=gepgchannelcell colspan=1000>", &maxlen, &pos);
1076                                        webcalcrecline(&buf, &maxlen, &pos);
1077
1078                                        ostrcatbig(&buf, "<table border=0 cellpadding=0 cellspacing=0 style=\"table-layout: fixed;\"><tr class=line2>", &maxlen, &pos);
1079                                        line = 0;
1080                                }
1081
1082                                treffer = 0;
1083                                lastendtime = 0;
1084                                epgnode = getepgakt(chnode);
1085                                while(epgnode != NULL)
1086                                {
1087                                        treffer = 1;
1088                                        starttime = epgnode->starttime / 60;
1089                                        endtime = epgnode->endtime / 60;
1090
1091                                        if(endtime <= starttime || starttime >= akttime + 1440)
1092                                        {
1093                                                epgnode = epgnode->next;
1094                                                continue;
1095                                        }
1096
1097                                        //check if old endtime > new starttime
1098                                        if(lastendtime > 0 && starttime > lastendtime)
1099                                        {
1100                                                difftime = (starttime - lastendtime) * 5;
1101
1102                                                if(difftime <= 0)
1103                                                {
1104                                                        epgnode = epgnode->next;
1105                                                        continue;
1106                                                }
1107
1108                                                ostrcatbig(&buf, "<td class=gepgcellblank style=\"", &maxlen, &pos);
1109                                                tmpnr = oitoa(difftime);
1110                                                ostrcatbig(&buf, "width:", &maxlen, &pos);
1111                                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1112                                                ostrcatbig(&buf, "px;", &maxlen, &pos);
1113                                                ostrcatbig(&buf, "min-width:", &maxlen, &pos);
1114                                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1115                                                ostrcatbig(&buf, "px;", &maxlen, &pos);
1116                                                ostrcatbig(&buf, "max-width:", &maxlen, &pos);
1117                                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1118                                                ostrcatbig(&buf, "px;", &maxlen, &pos);
1119                                                free(tmpnr); tmpnr = NULL;
1120
1121                                                ostrcatbig(&buf, "\"> </td>", &maxlen, &pos);
1122                                        }
1123
1124                                        //check if starttime < last endtime
1125                                        if(starttime < lastendtime)
1126                                                starttime = lastendtime;
1127
1128                                        //check if endtime is in next day
1129                                        if(endtime > akttime + 1440)
1130                                                endtime = endtime - (endtime - (akttime + 1440));
1131
1132                                        //check if starttime is in prev day
1133                                        if(starttime < akttime)
1134                                                difftime = (endtime - akttime) * 5;
1135                                        else
1136                                                difftime = (endtime - starttime) * 5;
1137
1138                                        if(difftime <= 0)
1139                                        {
1140                                                epgnode = epgnode->next;
1141                                                continue;
1142                                        }
1143
1144                                        lastendtime = endtime;
1145
1146                                        ostrcatbig(&buf, "<td class=gepgcell style=\"", &maxlen, &pos);
1147                                        tmpnr = oitoa(difftime);
1148                                        ostrcatbig(&buf, "width:", &maxlen, &pos);
1149                                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1150                                        ostrcatbig(&buf, "px;", &maxlen, &pos);
1151                                        ostrcatbig(&buf, "min-width:", &maxlen, &pos);
1152                                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1153                                        ostrcatbig(&buf, "px;", &maxlen, &pos);
1154                                        ostrcatbig(&buf, "max-width:", &maxlen, &pos);
1155                                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1156                                        ostrcatbig(&buf, "px;", &maxlen, &pos);
1157                                        free(tmpnr); tmpnr = NULL;
1158
1159                                        ostrcatbig(&buf, "\"><div class=gepgcellborder>", &maxlen, &pos);
1160                                        ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
1161                                        ostrcatbig(&buf, "</div></div></td>", &maxlen, &pos);
1162                                       
1163                                        epgnode = epgnode->next;
1164                                }
1165                                if(treffer == 0)
1166                                        ostrcatbig(&buf, "<td class=gepgcellblank> </td>", &maxlen, &pos);
1167                        }
1168                        ostrcatbig(&buf, "</tr></table></td></tr>", &maxlen, &pos);
1169
1170                        node = node->next;
1171                }
1172        }
1173        ostrcatbig(&buf, "<script type=text/javascript>if(typeof tableScroll == 'function'){tableScroll('gmultiepg');}</script></tbody></table></td></tr><tr><td align=center>", &maxlen, &pos);
1174
1175        for(i = 1; i <= 14; i++)
1176        {
1177                if(page == i)
1178                        ostrcatbig(&buf, "<a class=pagesellink href=\"query?getgmultiepg&", &maxlen, &pos);
1179                else
1180                        ostrcatbig(&buf, "<a class=pagelink href=\"query?getgmultiepg&", &maxlen, &pos);
1181                ostrcatbig(&buf, param, &maxlen, &pos);
1182                ostrcatbig(&buf, "&", &maxlen, &pos);
1183                tmpnr = oitoa(i);
1184                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1185                ostrcatbig(&buf, "\">", &maxlen, &pos);
1186                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1187                ostrcatbig(&buf, "</a>", &maxlen, &pos);
1188                free(tmpnr); tmpnr = NULL;
1189        }
1190       
1191        ostrcatbig(&buf, "</td></tr></table></center></body></html>", &maxlen, &pos);
1192        return buf;
1193}
1194
1195void webgetshoot(char* param)
1196{
1197        char* cmd = NULL, *tmpstr = NULL;
1198
1199        if(ostrcmp(param, "1") == 0) //OSD
1200                cmd = ostrcat(cmd, "stfbshot PNG /tmp/dump.png", 1, 0);
1201
1202        if(ostrcmp(param, "2") == 0) //Video
1203        {
1204                if(status.aktservice->channel != NULL)
1205                {
1206                        cmd = ostrcat(cmd, "ffmpeg -itsoffset -4 -i http://127.0.0.1:", 1, 0);
1207                        cmd = ostrcat(cmd, getconfig("streamport", NULL), 1, 0);
1208                        cmd = ostrcat(cmd, "/", 1, 0);
1209                        tmpstr = oitoa(status.aktservice->channel->serviceid);
1210                        cmd = ostrcat(cmd, tmpstr, 1, 0);
1211                        free(tmpstr); tmpstr = NULL;
1212                        cmd = ostrcat(cmd, ",", 1, 0);
1213                        tmpstr = oitoa(status.aktservice->channel->transponderid);
1214                        cmd = ostrcat(cmd, tmpstr, 1, 0);
1215                        free(tmpstr); tmpstr = NULL;
1216                        cmd = ostrcat(cmd, " -vframes 1 -vcodec png -sn -an -y -f image2 /tmp/dump.png", 1, 0);
1217                }
1218        }
1219
1220        if(ostrcmp(param, "3") == 0) //OSD + Video
1221        {
1222                if(status.aktservice->channel != NULL)
1223                {
1224                        cmd = ostrcat(cmd, "grab.sh ", 1, 0);
1225                        tmpstr = oitoa(status.aktservice->channel->serviceid);
1226                        cmd = ostrcat(cmd, tmpstr, 1, 0);
1227                        free(tmpstr); tmpstr = NULL;
1228                        cmd = ostrcat(cmd, ",", 1, 0);
1229                        tmpstr = oitoa(status.aktservice->channel->transponderid);
1230                        cmd = ostrcat(cmd, tmpstr, 1, 0);
1231                        free(tmpstr); tmpstr = NULL;
1232                        cmd = ostrcat(cmd, " titan", 1, 0);
1233                }
1234        }
1235
1236        if(cmd != NULL)
1237                system(cmd);
1238        free(cmd);
1239}
1240
1241char* webgetepgsearch(char* query, char* param)
1242{
1243        int line = 0, maxlen = 0, pos = 0, maxcount = 0, page = 1;
1244        char* buf = NULL, *buf1 = NULL, *tmpstr = NULL, *tmpnr = NULL, * param1 = NULL;
1245        struct channel* chnode = channel;
1246        struct epg* epgnode = NULL;
1247        struct tm *loctime = NULL;
1248
1249        if(query == NULL) return NULL;
1250
1251        if(param == NULL)
1252        {
1253                query = strchr(query, '=');
1254                if(query != NULL)
1255                {
1256                        query++;
1257                        stringreplacechar(param, '+', ' ');
1258                        param = query;
1259                }
1260        }
1261        else
1262        {
1263                //create param1
1264                param1 = strchr(param, '&');
1265                if(param1 != NULL)
1266                {
1267                        *param1++ = '\0';
1268                        page = atoi(param1);
1269                }       
1270        }
1271
1272        buf1 = malloc(MINMALLOC);
1273        if(buf1 == NULL)
1274        {
1275                err("no mem");
1276                return buf;
1277        }
1278
1279        webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
1280        while(chnode != NULL)
1281        {
1282                epgnode = getepgakt(chnode);
1283                while(epgnode != NULL)
1284                {
1285                        //TODO: case sensitiv search
1286                        if(epgnode->title != NULL && strstr(epgnode->title, param) != NULL)
1287                        {
1288
1289                                maxcount++;
1290                                if(maxcount <= (MAXHTMLLINE * page) - MAXHTMLLINE || maxcount > MAXHTMLLINE * page)
1291                                {
1292                                        epgnode = epgnode->next;
1293                                        continue;
1294                                }
1295
1296                                if(line == 0)
1297                                {
1298                                        ostrcatbig(&buf, "<tr class=line1>", &maxlen, &pos);
1299                                        line = 1;
1300                                }
1301                                else
1302                                {
1303                                        ostrcatbig(&buf, "<tr class=line2>", &maxlen, &pos);
1304                                        line = 0;
1305                                }
1306
1307                                ostrcatbig(&buf, "<td nowrap><a target=main class=link href=query?getepg&", &maxlen, &pos);
1308                                tmpstr = oitoa(chnode->serviceid);
1309                                ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1310                                free(tmpstr); tmpstr = NULL;
1311                                ostrcatbig(&buf, "&", &maxlen, &pos);
1312                                tmpstr = oitoa(chnode->transponderid);
1313                                ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1314                                free(tmpstr); tmpstr = NULL;
1315                                ostrcatbig(&buf, "&", &maxlen, &pos);
1316                                tmpstr = oitoa(epgnode->eventid);
1317                                ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1318                                free(tmpstr); tmpstr = NULL;
1319                                ostrcatbig(&buf, ">", &maxlen, &pos);
1320       
1321                                loctime = olocaltime(&epgnode->starttime);
1322                                if(loctime != NULL)
1323                                        strftime(buf1, MINMALLOC, "%H:%M -", loctime);
1324                                free(loctime); loctime = NULL;
1325                                loctime = olocaltime(&epgnode->endtime);
1326                                if(loctime != NULL)
1327                                        strftime(&buf1[7], MINMALLOC - 8, " %H:%M ", loctime);
1328                                free(loctime); loctime = NULL;
1329                                ostrcatbig(&buf, buf1, &maxlen, &pos);
1330                                ostrcatbig(&buf, " ", &maxlen, &pos);
1331       
1332                                ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
1333                                if(chnode->name != NULL)
1334                                {
1335                                        ostrcatbig(&buf, " (", &maxlen, &pos);
1336                                        ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1337                                        ostrcatbig(&buf, ")", &maxlen, &pos);
1338                                }
1339                                ostrcatbig(&buf, "</a><br><font class=smalllabel1>", &maxlen, &pos);
1340                                ostrcatbig(&buf, epgnode->subtitle, &maxlen, &pos);
1341                                ostrcatbig(&buf, "</font></td></tr>", &maxlen, &pos);
1342                        }
1343                        epgnode = epgnode->next;
1344                }
1345                chnode = chnode->next;
1346        }
1347
1348        if(maxcount > MAXHTMLLINE)
1349        {
1350                int i;
1351                ostrcatbig(&buf, "<tr><td align=center><br>", &maxlen, &pos);
1352                for(i = 1; i <= (int)ceil(((float)maxcount / MAXHTMLLINE)); i++)
1353                {
1354                        if(page == i)
1355                                ostrcatbig(&buf, "<a class=pagesellink href=query?getepgsearch&", &maxlen, &pos);
1356                        else
1357                                ostrcatbig(&buf, "<a class=pagelink href=query?getepgsearch&", &maxlen, &pos);
1358                        ostrcatbig(&buf, param, &maxlen, &pos);
1359                        ostrcatbig(&buf, "&", &maxlen, &pos);
1360                        free(tmpnr); tmpnr = NULL;
1361
1362                        tmpnr = oitoa(i);
1363                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1364                        ostrcatbig(&buf, ">", &maxlen, &pos);
1365                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1366                        ostrcatbig(&buf, "</a>", &maxlen, &pos);
1367                        free(tmpnr); tmpnr = NULL;
1368                }
1369                ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
1370        }
1371
1372        webcreatetailbig(&buf, &maxlen, &pos, 0);
1373        free(buf1);
1374        return buf;
1375}
1376
1377//flagbit 0: restrict to path
1378//flagbit 1: show epg icon
1379//flagbit 2: show delete icon
1380//flagbit 3: show stream icon
1381//flagbit 4: show websteam icon
1382char* webgetfilelist(char* param, char* link, char* dellink, char* path, char* mask, int flag)
1383{
1384        char* buf = NULL, *tmppath = NULL, *tmpnr = NULL, *param1 = NULL;
1385        int maxlen = 0, pos = 0, line = 0, maxcount = 0, page = 1;
1386        struct skin* webdir = getscreen("webdir");
1387        struct skin* filelist = getscreennode(webdir, "filelist");
1388        struct skin* filelistpath = getscreennode(webdir, "filelistpath");
1389        struct skin* node = NULL;
1390
1391        if(param == NULL) param = path;
1392
1393        //create param1
1394        param1 = strchr(param, '&');
1395        if(param1 != NULL)
1396                *param1++ = '\0';
1397
1398        if(param1 != NULL) page = atoi(param1);
1399
1400        if(strlen(param) == 0 || !isdir(param))
1401                tmppath = ostrcat(path, "", 0, 0);
1402        else
1403                tmppath = ostrcat(param, "", 0, 0);
1404
1405        char* tmppath1 = createpath(tmppath, "");
1406        free(tmppath); tmppath = tmppath1;
1407
1408        if(checkbit(flag, 0) == 1)
1409        {
1410                if(strstr(tmppath, path) != tmppath)
1411                {
1412                        free(tmppath); tmppath = NULL;
1413                        tmppath = ostrcat(path, "", 0, 0);
1414                }
1415        }
1416
1417        changemask(filelist, mask);
1418        changeinput(filelist, tmppath);
1419        changetext(filelistpath, filelist->input);
1420
1421        free(tmppath); tmppath = NULL;
1422
1423        delmarkedscreennodes(webdir, FILELISTDELMARK);
1424        createfilelist(webdir, filelist);
1425
1426        ostrcatbig(&buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script></head><body class=body><center><table width=100%>", &maxlen, &pos);
1427
1428        node = filelist;
1429        while(node != NULL)
1430        {
1431                if(node->del == FILELISTDELMARK)
1432                {
1433                        maxcount++;
1434                        if(maxcount <= (MAXHTMLLINE * page) - MAXHTMLLINE || maxcount > MAXHTMLLINE * page)
1435                        {
1436                                node = node->next;
1437                                continue;
1438                        }
1439
1440                        if(line == 0)
1441                        {
1442                                ostrcatbig(&buf, "<tr class=line1>", &maxlen, &pos);
1443                                line = 1;
1444                        }
1445                        else
1446                        {
1447                                ostrcatbig(&buf, "<tr class=line2>", &maxlen, &pos);
1448                                line = 0;
1449                        }
1450
1451                        ostrcatbig(&buf, "<td>", &maxlen, &pos);
1452                        if(node->input != NULL) //dir
1453                        {
1454                                ostrcatbig(&buf, "<img border=0 width=16 height=16 src=img/folder.png alt=Directory> <a class=link href=\"query?", &maxlen, &pos);
1455                                ostrcatbig(&buf, link, &maxlen, &pos);
1456                                ostrcatbig(&buf, "&", &maxlen, &pos);
1457                                ostrcatbig(&buf, node->input, &maxlen, &pos);
1458                                ostrcatbig(&buf, "\">", &maxlen, &pos);
1459                                ostrcatbig(&buf, node->text, &maxlen, &pos);
1460                                ostrcatbig(&buf, "</a><td> </td>", &maxlen, &pos);
1461                        }
1462                        else
1463                        {
1464                                ostrcatbig(&buf, "<font class=label1>", &maxlen, &pos);
1465                                ostrcatbig(&buf, node->text, &maxlen, &pos);
1466                                ostrcatbig(&buf, "</font></td>", &maxlen, &pos);
1467
1468                                ostrcatbig(&buf, "<td width=80 align=right>", &maxlen, &pos);
1469                                //epg png
1470                                if(checkbit(flag, 1) == 1)
1471                                {
1472                                        ostrcatbig(&buf, "<a href=\"query?getmovieepg&", &maxlen, &pos);
1473                                        ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1474                                        ostrcatbig(&buf, "/", &maxlen, &pos);
1475                                        ostrcatbig(&buf, node->text, &maxlen, &pos);
1476                                        ostrcatbig(&buf, "\">", &maxlen, &pos);
1477                                        ostrcatbig(&buf, "<img border=0 src=img/movieepg.png width=16 height=16 alt=EPG></a>", &maxlen, &pos);
1478                                }
1479                                //delete png
1480                                if(checkbit(flag, 2) == 1)
1481                                {
1482                                        ostrcatbig(&buf, "<img border=0 src=img/delete.png width=16 height=16 alt=Delete onclick='delquestion(\"", &maxlen, &pos);
1483                                        ostrcatbig(&buf, "query?", &maxlen, &pos);
1484                                        ostrcatbig(&buf, dellink, &maxlen, &pos);
1485                                        ostrcatbig(&buf, "&", &maxlen, &pos);
1486                                        ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1487                                        ostrcatbig(&buf, "&", &maxlen, &pos);
1488                                        tmpnr = oitoa(page);
1489                                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1490                                        free(tmpnr); tmpnr = NULL;
1491                                        ostrcatbig(&buf, "&", &maxlen, &pos);
1492                                        ostrcatbig(&buf, node->text, &maxlen, &pos);
1493                                        ostrcatbig(&buf, "\");'>", &maxlen, &pos);
1494                                }
1495                                //stream png
1496                                if(checkbit(flag, 3) == 1)
1497                                {
1498                                        ostrcatbig(&buf, "<a target=nothing href=\"query?getm3u&0,0,", &maxlen, &pos);
1499                                        ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1500                                        ostrcatbig(&buf, "/", &maxlen, &pos);
1501                                        ostrcatbig(&buf, node->text, &maxlen, &pos);
1502                                        ostrcatbig(&buf, "\">", &maxlen, &pos);
1503
1504                                        ostrcatbig(&buf, "<img border=0 src=img/stream.png width=16 height=16 alt=Stream></a>", &maxlen, &pos);
1505                                }
1506                                //webstream png
1507                                if(checkbit(flag, 4) == 1)
1508                                {
1509                                        ostrcatbig(&buf, "<a target=_blank href=\"query?getvideo&0,0,", &maxlen, &pos);
1510                                        ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1511                                        ostrcatbig(&buf, "/", &maxlen, &pos);
1512                                        ostrcatbig(&buf, node->text, &maxlen, &pos);
1513                                        ostrcatbig(&buf, "\">", &maxlen, &pos);
1514
1515                                        ostrcatbig(&buf, "<img border=0 src=img/webstream.png width=16 height=16 alt=WebStream></a>", &maxlen, &pos);
1516                                }
1517                        }
1518                        ostrcatbig(&buf, "</td>", &maxlen, &pos);
1519                        ostrcatbig(&buf, "</tr>", &maxlen, &pos);
1520                }
1521
1522                node = node->next;
1523        }
1524
1525        if(maxcount > MAXHTMLLINE)
1526        {
1527                int i;
1528                ostrcatbig(&buf, "<tr><td align=center><br>", &maxlen, &pos);
1529                for(i = 1; i <= (int)ceil(((float)maxcount / MAXHTMLLINE)); i++)
1530                {
1531                        if(page == i)
1532                        {
1533                                ostrcatbig(&buf, "<a class=pagesellink href=query?", &maxlen, &pos);
1534                                ostrcatbig(&buf, link, &maxlen, &pos);
1535                                ostrcatbig(&buf, "&", &maxlen, &pos);
1536                        }
1537                        else
1538                        {
1539                                ostrcatbig(&buf, "<a class=pagelink href=query?", &maxlen, &pos);
1540                                ostrcatbig(&buf, link, &maxlen, &pos);
1541                                ostrcatbig(&buf, "&", &maxlen, &pos);
1542                        }
1543                        ostrcatbig(&buf, param, &maxlen, &pos);
1544                        ostrcatbig(&buf, "&", &maxlen, &pos);
1545
1546                        tmpnr = oitoa(i);
1547                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1548                        ostrcatbig(&buf, ">", &maxlen, &pos);
1549                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1550                        ostrcatbig(&buf, "</a>", &maxlen, &pos);
1551                        free(tmpnr); tmpnr = NULL;
1552                }
1553                ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
1554        }
1555
1556        webcreatetailbig(&buf, &maxlen, &pos, 0);
1557        delmarkedscreennodes(webdir, FILELISTDELMARK);
1558        return buf;
1559}
1560
1561char* webgetmovieepg(char* param, char* path, int flag)
1562{
1563        char* buf = NULL, *tmpstr = NULL;
1564        char tstr[2];
1565        char c = 0;
1566        int first = 1, maxlen = 0, pos = 0;
1567        FILE* fd = NULL;
1568
1569        webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
1570        ostrcatbig(&buf, "<tr><td><font class=biglabel>", &maxlen, &pos);
1571
1572        if(flag == 1)
1573        {
1574                if(param != NULL && strstr(param, path) == param)
1575                {
1576                        tmpstr = changefilenameext(param, ".epg");
1577                        fd = fopen(tmpstr, "r");
1578                }
1579        }
1580        else
1581        {
1582                tmpstr = changefilenameext(param, ".epg");
1583                fd = fopen(tmpstr, "r");
1584        }
1585
1586        if(fd != NULL)
1587        {
1588                while(c != EOF)
1589                {
1590                        c = fgetc(fd);
1591                        if(c == '\n')
1592                        {
1593                                if(first == 1)
1594                                {
1595                                        ostrcatbig(&buf, "</font><br><font class=label>", &maxlen, &pos);
1596                                        first = 0;
1597                                }
1598                                ostrcatbig(&buf, "<br>", &maxlen, &pos);
1599                                continue;
1600                        }
1601                        sprintf(tstr, "%c", c);
1602                        ostrcatbig(&buf, tstr, &maxlen, &pos);
1603                }
1604                fclose(fd);
1605        }
1606        ostrcatbig(&buf, "</font></td></tr>", &maxlen, &pos);
1607
1608        webcreatetailbig(&buf, &maxlen, &pos, 0);
1609
1610        free(tmpstr); tmpstr = NULL;
1611        return buf;
1612}
1613
1614char* webdelfile(char* param, char* link, char* dellink, char* path, char* mask, int flag)
1615{
1616        char* buf = NULL, *param1 = NULL, *param2 = NULL, *tmpparam = NULL;
1617
1618        if(param == NULL) return NULL;
1619
1620        //create param1 + 2
1621        param1 = strchr(param, '&');
1622        if(param1 != NULL)
1623        {
1624                *param1++ = '\0';
1625                param2 = strchr(param1, '&');
1626                if(param2 != NULL)
1627                        *param2++ = '\0';
1628        }
1629
1630        if(param1 == NULL || param2 == NULL) return NULL;
1631
1632        tmpparam = createpath(param, param2);
1633
1634        if(checkbit(flag, 0) == 1)
1635        {
1636                if(tmpparam != NULL && strstr(tmpparam, path) == tmpparam)
1637                        unlink(tmpparam);
1638        }
1639        else
1640                unlink(tmpparam);
1641
1642        free(tmpparam); tmpparam = NULL;
1643        tmpparam = ostrcat(tmpparam, param, 1, 0);
1644        tmpparam = ostrcat(tmpparam, "&", 1, 0);
1645        tmpparam = ostrcat(tmpparam, param1, 1, 0);
1646
1647        buf = webgetfilelist(tmpparam, link, dellink, path, mask, flag);
1648        free(tmpparam); tmpparam = NULL;
1649        return buf;
1650}
1651
1652void websendrc(char* param)
1653{
1654        int rccode = 0;
1655
1656        rccode = getrcconfigint(param, NULL);
1657        writerc(rccode);
1658}
1659
1660//flag 0: get aktiv timer
1661//flag 1: get old timer
1662char* webgetrectimer(char* param, int flag)
1663{
1664        char* buf = NULL, *buf1 = NULL;
1665        struct rectimer* node = rectimer;
1666        struct channel* chnode = NULL;
1667        int line = 0, maxlen = 0, pos = 0;
1668        struct tm *loctime = NULL;
1669
1670        buf1 = malloc(MINMALLOC);
1671        if(buf1 == NULL)
1672        {
1673                err("no mem");
1674                return NULL;
1675        }
1676
1677        ostrcatbig(&buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script></head><body class=body><center><table width=100%>", &maxlen, &pos);
1678
1679        while(node != NULL)
1680        {
1681                if((flag == 0 && (node->status == 2 || node->status == 3)) || (flag == 1 && (node->status == 0 || node->status == 1)))
1682                {
1683                        node = node->next;
1684                        continue;
1685                }
1686                if(line == 0)
1687                {
1688                        ostrcatbig(&buf, "<tr class=line1><td>", &maxlen, &pos);
1689                        line = 1;
1690                }
1691                else
1692                {
1693                        ostrcatbig(&buf, "<tr class=line2><td>", &maxlen, &pos);
1694                        line = 0;
1695                }
1696
1697                loctime = olocaltime(&node->begin);
1698                if(loctime != NULL)
1699                        strftime(buf1, MINMALLOC, "%d-%m-%Y %H:%M -", loctime);
1700                free(loctime); loctime = NULL;
1701                loctime = olocaltime(&node->end);
1702                if(loctime != NULL)
1703                        strftime(&buf1[18], MINMALLOC - 19, " %H:%M ", loctime);
1704                free(loctime); loctime = NULL;
1705
1706                ostrcatbig(&buf, "<font class=label1>", &maxlen, &pos);
1707                ostrcatbig(&buf, buf1, &maxlen, &pos);
1708
1709                ostrcatbig(&buf, " (", &maxlen, &pos);
1710                if(node->justplay == 0)
1711                        ostrcatbig(&buf, "rec - ", &maxlen, &pos);
1712                else
1713                        ostrcatbig(&buf, "switch - ", &maxlen, &pos);
1714                if(node->repeate == 0)
1715                        ostrcatbig(&buf, "once", &maxlen, &pos);
1716                else
1717                        ostrcatbig(&buf, "repeate", &maxlen, &pos);
1718
1719                ostrcatbig(&buf, ")</font><br><font class=smalllabel1>", &maxlen, &pos);
1720                if(node->name == NULL || strlen(node->name) == 0)
1721                        ostrcatbig(&buf, "---", &maxlen, &pos);
1722                else
1723                        ostrcatbig(&buf, node->name, &maxlen, &pos);
1724
1725                chnode = getchannel(node->serviceid, node->transponderid);
1726                if(chnode != NULL)
1727                {
1728                        ostrcatbig(&buf, " (", &maxlen, &pos);
1729                        ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1730                        ostrcatbig(&buf, ")", &maxlen, &pos);
1731                }
1732                ostrcatbig(&buf, "<br>", &maxlen, &pos);
1733
1734                if(node->status == 0)
1735                        ostrcatbig(&buf, "waiting", &maxlen, &pos);
1736                else if(node->status == 1)
1737                        ostrcatbig(&buf, "running", &maxlen, &pos);
1738                else if(node->status == 2)
1739                        ostrcatbig(&buf, "succes", &maxlen, &pos);
1740                else if(node->status == 3)
1741                {
1742                        ostrcatbig(&buf, "error", &maxlen, &pos);
1743                        if(node->errstr != NULL && strlen(node->errstr) > 0)
1744                        {
1745                                ostrcatbig(&buf, " (", &maxlen, &pos);
1746                                ostrcatbig(&buf, node->errstr, &maxlen, &pos);
1747                                ostrcatbig(&buf, ")", &maxlen, &pos);
1748                        }
1749                }
1750
1751                ostrcatbig(&buf, "</font>", &maxlen, &pos);
1752
1753                if(flag == 0)
1754                {
1755                        ostrcatbig(&buf, "</td><td width=40 align=right>", &maxlen, &pos);
1756
1757                        //edit png
1758                        ostrcatbig(&buf, "<a target=main href=\"query?editrectimer", &maxlen, &pos);
1759                        //ostrcatbig(&buf, node->text, &maxlen, &pos);
1760                        ostrcatbig(&buf, "\">", &maxlen, &pos);
1761
1762                        ostrcatbig(&buf, "<img border=0 src=img/edit.png width=16 height=16 alt=\"Edit Timer\"></a>", &maxlen, &pos);
1763
1764                        //delete png
1765                        ostrcatbig(&buf, "<img border=0 src=img/delete.png width=16 height=16 alt=Delete onclick='delquestion(\"", &maxlen, &pos);
1766                        ostrcatbig(&buf, "query?delrectimer", &maxlen, &pos);
1767                        //ostrcatbig(&buf, dellink, &maxlen, &pos);
1768                        //ostrcatbig(&buf, "&", &maxlen, &pos);
1769                        //ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1770                        //ostrcatbig(&buf, "&", &maxlen, &pos);
1771                        //tmpnr = oitoa(page);
1772                        //ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1773                        //free(tmpnr); tmpnr = NULL;
1774                        //ostrcatbig(&buf, "&", &maxlen, &pos);
1775                        //ostrcatbig(&buf, node->text, &maxlen, &pos);
1776                        ostrcatbig(&buf, "\");'>", &maxlen, &pos);
1777                }
1778
1779                ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
1780
1781                node = node->next;
1782        }
1783
1784        webcreatetailbig(&buf, &maxlen, &pos, 0);
1785
1786        free(buf1);
1787        return buf;
1788}
1789
1790char* webaddrectimer(char* param)
1791{
1792        char* buf = NULL;
1793        int maxlen = 0, pos = 0;
1794       
1795        ostrcatbig(&buf, param, &maxlen, &pos);
1796        return buf;
1797}
1798
1799char* webeditrectimer(char* param)
1800{
1801        char* buf = NULL;
1802        int maxlen = 0, pos = 0;
1803       
1804        ostrcatbig(&buf, param, &maxlen, &pos);
1805        return buf;
1806}
1807
1808char* webdelrectimer(char* param)
1809{
1810        char* buf = NULL;
1811        int maxlen = 0, pos = 0;
1812       
1813        ostrcatbig(&buf, param, &maxlen, &pos);
1814        return buf;
1815}
1816
1817void putxmessage(struct stimerthread* timernode, char* captiontime, char* body)
1818{
1819        struct splitstr* ret1 = NULL;
1820        char* caption = NULL;
1821        int count1 = 0;
1822        int timeout = 0;
1823        ret1 = strsplit(captiontime, "\t", &count1);
1824        caption = ostrcat(caption, (&ret1[0])->part, 1, 0);
1825        timeout = atoi((&ret1[1])->part);
1826        textbox(caption, body, _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, NULL, 0, 600, 280, timeout, 0);
1827        free(caption); free(body); free(captiontime); free(ret1);
1828}
1829
1830void xmessage(char* filename)
1831{
1832        char* param=NULL, *param1 = NULL, *param2 = NULL, *param3 = NULL, *param4 = NULL;
1833        char* caption=NULL, *body=NULL;
1834        char* timeout=NULL;
1835        param4 = strstr(filename, "icon=");
1836        param3 = strstr(filename, "charset=");
1837        param2 = strstr(filename, "timeout=");
1838        param1 = strstr(filename, "caption=");
1839        param = strstr(filename, "body=");
1840
1841        if(param4 != NULL) {
1842                param4 = param4 - 1;
1843                *param4 = '\0';
1844                param4 = param4 + 5;
1845                *param4++ = '\0';
1846        }
1847        if(param3 != NULL) {
1848                param3 = param3 - 1;
1849                *param3 = '\0';
1850                param3 = param3 + 8;
1851                *param3++ = '\0';
1852        }
1853        if(param2 != NULL) {
1854                param2 = param2 - 1;
1855                *param2 = '\0';
1856                param2 = param2 + 8;
1857                *param2++ = '\0';
1858        }
1859        if(param1 != NULL) {
1860                param1 = param1 - 1;
1861                *param1 = '\0';
1862                param1 = param1 + 8;
1863                *param1++ = '\0';
1864        }
1865        if(param != NULL) {
1866                param = param - 1;
1867                *param = '\0';
1868                param = param + 5;
1869                *param++ = '\0';
1870                body=ostrcat(body, param, 1, 0);
1871        }
1872        else
1873                body=ostrcat(body, " ", 1, 0);
1874               
1875        if(param2 != NULL)
1876                timeout = ostrcat(timeout, param2, 1, 0);
1877        else
1878                timeout = ostrcat(timeout, "5", 1, 0);
1879               
1880        if(param1 != NULL)
1881                caption = ostrcat(caption, param1, 1, 0);
1882        else
1883                caption = ostrcat(caption, "XMESSAGE", 1, 0);
1884       
1885        caption = ostrcat(caption, "\t", 1, 0);
1886        caption = ostrcat(caption, timeout, 1, 0);
1887               
1888        //addtimer(&putxmessage, START, 1000, 1, (void*)caption, (void*)body, (void*)timeout);
1889        addtimer(&putxmessage, START, 1000, 1,(void*)caption, (void*)body, NULL);
1890        return;
1891}
1892
1893#endif
Note: See TracBrowser for help on using the repository browser.