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

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

[titan] shown info in stock and weather title

File size: 8.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
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
175        tmpstr = ostrcat(_("Stock"), " - ", 0, 0);
176        tmpstr = ostrcat(tmpstr, name, 1, 0);
177        changetitle(stock, tmpstr);
178        free(tmpstr); tmpstr = NULL;
179
180        node = getstock(name);
181        free(name); name = NULL;
182
183        if(node != NULL)
184        {
185                tmpstr = ostrcat(_("Company: "), node->company, 0, 0);
186                changetext(company, tmpstr);
187                free(tmpstr); tmpstr = NULL;
188
189                tmpstr = ostrcat(_("Exchange: "), node->exchange, 0, 0);
190                changetext(exchange, tmpstr);
191                free(tmpstr); tmpstr = NULL;
192
193                tmpstr = ostrcat(_("Exchange closing: "), node->exchange_closing, 0, 0);
194                changetext(exchange_closing, tmpstr);
195                free(tmpstr); tmpstr = NULL;
196
197                tmpstr = ostrcat(_("Currency: "), node->currency, 0, 0);
198                changetext(currency, tmpstr);
199                free(tmpstr); tmpstr = NULL;
200
201                tmpstr = ostrcat(_("Last: "), node->last, 0, 0);
202                changetext(last, tmpstr);
203                free(tmpstr); tmpstr = NULL;
204
205                tmpstr = ostrcat(_("High: "), node->high, 0, 0);
206                changetext(high, tmpstr);
207                free(tmpstr); tmpstr = NULL;
208
209                tmpstr = ostrcat(_("Low: "), node->low, 0, 0);
210                changetext(low, tmpstr);
211                free(tmpstr); tmpstr = NULL;
212
213                tmpstr = ostrcat(_("Volume: "), node->volume, 0, 0);
214                changetext(volume, tmpstr);
215                free(tmpstr); tmpstr = NULL;
216
217                tmpstr = ostrcat(_("Avg volume: "), node->avg_volume, 0, 0);
218                changetext(avg_volume, tmpstr);
219                free(tmpstr); tmpstr = NULL;
220
221                tmpstr = ostrcat(_("Market cap: "), node->market_cap, 0, 0);
222                changetext(market_cap, tmpstr);
223                free(tmpstr); tmpstr = NULL;
224
225                tmpstr = ostrcat(_("Open: "), node->open, 0, 0);
226                changetext(open, tmpstr);
227                free(tmpstr); tmpstr = NULL;
228
229                tmpstr = ostrcat(_("Close: "), node->y_close, 0, 0);
230                changetext(y_close, tmpstr);
231                free(tmpstr); tmpstr = NULL;
232
233                tmpstr = ostrcat(_("Change: "), node->change, 0, 0);
234                changetext(change, tmpstr);
235                free(tmpstr); tmpstr = NULL;
236
237                tmpstr = ostrcat(_("Change in %: "), node->perc_change, 0, 0);
238                changetext(perc_change, tmpstr);
239                free(tmpstr); tmpstr = NULL;
240
241                tmpstr = ostrcat(_("Trade time: "), node->trade_timestamp, 0, 0);
242                changetext(trade_timestamp, tmpstr);
243                free(tmpstr); tmpstr = NULL;
244        }
245
246        addscreenrc(stock, listbox);
247        drawscreen(stock, 0);
248
249        while(1)
250        {
251                rcret = waitrc(stock, 0, 0);
252       
253                if(rcret == getrcconfigint("rcexit", NULL)) break;
254                if(rcret == getrcconfigint("rcok", NULL)) break;
255
256                if(rcret == getrcconfigint("rcred", NULL))
257    {
258                        free(name); name = NULL;
259                        name = textinput("Name", NULL);
260      if(name != NULL)
261      {
262                                freestock(node); node = NULL;
263                                goto start;
264      }
265      drawscreen(stock, 0);
266      continue;
267    }
268   
269    if(rcret == getrcconfigint("rcgreen", NULL) && node->symbol_lookup_url != NULL)
270    {
271      ret = servicestop(status.aktservice, 1, 0);
272      if(ret == 1) goto start;
273      status.sec = 0; //deaktivate spinner
274      setfbtransparent(255);
275     
276      drawscreen(skin, 0);
277      tmpstr = ostrcat("http://www.google.com", node->symbol_lookup_url, 0, 0);
278      system(tmpstr);
279      free(tmpstr); tmpstr = NULL;
280     
281      setosdtransparent(getskinconfigint("osdtransparent", NULL));
282      if(status.lastservice != NULL)
283        servicestart(status.lastservice->channel, NULL, NULL, 0);
284      flushrc(500);
285     
286      drawscreen(stock, 0);
287      continue;
288    }
289
290                if(listbox->select != NULL)
291                {
292                        freestock(node); node = NULL;
293                        name = ostrcat(name, listbox->select->text, 1, 0);
294                        goto start;
295                }
296        }
297
298        delownerrc(stock);
299        delmarkedscreennodes(stock, 1);
300        freestock(node); node = NULL;
301        clearscreen(stock);
302}
303
304#endif
Note: See TracBrowser for help on using the repository browser.