diff --git a/src/main/java/com/commafeed/backend/model/UserSettings.java b/src/main/java/com/commafeed/backend/model/UserSettings.java index 5c435fa6..7a315649 100644 --- a/src/main/java/com/commafeed/backend/model/UserSettings.java +++ b/src/main/java/com/commafeed/backend/model/UserSettings.java @@ -4,6 +4,7 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; +import javax.persistence.OneToOne; import javax.persistence.Table; @Entity @@ -12,10 +13,11 @@ import javax.persistence.Table; public class UserSettings extends AbstractModel { public enum ReadingMode { - ALL, UNREAD + all, unread } @Column(name = "user_id") + @OneToOne private User user; @Enumerated(EnumType.STRING) diff --git a/src/main/java/com/commafeed/frontend/pages/HomePage.html b/src/main/java/com/commafeed/frontend/pages/HomePage.html index ee05d822..dd211353 100644 --- a/src/main/java/com/commafeed/frontend/pages/HomePage.html +++ b/src/main/java/com/commafeed/frontend/pages/HomePage.html @@ -23,6 +23,7 @@
+
diff --git a/src/main/java/com/commafeed/frontend/rest/JSONMessageBodyWriter.java b/src/main/java/com/commafeed/frontend/rest/JSONMessageBodyReaderWriter.java similarity index 69% rename from src/main/java/com/commafeed/frontend/rest/JSONMessageBodyWriter.java rename to src/main/java/com/commafeed/frontend/rest/JSONMessageBodyReaderWriter.java index 2d7518fb..12f67cd4 100644 --- a/src/main/java/com/commafeed/frontend/rest/JSONMessageBodyWriter.java +++ b/src/main/java/com/commafeed/frontend/rest/JSONMessageBodyReaderWriter.java @@ -1,6 +1,7 @@ package com.commafeed.frontend.rest; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; @@ -8,11 +9,13 @@ import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; +import javax.ws.rs.Consumes; import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.ext.MessageBodyReader; import javax.ws.rs.ext.MessageBodyWriter; import javax.ws.rs.ext.Provider; @@ -28,7 +31,9 @@ import com.google.gson.JsonSerializer; @Provider @Produces(MediaType.APPLICATION_JSON) -public class JSONMessageBodyWriter implements MessageBodyWriter { +@Consumes(MediaType.APPLICATION_JSON) +public class JSONMessageBodyReaderWriter implements MessageBodyWriter, + MessageBodyReader { @Override public boolean isWriteable(Class type, Type genericType, @@ -36,6 +41,12 @@ public class JSONMessageBodyWriter implements MessageBodyWriter { return true; } + @Override + public boolean isReadable(Class type, Type genericType, + Annotation[] annotations, MediaType mediaType) { + return true; + } + @Override public long getSize(Object t, Class type, Type genericType, Annotation[] annotations, MediaType mediaType) { @@ -50,11 +61,23 @@ public class JSONMessageBodyWriter implements MessageBodyWriter { WebApplicationException { httpHeaders.putSingle(HttpHeaders.CONTENT_TYPE, mediaType.toString() + ";charset=UTF-8"); + IOUtils.write(getGson().toJson(t), entityStream, "UTF-8"); + } + + @Override + public Object readFrom(Class type, Type genericType, + Annotation[] annotations, MediaType mediaType, + MultivaluedMap httpHeaders, InputStream entityStream) + throws IOException, WebApplicationException { + String json = IOUtils.toString(entityStream, "UTF-8"); + return getGson().fromJson(json, type); + } + + private Gson getGson() { Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new DateSerializer()).create(); - IOUtils.write(gson.toJson(t), entityStream, "UTF-8"); - + return gson; } private static class DateSerializer implements JsonSerializer { diff --git a/src/main/java/com/commafeed/frontend/rest/RESTApplication.java b/src/main/java/com/commafeed/frontend/rest/RESTApplication.java index 35332c76..72bfafc9 100644 --- a/src/main/java/com/commafeed/frontend/rest/RESTApplication.java +++ b/src/main/java/com/commafeed/frontend/rest/RESTApplication.java @@ -16,7 +16,7 @@ public class RESTApplication extends Application { @Override public Set> getClasses() { Set> set = Sets.newHashSet(); - set.add(JSONMessageBodyWriter.class); + set.add(JSONMessageBodyReaderWriter.class); set.add(SubscriptionsREST.class); set.add(EntriesREST.class); diff --git a/src/main/java/com/commafeed/frontend/rest/resources/AbstractREST.java b/src/main/java/com/commafeed/frontend/rest/resources/AbstractREST.java index 1b20e184..f14f92fd 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/AbstractREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/AbstractREST.java @@ -4,6 +4,7 @@ import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.Consumes; import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Context; @@ -27,6 +28,7 @@ import com.commafeed.frontend.CommaFeedApplication; import com.commafeed.frontend.CommaFeedSession; @Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) public abstract class AbstractREST { @Context diff --git a/src/main/java/com/commafeed/frontend/rest/resources/SettingsREST.java b/src/main/java/com/commafeed/frontend/rest/resources/SettingsREST.java index 118ca1fc..206718d8 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/SettingsREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/SettingsREST.java @@ -3,6 +3,8 @@ package com.commafeed.frontend.rest.resources; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; import com.commafeed.backend.model.UserSettings; import com.commafeed.backend.model.UserSettings.ReadingMode; @@ -14,15 +16,19 @@ public class SettingsREST extends AbstractREST { @Path("get") @GET public Settings get() { - UserSettings settings = userSettingsService.findByUser(getUser()); Settings s = new Settings(); - s.setReadingMode(settings.getReadingMode().name().toLowerCase()); + UserSettings settings = userSettingsService.findByUser(getUser()); + if (settings != null) { + s.setReadingMode(settings.getReadingMode().name()); + } else { + s.setReadingMode(ReadingMode.unread.name()); + } return s; } @Path("save") @POST - public void save(Settings settings) { + public Response save(Settings settings) { UserSettings s = userSettingsService.findByUser(getUser()); if (s == null) { s = new UserSettings(); @@ -30,6 +36,7 @@ public class SettingsREST extends AbstractREST { } s.setReadingMode(ReadingMode.valueOf(settings.getReadingMode())); userSettingsService.saveOrUpdate(s); + return Response.ok(Status.OK).build(); } } diff --git a/src/main/webapp/directives/toolbar.html b/src/main/webapp/directives/toolbar.html new file mode 100644 index 00000000..37df243d --- /dev/null +++ b/src/main/webapp/directives/toolbar.html @@ -0,0 +1,6 @@ +
+
+ + +
+
\ No newline at end of file diff --git a/src/main/webapp/js/controllers.js b/src/main/webapp/js/controllers.js index c1bf9454..4b9efba7 100644 --- a/src/main/webapp/js/controllers.js +++ b/src/main/webapp/js/controllers.js @@ -81,23 +81,26 @@ module.controller('CategoryTreeCtrl', function($scope, $routeParams, $location, }); module.controller('FeedListCtrl', function($scope, $routeParams, $http, - EntryService) { + EntryService, SettingsService) { $scope.selectedType = $routeParams._type; $scope.selectedId = $routeParams._id; - $scope.readType = 'all'; + $scope.settings = SettingsService.settings; + $scope.$watch('settings.readingMode', function() { + $scope.refreshList(); + }); $scope.refreshList = function() { - $scope.entryList = EntryService.get({ - _type : $scope.selectedType, - _id : $scope.selectedId, - _readtype : $scope.readType - }); + if ($scope.settings.readingMode) { + $scope.entryList = EntryService.get({ + _type : $scope.selectedType, + _id : $scope.selectedId, + _readtype : $scope.settings.readingMode + }); + } }; - $scope.refreshList(); - $scope.mark = function(entry, read) { if (entry.read != read) { entry.read = read; diff --git a/src/main/webapp/js/directives.js b/src/main/webapp/js/directives.js index ae624e35..b92a426f 100644 --- a/src/main/webapp/js/directives.js +++ b/src/main/webapp/js/directives.js @@ -23,4 +23,21 @@ module.directive('category', function($compile) { $compile(ul.contents())(scope); } }; +}); + +module.directive('toolbar', function(SettingsService) { + return { + scope : {}, + restrict : 'E', + replace : true, + templateUrl : 'directives/toolbar.html', + controller : function($scope, SettingsService) { + $scope.settings = SettingsService.settings; + }, + link : function($scope, element) { + element.find('button').bind('click', function() { + SettingsService.save(); + }); + } + }; }); \ No newline at end of file diff --git a/src/main/webapp/js/services.js b/src/main/webapp/js/services.js index 56fdda51..46a11196 100644 --- a/src/main/webapp/js/services.js +++ b/src/main/webapp/js/services.js @@ -2,13 +2,7 @@ var module = angular.module('commafeed.services', [ 'ngResource' ]); module.factory('CategoryService', [ '$resource', '$http', function($resource, $http) { - var actions = { - 'get' : { - method : 'GET' - } - }; - res = $resource('rest/subscriptions', {}, actions); - return res; + return $resource('rest/subscriptions'); } ]); module.factory('EntryService', [ @@ -16,7 +10,7 @@ module.factory('EntryService', [ '$http', function($resource, $http) { var actions = { - 'get' : { + get : { method : 'GET', params : { _method : 'get' @@ -32,4 +26,13 @@ module.factory('EntryService', [ res = $resource('rest/entries/:_method/:_type/:_id/:_readtype', {}, actions); return res; - } ]); \ No newline at end of file + } ]); + +module.service('SettingsService', function($resource) { + var s = {} + s.settings = $resource('rest/settings/get').get(); + s.save = function() { + $resource('rest/settings/save').save(s.settings); + }; + return s; +}); \ No newline at end of file diff --git a/src/main/webapp/templates/feeds.html b/src/main/webapp/templates/feeds.html index a3291e15..cc80d1fb 100644 --- a/src/main/webapp/templates/feeds.html +++ b/src/main/webapp/templates/feeds.html @@ -1,14 +1,5 @@
- - -
-
- - -
-
- - +{{readType}} {{entryList.name}} »