Version 0.2
[marketstoday] / src / qml / Library / js / CoreLogic.js
diff --git a/src/qml/Library/js/CoreLogic.js b/src/qml/Library/js/CoreLogic.js
new file mode 100644 (file)
index 0000000..3fde6d5
--- /dev/null
@@ -0,0 +1,154 @@
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+*/
+
+function getQuery(){
+    var query;
+    var symbolsArray = DBUtility.getAllSymbols();
+    if (symbolsArray && symbolsArray.length > 0){
+        var i = 0;
+        for (i = 0; i< symbolsArray.length; i++) {
+            logUtility.logMessage("Appending "+symbolsArray[i]+ " to Query");
+
+            if (!query){
+                query = '"'+symbolsArray[i]+'"';
+            }
+            else{
+                query = query + ',"' + symbolsArray[i]+'"';
+            }
+        }
+    }
+
+    return query;
+}
+
+function refreshDataModel(responseXML){
+    if (!(responseXML && stockQuoteDataModel)) return;
+
+    var xmlDoc = responseXML.documentElement;
+    var results = xmlDoc.firstChild;
+
+    //Not the best code I ever wrote, but got no choice
+    //Refer to Memory leak issue with XMLListModel --> http://bugreports.qt.nokia.com/browse/QTBUG-15191
+
+    if (results) {
+        var quoteNodes = results.childNodes;
+        if (quoteNodes){
+            logUtility.logMessage("Clearing Data Model");
+            stockQuoteDataModel.clear();
+
+            var i = 0;
+            for (i = 0; i < quoteNodes.length; i++) {
+
+                var quoteElements = quoteNodes[i].childNodes;
+                var j = 0;
+                var symbol,stockName,lastTradedPrice,change,changePercentage
+
+                for (j = 0; j < quoteElements.length; j++){
+
+                    switch (quoteElements[j].nodeName){
+                        case 'Symbol':
+                            symbol = quoteElements[j].childNodes[0].nodeValue;
+                            break;
+                        case 'Name':
+                            stockName = quoteElements[j].childNodes[0].nodeValue;
+                            break;
+                        case 'LastTradePriceOnly':
+                            lastTradedPrice = quoteElements[j].childNodes[0].nodeValue;
+                            break;
+                        case 'Change':
+                            change = quoteElements[j].childNodes[0].nodeValue;
+                            break;
+                        case 'ChangeinPercent':
+                            changePercentage = quoteElements[j].childNodes[0].nodeValue;
+                            break;
+                        default:
+                    }
+                }
+                stockQuoteDataModel.append({"symbol":symbol,"stockName":stockName,"lastTradedPrice":lastTradedPrice,"change":change,"changePercentage":changePercentage});
+                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);
+            }
+        }
+    }
+
+    var queryNode = xmlDoc;
+    if (queryNode) {
+        var i = 0;
+        var queryAttributes = queryNode.attributes;
+        for (i = 0; i < queryAttributes.length; i++) {
+            if (queryAttributes[i].name == 'created') {
+                screen.lastUpdatedTimeStamp = "Updated: "+DateLib.ISODate.format(queryAttributes[i].value);
+                logUtility.logMessage(screen.lastUpdatedTimeStamp);
+                break;
+            }
+        }
+    }
+}
+
+
+function reloadQuotes(){
+    var query = getQuery();
+    if (query){
+        screen.quoteRefreshStarted();
+        logUtility.logMessage("Reloading Data..");
+
+        //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';
+        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';
+        logUtility.logMessage(queryURL);
+
+        var response = new XMLHttpRequest();
+        response.onreadystatechange = function() {
+            if (response.readyState == XMLHttpRequest.DONE) {
+                refreshDataModel(response.responseXML);
+                logUtility.logMessage("Data Reload Completed..");
+                screen.quoteRefreshCompleted();
+            }
+        }
+
+        response.open("GET", queryURL);
+        response.send();
+    }
+    else{
+        logUtility.logMessage("No stock symbols found in configuration.");
+    }
+}
+
+function loadSettings(){
+    var value;
+    value  = DBUtility.getSetting("UpdateFreqency");
+    if (!value || value == "0.0" || value === ""){
+        autoUpdateInterval = 0;
+    }
+    else{
+        autoUpdateInterval = parseInt(value)*60*1000; //Convert minutes to milliseconds
+    }
+    value  = DBUtility.getSetting("UpdateWeekdaysOnly");
+    if (!value || value == "0.0" || value === ""){
+        updateWeekDaysOnly = false;
+    }
+    else{
+        updateWeekDaysOnly = true;
+    }
+
+    value  = DBUtility.getSetting("UpdateOnSavedNetworksOnly");
+    if (!value || value == "0.0" || value === ""){
+        updateOnSavedNetworksOnly = false;
+    }
+    else{
+        updateOnSavedNetworksOnly = true;
+    }
+
+}
+
+function initialize(){
+    if (autoUpdateTimer.running) autoUpdateTimer.stop();
+    loadSettings();
+    reloadQuotes();
+
+    if (autoUpdateInterval !== 0) {
+        logUtility.logMessage("Starting Timer..");
+        autoUpdateTimer.start();
+    }
+}