source: titan/plugins/stock/stock.h @ 15462

Last change on this file since 15462 was 15462, checked in by nit, 12 years ago

[titan] add flushrc

File size: 8.1 KB
Line 
1#ifndef STOCK_H
2#define STOCK_H
3
4extern struct skin* skin;
5
6struct stock
7{
8        char* symbol_lookup_url;
9        char* company;
10        char* exchange;
11        char* exchange_closing;
12        char* currency;
13        char* last;
14        char* high;
15        char* low;
16        char* volume;
17        char* avg_volume;
18        char* market_cap;
19        char* open;
20        char* y_close;
21        char* change;
22        char* perc_change;
23        char* trade_timestamp;
24};
25
26char* readstock(const char* filename, struct skin* stock, struct skin* listbox)
27{
28        debug(1000, "in");
29        FILE *fd = NULL;
30        char *fileline = NULL;
31        char *name = NULL;
32        struct skin* tmp = NULL;
33
34        if(stock == NULL || listbox == NULL) return NULL;
35
36        fileline = malloc(MINMALLOC);
37        if(fileline == NULL)
38        {
39                err("no memory");
40                return NULL;
41        }
42
43        fd = fopen(filename, "r");
44        if(fd == NULL)
45        {
46                perr("can't open %s", filename);
47                free(fileline);
48                return NULL;
49        }
50
51        while(fgets(fileline, MINMALLOC, fd) != NULL)
52        {
53                if(fileline[0] == '#' || fileline[0] == '\n')
54                        continue;
55                if(fileline[strlen(fileline) - 1] == '\n')
56                        fileline[strlen(fileline) - 1] = '\0';
57                if(fileline[strlen(fileline) - 1] == '\r')
58                        fileline[strlen(fileline) - 1] = '\0';
59
60                tmp = addlistbox(stock, listbox, tmp, 1);
61                if(tmp != NULL)
62                {
63                        changetext(tmp, fileline);
64                        if(name == NULL)
65                                name = ostrcat(name, fileline, 1, 0);
66                }
67
68        }
69
70        free(fileline);
71        fclose(fd);
72        return name;
73}
74
75void freestock(struct stock* node)
76{
77        if(node == NULL) return;
78
79        free(node->symbol_lookup_url); node->symbol_lookup_url = NULL;
80        free(node->company); node->company = NULL;
81        free(node->exchange); node->exchange = NULL;
82        free(node->exchange_closing); node->exchange_closing = NULL;
83        free(node->currency); node->currency = NULL;
84        free(node->last); node->last = NULL;
85        free(node->high); node->high = NULL;
86        free(node->low); node->low = NULL;
87        free(node->volume); node->volume = NULL;
88        free(node->avg_volume); node->avg_volume = NULL;
89        free(node->market_cap); node->market_cap = NULL;
90        free(node->open); node->open = NULL;
91        free(node->y_close); node->y_close = NULL;
92        free(node->change); node->change = NULL;
93        free(node->perc_change); node->perc_change = NULL;
94        free(node->trade_timestamp); node->trade_timestamp = NULL;
95
96        free(node); node = NULL;
97}
98
99struct stock* getstock(char* name)
100{
101        struct stock* stock = NULL;
102        char* tmpstr = NULL;
103        char* tmpsearch = NULL;
104
105        tmpsearch = ostrcat("ig/api?stock=", name, 0, 0);
106        //TODO: implement auto language (from titan.cfg)
107        tmpsearch = ostrcat(tmpsearch, "&hl=de", 1, 0);
108        tmpsearch = stringreplacechar(tmpsearch, ' ', '+');
109
110        tmpstr = gethttp("www.google.com", tmpsearch, 80, NULL, NULL, NULL, 0);
111
112        free(tmpsearch); tmpsearch = NULL;
113
114        if(tmpstr != NULL)
115        {
116                stock = (struct stock*)malloc(sizeof(struct stock));
117                if(stock == NULL)
118                {
119                        err("no mem");
120                        free(tmpstr); tmpstr = NULL;
121                        return NULL;
122                }
123                memset(stock, 0, sizeof(struct stock));
124
125                stock->symbol_lookup_url = getxmlentry(tmpstr, "symbol_lookup_url data=");
126                stock->company = getxmlentry(tmpstr, "company data=");
127                stock->exchange = getxmlentry(tmpstr, "exchange data=");
128                stock->exchange_closing = getxmlentry(tmpstr, "exchange_closing data=");
129                stock->currency = getxmlentry(tmpstr, "currency data=");
130                stock->last = getxmlentry(tmpstr, "last data=");
131                stock->high = getxmlentry(tmpstr, "high data=");
132                stock->low = getxmlentry(tmpstr, "low data=");
133                stock->volume = getxmlentry(tmpstr, "volume data=");
134                stock->avg_volume = getxmlentry(tmpstr, "avg_volume data=");
135                stock->market_cap = getxmlentry(tmpstr, "market_cap data=");
136                stock->open = getxmlentry(tmpstr, "open data=");
137                stock->y_close = getxmlentry(tmpstr, "y_close data=");
138                stock->change = getxmlentry(tmpstr, "<change data=");
139                stock->perc_change = getxmlentry(tmpstr, "perc_change data=");
140                stock->trade_timestamp = getxmlentry(tmpstr, "trade_timestamp data=");
141               
142                free(tmpstr); tmpstr = NULL;
143        }
144
145        return stock;
146}
147
148void screenstock()
149{
150        int rcret = 0, ret = 0;
151        struct skin* stock = getscreen("stock");
152        struct skin* listbox = getscreennode(stock, "listbox");
153        struct skin* company = getscreennode(stock, "company");
154        struct skin* exchange = getscreennode(stock, "exchange");
155        struct skin* exchange_closing = getscreennode(stock, "exchange_closing");
156        struct skin* currency = getscreennode(stock, "currency");
157        struct skin* last = getscreennode(stock, "last");
158        struct skin* high = getscreennode(stock, "high");
159        struct skin* low = getscreennode(stock, "low");
160        struct skin* volume = getscreennode(stock, "volume");
161        struct skin* avg_volume = getscreennode(stock, "avg_volume");
162        struct skin* market_cap = getscreennode(stock, "market_cap");
163        struct skin* open = getscreennode(stock, "open");
164        struct skin* y_close = getscreennode(stock, "y_close");
165        struct skin* change = getscreennode(stock, "change");
166        struct skin* perc_change = getscreennode(stock, "perc_change");
167        struct skin* trade_timestamp = getscreennode(stock, "trade_timestamp");
168        struct stock* node = NULL;
169        char* tmpstr = NULL, *name = NULL;
170
171        name = readstock(getconfig("stockfile", NULL), stock, listbox);
172
173start:
174        node = getstock(name);
175        free(name); name = NULL;
176
177        if(node != NULL)
178        {
179                tmpstr = ostrcat(_("Company: "), node->company, 0, 0);
180                changetext(company, tmpstr);
181                free(tmpstr); tmpstr = NULL;
182
183                tmpstr = ostrcat(_("Exchange: "), node->exchange, 0, 0);
184                changetext(exchange, tmpstr);
185                free(tmpstr); tmpstr = NULL;
186
187                tmpstr = ostrcat(_("Exchange closing: "), node->exchange_closing, 0, 0);
188                changetext(exchange_closing, tmpstr);
189                free(tmpstr); tmpstr = NULL;
190
191                tmpstr = ostrcat(_("Currency: "), node->currency, 0, 0);
192                changetext(currency, tmpstr);
193                free(tmpstr); tmpstr = NULL;
194
195                tmpstr = ostrcat(_("Last: "), node->last, 0, 0);
196                changetext(last, tmpstr);
197                free(tmpstr); tmpstr = NULL;
198
199                tmpstr = ostrcat(_("High: "), node->high, 0, 0);
200                changetext(high, tmpstr);
201                free(tmpstr); tmpstr = NULL;
202
203                tmpstr = ostrcat(_("Low: "), node->low, 0, 0);
204                changetext(low, tmpstr);
205                free(tmpstr); tmpstr = NULL;
206
207                tmpstr = ostrcat(_("Volume: "), node->volume, 0, 0);
208                changetext(volume, tmpstr);
209                free(tmpstr); tmpstr = NULL;
210
211                tmpstr = ostrcat(_("Avg volume: "), node->avg_volume, 0, 0);
212                changetext(avg_volume, tmpstr);
213                free(tmpstr); tmpstr = NULL;
214
215                tmpstr = ostrcat(_("Market cap: "), node->market_cap, 0, 0);
216                changetext(market_cap, tmpstr);
217                free(tmpstr); tmpstr = NULL;
218
219                tmpstr = ostrcat(_("Open: "), node->open, 0, 0);
220                changetext(open, tmpstr);
221                free(tmpstr); tmpstr = NULL;
222
223                tmpstr = ostrcat(_("Close: "), node->y_close, 0, 0);
224                changetext(y_close, tmpstr);
225                free(tmpstr); tmpstr = NULL;
226
227                tmpstr = ostrcat(_("Change: "), node->change, 0, 0);
228                changetext(change, tmpstr);
229                free(tmpstr); tmpstr = NULL;
230
231                tmpstr = ostrcat(_("Change in %: "), node->perc_change, 0, 0);
232                changetext(perc_change, tmpstr);
233                free(tmpstr); tmpstr = NULL;
234
235                tmpstr = ostrcat(_("Trade time: "), node->trade_timestamp, 0, 0);
236                changetext(trade_timestamp, tmpstr);
237                free(tmpstr); tmpstr = NULL;
238        }
239
240        addscreenrc(stock, listbox);
241        drawscreen(stock, 0);
242
243        while(1)
244        {
245                rcret = waitrc(stock, 0, 0);
246       
247                if(rcret == getrcconfigint("rcexit", NULL)) break;
248                if(rcret == getrcconfigint("rcok", NULL)) break;
249
250                if(rcret == getrcconfigint("rcred", NULL))
251    {
252                        free(name); name = NULL;
253                        name = textinput("Name", NULL);
254      if(name != NULL)
255      {
256                                freestock(node); node = NULL;
257                                goto start;
258      }
259      drawscreen(stock, 0);
260      continue;
261    }
262   
263    if(rcret == getrcconfigint("rcgreen", NULL) && node->symbol_lookup_url != NULL)
264    {
265      ret = servicestop(status.aktservice, 1, 0);
266      if(ret == 1) goto start;
267      status.sec = 0; //deaktivate spinner
268      setfbtransparent(255);
269     
270      drawscreen(skin, 0);
271      tmpstr = ostrcat("http://www.google.com", node->symbol_lookup_url, 0, 0);
272      system(tmpstr);
273      free(tmpstr); tmpstr = NULL;
274     
275      setosdtransparent(getskinconfigint("osdtransparent", NULL));
276      if(status.lastservice != NULL)
277        servicestart(status.lastservice->channel, NULL, NULL, 0);
278      flushrc(500);
279     
280      drawscreen(stock, 0);
281      continue;
282    }
283
284                if(listbox->select != NULL)
285                {
286                        freestock(node); node = NULL;
287                        name = ostrcat(name, listbox->select->text, 1, 0);
288                        goto start;
289                }
290        }
291
292        delownerrc(stock);
293        delmarkedscreennodes(stock, 1);
294        freestock(node); node = NULL;
295        clearscreen(stock);
296}
297
298#endif
Note: See TracBrowser for help on using the repository browser.