source: titan/plugins/gmediarender/gmediarender.h @ 41285

Last change on this file since 41285 was 32798, checked in by obi, 9 years ago

gmediarender optimize

File size: 6.6 KB
Line 
1#ifndef GMEDIARENDER_H
2#define GMEDIARENDER_H
3
4extern struct skin* skin;
5struct fb *fb = NULL;
6extern struct screensaver* screensaver;
7
8void gmediarendergetpic(struct skin* gmediarender, char* buf)
9{
10        char *tmpip = NULL, *pos = NULL, *pos1 = NULL, *path = NULL;
11        int port = 80;
12        printf("dlna download link: %s\n", buf);
13               
14        if(buf == NULL) return;
15
16        tmpip = string_replace("http://", "", buf, 0);
17
18        if(tmpip != NULL)
19        {
20                pos = strchr(tmpip, '/');
21                pos1 = strchr(tmpip, ':');
22        }
23        if(pos != NULL)
24        {
25                pos[0] = '\0';
26                path = pos + 1;
27        }
28        if(pos1 != NULL)
29        {
30                pos1[0] = '\0';
31                port = atoi(pos1 + 1);
32        }
33
34        if(cmpfilenameext(path, ".jpg") == 0)
35        {
36                unlink("/tmp/gmediarenderpic.jpg");
37/*
38                char* cmd = NULL;
39                cmd = ostrcat(cmd, "wget ", 1, 0);
40                cmd = ostrcat(cmd, buf, 1, 0);
41                cmd = ostrcat(cmd, " -O /tmp/gmediarenderpic.jpg", 1, 0);
42                printf("cmd: %s\n", cmd);
43                system(cmd);
44                free(cmd), cmd = NULL;
45*/
46                gethttp(tmpip, path, port, "/tmp/gmediarenderpic.jpg", NULL, 5000, NULL, 0);
47                changepic(gmediarender, "/tmp/gmediarenderpic.jpg");
48                gmediarender->picwidth = 1;
49                gmediarender->picheight = 1;
50                gmediarender->bgcol = 0;
51                gmediarender->picquality = getconfigint("mc_pp_picquality", NULL);
52                drawscreen(gmediarender, 0, 4);
53        }
54        if(cmpfilenameext(path, ".png") == 0)
55        {
56                unlink("/tmp/gmediarenderpic.png");
57/*
58                char* cmd = NULL;
59                cmd = ostrcat(cmd, "wget ", 1, 0);
60                cmd = ostrcat(cmd, buf, 1, 0);
61                cmd = ostrcat(cmd, " -O /tmp/gmediarenderpic.png", 1, 0);
62                printf("cmd: %s\n", cmd);
63                system(cmd);
64                free(cmd), cmd = NULL;
65*/
66                gethttp(tmpip, path, port, "/tmp/gmediarenderpic.png", NULL, 5000, NULL, 0);
67                changepic(gmediarender, "/tmp/gmediarenderpic.png");
68                gmediarender->picwidth = 1;
69                gmediarender->picheight = 1;
70                gmediarender->bgcol = 0;
71                gmediarender->picquality = getconfigint("mc_pp_picquality", NULL);
72                drawscreen(gmediarender, 0, 4);
73        }
74}
75
76void screengmediarender()
77{
78        int rcret = -1, ret = 0, rcsaverwait = 0, count = 0, screensaver_delay = 0, rcwait = 1000;
79        char* cmd = NULL, *buf = NULL, *tmpstr = NULL, *tmpstr1 = NULL;
80        int fifo = -1;
81        struct skin* gmediarender = getscreen("gmediarender");
82        struct skin* servername = getscreennode(gmediarender, "servername");
83        struct skin* connect = getscreennode(gmediarender, "connect");
84        struct skin* loading = getscreen("loading");
85       
86        ret = servicestop(status.aktservice, 1, 1);
87        if(ret == 1) return;
88
89        buf = malloc(MINMALLOC);
90        if(buf == NULL)
91        {
92                err("no mem");
93                return;
94        }
95
96        //create fifo
97        mkfifo("/tmp/gmediarender", 0666);
98
99        //open fifo
100        fifo = open("/tmp/gmediarender", O_RDONLY | O_NONBLOCK);
101
102        drawscreen(skin, 0, 0);
103        drawscreen(gmediarender, 0, 0);
104
105        tmpstr = ostrcat(status.boxtype, NULL, 0, 0);
106        struct inetwork* net = getinetworkbydevice("eth0");
107        if(net != NULL)
108        {
109                tmpstr = ostrcat(tmpstr, "-", 1, 0);
110                tmpstr = ostrcat(tmpstr, net->ip, 1, 0);
111        }
112
113        if(file_exist("/var/usr/local/share/titan/plugins/gmediarender/gmediarender.sh") == 1)
114                cmd = ostrcat(cmd, "/var/usr/local/share/titan/plugins/gmediarender/gmediarender.sh ", 1, 0);
115        else if(file_exist("/var/swap/usr/local/share/titan/plugins/gmediarender/gmediarender.sh") == 1)
116                cmd = ostrcat(cmd, "/var/swap/usr/local/share/titan/plugins/gmediarender/gmediarender.sh ", 1, 0);
117        else
118                cmd = ostrcat(cmd, "/mnt/swapextensions/usr/local/share/titan/plugins/gmediarender/gmediarender.sh ", 1, 0);
119       
120        cmd = ostrcat(cmd, tmpstr, 1, 0);
121        cmd = ostrcat(cmd, " &", 1, 0);
122
123        //start renderer
124        debug(10, "cmd: %s", cmd);
125        system(cmd);
126        free(cmd), cmd = NULL;
127
128        tmpstr1 = ostrcat(tmpstr1, _("DLNA Renderer Name"), 1, 0);
129        tmpstr1 = ostrcat(tmpstr1, ": ", 1, 0);
130        tmpstr1 = ostrcat(tmpstr1, tmpstr, 1, 0);
131        changetext(servername, tmpstr1);
132        free(tmpstr), tmpstr = NULL;
133
134        tmpstr = ostrcat(_("Wait for connect or press EXIT"), NULL, 0, 0);
135        changetext(connect, tmpstr);
136
137        changepic(gmediarender, "%pluginpath%/gmediarender/skin/background.jpg");                                       
138        drawscreen(gmediarender, 0, 0);
139
140//load screenserver
141        if(getconfigint("screensaver", NULL) == 1)
142        {
143                screensaver_delay = getconfigint("screensaver_delay", NULL);
144                initscreensaver();
145        }
146//
147        while(1)
148        {
149                rcret = waitrcext(NULL, rcwait, 0, 0);
150
151                if(fifo > -1)
152                {
153                        ret = read(fifo, buf, MINMALLOC);
154                        if(ret > 0)
155                        {
156                                changetext(connect, _("DLNA Control Client connected !"));
157                                buf[ret] = '\0';
158
159                                if(ostrcmp(buf, "clear.png") == 0) //clear screen
160                                {
161                                        servername->hidden = NO;
162                                        connect->hidden = NO;
163                                        count = 0;
164                                        rcwait = 1000;
165                                        rcsaverwait = 0;
166                                        servicestop(status.aktservice, 1, 1);
167                                        drawscreen(skin, 0, 0);
168                                }
169                                else if(ostrcmp(buf, "done.png") == 0) //clear screen
170                                {
171                                        count = 0;
172                                        rcwait = 1000;
173                                        servicestop(status.aktservice, 1, 1);
174                                        drawscreen(skin, 0, 0);
175                                        changepic(gmediarender, "%pluginpath%/gmediarender/skin/background.jpg");
176                                        drawscreen(gmediarender, 0, 0);
177                                }
178                                else if(ostrcmp(buf, "saver.png") == 0) //saver screen
179                                {
180                                        servername->hidden = NO;
181                                        connect->hidden = NO;
182
183                                        if(getconfigint("screensaver", NULL) == 1)
184                                        {
185                                                count = 1;
186                                                rcsaverwait = 0;
187                                                drawscreen(skin, 0, 0);
188                                        }
189                                        else
190                                        {
191                                                servicestop(status.aktservice, 1, 1);
192                                                changepic(gmediarender, "%pluginpath%/gmediarender/skin/background.jpg");
193                                                drawscreen(gmediarender, 0, 0);
194                                        }
195                                }
196                                else
197                                {
198                                        count = 0;
199                                        rcwait = 1000;
200                                        servername->hidden = YES;
201                                        connect->hidden = YES;
202                                        drawscreen(skin, 0, 0);
203                                        drawscreen(loading, 0, 0);
204                                        gmediarendergetpic(gmediarender, buf);
205                                }
206                        }
207//check screenserver
208
209                        if(getconfigint("screensaver", NULL) == 1)
210                        {
211                                if(count > 0 && screensaver != NULL)
212                                {
213                                        count++;
214                                }
215
216                                if(count > screensaver_delay && screensaver != NULL)
217                                {                                               
218                                        if(rcsaverwait == 0)
219                                        {
220                                                showscreensaver();
221                                                rcsaverwait = screensaver->speed;
222                                        }
223
224                                        if(screensaver->type == 2)
225                                        {
226                                                rcwait = screensaver->speed;
227                                                showscreensaver();
228                                        }
229                                        else
230                                        {
231                                                if(count * 1000 >= rcsaverwait)
232                                                {
233                                                        showscreensaver();
234                                                        rcsaverwait += screensaver->speed;
235                                                }
236                                                rcwait = 1000;
237                                        }                                       
238                                }
239                        }
240                }
241
242                if(rcret == getrcconfigint("rcexit", NULL)) break;
243                if(rcret == getrcconfigint("rcok", NULL)) break;
244        }
245
246        //stop renderer
247        system("killall -9 gmediarender");
248
249        //stop screenserver
250        deinitscreensaver();
251               
252        if(status.lastservice != NULL)
253                servicestart(status.lastservice->channel, NULL, NULL, 0);
254
255        free(buf); buf = NULL;
256        free(tmpstr), tmpstr = NULL;
257        free(tmpstr1), tmpstr1 = NULL;
258
259        //close fifo
260        close(fifo);
261        unlink("/tmp/gmediarender");
262        unlink("/tmp/gmediarenderpic.jpg");
263        unlink("/tmp/gmediarenderpic.png");
264        delownerrc(gmediarender);
265        clearscreen(loading);
266        clearscreen(gmediarender);
267}
268
269#endif
Note: See TracBrowser for help on using the repository browser.