Version 0.2
[marketstoday] / src / qml / Library / js / CoreLogic.js
1 /*
2 @version: 0.1
3 @author: Sudheer K. <scifi1947 at gmail.com>
4 @license: GNU General Public License
5 */
6
7 function getQuery(){
8     var query;
9     var symbolsArray = DBUtility.getAllSymbols();
10     if (symbolsArray && symbolsArray.length > 0){
11         var i = 0;
12         for (i = 0; i< symbolsArray.length; i++) {
13             logUtility.logMessage("Appending "+symbolsArray[i]+ " to Query");
14
15             if (!query){
16                 query = '"'+symbolsArray[i]+'"';
17             }
18             else{
19                 query = query + ',"' + symbolsArray[i]+'"';
20             }
21         }
22     }
23
24     return query;
25 }
26
27 function refreshDataModel(responseXML){
28     if (!(responseXML && stockQuoteDataModel)) return;
29
30     var xmlDoc = responseXML.documentElement;
31     var results = xmlDoc.firstChild;
32
33     //Not the best code I ever wrote, but got no choice
34     //Refer to Memory leak issue with XMLListModel --> http://bugreports.qt.nokia.com/browse/QTBUG-15191
35
36     if (results) {
37         var quoteNodes = results.childNodes;
38         if (quoteNodes){
39             logUtility.logMessage("Clearing Data Model");
40             stockQuoteDataModel.clear();
41
42             var i = 0;
43             for (i = 0; i < quoteNodes.length; i++) {
44
45                 var quoteElements = quoteNodes[i].childNodes;
46                 var j = 0;
47                 var symbol,stockName,lastTradedPrice,change,changePercentage
48
49                 for (j = 0; j < quoteElements.length; j++){
50
51                     switch (quoteElements[j].nodeName){
52                         case 'Symbol':
53                             symbol = quoteElements[j].childNodes[0].nodeValue;
54                             break;
55                         case 'Name':
56                             stockName = quoteElements[j].childNodes[0].nodeValue;
57                             break;
58                         case 'LastTradePriceOnly':
59                             lastTradedPrice = quoteElements[j].childNodes[0].nodeValue;
60                             break;
61                         case 'Change':
62                             change = quoteElements[j].childNodes[0].nodeValue;
63                             break;
64                         case 'ChangeinPercent':
65                             changePercentage = quoteElements[j].childNodes[0].nodeValue;
66                             break;
67                         default:
68                     }
69                 }
70                 stockQuoteDataModel.append({"symbol":symbol,"stockName":stockName,"lastTradedPrice":lastTradedPrice,"change":change,"changePercentage":changePercentage});
71                 logUtility.logMessage("Symbol: "+stockQuoteDataModel.get(i).symbol+", Name: "+ stockQuoteDataModel.get(i).stockName+", LastTraded: "+stockQuoteDataModel.get(i).lastTradedPrice+", Change: "+stockQuoteDataModel.get(i).change+", ChangePercent: "+stockQuoteDataModel.get(i).changePercentage);
72             }
73         }
74     }
75
76     var queryNode = xmlDoc;
77     if (queryNode) {
78         var i = 0;
79         var queryAttributes = queryNode.attributes;
80         for (i = 0; i < queryAttributes.length; i++) {
81             if (queryAttributes[i].name == 'created') {
82                 screen.lastUpdatedTimeStamp = "Updated: "+DateLib.ISODate.format(queryAttributes[i].value);
83                 logUtility.logMessage(screen.lastUpdatedTimeStamp);
84                 break;
85             }
86         }
87     }
88 }
89
90
91 function reloadQuotes(){
92     var query = getQuery();
93     if (query){
94         screen.quoteRefreshStarted();
95         logUtility.logMessage("Reloading Data..");
96
97         //var queryURL = 'http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.quotes where symbol in ("INDU","^IXIC","^GSPC","CLJ11.NYM","YHOO","AAPL","GOOG","MSFT")&env=store://datatables.org/alltableswithkeys';
98         var queryURL = 'http://query.yahooapis.com/v1/public/yql?q=select Symbol,Name,LastTradePriceOnly,Change,ChangeinPercent from yahoo.finance.quotes where symbol in ('+query+')&env=store://datatables.org/alltableswithkeys';
99         logUtility.logMessage(queryURL);
100
101         var response = new XMLHttpRequest();
102         response.onreadystatechange = function() {
103             if (response.readyState == XMLHttpRequest.DONE) {
104                 refreshDataModel(response.responseXML);
105                 logUtility.logMessage("Data Reload Completed..");
106                 screen.quoteRefreshCompleted();
107             }
108         }
109
110         response.open("GET", queryURL);
111         response.send();
112     }
113     else{
114         logUtility.logMessage("No stock symbols found in configuration.");
115     }
116 }
117
118 function loadSettings(){
119     var value;
120     value  = DBUtility.getSetting("UpdateFreqency");
121     if (!value || value == "0.0" || value === ""){
122         autoUpdateInterval = 0;
123     }
124     else{
125         autoUpdateInterval = parseInt(value)*60*1000; //Convert minutes to milliseconds
126     }
127     value  = DBUtility.getSetting("UpdateWeekdaysOnly");
128     if (!value || value == "0.0" || value === ""){
129         updateWeekDaysOnly = false;
130     }
131     else{
132         updateWeekDaysOnly = true;
133     }
134
135     value  = DBUtility.getSetting("UpdateOnSavedNetworksOnly");
136     if (!value || value == "0.0" || value === ""){
137         updateOnSavedNetworksOnly = false;
138     }
139     else{
140         updateOnSavedNetworksOnly = true;
141     }
142
143 }
144
145 function initialize(){
146     if (autoUpdateTimer.running) autoUpdateTimer.stop();
147     loadSettings();
148     reloadQuotes();
149
150     if (autoUpdateInterval !== 0) {
151         logUtility.logMessage("Starting Timer..");
152         autoUpdateTimer.start();
153     }
154 }