source: titan/plugins/dlna/dlna.h @ 16367

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

[titan] fix

File size: 8.7 KB
Line 
1#ifndef DLNA_H
2#define DLNA_H
3
4extern struct inetwork* inetwork;
5
6struct dlna
7{
8        char* interface;
9        char* port;
10        char* name;
11        char* dir1;
12        char* dir2;
13        char* dir3;
14        char* dir4;
15};
16
17void dlnasetdefault(struct dlna* node)
18{
19        if(node == NULL) return;
20 
21        node->interface = ostrcat(node->interface, "eth0", 1, 0);
22        node->port = ostrcat(node->port, "8200", 1, 0);
23        node->name = ostrcat(node->name, "DLNASERVER", 1, 0);
24}
25
26void freedlnacontent(struct dlna* node)
27{
28        if(node == NULL) return;
29 
30        free(node->interface); node->interface = NULL;
31        free(node->port); node->port = NULL;
32        free(node->name); node->name = NULL;
33        free(node->dir1); node->dir1 = NULL;
34        free(node->dir2); node->dir2 = NULL;
35        free(node->dir3); node->dir3 = NULL;
36        free(node->dir4); node->dir4 = NULL;
37}
38
39int readdlna(const char* filename, struct dlna* node)
40{
41        debug(1000, "in");
42        FILE *fd = NULL;
43        char *fileline = NULL, *tmpstr = NULL;
44        int len = 0;
45 
46        if(node == NULL) return 1;
47
48        fileline = malloc(MINMALLOC);
49        if(fileline == NULL)
50        {
51                err("no memory");
52                return 1;
53        }
54
55        fd = fopen(filename, "r");
56        if(fd == NULL)
57        {
58                perr("can't open %s", filename);
59                free(fileline);
60                return 1;
61        }
62
63        while(fgets(fileline, MINMALLOC, fd) != NULL)
64        {
65                if(fileline[0] == '#' || fileline[0] == '\n')
66                        continue;
67                len = strlen(fileline) - 1;
68                if(len >= 0 && fileline[len] == '\n')
69                        fileline[len] = '\0';
70                len--;
71                if(len >= 0 && fileline[len] == '\r')
72                        fileline[len] = '\0';
73
74                tmpstr = ostrstrcase(fileline, "network_interface=");
75                if(tmpstr != NULL)
76                {
77                        tmpstr += 18;
78                        if(tmpstr != NULL)
79                        {
80                                tmpstr[strlen(tmpstr)] = '\0';
81                                free(node->interface);
82                                node->interface = ostrcat(tmpstr, NULL, 0, 0);
83                        }                               
84                }
85                tmpstr = ostrstrcase(fileline, "port=");
86                if(tmpstr != NULL)
87                {
88                        tmpstr += 5;
89                        if(tmpstr != NULL)
90                        {
91                                tmpstr[strlen(tmpstr)] = '\0';
92                                free(node->port);
93                                node->port = ostrcat(tmpstr, NULL, 0, 0);
94                        }                               
95                }
96                tmpstr = ostrstrcase(fileline, "friendly_name=");
97                if(tmpstr != NULL)
98                {
99                        tmpstr += 14;
100                        if(tmpstr != NULL)
101                        {
102                                tmpstr[strlen(tmpstr)] = '\0';
103                                free(node->name);
104                                node->name = ostrcat(tmpstr, NULL, 0, 0);
105                        }                               
106                }
107                tmpstr = ostrstrcase(fileline, "media_dir=");
108                if(tmpstr != NULL && node->dir1 == NULL)
109                {
110                        tmpstr += 10;
111                        if(tmpstr != NULL)
112                        {
113                                tmpstr[strlen(tmpstr)] = '\0';
114                                free(node->dir1);
115                                node->dir1 = ostrcat(tmpstr, NULL, 0, 0);
116                        }
117                        continue;
118                }
119                tmpstr = ostrstrcase(fileline, "media_dir=");
120                if(tmpstr != NULL && node->dir2 == NULL)
121                {
122                        tmpstr += 10;
123                        if(tmpstr != NULL)
124                        {
125                                tmpstr[strlen(tmpstr)] = '\0';
126                                free(node->dir2);
127                                node->dir2 = ostrcat(tmpstr, NULL, 0, 0);
128                        }
129                        continue;
130                }
131                tmpstr = ostrstrcase(fileline, "media_dir=");
132                if(tmpstr != NULL && node->dir3 == NULL)
133                {
134                        tmpstr += 10;
135                        if(tmpstr != NULL)
136                        {
137                                tmpstr[strlen(tmpstr)] = '\0';
138                                free(node->dir3);
139                                node->dir3 = ostrcat(tmpstr, NULL, 0, 0);
140                        }
141                        continue;
142                }
143                tmpstr = ostrstrcase(fileline, "media_dir=");
144                if(tmpstr != NULL && node->dir4 == NULL)
145                {
146                        tmpstr += 10;
147                        if(tmpstr != NULL)
148                        {
149                                tmpstr[strlen(tmpstr)] = '\0';
150                                free(node->dir4);
151                                node->dir4 = ostrcat(tmpstr, NULL, 0, 0);
152                        }
153                        continue;
154                }
155        }
156
157        free(fileline);
158        fclose(fd);
159        return 0;
160}
161
162int writedlna(const char* filename, struct dlna* node)
163{ 
164        char* savesettings = NULL;
165 
166        if(node == NULL) return 1;
167       
168        if(node->interface != NULL)
169        {
170                savesettings = ostrcat(savesettings, "network_interface=", 1, 0);
171                savesettings = ostrcat(savesettings, node->interface, 1, 0);
172                savesettings = ostrcat(savesettings, "\n", 1, 0);
173        }
174
175        if(node->port != NULL)
176        {
177                savesettings = ostrcat(savesettings, "port=", 1, 0);
178                savesettings = ostrcat(savesettings, oitoa(atoi(node->port)), 1, 1);
179                savesettings = ostrcat(savesettings, "\n", 1, 0);
180        }
181
182        if(node->name != NULL)
183        {
184                savesettings = ostrcat(savesettings, "friendly_name=", 1, 0);
185                savesettings = ostrcat(savesettings, node->name, 1, 0);
186                savesettings = ostrcat(savesettings, "\n", 1, 0);
187        }
188 
189        if(node->dir1 != NULL)
190        {
191                savesettings = ostrcat(savesettings, "media_dir=", 1, 0);
192                savesettings = ostrcat(savesettings, node->dir1, 1, 0);
193                savesettings = ostrcat(savesettings, "\n", 1, 0);
194        }
195 
196        if(node->dir2 != NULL)
197        {
198                savesettings = ostrcat(savesettings, "media_dir=", 1, 0);
199                savesettings = ostrcat(savesettings, node->dir2, 1, 0);
200                savesettings = ostrcat(savesettings, "\n", 1, 0);
201        }
202 
203        if(node->dir3 != NULL)
204        {
205                savesettings = ostrcat(savesettings, "media_dir=", 1, 0);
206                savesettings = ostrcat(savesettings, node->dir3, 1, 0);
207                savesettings = ostrcat(savesettings, "\n", 1, 0);
208        }
209 
210        if(node->dir4 != NULL)
211        {
212                savesettings = ostrcat(savesettings, "media_dir=", 1, 0);
213                savesettings = ostrcat(savesettings, node->dir4, 1, 0);
214                savesettings = ostrcat(savesettings, "\n", 1, 0);
215        }
216       
217        FILE* fd = fopen(filename, "w");
218        if(fd)
219        {
220                fprintf(fd, "%s\n", savesettings);
221                fclose(fd);
222        }
223        free(savesettings); savesettings = NULL;
224
225        return 0;
226}
227
228void screendlna()
229{
230        int rcret = -1, ret = 0, i = 0;
231        struct skin* dlna = getscreen("dlnasettings");
232        struct skin* listbox = getscreennode(dlna, "listbox");
233        struct skin* startmode = getscreennode(dlna, "startmode");
234        struct skin* interface = getscreennode(dlna, "interface");
235        struct skin* port = getscreennode(dlna, "port");
236        struct skin* name = getscreennode(dlna, "name");
237        struct skin* dir1 = getscreennode(dlna, "dir1");
238        struct skin* dir2 = getscreennode(dlna, "dir2");
239        struct skin* dir3 = getscreennode(dlna, "dir3");
240        struct skin* dir4 = getscreennode(dlna, "dir4");
241        struct inetwork* net = inetwork;
242        struct skin* tmp = NULL;
243        char* tmpstr = NULL;
244
245        struct dlna* node = (struct dlna*)malloc(sizeof(struct dlna));
246        if(node == NULL)
247        {
248                err("no mem");
249                return;
250        }
251        memset(node, 0, sizeof(struct dlna));
252
253        dlnasetdefault(node);
254        readdlna("/var/swap/etc/minidlna.conf", node);
255       
256        addchoicebox(startmode, "n", _("no"));
257        addchoicebox(startmode, "y", _("yes"));
258        setchoiceboxselection(startmode, getownconfig("dlna"));
259
260        while(net != NULL)
261        {
262                if(net->flag == 1)
263                        addchoicebox(interface, net->device, net->device);
264                net = net->next;
265        }
266        setchoiceboxselection(interface, node->interface);
267 
268        changemask(port, "00000");
269        changeinput(port, node->port);
270        if(port->input != NULL)
271        {
272                for(i = 0; i < 6 - strlen(port->input); i++)
273                        port->input = ostrcat("0", port->input, 0, 1);
274        }
275
276        changeinput(name, node->name);
277
278        changeinput(dir1, node->dir1);
279        changeinput(dir2, node->dir2);
280        changeinput(dir3, node->dir3);
281        changeinput(dir4, node->dir4);
282
283        freedlnacontent(node);
284        drawscreen(dlna, 0);
285        addscreenrc(dlna, listbox);
286
287        tmp = listbox->select;
288        while(1)
289        {
290                addscreenrc(dlna, tmp);
291                rcret = waitrc(dlna, 0, 0);
292                tmp = listbox->select;
293
294                if(rcret == getrcconfigint("rcexit", NULL)) break;
295
296                if(rcret == getrcconfigint("rcok", NULL) || rcret == getrcconfigint("rcgreen", NULL))
297                {
298                        node->interface = ostrcat(interface->ret, NULL, 0, 0);
299                        node->port = ostrcat(port->ret, NULL, 0, 0);
300                        node->name = ostrcat(name->ret, NULL, 0, 0);
301                        node->dir1 = ostrcat(dir1->ret, NULL, 0, 0);
302                        node->dir2 = ostrcat(dir2->ret, NULL, 0, 0);
303                        node->dir3 = ostrcat(dir3->ret, NULL, 0, 0);
304                        node->dir4 = ostrcat(dir4->ret, NULL, 0, 0);
305                        writedlna("/var/swap/etc/minidlna.conf", node);
306                        freedlnacontent(node);
307                        if(startmode->ret != NULL) addownconfig("dlna", startmode->ret);
308                       
309                        if(rcret == getrcconfigint("rcok", NULL)) break;
310                       
311                        if(rcret == getrcconfigint("rcgreen", NULL))
312                        {
313                                system("/etc/init.d/dlna.sh stop");
314                                ret = system("/var/swap/titanplugins/dlna/dlna.sh start");
315                                if(ret == 0)
316                                        textbox(_("Message"), _("DLNA started."), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 10, 0);
317                                else
318                                        textbox(_("Message"), _("DLNA not started,\nPlease check your config."), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 10, 0);
319                                drawscreen(dlna, 0);
320                        }
321                }
322
323                if(rcret == getrcconfigint("rcyellow", NULL))
324                {
325                        system("/var/swap/titanplugins/dlna/dlna.sh stop");
326                        textbox(_("Message"), _("DLNA now stopped"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 10, 0);
327                        drawscreen(dlna, 0);
328                }
329
330                if(rcret == getrcconfigint("rcblue", NULL))
331                {
332                        if(listbox->select != NULL && (ostrcmp(listbox->select->name, "dir1") == 0 || ostrcmp(listbox->select->name, "dir2") == 0 || ostrcmp(listbox->select->name, "dir3") == 0 || ostrcmp(listbox->select->name, "dir4") == 0))
333                        {
334                                clearscreen(dlna);
335                                tmpstr = screendir(listbox->select->ret, "", NULL, NULL, NULL, NULL, 0, "SELECT", 0, NULL, 0, NULL, 0, 700, 0, 650, 0, 0);
336                                if(tmpstr != NULL)
337                                        changeinput(listbox->select, tmpstr);
338                                free(tmpstr); tmpstr = NULL;
339
340                                drawscreen(dlna, 0);
341                        }
342                }
343
344        }
345
346        freedlnacontent(node);
347        free(node);
348        delownerrc(dlna);
349        clearscreen(dlna);
350}
351
352#endif
Note: See TracBrowser for help on using the repository browser.