This week only. Pastebin PRO Accounts Christmas Special! Don't miss out!Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Feb 27th, 2013  |  syntax: None  |  size: 6.21 KB  |  views: 67  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
This paste has a previous version, view the difference. Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. import QtQuick 2.0
  2. import QtQuick.LocalStorage 2.0
  3. import Ubuntu.Components 0.1
  4.  
  5. /*!
  6.     \brief MainView with Tabs element.
  7.            First Tab has a single Label and
  8.            second Tab has a single ToolbarAction.
  9. */
  10.  
  11. MainView {
  12.     // objectName for functional testing purposes (autopilot-qt5)
  13.     id: mainView
  14.     objectName: "mainView"
  15.     applicationName: "news-feed"
  16.    
  17.     width: units.gu(100)
  18.     height: units.gu(75)
  19.  
  20.     tools: ToolbarActions {
  21.         Action {
  22.             objectName: "action"
  23.  
  24.             iconSource: Qt.resolvedUrl("avatar.png")
  25.             text: i18n.tr("Tap me!")
  26.  
  27.             onTriggered: {
  28.                 label.text = i18n.tr("Toolbar tapped")
  29.             }
  30.         }
  31.     }
  32.  
  33.     Component.onCompleted: {
  34.         mainView.initializeDB();
  35.         mainView.saveFeed("BBC News","http://feeds.bbci.co.uk/news/rss.xml");
  36.         mainView.saveFeed("Jono Bacon","http://www.jonobacon.org/?feed=rss2");
  37.         mainView.saveFeed("The Register", "http://www.theregister.co.uk/headlines.atom");
  38.         fillTabs();
  39.     }
  40.  
  41.     Tabs {
  42.         id: initialtabs
  43.         anchors.fill: parent
  44.  
  45.         tools: ToolbarActions {
  46.             Action {
  47.                 objectName: "action"
  48.  
  49.                 iconSource: Qt.resolvedUrl("avatar.png")
  50.                 text: i18n.tr("Tap me!")
  51.  
  52.                 onTriggered: {
  53.                     label.text = i18n.tr("Toolbar tapped")
  54.                 }
  55.             }
  56.         }
  57.  
  58.         // First tab begins here
  59.         Tab {
  60.             id: tabFrontPage
  61.             objectName: "tabFrontPage"
  62.            
  63.             title: i18n.tr("Front Page")
  64.            
  65.             // Tab content begins here
  66.             page: Page {
  67.                 Column {
  68.                     anchors.centerIn: parent
  69.                     Label {
  70.                         id: labelFrontPage
  71.                         text: i18n.tr("This will be the front page \n An aggregation of the top stories from each feed")
  72.                     }
  73.                 }
  74.             }
  75.         }
  76.     }
  77.  
  78.  
  79.     function fillTabs() {
  80.         initialtabs.destroy();
  81.         var objStr = "import QtQuick 2.0;import Ubuntu.Components 0.1;import QtQuick.XmlListModel 2.0;Tabs{id:tabs;anchors.fill:parent;"
  82.         var db = getDatabase();
  83.         db.transaction(function(tx) {
  84.             var rs = tx.executeSql('SELECT * FROM feeds;');
  85.             if (rs.rows.length > 0) {
  86.                 for(var i = 0; i < rs.rows.length; i++) {
  87.                     objStr += "Tab {id:tab" + i + ";anchors.fill:parent;title:'" + rs.rows.item(i).feedName + "';property string source: '" + rs.rows.item(i).feedURL + "';page: Page {anchors.margins: units.gu(2);Column {anchors.centerIn: parent;Label{text:tab" + i + ".source;}}}}";
  88.                 }
  89.                 objStr += "}";
  90.                 var cmpTabs = Qt.createQmlObject(objStr,mainView,"tabsfile");
  91.             } else {
  92.                 res = "Unknown";
  93.             }
  94.         })
  95.     }
  96.  
  97.     //Create tabs for each feed
  98.     function createTabs() {
  99.         var feeds = getFeeds();
  100.         for (var i = 0; i < feeds.length; i++){
  101.             //Add tab for each feed.
  102.             //Cannot be done with existing API
  103.  
  104.         }
  105.     }
  106.  
  107.     //Storage API
  108.     function getDatabase() {
  109.  
  110.         return LocalStorage.openDatabaseSync("news-feed","1.0","StorageDatabase",10000)
  111.     }
  112.  
  113.     //Initialise DB tables if not already existing
  114.     function initializeDB() {
  115.         var db = getDatabase();
  116.         db.transaction(function(tx) {
  117.             //Create settings table if not existing
  118.             tx.executeSql('CREATE TABLE IF NOT EXISTS settings(setting TEXT UNIQUE, value TEXT)');
  119.             tx.executeSql('CREATE TABLE IF NOT EXISTS feeds(feedName TEXT UNIQUE, feedURL TEXT UNIQUE)')
  120.         });
  121.     }
  122.  
  123.     //Write setting to DB
  124.     function setSetting(setting,value){
  125.         //setting: string - setting name (key)
  126.         //value: string - value
  127.         var db = getDatabase();
  128.         var res = "";
  129.         db.transaction(function(tx) {
  130.             var rs = tx.executeSql('INSERT OR REPLACE INTO settings VALUES (?,?);',[setting,value]);
  131.             //console.log(rs.rowsAffected)
  132.             if(rs.rowsAffected > 0) {
  133.                 res = "OK";
  134.             } else {
  135.                 res = "Error";
  136.             }
  137.         })
  138.         return res;
  139.     }
  140.  
  141.     //Read setting from DB
  142.     function getSetting(setting) {
  143.        var db = getDatabase();
  144.        var res="";
  145.        db.transaction(function(tx) {
  146.          var rs = tx.executeSql('SELECT value FROM settings WHERE setting=?;', [setting]);
  147.          if (rs.rows.length > 0) {
  148.               res = rs.rows.item(0).value;
  149.          } else {
  150.              res = "Unknown";
  151.          }
  152.       })
  153.       // The function returns “Unknown” if the setting was not found in the database
  154.       // For more advanced projects, this should probably be handled through error codes
  155.       return res;
  156.     }
  157.  
  158.     function saveFeed(feedName, feedURL) {
  159.         var db = getDatabase();
  160.         var res = "";
  161.         db.transaction(function(tx){
  162.             var rs = tx.executeSql('INSERT OR REPLACE INTO feeds VALUES (?,?)',[feedName,feedURL]);
  163.             //console.log(rs.rowsAffected)
  164.             if (rs.rowsAffected > 0) {
  165.                 res = "OK";
  166.             } else {
  167.                 res = "Error";
  168.             }
  169.         })
  170.         return res;
  171.     }
  172.  
  173.     //Return a single feed
  174.     function getFeed(feedName) {
  175.         var db = getDatabase();
  176.         var res = "";
  177.         db.transaction(function(tx) {
  178.             var rs = tx.executeSql('SELECT feedURL FROM feeds WHERE feedName=?;', [feedName]);
  179.             if (rs.rows.length > 0) {
  180.                 res = rs.rows.item(0).feedURL;
  181.             } else {
  182.                 res = "Unknown";
  183.             }
  184.  
  185.         })
  186.         return res;
  187.     }
  188.  
  189.     //Return all feeds and urls
  190.     function getFeeds() {
  191.         var db = getDatabase();
  192.         var res = "";
  193.         db.transaction(function(tx) {
  194.             var rs = tx.executeSql('SELECT * FROM feeds;');
  195.             if (rs.rows.length > 0) {
  196.                 return rs;
  197.             } else {
  198.                 res = "Unknown";
  199.             }
  200.             })
  201.         return res;
  202.     }
  203. }
clone this paste RAW Paste Data