Advertisement
Guest User

Untitled

a guest
Feb 27th, 2013
447
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement