package com.newsrob;
import java.io.File;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.newsrob.threetosix.R;
import com.newsrob.util.U;
public class Entry {
private String alternateHRef;
private String content;
private String contentType;
private String contentURL;
private String error;
private String atomId;
private long id = -1;
private String title;
private String feedTitle;
private long feedId;
private String feedAtomId;
private boolean isStarred = false;
private boolean isStarredStatePending = false;
private boolean isReadStatePending = false;
private boolean isShared = false;
private boolean isSharedStatePending = false;
private boolean isLiked = false;
private boolean isLikedStatePending = false;
private boolean isFriendsShared = false;
private String sharedByFriend;
private boolean isNote;
private String note;
private boolean isNoteSubmitted;
private boolean shouldNoteBeShared;
private String feedAlternateUrl;
private String snippet;
private int downloaded = STATE_NOT_DOWNLOADED;
public static final int STATE_NOT_DOWNLOADED = 0;
public static final int STATE_DOWNLOADED_FEED_CONTENT = 1;
public static final int STATE_DOWNLOADED_FULL_PAGE = 2;
public static final int STATE_DOWNLOAD_ERROR = 3;
private List<Label> labels = new ArrayList<Label>();
private long updated;
private String author;
private int downloadPref;
private int displayPref;
private boolean javaScriptEnabled;
private boolean fitToWidthEnabled = true;
private ReadState readState = ReadState.UNREAD;
public Entry(long id) {
this.id = id;
}
public Entry() {
this(-1l);
}
List<Label> getLabels() {
return labels;
}
public void addLabel(Label label) {
labels.add(label);
}
void setFeedId(long feedId) {
this.feedId = feedId;
}
public long getFeedId() {
return feedId;
}
public void setFeedAtomId(String feedAtomId) {
this.feedAtomId = feedAtomId;
}
String getFeedAtomId() {
return feedAtomId;
}
public boolean isStarred() {
return isStarred;
}
public boolean isStarredStatePending() {
return isStarredStatePending;
}
void setStarred(boolean newValue) {
isStarred = newValue;
}
void setStarredStatePending(boolean newValue) {
isStarredStatePending = newValue;
}
public boolean isShared() {
return isShared;
}
public boolean isSharedStatePending() {
return isSharedStatePending;
}
void setShared(boolean newValue) {
isShared = newValue;
}
void setSharedStatePending(boolean newValue) {
isSharedStatePending = newValue;
}
public boolean isReadStatePending() {
return isReadStatePending;
}
void setReadStatePending(boolean newValue) {
isReadStatePending = newValue;
}
void setError(String error) {
this.error = error;
}
public String getError() {
return error;
}
public String getFeedTitle() {
return feedTitle;
}
public void setFeedTitle(String feedTitle) {
this.feedTitle = feedTitle;
}
public long getId() {
return id;
}
public String getAlternateHRef() {
return alternateHRef;
}
public String getContentURL() {
return contentURL;
}
void setContentURL(String contentURL) {
this.contentURL = contentURL;
}
public String getContent() {
return content;
}
long getContentSize() {
long contentSize = 0;
if (content != null)
contentSize = content.length();
return contentSize;
}
public String getContentType() {
if (contentType == null)
return "html";
return contentType;
}
public String getAtomId() {
return this.atomId;
}
public void setAtomId(String atomId) {
this.atomId = atomId;
}
public String getAuthor() {
return author;
}
void setAuthor(String author) {
this.author = author;
}
public String getTitle() {
return title != null ? title : "";
}
void setAlternateHRef(String alternateHRef) {
this.alternateHRef = alternateHRef;
}
void setContent(String content) {
this.content = content;
setSnippet(null);
}
void setSnippet(String snippet) {
this.snippet = snippet;
}
public String getSnippet() {
if (snippet == null) {
String s = null;
if (content != null) {
s = content;
s = U.htmlToText(s);
if (s.length() > 700)
s = s.substring(0, 700);
int idx = s.indexOf(getTitle());
if (idx > -1 && idx < (70 + getTitle().length()))
// eliminate content that is only the
// repeated title,
// but keep the content if the title is repeated
// later on in the body
s = null;
}
snippet = s;
}
return snippet;
}
void setContentType(String contentType) {
this.contentType = contentType;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
StringBuilder labelsRepresentation = new StringBuilder();
for (Label label : labels) {
labelsRepresentation.append(label.getName() + ", ");
}
String labelsString;
if (labelsRepresentation.length() > 0)
labelsString = labelsRepresentation.substring(0, labelsRepresentation.length() - 2);
else
labelsString = labelsRepresentation.toString();
return String
.format(
"Entry title: %s, row-id: %s, atom-id: %s labels: %s, alternate: %s, content-size: %10d, content-type: %s content:\n%s",
title, id, atomId, labelsString, alternateHRef, getContentSize(), contentType, content);
}
public void setUpdated(long entryUpdated) {
this.updated = entryUpdated;
}
public Date getUpdated() {
return new Date(updated);
}
public long getUpdatedInHighResolution() {
return updated;
}
void setDownloaded(int downloaded) {
this.downloaded = downloaded;
}
public int getDownloaded() {
return downloaded;
}
public String getShortAtomId() {
return getShortAtomId(atomId);
}
public static String getShortAtomId(String fullAtomId) {
int idx = fullAtomId.lastIndexOf('/');
return fullAtomId.substring(idx + 1);
}
public void setDownloadPref(int downloadPref) {
this.downloadPref = downloadPref;
}
public void setDisplayPref(int displayPref) {
this.displayPref = displayPref;
}
public int getDisplayPref() {
return displayPref;
}
public int getDownloadPref() {
return downloadPref;
}
public boolean isNote() {
return isNote;
}
void setNote(boolean isNote) {
this.isNote = isNote;
}
public int getResolvedDownloadPref(EntryManager entryManager) {
return (getDownloadPref() == Feed.DOWNLOAD_PREF_DEFAULT ? entryManager.getDefaultDownloadPref()
: getDownloadPref());
}
public int getResolvedDisplayPref(EntryManager entryManager) {
if (getDisplayPref() == Feed.DISPLAY_PREF_DEFAULT) {
int resolvedDownloadPref = getResolvedDownloadPref(entryManager);
if (resolvedDownloadPref == Feed.DOWNLOAD_HEADERS_ONLY
|| resolvedDownloadPref == Feed.DOWNLOAD_PREF_FEED_ONLY)
return Feed.DISPLAY_PREF_FEED;
return Feed.DISPLAY_PREF_WEBPAGE;
}
return getDisplayPref();
}
public String getBaseUrl(EntryManager entryManager) {
if (getAlternateHRef() == null)
return "";
String instapaperUrl = "http://www.instapaper.com/m?u=";
String gwtUrl = "http://www.google.com/gwt/n?u=";
if (getResolvedDownloadPref(entryManager) == Feed.DOWNLOAD_PREF_FEED_AND_MOBILE_WEBPAGE)
return ("gwt".equals(entryManager.getMobilizer()) ? gwtUrl : instapaperUrl)
+ URLEncoder.encode(getAlternateHRef());
// return "http://www.google.com/gwt/n?u=" + getAlternateHRef();
return getAlternateHRef(); // http://www.google.com/gwt/n?u=
}
public void setFriendsShared(boolean isFriendsShared) {
this.isFriendsShared = isFriendsShared;
}
public boolean isFriendsShared() {
return isFriendsShared;
}
public void setId(long id) {
this.id = id;
}
public boolean isJavaScriptEnabled() {
return javaScriptEnabled;
}
public void setJavaScriptEnabled(boolean enabled) {
this.javaScriptEnabled = enabled;
}
public boolean isFitToWidthEnabled() {
return fitToWidthEnabled;
}
public void setFitToWidthEnabled(boolean enabled) {
this.fitToWidthEnabled = enabled;
}
public void setSharedByFriend(String sharedByFriend) {
this.sharedByFriend = sharedByFriend;
}
public String getSharedByFriend() {
return sharedByFriend;
}
public void setNote(String note) {
this.note = note;
}
public String getNote() {
return note;
}
public boolean isNoteSubmitted() {
return isNoteSubmitted;
}
public void setNoteSubmitted(boolean isNoteSubmitted) {
this.isNoteSubmitted = isNoteSubmitted;
}
public void setShouldNoteBeShared(boolean shouldNoteBeShared) {
this.shouldNoteBeShared = shouldNoteBeShared;
}
public boolean shouldNoteBeShared() {
return shouldNoteBeShared;
}
public void setFeedAlternateUrl(String feedAlternateUrl) {
this.feedAlternateUrl = feedAlternateUrl;
}
public String getFeedAlternateUrl() {
return feedAlternateUrl;
}
public boolean isLiked() {
return isLiked;
}
public boolean isLikedStatePending() {
return isLikedStatePending;
}
public void setLiked(boolean newValue) {
isLiked = newValue;
}
public void setLikedStatePending(boolean newValue) {
isLikedStatePending = newValue;
}
public void setReadState(ReadState readState) {
this.readState = readState;
}
public ReadState getReadState() {
return readState;
}
public final boolean isRead() {
return readState == ReadState.READ;
}
public final File getAssetsDir(EntryManager em) {
return new File(em.getStorageAdapter().getAbsolutePathForAsset("a" + this.getShortAtomId()));
}
public static final File getAssetsDir(EntryManager em, String shortAtomId) {
return new File(em.getStorageAdapter().getAbsolutePathForAsset("a" + shortAtomId));
}
public static final File getThumbnailFile(EntryManager em, String shortAtomId) {
File f = new File(Entry.getAssetsDir(em, shortAtomId), "preview.pngnr");
if (f.exists())
return f;
else
return null;
}
}