Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import QtQuick 2.0
- import QtQuick.LocalStorage 2.0
- import Ubuntu.Components 0.1
- /*!
- \brief MainView with Tabs element.
- First Tab has a single Label and
- second Tab has a single ToolbarAction.
- */
- MainView {
- // objectName for functional testing purposes (autopilot-qt5)
- id: mainView
- objectName: "mainView"
- applicationName: "news-feed"
- width: units.gu(100)
- height: units.gu(75)
- tools: ToolbarActions {
- Action {
- objectName: "action"
- iconSource: Qt.resolvedUrl("avatar.png")
- text: i18n.tr("Tap me!")
- onTriggered: {
- label.text = i18n.tr("Toolbar tapped")
- }
- }
- }
- Component.onCompleted: {
- mainView.initializeDB();
- mainView.saveFeed("BBC News","http://feeds.bbci.co.uk/news/rss.xml");
- mainView.saveFeed("Jono Bacon","http://www.jonobacon.org/?feed=rss2");
- mainView.saveFeed("The Register", "http://www.theregister.co.uk/headlines.atom");
- fillTabs();
- }
- Tabs {
- id: initialtabs
- anchors.fill: parent
- tools: ToolbarActions {
- Action {
- objectName: "action"
- iconSource: Qt.resolvedUrl("avatar.png")
- text: i18n.tr("Tap me!")
- onTriggered: {
- label.text = i18n.tr("Toolbar tapped")
- }
- }
- }
- // First tab begins here
- Tab {
- id: tabFrontPage
- objectName: "tabFrontPage"
- title: i18n.tr("Front Page")
- // Tab content begins here
- page: Page {
- Column {
- anchors.centerIn: parent
- Label {
- id: labelFrontPage
- text: i18n.tr("This will be the front page \n An aggregation of the top stories from each feed")
- }
- }
- }
- }
- }
- function fillTabs() {
- initialtabs.destroy();
- var objStr = "import QtQuick 2.0;import Ubuntu.Components 0.1;import QtQuick.XmlListModel 2.0;Tabs{id:tabs;anchors.fill:parent;"
- var db = getDatabase();
- db.transaction(function(tx) {
- var rs = tx.executeSql('SELECT * FROM feeds;');
- if (rs.rows.length > 0) {
- for(var i = 0; i < rs.rows.length; i++) {
- 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;}}}}";
- ////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;XmlListModel {id: xmlModel" + i + ";source: '" + rs.rows.item(i).feedUrl +"';query: '/rss/channel/item';XmlRole { name: 'title'; query: 'title/string()' }XmlRole { name: 'pubDate'; query: 'pubDate/string()' }}}}}";
- //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;XmlListModel {id: xmlModel" + i + ";source: '" + rs.rows.item(i).feedUrl +"';query: '/rss/channel/item';XmlRole { name: 'title'; query: 'title/string()' }XmlRole { name: 'pubDate'; query: 'pubDate/string()' }}ListView {anchors.fill: parent;model: xmlModel" + i + ";delegate: Text { text: title}}}}}";
- }
- objStr += "}";
- var cmpTabs = Qt.createQmlObject(objStr,mainView,"tabsfile");
- } else {
- res = "Unknown";
- }
- })
- }
- //Create tabs for each feed
- function createTabs() {
- var feeds = getFeeds();
- for (var i = 0; i < feeds.length; i++){
- //Add tab for each feed.
- //Cannot be done with existing API
- }
- }
- //Storage API
- function getDatabase() {
- return LocalStorage.openDatabaseSync("news-feed","1.0","StorageDatabase",10000)
- }
- //Initialise DB tables if not already existing
- function initializeDB() {
- var db = getDatabase();
- db.transaction(function(tx) {
- //Create settings table if not existing
- tx.executeSql('CREATE TABLE IF NOT EXISTS settings(setting TEXT UNIQUE, value TEXT)');
- tx.executeSql('CREATE TABLE IF NOT EXISTS feeds(feedName TEXT UNIQUE, feedURL TEXT UNIQUE)')
- });
- }
- //Write setting to DB
- function setSetting(setting,value){
- //setting: string - setting name (key)
- //value: string - value
- var db = getDatabase();
- var res = "";
- db.transaction(function(tx) {
- var rs = tx.executeSql('INSERT OR REPLACE INTO settings VALUES (?,?);',[setting,value]);
- //console.log(rs.rowsAffected)
- if(rs.rowsAffected > 0) {
- res = "OK";
- } else {
- res = "Error";
- }
- })
- return res;
- }
- //Read setting from DB
- function getSetting(setting) {
- var db = getDatabase();
- var res="";
- db.transaction(function(tx) {
- var rs = tx.executeSql('SELECT value FROM settings WHERE setting=?;', [setting]);
- if (rs.rows.length > 0) {
- res = rs.rows.item(0).value;
- } else {
- res = "Unknown";
- }
- })
- // The function returns “Unknown” if the setting was not found in the database
- // For more advanced projects, this should probably be handled through error codes
- return res;
- }
- function saveFeed(feedName, feedURL) {
- var db = getDatabase();
- var res = "";
- db.transaction(function(tx){
- var rs = tx.executeSql('INSERT OR REPLACE INTO feeds VALUES (?,?)',[feedName,feedURL]);
- //console.log(rs.rowsAffected)
- if (rs.rowsAffected > 0) {
- res = "OK";
- } else {
- res = "Error";
- }
- })
- return res;
- }
- //Return a single feed
- function getFeed(feedName) {
- var db = getDatabase();
- var res = "";
- db.transaction(function(tx) {
- var rs = tx.executeSql('SELECT feedURL FROM feeds WHERE feedName=?;', [feedName]);
- if (rs.rows.length > 0) {
- res = rs.rows.item(0).feedURL;
- } else {
- res = "Unknown";
- }
- })
- return res;
- }
- //Return all feeds and urls
- function getFeeds() {
- var db = getDatabase();
- var res = "";
- db.transaction(function(tx) {
- var rs = tx.executeSql('SELECT * FROM feeds;');
- if (rs.rows.length > 0) {
- return rs;
- } else {
- res = "Unknown";
- }
- })
- return res;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement