/*******************************************************************************
* This file is part of RedReader.
*
* RedReader 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.
*
* RedReader 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 RedReader. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package org.quantumbadger.redreader.common;
import android.content.Context;
import android.content.pm.PackageManager;
import org.quantumbadger.redreader.RedReader;
import java.net.URI;
public final class Constants {
public static String version(Context context) {
try {
return context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
} catch(PackageManager.NameNotFoundException e) {
throw new RuntimeException(e); // Internal error
}
}
public static final class Mime {
public static boolean isImage(String mimetype) {
return General.asciiLowercase(mimetype).startsWith("image/");
}
public static boolean isImageGif(String mimetype) {
return mimetype.equalsIgnoreCase("image/gif");
}
public static boolean isVideo(String mimetype) {
return mimetype.startsWith("video/");
}
}
public static final class Reddit {
public static final String[] DEFAULT_SUBREDDITS = {
"/r/announcements",
"/r/Art",
"/r/AskReddit",
"/r/askscience",
"/r/aww",
"/r/blog",
"/r/books",
"/r/creepy",
"/r/dataisbeautiful",
"/r/DIY",
"/r/Documentaries",
"/r/EarthPorn",
"/r/explainlikeimfive",
"/r/Fitness",
"/r/food",
"/r/funny",
"/r/Futurology",
"/r/gadgets",
"/r/gaming",
"/r/GetMotivated",
"/r/gifs",
"/r/history",
"/r/IAmA",
"/r/InternetIsBeautiful",
"/r/Jokes",
"/r/LifeProTips",
"/r/listentothis",
"/r/mildlyinteresting",
"/r/movies",
"/r/Music",
"/r/news",
"/r/nosleep",
"/r/nottheonion",
"/r/oldschoolcool",
"/r/personalfinance",
"/r/philosophy",
"/r/photoshopbattles",
"/r/pics",
"/r/science",
"/r/Showerthoughts",
"/r/space",
"/r/sports",
"/r/television",
"/r/tifu",
"/r/todayilearned",
"/r/TwoXChromosomes",
"/r/UpliftingNews",
"/r/videos",
"/r/worldnews",
"/r/writingprompts"
};
public static final String
SCHEME_HTTPS = "https",
DOMAIN_HTTPS = "oauth.reddit.com",
DOMAIN_HTTPS_HUMAN = "reddit.com",
PATH_VOTE = "/api/vote",
PATH_SAVE = "/api/save",
PATH_HIDE = "/api/hide",
PATH_UNSAVE = "/api/unsave",
PATH_UNHIDE = "/api/unhide",
PATH_REPORT = "/api/report",
PATH_DELETE = "/api/del",
PATH_SUBSCRIBE = "/api/subscribe",
PATH_SUBREDDITS_MINE_SUBSCRIBER = "/subreddits/mine/subscriber.json?limit=100",
PATH_SUBREDDITS_MINE_MODERATOR = "/subreddits/mine/moderator.json?limit=100",
PATH_SUBREDDITS_POPULAR = "/subreddits/popular.json",
PATH_MULTIREDDITS_MINE = "/api/multi/mine.json",
PATH_COMMENTS = "/comments/",
PATH_ME = "/api/v1/me";
public static String getScheme() {
return SCHEME_HTTPS;
}
public static String getDomain() {
return DOMAIN_HTTPS;
}
public static String getHumanReadableDomain() {
return DOMAIN_HTTPS_HUMAN;
}
public static URI getUri(final String path) {
return General.uriFromString(getScheme() + "://" + getDomain() + path);
}
public static URI getNonAPIUri(final String path) {
return General.uriFromString(getScheme() + "://reddit.com" + path);
}
public static boolean isApiErrorUser(final String str) {
return ".error.USER_REQUIRED".equals(str) || "please login to do that".equals(str);
}
public static boolean isApiErrorCaptcha(final String str) {
return ".error.BAD_CAPTCHA.field-captcha".equals(str) || "care to try these again?".equals(str);
}
public static boolean isApiErrorNotAllowed(final String str) {
return ".error.SUBREDDIT_NOTALLOWED.field-sr".equals(str) || "you aren't allowed to post there.".equals(str);
}
public static boolean isApiErrorSubredditRequired(final String str) {
return ".error.SUBREDDIT_REQUIRED.field-sr".equals(str) || "you must specify a subreddit".equals(str);
}
public static boolean isApiErrorURLRequired(final String str) {
return ".error.NO_URL.field-url".equals(str) || "a url is required".equals(str);
}
public static boolean isApiTooFast(final String str) {
return ".error.RATELIMIT.field-ratelimit".equals(str)
|| (str != null && str.contains("you are doing that too much"));
}
public static boolean isApiTooLong(final String str) {
return "TOO_LONG".equals(str)
|| (str != null && str.contains("this is too long"));
}
}
public static String ua(final Context context) {
final String canonicalName = RedReader.class.getCanonicalName();
return canonicalName.substring(0, canonicalName.lastIndexOf('.')) + "/" + version(context);
}
public static final class Priority {
public static final int
CAPTCHA = -600,
API_ACTION = -500,
API_MULTIREDDIT_LIST = -200,
API_SUBREDDIT_LIST = -100,
API_SUBREDDIT_INVIDIVUAL = -250,
API_POST_LIST = -200,
API_COMMENT_LIST = -300,
THUMBNAIL = 100,
IMAGE_PRECACHE = 500,
COMMENT_PRECACHE = 500,
IMAGE_VIEW = -400,
API_USER_ABOUT = -500,
API_INBOX_LIST = -500;
}
public static final class FileType {
public static final int NOCACHE = -1,
SUBREDDIT_LIST = 100,
SUBREDDIT_ABOUT = 101,
MULTIREDDIT_LIST = 102,
POST_LIST = 110,
COMMENT_LIST = 120,
USER_ABOUT = 130,
INBOX_LIST = 140,
THUMBNAIL = 200,
IMAGE = 201,
CAPTCHA = 202,
IMAGE_INFO = 300;
}
}