diff --git a/src/main/java/com/commafeed/frontend/model/request/MultipleMarkRequest.java b/src/main/java/com/commafeed/frontend/model/request/MultipleMarkRequest.java new file mode 100644 index 00000000..58ef422c --- /dev/null +++ b/src/main/java/com/commafeed/frontend/model/request/MultipleMarkRequest.java @@ -0,0 +1,30 @@ +package com.commafeed.frontend.model.request; + +import java.io.Serializable; +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + +import com.wordnik.swagger.annotations.ApiClass; +import com.wordnik.swagger.annotations.ApiProperty; + +@SuppressWarnings("serial") +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +@ApiClass("Multiple Mark Request") +public class MultipleMarkRequest implements Serializable { + + @ApiProperty(value = "list of mark requests", required = true) + private List requests; + + public List getRequests() { + return requests; + } + + public void setRequests(List requests) { + this.requests = requests; + } + +} diff --git a/src/main/java/com/commafeed/frontend/rest/resources/EntryREST.java b/src/main/java/com/commafeed/frontend/rest/resources/EntryREST.java index 2e508732..fe3caaa6 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/EntryREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/EntryREST.java @@ -20,6 +20,7 @@ import com.commafeed.backend.services.FeedEntryService; import com.commafeed.frontend.model.Entries; import com.commafeed.frontend.model.Entry; import com.commafeed.frontend.model.request.MarkRequest; +import com.commafeed.frontend.model.request.MultipleMarkRequest; import com.commafeed.frontend.model.request.StarRequest; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; @@ -55,6 +56,21 @@ public class EntryREST extends AbstractResourceREST { return Response.ok(Status.OK).build(); } + @Path("/markMultiple") + @POST + @ApiOperation(value = "Mark multiple feed entries", notes = "Mark feed entries as read/unread") + public Response markFeedEntries( + @ApiParam(value = "Multiple Mark Request", required = true) MultipleMarkRequest req) { + Preconditions.checkNotNull(req); + Preconditions.checkNotNull(req.getRequests()); + + for (MarkRequest r : req.getRequests()) { + markFeedEntry(r); + } + + return Response.ok(Status.OK).build(); + } + @Path("/star") @POST @ApiOperation(value = "Mark a feed entry", notes = "Mark a feed entry as read/unread") diff --git a/src/main/resources/i18n/en.properties b/src/main/resources/i18n/en.properties index d5e16beb..e63c260d 100644 --- a/src/main/resources/i18n/en.properties +++ b/src/main/resources/i18n/en.properties @@ -49,6 +49,7 @@ view.entry_author=by view.error_while_loading_feed=Error while loading this feed view.keep_unread=Keep unread view.no_unread_items=has no unread items. +view.mark_up_to_here=Mark as read up to here feedsearch.hint=Type in a subscription... feedsearch.help=Use the return key to select and arrow keys to navigate. diff --git a/src/main/webapp/js/controllers.js b/src/main/webapp/js/controllers.js index f6ea5659..e5c7e06b 100644 --- a/src/main/webapp/js/controllers.js +++ b/src/main/webapp/js/controllers.js @@ -752,6 +752,29 @@ function($scope, $stateParams, $http, $route, $window, EntryService, SettingsSer }); }; + $scope.markUpTo = function(entry) { + var entries = []; + for (var i = 0; i < $scope.entries.length; i++) { + var entry = $scope.entries[i]; + if (!entry.read) { + entries.push({ + id : entry.id, + feedId : entry.feedId, + read: true + }); + entry.read = true; + } + if (entry == $scope.current) { + break; + } + } + EntryService.markMultiple({ + requests : entries + }, function() { + CategoryService.refresh(); + }); + }; + $scope.star = function(entry, star, event) { if (event) { event.preventDefault(); diff --git a/src/main/webapp/js/services.js b/src/main/webapp/js/services.js index c518d174..9604b352 100644 --- a/src/main/webapp/js/services.js +++ b/src/main/webapp/js/services.js @@ -241,6 +241,12 @@ function($resource, $http) { _method : 'mark' } }, + markMultiple : { + method : 'POST', + params : { + _method : 'markMultiple' + } + }, star : { method : 'POST', params : { diff --git a/src/main/webapp/sass/components/_entry-list.scss b/src/main/webapp/sass/components/_entry-list.scss index d3e934b4..3370f038 100644 --- a/src/main/webapp/sass/components/_entry-list.scss +++ b/src/main/webapp/sass/components/_entry-list.scss @@ -180,6 +180,17 @@ font-size: 12px; } +#feed-accordion a.mark-up-to { + color: #333333; + position: absolute; + right: 30px; +} + +#feed-accordion a.mark-up-to:hover { + text-decoration: none; + cursor: pointer; +} + #feed-accordion .star { text-decoration: none; padding: 0px 5px; diff --git a/src/main/webapp/templates/feeds.view.html b/src/main/webapp/templates/feeds.view.html index cc5cef8f..66701af4 100644 --- a/src/main/webapp/templates/feeds.view.html +++ b/src/main/webapp/templates/feeds.view.html @@ -101,6 +101,10 @@ + + + +