source: titan/titan/bgdownload.h @ 40855

Last change on this file since 40855 was 31293, checked in by nit, 9 years ago

fix

File size: 6.0 KB
Line 
1#ifndef BGDOWNLOAD_H
2#define BGDOWNLOAD_H
3
4//flag 0: no msg
5//flag 1: with msg
6void delbgdownload(int nr, int flag)
7{
8        if(nr >= MAXBGDOWNLOAD) return;
9       
10        int count = 0;
11        struct skin* load = getscreen("loading");
12        struct download* dnode = bgdownload[nr];
13       
14        if(dnode != NULL)
15        {
16                if(dnode->connfd > -1)
17                {
18                        if(flag == 1) drawscreen(load, 0, 0);
19                        sockclose(&dnode->connfd);
20                        while(dnode->ret < 0 && count < 10)
21                        {
22                                count++;
23                                sleep(1);
24                        }
25                        if(flag == 1) clearscreen(load);
26                }
27               
28                free(dnode->host); dnode->host = NULL;
29                free(dnode->page); dnode->page = NULL;
30                free(dnode->filename); dnode->filename = NULL;
31                free(dnode->auth); dnode->auth = NULL;
32               
33                dnode->port = -1;
34                dnode->ret = -1;
35                dnode->timeout = 0;
36                dnode->flag = 0;
37               
38                if(count < 10)
39                {
40                        free(dnode);
41                        dnode = NULL;
42                }
43                else
44                        addoldentry((void*)dnode, 1, time(NULL) + 7200, NULL);
45               
46                bgdownload[nr] = NULL;
47        }
48}
49
50void freebgdownload()
51{
52        int i = 0;
53       
54        for(i = 0; i < MAXBGDOWNLOAD; i++)
55                delbgdownload(i, 0);
56}
57
58//flag 0: with play
59//flag 1: without play
60void screenbgdownload(int flag)
61{
62        int rcret = -1, i = 0;
63        struct skin* screenbgdownload = getscreen("bgdownload");
64        struct skin* listbox = getscreennode(screenbgdownload, "listbox");
65        struct skin* progress = getscreennode(screenbgdownload, "progress");
66        struct skin* b4 = getscreennode(screenbgdownload, "b4");;
67        struct skin* tmp = NULL;
68        char* tmpstr = NULL;
69
70        if(flag == 0)
71                b4->hidden = NO;
72        else
73                b4->hidden = YES;
74
75        for(i = 0; i < MAXBGDOWNLOAD; i++)
76        {
77                tmp = addlistbox(screenbgdownload, listbox, NULL, 1);
78                if(tmp != NULL)
79                {
80                        if(bgdownload[i] != NULL)
81                        {
82                                if(bgdownload[i]->ret == 0)
83                                        tmpstr = ostrcat(tmpstr, "OK - ", 1, 0);
84                                else if(bgdownload[i]->ret == 1)
85                                        tmpstr = ostrcat(tmpstr, "ERR - ", 1, 0);
86                                tmpstr = ostrcat(tmpstr, bgdownload[i]->filename, 1, 0);
87                                changetext(tmp, tmpstr);
88                                free(tmpstr); tmpstr = NULL;
89                                tmp->handle = (void*)(i + 1);
90                        }
91                        else
92                        {
93                                changetext(tmp, _("unknown"));
94                                tmp->handle = (void*)(i + 1);
95                        }
96                       
97                        tmp->textposx = progress->width + 10;
98                        struct skin* tmp1 = NULL;
99                        tmp1 = addlistbox(screenbgdownload, tmp, tmp, 2);
100                        if(tmp1 != NULL)
101                        {
102                                tmp1->progresscol = progress->progresscol;
103                                tmp1->posy = progress->posy;
104                                tmp1->width = progress->width;
105                                tmp1->height = progress->height;
106                                tmp1->bordersize = progress->bordersize;
107                                tmp1->bordercol = progress->bordercol;
108                                tmp1->prozwidth = 0;
109                                if(bgdownload[i] != NULL)
110                                        tmp1->progresssize = bgdownload[i]->proz;
111                                else
112                                        tmp1->progresssize = 0;         
113                                tmp1->handle = (void*)(i + 1);
114                        }
115                }
116        }
117
118        drawscreen(screenbgdownload, 0, 0);
119        addscreenrc(screenbgdownload, listbox);
120
121        while(1)
122        {
123                rcret = waitrc(screenbgdownload, 1000, 0);
124
125                if(rcret == RCTIMEOUT)
126                {
127                        tmp = listbox;
128                        while(tmp != NULL)
129                        {
130                                if(tmp->del > 0)
131                                {
132                                        int nr = ((int)tmp->handle) - 1;
133                                        if(nr > -1 && nr < MAXBGDOWNLOAD)
134                                        {
135                                                struct download* dnode = bgdownload[nr];
136                                                if(dnode != NULL)
137                                                {
138                                                        if(tmp->del == 1)
139                                                        {
140                                                                if(dnode->ret == 0)
141                                                                        tmpstr = ostrcat(tmpstr, "OK - ", 1, 0);
142                                                                else if(dnode->ret == 1)
143                                                                        tmpstr = ostrcat(tmpstr, "ERR - ", 1, 0);
144                                                                tmpstr = ostrcat(tmpstr, dnode->filename, 1, 0);
145                                                                changetext(tmp, tmpstr);
146                                                                free(tmpstr); tmpstr = NULL;
147                                                        }
148                                                        if(tmp->del == 2)
149                                                                tmp->progresssize = dnode->proz;
150                                                }
151                                                else
152                                                {
153                                                        if(tmp->del == 1)
154                                                                changetext(tmp, _("unknown"));
155                                                        if(tmp->del == 2)
156                                                                tmp->progresssize = 0;
157                                                }
158                                        }
159                                }
160                                tmp = tmp->next;
161                        }
162                }
163                drawscreen(screenbgdownload, 0, 0);
164               
165                if(rcret == getrcconfigint("rcexit", NULL)) break;
166                if(rcret == getrcconfigint("rcok", NULL)) break;
167               
168                if(rcret == getrcconfigint("rcred", NULL) && listbox->select != NULL && listbox->select->handle != NULL) //stop download
169                {
170                        int nr = ((int)listbox->select->handle) - 1;
171                        if(nr > -1 && nr < MAXBGDOWNLOAD)
172                        {
173                                struct download* dnode = bgdownload[nr];
174                                if(dnode != NULL && dnode->ret == -1)
175                                {
176                                        if(textbox(_("Message"), _("Really stop download ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0) == 1)
177                                                delbgdownload(nr, 1);
178                                        drawscreen(screenbgdownload, 0, 0);
179                                }
180                        }
181                }
182               
183                if(flag == 0 && rcret == getrcconfigint("rcyellow", NULL) && listbox->select != NULL && listbox->select->handle != NULL) //play download
184                {
185                        int nr = ((int)listbox->select->handle) -1;
186                        if(nr > -1 && nr < MAXBGDOWNLOAD)
187                        {
188                                struct download* dnode = bgdownload[nr];
189                                if(dnode != NULL && dnode->flag == 1)
190                                {
191                                        if(status.mcaktiv == 0)
192                                        {
193                                                int ret = servicestop(status.aktservice, 1, 1);
194                                                if(ret == 1) return;
195                                        }
196                                        screenplay(dnode->filename, dnode->filename, 2, 0);
197                                        if(status.mcaktiv == 0)
198                                                servicecheckret(servicestart(status.lastservice->channel, NULL, NULL, 0), 0);
199                                        drawscreen(screenbgdownload, 0, 0);
200                                }
201                        }
202                }
203        }
204
205        delmarkedscreennodes(screenbgdownload, 2);
206        delmarkedscreennodes(screenbgdownload, 1);
207        delownerrc(screenbgdownload);
208        clearscreen(screenbgdownload);
209}
210
211//flag 0: normal download
212//flag 1: playable download
213int startbgdownload(char* host, char* page, int port, char* filename, char* auth, int timeout, int flag)
214{
215        int i = 0;
216        struct download* dnode = NULL;
217
218        if(filename == NULL)
219        {
220                err("filename = NULL");
221                return 1;
222        }
223       
224        for(i = 0; i < MAXBGDOWNLOAD; i++)
225        {
226                if(bgdownload[i] == NULL)
227                        break; //found unused slot
228                else if(bgdownload[i]->ret >= 0)
229                {
230                        delbgdownload(i, 0);
231                        break; //found unused slot
232                }
233        }
234       
235        if(i >= MAXBGDOWNLOAD) return 1;
236
237        dnode = calloc(1, sizeof(struct download));
238        if(dnode == NULL)
239        {
240                err("no mem");
241                return 1;
242        }
243       
244        bgdownload[i] = dnode;
245        dnode->host = ostrcat(host, NULL, 0, 0);
246        dnode->page = ostrcat(page, NULL, 0, 0);
247        dnode->port = port;
248        dnode->filename = ostrcat(filename, NULL, 0, 0);
249        dnode->auth = ostrcat(auth, NULL, 0, 0);
250        dnode->connfd = -1;
251        dnode->ret = -1;
252        dnode->timeout = timeout;
253        dnode->flag = flag;
254       
255        addtimer(&gethttpstructmsg, START, 1000, 1, (void*)dnode, NULL, NULL);
256
257        return 0;
258}
259
260#endif
Note: See TracBrowser for help on using the repository browser.