From 88d9be953babda68cb5325258569578c11fa4438 Mon Sep 17 00:00:00 2001 From: Ilya Kitaev Date: Tue, 21 Jun 2016 11:58:06 +0300 Subject: [PATCH] Lazy loading for the tweets --- RightPanel.qml | 13 +++++++++++- main.qml | 6 ++++++ tabs/TweetsModel.qml | 48 +++++++++++++++++++------------------------- tabs/Twitter.qml | 8 ++++++++ 4 files changed, 47 insertions(+), 28 deletions(-) diff --git a/RightPanel.qml b/RightPanel.qml index b29cb28a..c5878146 100644 --- a/RightPanel.qml +++ b/RightPanel.qml @@ -36,6 +36,11 @@ Rectangle { width: 330 color: "#FFFFFF" + function updateTweets() { + tabView.twitter.item.updateTweets() + } + + TabView { id: tabView anchors.left: parent.left @@ -45,12 +50,18 @@ Rectangle { anchors.leftMargin: 14 anchors.rightMargin: 14 anchors.topMargin: 40 + property alias twitter: twitter - Tab { title: qsTr("Twitter"); source: "tabs/Twitter.qml" } + + + + Tab { id: twitter; title: qsTr("Twitter"); source: "tabs/Twitter.qml" } Tab { title: "News" } Tab { title: "Help" } Tab { title: "About" } + + style: TabViewStyle { frameOverlap: 0 tabOverlap: 0 diff --git a/main.qml b/main.qml index 7101d096..6f90bcf8 100644 --- a/main.qml +++ b/main.qml @@ -210,6 +210,12 @@ ApplicationWindow { } } + onRightPanelExpandedChanged: { + if (rightPanelExpanded) { + rightPanel.updateTweets() + } + } + Settings { id: persistentSettings property string language diff --git a/tabs/TweetsModel.qml b/tabs/TweetsModel.qml index a6b40aa6..55a7c74d 100644 --- a/tabs/TweetsModel.qml +++ b/tabs/TweetsModel.qml @@ -56,47 +56,41 @@ Item { function reload() { tweets.clear() - if (from == "" && phrase == "") return; - - if (appWindow.rightPanelExpanded) { - -//! [requesting] - var req = new XMLHttpRequest; - req.open("GET", "https://api.twitter.com/1.1/search/tweets.json?from=" + from + - "&count=" + tweetsMaxCount + "&q=" + encodePhrase(phrase)); - req.setRequestHeader("Authorization", "Bearer " + bearerToken); - req.onreadystatechange = function() { - status = req.readyState; - if (status === XMLHttpRequest.DONE) { - var objectArray = JSON.parse(req.responseText); - if (objectArray.errors !== undefined) - console.log("Error fetching tweets: " + objectArray.errors[0].message) - else { - for (var key in objectArray.statuses) { - var jsonObject = objectArray.statuses[key]; - tweets.append(jsonObject); - } + //! [requesting] + var req = new XMLHttpRequest; + req.open("GET", "https://api.twitter.com/1.1/search/tweets.json?from=" + from + + "&count=" + tweetsMaxCount + "&q=" + encodePhrase(phrase)); + req.setRequestHeader("Authorization", "Bearer " + bearerToken); + req.onreadystatechange = function() { + status = req.readyState; + if (status === XMLHttpRequest.DONE) { + var objectArray = JSON.parse(req.responseText); + if (objectArray.errors !== undefined) + console.log("Error fetching tweets: " + objectArray.errors[0].message) + else { + for (var key in objectArray.statuses) { + var jsonObject = objectArray.statuses[key]; + tweets.append(jsonObject); } - if (wasLoading == true) - wrapper.isLoaded() } - wasLoading = (status === XMLHttpRequest.LOADING); + if (wasLoading == true) + wrapper.isLoaded() } - req.send(); -//! [requesting] + wasLoading = (status === XMLHttpRequest.LOADING); } + req.send(); + //! [requesting] } - Component.onCompleted: { if (consumerKey === "" || consumerSecret == "") { console.log("setting demo token") bearerToken = encodeURIComponent(Helper.demoToken()) tweetsModel.phrase = "" tweetsModel.from = "@monerocurrency" - reload() + // reload() return; } diff --git a/tabs/Twitter.qml b/tabs/Twitter.qml index 553e7da6..bd597287 100644 --- a/tabs/Twitter.qml +++ b/tabs/Twitter.qml @@ -34,6 +34,8 @@ import "../components" Item { id: tab + + ListModel { id: testModel ListElement { head: "Monero || #xmr"; foot: "@btcplanet Duis turpis arcu, varius nec rutrum in, adipiscing at enim. Donec quis consequat ipsum," } @@ -56,10 +58,16 @@ Item { property var idx property var ids + function updateTweets() { + tweetsModel.reload() + } + + Component.onCompleted: { ids = new Array() } + function idInModel(id) { for (var j = 0; j < ids.length; j++) if (ids[j] === id)