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

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

[titan] add write to stock/weather

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