package com.vaguehope.onosendai.provider.hosaka;
import java.util.Arrays;
import java.util.Iterator;
import org.json.JSONException;
import org.json.JSONObject;
import com.vaguehope.onosendai.config.Account;
import com.vaguehope.onosendai.config.Column;
import com.vaguehope.onosendai.config.ColumnFeed;
import com.vaguehope.onosendai.config.Config;
import com.vaguehope.onosendai.model.ScrollState;
import com.vaguehope.onosendai.model.ScrollState.ScrollDirection;
import com.vaguehope.onosendai.util.ArrayHelper;
import com.vaguehope.onosendai.util.HashHelper;
public class HosakaColumn {
private final String itemId;
private final long itemTime;
private final long unreadTime;
private final ScrollDirection scrollDirection;
public HosakaColumn (final String itemId, final long itemTime, final long unreadTime, final ScrollDirection scrollDirection) {
this.itemId = itemId;
this.itemTime = itemTime;
this.unreadTime = unreadTime;
this.scrollDirection = scrollDirection;
}
public String getItemId () {
return this.itemId;
}
public long getItemTime () {
return this.itemTime;
}
public long getUnreadTime () {
return this.unreadTime;
}
public ScrollDirection getScrollDirection () {
return this.scrollDirection;
}
@Override
public String toString () {
return new StringBuilder()
.append("HosakaColumn{").append(this.itemId)
.append(',').append(this.itemTime)
.append(',').append(this.unreadTime)
.append(',').append(this.scrollDirection)
.append('}')
.toString();
}
public JSONObject toJson () throws JSONException {
final JSONObject json = new JSONObject();
if (this.itemId != null) json.put("item_id", this.itemId);
if (this.itemTime > 0L) json.put("item_time", this.itemTime);
if (this.unreadTime > 0L) json.put("unread_time", this.unreadTime);
return json;
}
public static HosakaColumn parseJson (final JSONObject json) throws JSONException {
// TODO validation?
final String itemId = json.getString("item_id");
final long itemTime = json.getLong("item_time");
final long unreadTime = json.getLong("unread_time");
return new HosakaColumn(itemId, itemTime, unreadTime, null);
}
public static String columnHash (final Column col, final Config conf) {
final String[] arr = new String[col.getFeeds().size()];
final Iterator<ColumnFeed> feedsItr = col.getFeeds().iterator();
for (int i = 0; feedsItr.hasNext(); i++) {
final ColumnFeed cf = feedsItr.next();
final Account act = conf.getAccount(cf.getAccountId());
arr[i] = String.format("%s:%s", act != null ? act.getTitle() : null, cf.getResource());
}
Arrays.sort(arr);
return HashHelper.sha1String(ArrayHelper.join(arr, ":")).toString(16);
}
public ScrollState toScrollState () {
// FIXME the itemId in SS in _rowid, not sid.
// Be setting it to -1, should only match on itemTime.
return new ScrollState(-1, 0, this.itemTime, this.unreadTime, this.scrollDirection);
}
}