/*
* Copyright (c) 2015, Nils Braden
*
* This file is part of ttrss-reader-fork. This program is free software; you
* can redistribute it and/or modify it under the terms of the GNU
* General Public License as published by the Free Software Foundation;
* either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details. You should have received a
* copy of the GNU General Public License along with this program; If
* not, see http://www.gnu.org/licenses/.
*/
package org.ttrssreader.model.updaters;
import org.ttrssreader.controllers.DBHelper;
import org.ttrssreader.controllers.Data;
import org.ttrssreader.model.pojos.Category;
import org.ttrssreader.model.pojos.Feed;
import java.util.Collection;
import java.util.HashSet;
public class ReadStateUpdater implements IUpdatable {
@SuppressWarnings("unused")
private static final String TAG = ReadStateUpdater.class.getSimpleName();
public enum TYPE {
ALL_CATEGORIES, ALL_FEEDS, CATEGORY, FEED, ARTICLE
}
private TYPE type = TYPE.ARTICLE;
private int id;
private Collection<Category> categories = null;
private Collection<Feed> feeds = null;
public ReadStateUpdater(TYPE type) {
this(type, -1);
}
private ReadStateUpdater(TYPE type, int id) {
this.type = type;
this.id = id;
}
public ReadStateUpdater(int categoryId) {
type = TYPE.CATEGORY;
id = categoryId;
}
@SuppressWarnings("unused")
public ReadStateUpdater(int feedId, int dummy) {
if (feedId <= 0 && feedId >= -4) { // Virtual Category
type = TYPE.CATEGORY;
id = feedId;
} else {
type = TYPE.FEED;
id = feedId;
}
}
@Override
public void update() {
// Read appropriate data from the DB
switch (type) {
case ALL_CATEGORIES:
categories = DBHelper.getInstance().getAllCategories();
break;
case CATEGORY:
categories = new HashSet<>();
Category c = DBHelper.getInstance().getCategory(id);
if (c != null) categories.add(c);
break;
case ALL_FEEDS:
feeds = DBHelper.getInstance().getFeeds(id);
break;
case FEED:
feeds = new HashSet<>();
Feed f = DBHelper.getInstance().getFeed(id);
if (f != null) feeds.add(f);
break;
default:
break;
}
if (categories != null) {
for (Category ci : categories) {
// VirtualCats are actually Feeds (the server handles them as such) so we have to set isCat to false
if (ci.id >= 0) {
Data.getInstance().setRead(ci.id, true);
} else {
Data.getInstance().setRead(ci.id, false);
}
}
} else if (feeds != null) {
for (Feed fi : feeds) {
Data.getInstance().setRead(fi.id, false);
}
}
Data.getInstance().calculateCounters();
Data.getInstance().notifyListeners();
}
}