source: titan/plugins/browser/browser.h @ 43372

Last change on this file since 43372 was 31636, checked in by obi, 9 years ago

add resettvpic after browser close

File size: 5.6 KB
Line 
1#ifndef BROWSER_H
2#define BROWSER_H
3
4struct browserfav
5{
6        char* name;
7        char* addr;
8        struct browserfav* next;
9};
10
11extern struct skin* skin;
12struct browserfav *browserfav = NULL;
13
14struct browserfav* addbrowserfav(char *line, int count, struct browserfav* last)
15{
16        //debug(1000, "in");
17        struct browserfav *newnode = NULL, *prev = NULL, *node = browserfav;
18        int ret = 0;
19
20        newnode = (struct browserfav*)calloc(1, sizeof(struct browserfav));
21        if(newnode == NULL)
22        {
23                err("no memory");
24                return NULL;
25        }
26
27        newnode->name = malloc(1024);
28        if(newnode->name == NULL)
29        {
30                err("no mem");
31                free(newnode);
32                return NULL;
33        }
34
35        newnode->addr = malloc(1024);
36        if(newnode->addr == NULL)
37        {
38                err("no mem");
39                free(newnode->name);
40                free(newnode);
41                return NULL;
42        }
43
44        ret = sscanf(line, "%[^#]#%s", newnode->name, newnode->addr);
45        if(ret != 2)
46        {
47                if(count > 0)
48                {
49                        err("browserfav line %d not ok", count);
50                }
51                else
52                {
53                        err("add browserfav");
54                }
55                free(newnode->name);
56                free(newnode->addr);
57                free(newnode);
58                return NULL;
59        }
60
61        newnode->name = ostrshrink(newnode->name);
62        newnode->addr = ostrshrink(newnode->addr);
63
64        if(last == NULL)
65        {
66                while(node != NULL)
67                {
68                        prev = node;
69                        node = node->next;
70                }
71        }
72        else
73        {
74                prev = last;
75                node = last->next;
76        }
77
78        if(prev == NULL)
79                browserfav = newnode;
80        else
81                prev->next = newnode;
82        newnode->next = node;
83
84        //debug(1000, "out");
85        return newnode;
86}
87
88int readbrowserfav(const char* filename)
89{
90        debug(1000, "in");
91        FILE *fd = NULL;
92        char *fileline = NULL;
93        int linecount = 0, len = 0;
94        struct browserfav* last = NULL, *tmplast = NULL;
95
96        fileline = malloc(MINMALLOC);
97        if(fileline == NULL)
98        {
99                err("no memory");
100                return 1;
101        }
102
103        fd = fopen(filename, "r");
104        if(fd == NULL)
105        {
106                perr("can't open %s", filename);
107                free(fileline);
108                return 1;
109        }
110
111        while(fgets(fileline, MINMALLOC, fd) != NULL)
112        {
113                if(fileline[0] == '#' || fileline[0] == '\n')
114                        continue;
115                len = strlen(fileline) - 1;
116                if(len >= 0 && fileline[len] == '\n')
117                        fileline[len] = '\0';
118                len--;
119                if(len >= 0 && fileline[len] == '\r')
120                        fileline[len] = '\0';
121
122                linecount++;
123
124                if(last == NULL) last = tmplast;
125                last = addbrowserfav(fileline, linecount, last);
126                if(last != NULL) tmplast = last;
127        }
128
129        free(fileline);
130        fclose(fd);
131        return 0;
132}
133
134int delbrowserfav(char* name)
135{
136        debug(1000, "in");
137        int ret = 1;
138        struct browserfav *node = browserfav, *prev = browserfav;
139
140        while(node != NULL)
141        {
142                if(ostrcmp(node->name, name) == 0)
143                {
144                        if(node == browserfav)
145                                browserfav = node->next;
146                        else
147                                prev->next = node->next;
148
149                        free(node);
150                        node = NULL;
151                        ret = 0;
152                        break;
153                }
154
155                prev = node;
156                node = node->next;
157        }
158        debug(1000, "out");
159        return ret;
160}
161
162void freebrowserfav()
163{
164        debug(1000, "in");
165        struct browserfav *node = browserfav, *prev = browserfav;
166
167        while(node != NULL)
168        {
169                prev = node;
170                node = node->next;
171                if(prev != NULL)
172                        delbrowserfav(prev->name);
173        }
174        debug(1000, "out");
175}
176
177void screenbrowser()
178{
179        char* tmpstr = NULL;
180        int ret = 0;
181        struct menulist* mlist = NULL, *mbox = NULL, *tmpmbox = NULL;
182        struct menulist* mlist1 = NULL, *mbox1 = NULL;
183        struct browserfav *node = NULL;
184
185        ret = servicestop(status.aktservice, 1, 0);
186        if(ret == 1) return;
187        setfbtransparent(255);
188
189        readbrowserfav(getconfig("browserfavfile", NULL));
190        node = browserfav;
191
192        tmpmbox = addmenulist(&mlist, _("Home"), NULL, NULL, 0, 0);
193        if(tmpmbox != NULL)
194                tmpmbox->param = ostrcat(getconfig("browserhome", NULL), NULL, 0, 0);
195
196        while(node != NULL)
197        {
198                tmpmbox = addmenulist(&mlist, node->name, NULL, NULL, 0, 0);
199                if(tmpmbox != NULL)
200                        tmpmbox->param = ostrcat(node->addr, NULL, 0, 0);
201
202                node = node->next;
203        }
204
205//start:
206        drawscreen(skin, 0, 0);
207        mbox = menulistbox(mlist, "menulist", _("Browser Favoriten"), _("Choose your Internet Favorite from the following list"), NULL, NULL, 0, 0);
208        if(mbox != NULL)
209        {
210                if(mbox->param != NULL)
211                {
212                        addmenulist(&mlist1, "32 Bit Scale 100 Percent", _("32 Bit Scale 100 Percent"), NULL, 0, 0);
213                        addmenulist(&mlist1, "32 Bit Scale 200 Percent", _("32 Bit Scale 200 Percent"), NULL, 0, 0);
214                        addmenulist(&mlist1, "16 Bit Scale 100 Percent", _("16 Bit Scale 100 Percent"), NULL, 0, 0);
215                        addmenulist(&mlist1, "16 Bit Scale 200 Percent", _("16 Bit Scale 200 Percent"), NULL, 0, 0);
216
217                        mbox1 = menulistbox(mlist1, "menulist", _("Browser Resolution"), _("Choose your Resolution"), NULL, NULL, 0, 0);
218                        printf("mbox1->name %s\n", mbox1->name);
219                        printf("mbox1->text %s\n", mbox1->text);
220                        drawscreen(skin, 0, 0);
221                        status.sec = 0; //deaktivate spinner
222                        if(ostrcmp(mbox1->name, "32 Bit Scale 100 Percent") == 0)
223                                tmpstr = ostrcat("nsfb.sh --scale=100 -f linux -b 32 ", mbox->param, 0, 0);
224                        else if(ostrcmp(mbox1->name, "32 Bit Scale 200 Percent") == 0)
225                                tmpstr = ostrcat("nsfb.sh --scale=200 -f linux -b 32 ", mbox->param, 0, 0);
226                        else if(ostrcmp(mbox1->name, "16 Bit Scale 100 Percent") == 0)
227                                tmpstr = ostrcat("nsfb.sh -f --scale=100 -f linux -b 16 ", mbox->param, 0, 0);
228                        else if(ostrcmp(mbox1->name, "16 Bit Scale 200 Percent") == 0)
229                                tmpstr = ostrcat("nsfb.sh --scale=200 -f linux -b 16 ", mbox->param, 0, 0);
230
231//                      tmpstr = ostrcat("nsfb.sh -f linux -b ", mbox1->name, 0, 0);
232//                      tmpstr = ostrcat(tmpstr, " ", 1, 0);
233//                      tmpstr = ostrcat(tmpstr, mbox->param, 1, 0);
234
235                        printf("cmd: %s\n", tmpstr);
236                        system(tmpstr);
237                        free(tmpstr); tmpstr = NULL;
238                        freemenulist(mlist1, 1);
239                }
240// not working restart currently keycodes from nsfb close the plugin..
241//              goto start;
242        }
243
244        freemenulist(mlist, 1);
245        freebrowserfav();
246        resettvpic();
247
248        setosdtransparent(getskinconfigint("osdtransparent", NULL));
249        if(status.aktservice->channel != NULL)
250                servicestart(status.aktservice->channel, NULL, NULL, 3);
251        else
252                servicestart(status.lastservice->channel, NULL, NULL, 0);
253        flushrc(500);
254}
255
256#endif
Note: See TracBrowser for help on using the repository browser.