diff options
| author | Anqi Xu | 2012-06-24 05:31:06 -0400 |
|---|---|---|
| committer | Anqi Xu | 2012-06-24 05:31:06 -0400 |
| commit | cd67bf9b30d6d787695ac4dc9d85b3289819527a (patch) | |
| tree | a314530e30e06b5e6d4190221351b6b46086f3dd | |
| parent | f611d5cb2985e70a23646b0c1e0883c9b7782137 (diff) | |
| download | LikeFeed-cd67bf9b30d6d787695ac4dc9d85b3289819527a.tar.bz2 | |
Added loading-by-20-items feature
| -rw-r--r-- | Resources/friendship/core/FacebookFQL.js | 13 | ||||
| -rw-r--r-- | Resources/friendship/core/core.js | 5 | ||||
| -rw-r--r-- | Resources/friendship/ui/LikeList.js | 73 |
3 files changed, 76 insertions, 15 deletions
diff --git a/Resources/friendship/core/FacebookFQL.js b/Resources/friendship/core/FacebookFQL.js index e93abb0..9a011aa 100644 --- a/Resources/friendship/core/FacebookFQL.js +++ b/Resources/friendship/core/FacebookFQL.js @@ -24,13 +24,13 @@ fs.core.handleLikeIDsFQLResponse = function (result) { fs.core.handleFQLResponse(result, "processLikeIDs"); }; fs.core.queryLikeIDsFQL = function(friend_ids) { - var query = "SELECT page_id, created_time FROM page_fan WHERE uid IN (" + friend_ids.join() + ")"; + var query = "SELECT page_id, created_time, uid FROM page_fan WHERE uid IN (" + friend_ids.join() + ")"; Ti.Facebook.request('fql.query', {query: query}, fs.core.handleLikeIDsFQLResponse); }; fs.core.handleAllFriendLikeIDsFQLResponse = function (result) { fs.core.handleFQLResponse(result, "processLikeIDs"); }; fs.core.queryAllFriendLikeIDsFQL = function() { - var query = "SELECT page_id, created_time FROM page_fan WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = " + Ti.Facebook.uid + ")"; + var query = "SELECT page_id, created_time, uid FROM page_fan WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = " + Ti.Facebook.uid + ")"; Ti.Facebook.request('fql.query', {query: query}, fs.core.handleAllFriendLikeIDsFQLResponse); }; @@ -45,4 +45,13 @@ query += "FROM page WHERE page_id IN (" + page_ids.join() + ")"; Ti.Facebook.request('fql.query', {query: query}, fs.core.handleLikesFQLResponse); }; + + fs.core.fetchMoreLikes = function(numLikesMore) { + numLikesMore = Math.min((fs.data.reverseChronoLikedIDs.length - fs.data.numLikesFetched), numLikesMore); + page_ids = Array(); + for (var i = fs.data.numLikesFetched; i < fs.data.numLikesFetched + numLikesMore; i++) { + page_ids.push(fs.data.reverseChronoLikedIDs[i]); + } + fs.core.queryLikesFQL(page_ids); + }; })(); diff --git a/Resources/friendship/core/core.js b/Resources/friendship/core/core.js index a1f150c..fe6cb00 100644 --- a/Resources/friendship/core/core.js +++ b/Resources/friendship/core/core.js @@ -1,9 +1,8 @@ (function() { fs.core = {}; - fs.data = {}; - fs.data.friends = Array(); })(); Ti.include( - '/friendship/core/FacebookFQL.js' + '/friendship/core/FacebookFQL.js', + '/friendship/core/DataManipulation.js' ) diff --git a/Resources/friendship/ui/LikeList.js b/Resources/friendship/ui/LikeList.js index c00ccff..0e9e784 100644 --- a/Resources/friendship/ui/LikeList.js +++ b/Resources/friendship/ui/LikeList.js @@ -153,7 +153,11 @@ row.add( description ); return row; - } + }; + + function sortLikeIDsByTime(a, b) { // TODO: deprecated + return ((a.time > b.time) ? -1 : ((a.time < b.time) ? 1 : 0)); + }; fs.ui.createLikeList = function() { var ll_view = Ti.UI.createTableView(); @@ -171,24 +175,73 @@ }); Ti.API.addEventListener("processLikeIDs", function(e) { - Ti.API.info("processLikeIDs"); - Ti.API.info(e.data); + fs.data.likeIDs = Array(); + fs.data.reverseChronoLikedIDs = Array(); + for ( key in e.data ) { - // TODO: 0 go through all the page_ids and insert into a hashset/dictionary; update with latest create_time, and also ++; sort by latest time <- pbly need priority set, or jus filter after fact - //e.data[key].page_id - //e.data[key].created_time + pid = e.data[key].page_id + ''; + tm = e.data[key].created_time; + uid = e.data[key].uid; + + if (pid in fs.data.likeIDs) { + fs.data.likeIDs[pid].count += 1; + + if (tm >= fs.data.likeIDs[pid].time) { + fs.data.likeIDs[pid].time = tm; + fs.data.likeIDs[pid].uid = uid; + } + } else { + fs.data.likeIDs[pid] = {count: 1, time: tm, uid: uid}; + } } - - // TODO: disable the hide loader, and start slowly loading processLikes - Ti.App.fireEvent('app:hide.loader'); + + if (e.data.length > 0) { + var tuples = []; + + for (var key in fs.data.likeIDs) { + tuples.push([key, fs.data.likeIDs[key]]); + } + tuples.sort(function(a, b) { + a = a[1].time; + b = b[1].time; + return a < b ? 1 : (a > b ? -1 : 0); + }); + + for (var i = 0; i < tuples.length; i++) { + fs.data.reverseChronoLikedIDs.push(tuples[i][0]); + //Ti.API.info(tuples[i][0] + ' ' + tuples[i][1].time); + } + fs.data.numLikesFetched = 0; + + ll_view.footerTitle = "0 / " + fs.data.reverseChronoLikedIDs.length + " loaded"; + + fs.core.fetchMoreLikes(fs.data.NUM_LIKES_PER_FETCH); + } else { + ll_view.footerTitle = "0 / 0 loaded"; + Ti.App.fireEvent('app:hide.loader'); + } }); Ti.API.addEventListener("processLikes", function(e) { for ( key in e.data ) { + fs.data.numLikesFetched++; ll_view.appendRow(create_row(e.data[key])); - } + } + + ll_view.footerTitle = fs.data.numLikesFetched + " / " + fs.data.reverseChronoLikedIDs.length + " loaded"; + /* + if (fs.data.numLikesFetched < fs.data.reverseChronoLikedIDs.length) { + fs.core.fetchMoreLikes(fs.data.NUM_LIKES_PER_FETCH); + } + */ + // TODO: when UI scrolls to bottom, can call this (might need mutex) Ti.App.fireEvent('app:hide.loader'); }); + + ll_view.addEventListener("scrollEnd", function(e) { + Ti.API.info("scroll ended"); + Ti.API.info(e.contentOffset); + }); return ll_view; }; |
