source: titan/titan/bgdownload.h @ 23095

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

STARTFUNC

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        STARTFUNC
9        if(nr >= MAXBGDOWNLOAD) return;
10       
11        int count = 0;
12        struct skin* load = getscreen("loading");
13        struct download* dnode = bgdownload[nr];
14       
15        if(dnode != NULL)
16        {
17                if(dnode->connfd > -1)
18                {
19                        if(flag == 1) drawscreen(load, 0, 0);
20                        sockclose(&dnode->connfd);
21                        while(dnode->ret < 0 && count < 10)
22                        {
23                                count++;
24                                sleep(1);
25                        }
26                        if(flag == 1) clearscreen(load);
27                }
28               
29                free(dnode->host); dnode->host = NULL;
30                free(dnode->page); dnode->page = NULL;
31                free(dnode->filename); dnode->filename = NULL;
32                free(dnode->auth); dnode->auth = NULL;
33               
34                dnode->port = -1;
35                dnode->ret = -1;
36                dnode->timeout = 0;
37                dnode->flag = 0;
38               
39                if(count < 10)
40                {
41                        free(dnode);
42                        dnode = NULL;
43                }
44                else
45                        addoldentry((void*)dnode, 1, time(NULL) + 7200, NULL);
46               
47                bgdownload[nr] = NULL;
48        }
49}
50
51void freebgdownload()
52{
53        STARTFUNC
54        int i = 0;
55       
56        for(i = 0; i < MAXBGDOWNLOAD; i++)
57                delbgdownload(i, 0);
58}
59
60//flag 0: with play
61//flag 1: without play
62void screenbgdownload(int flag)
63{
64        STARTFUNC
65        int rcret = -1, i = 0;
66        struct skin* screenbgdownload = getscreen("bgdownload");
67        struct skin* listbox = getscreennode(screenbgdownload, "listbox");
68        struct skin* progress = getscreennode(screenbgdownload, "progress");
69        struct skin* b4 = getscreennode(screenbgdownload, "b4");;
70        struct skin* tmp = NULL;
71        char* tmpstr = NULL;
72
73        if(flag == 0)
74                b4->hidden = NO;
75        else
76                b4->hidden = YES;
77
78        for(i = 0; i < MAXBGDOWNLOAD; i++)
79        {
80                tmp = addlistbox(screenbgdownload, listbox, NULL, 1);
81                if(tmp != NULL)
82                {
83                        if(bgdownload[i] != NULL)
84                        {
85                                if(bgdownload[i]->ret == 0)
86                                        tmpstr = ostrcat(tmpstr, "OK - ", 1, 0);
87                                else if(bgdownload[i]->ret == 1)
88                                        tmpstr = ostrcat(tmpstr, "ERR - ", 1, 0);
89                                tmpstr = ostrcat(tmpstr, bgdownload[i]->filename, 1, 0);
90                                changetext(tmp, tmpstr);
91                                free(tmpstr); tmpstr = NULL;
92                                tmp->progresssize = bgdownload[i]->proz;
93                                tmp->handle = (void*)(i + 1);
94                        }
95                        else
96                        {
97                                changetext(tmp, _("unknown"));
98                                tmp->progresssize = 0;
99                                tmp->handle = (void*)(i + 1);
100                        }
101                       
102                        tmp->textposx = progress->width + 10;
103                        struct skin* tmp1 = NULL;
104                        tmp1 = addlistbox(screenbgdownload, tmp, tmp, 2);
105                        if(tmp1 != NULL)
106                        {
107                                tmp1->progresscol = progress->progresscol;
108                                tmp1->posy = progress->posy;
109                                tmp1->width = progress->width;
110                                tmp1->height = progress->height;
111                                tmp1->bordersize = progress->bordersize;
112                                tmp1->bordercol = progress->bordercol;
113                                tmp1->prozwidth = 0;           
114                                tmp1->handle = (void*)(i + 1);
115                        }
116                }
117        }
118
119        drawscreen(screenbgdownload, 0, 0);
120        addscreenrc(screenbgdownload, listbox);
121
122        while(1)
123        {
124                rcret = waitrc(screenbgdownload, 1000, 0);
125
126                if(rcret == RCTIMEOUT)
127                {
128                        tmp = listbox;
129                        while(tmp != NULL)
130                        {
131                                if(tmp->del > 0)
132                                {
133                                        int nr = ((int)tmp->handle) - 1;
134                                        if(nr > -1 && nr < MAXBGDOWNLOAD)
135                                        {
136                                                struct download* dnode = bgdownload[nr];
137                                                if(dnode != NULL)
138                                                {
139                                                        if(tmp->del == 1)
140                                                        {
141                                                                if(dnode->ret == 0)
142                                                                        tmpstr = ostrcat(tmpstr, "OK - ", 1, 0);
143                                                                else if(dnode->ret == 1)
144                                                                        tmpstr = ostrcat(tmpstr, "ERR - ", 1, 0);
145                                                                tmpstr = ostrcat(tmpstr, dnode->filename, 1, 0);
146                                                                changetext(tmp, tmpstr);
147                                                                free(tmpstr); tmpstr = NULL;
148                                                        }
149                                                        if(tmp->del == 2)
150                                                                tmp->progresssize = dnode->proz;
151                                                }
152                                                else
153                                                {
154                                                        if(tmp->del == 1)
155                                                                changetext(tmp, _("unknown"));
156                                                        if(tmp->del == 2)
157                                                                tmp->progresssize = 0;
158                                                }
159                                        }
160                                }
161                                tmp = tmp->next;
162                        }
163                }
164                drawscreen(screenbgdownload, 0, 0);
165               
166                if(rcret == getrcconfigint("rcexit", 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"), _("Realy 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        STARTFUNC
216        int i = 0;
217        struct download* dnode = NULL;
218
219        if(filename == NULL)
220        {
221                err("filename = NULL");
222                return 1;
223        }
224       
225        for(i = 0; i < MAXBGDOWNLOAD; i++)
226        {
227                if(bgdownload[i] == NULL)
228                        break; //found unused slot
229                else if(bgdownload[i]->ret >= 0)
230                {
231                        delbgdownload(i, 0);
232                        break; //found unused slot
233                }
234        }
235       
236        if(i >= MAXBGDOWNLOAD) return 1;
237
238        dnode = calloc(1, sizeof(struct download));
239        if(dnode == NULL)
240        {
241                err("no mem");
242                return 1;
243        }
244       
245        bgdownload[i] = dnode;
246        dnode->host = ostrcat(host, NULL, 0, 0);
247        dnode->page = ostrcat(page, NULL, 0, 0);
248        dnode->port = port;
249        dnode->filename = ostrcat(filename, NULL, 0, 0);
250        dnode->auth = ostrcat(auth, NULL, 0, 0);
251        dnode->connfd = -1;
252        dnode->ret = -1;
253        dnode->timeout = timeout;
254        dnode->flag = flag;
255       
256        addtimer(&gethttpstructmsg, START, 1000, 1, (void*)dnode, NULL, NULL);
257
258        return 0;
259}
260
261#endif
Note: See TracBrowser for help on using the repository browser.