fix infinity scroll

This commit is contained in:
Athou
2013-03-25 18:41:03 +01:00
parent 3b852d7743
commit 2c3a5274be
4 changed files with 41 additions and 23 deletions

View File

@@ -20,23 +20,39 @@ import com.commafeed.backend.model.FeedSubscription;
import com.commafeed.frontend.model.Entries;
import com.commafeed.frontend.model.Entry;
import com.commafeed.frontend.utils.ModelFactory.MF;
import com.google.common.base.Preconditions;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
@Path("entries")
public class EntriesREST extends AbstractREST {
@Path("get/{type}/{id}/{readType}")
private static final String ALL = "all";
public enum Type {
category, feed;
}
public enum ReadType {
all, unread;
}
@Path("get")
@GET
public Entries getEntries(@PathParam("type") String type,
@PathParam("id") String id, @PathParam("readType") String readType,
public Entries getEntries(@QueryParam("type") Type type,
@QueryParam("id") String id,
@QueryParam("readType") ReadType readType,
@DefaultValue("0") @QueryParam("offset") int offset,
@DefaultValue("-1") @QueryParam("limit") int limit) {
Entries entries = new Entries();
boolean unreadOnly = "unread".equals(readType);
Preconditions.checkNotNull(type);
Preconditions.checkNotNull(id);
Preconditions.checkNotNull(readType);
if ("feed".equals(type)) {
Entries entries = new Entries();
boolean unreadOnly = readType == ReadType.unread;
if (type == Type.feed) {
FeedSubscription subscription = feedSubscriptionService.findById(
getUser(), Long.valueOf(id));
entries.setName(subscription.getTitle());
@@ -44,13 +60,13 @@ public class EntriesREST extends AbstractREST {
buildEntries(subscription, offset, limit, unreadOnly));
} else {
FeedCategory feedCategory = "all".equals(id) ? null
FeedCategory feedCategory = ALL.equals(id) ? null
: feedCategoryService.findById(getUser(), Long.valueOf(id));
Collection<FeedSubscription> subscriptions = "all".equals(id) ? feedSubscriptionService
Collection<FeedSubscription> subscriptions = ALL.equals(id) ? feedSubscriptionService
.findAll(getUser()) : feedSubscriptionService
.findWithCategory(getUser(), feedCategory);
entries.setName("all".equals(id) ? "All" : feedCategory.getName());
entries.setName(ALL.equals(id) ? ALL : feedCategory.getName());
for (FeedSubscription subscription : subscriptions) {
entries.getEntries().addAll(
buildEntries(subscription, offset, limit, unreadOnly));
@@ -67,11 +83,9 @@ public class EntriesREST extends AbstractREST {
if (limit > -1) {
int size = entries.getEntries().size();
System.out.println(size);
int to = Math.min(size, limit);
List<Entry> subList = entries.getEntries().subList(0, to);
entries.setEntries(Lists.newArrayList(subList));
System.out.println(entries.getEntries().size());
}
return entries;
}

View File

@@ -104,29 +104,34 @@ module.controller('FeedListCtrl', function($scope, $routeParams, $http,
$scope.limit = 10;
$scope.busy = false;
$scope.hasMore = true;
$scope.refreshList = function() {
if ($scope.settings.readingMode) {
$scope.entryList = EntryService.get({
_type : $scope.selectedType,
_id : $scope.selectedId,
_readtype : $scope.settings.readingMode,
type : $scope.selectedType,
id : $scope.selectedId,
readType : $scope.settings.readingMode,
offset : 0,
limit : $scope.limit
limit : 30
});
}
};
$scope.loadMoreEntries = function() {
if(!$scope.hasMore)
return;
if (!$scope.entryList || !$scope.entryList.entries)
return;
if ($scope.busy)
return;
if (!$scope.settings.readingMode)
return;
$scope.busy = true;
EntryService.get({
_type : $scope.selectedType,
_id : $scope.selectedId,
_readtype : $scope.settings.readingMode,
type : $scope.selectedType,
id : $scope.selectedId,
readType : $scope.settings.readingMode,
offset : $scope.entryList.entries.length,
limit : $scope.limit
}, function(data) {
@@ -135,9 +140,8 @@ module.controller('FeedListCtrl', function($scope, $routeParams, $http,
for ( var i = 0; i < entries.length; i++) {
$scope.entryList.entries.push(entries[i]);
}
console.log(entries.length)
console.log($scope.limit)
$scope.busy = false;
$scope.hasMore = entries.length == $scope.limit
});
}

View File

@@ -78,7 +78,7 @@ module.factory('EntryService', [
}
}
};
res = $resource('rest/entries/:_method/:_type/:_id/:_readtype', {},
res = $resource('rest/entries/:_method', {},
actions);
return res;
} ]);

View File

@@ -2,8 +2,8 @@
{{readType}}
<span>{{entryList.name}}</span><span
ng-show="selectedType == 'category'"> &#187;</span>
<div id="feed-accordion" infinite-scroll="loadMoreEntries()" infinite-scroll-disabled="busy" infinite-scroll-distance="1">
<div ng-repeat="entry in entryList.entries">
<div class="accordion" id="feed-accordion" infinite-scroll="loadMoreEntries()" infinite-scroll-disabled="busy" infinite-scroll-distance="1">
<div ng-repeat="entry in entryList.entries" class="entry">
<div class="entry-heading">
<a class="accordion-toggle" data-toggle="collapse"
ng-click="mark(entry, true)"