diff options
| -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 c9004f6..dfc01c1 100644 --- a/Resources/friendship/ui/LikeList.js +++ b/Resources/friendship/ui/LikeList.js @@ -183,7 +183,11 @@  		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(); @@ -202,24 +206,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;  	}; | 
