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

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

[titan] update all plugins

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