package org.sugr.gearshift.core;
import android.database.Cursor;
import org.sugr.gearshift.datasource.Constants;
public class Torrent {
private Torrent() {}
public static final class SetterFields {
public static final String DOWNLOAD_LIMIT = "downloadLimit";
public static final String DOWNLOAD_LIMITED = "downloadLimited";
public static final String PEER_LIMIT = "peer-limit";
public static final String QUEUE_POSITION = "queuePosition";
public static final String SEED_RATIO_LIMIT = "seedRatioLimit";
public static final String SEED_RATIO_MODE = "seedRatioMode";
public static final String SESSION_LIMITS = "honorsSessionLimits";
public static final String TORRENT_PRIORITY = "bandwidthPriority";
public static final String UPLOAD_LIMIT = "uploadLimit";
public static final String UPLOAD_LIMITED = "uploadLimited";
public static final String FILES_WANTED = "files-wanted";
public static final String FILES_UNWANTED = "files-unwanted";
public static final String FILES_HIGH = "priority-high";
public static final String FILES_NORMAL = "priority-normal";
public static final String FILES_LOW = "priority-low";
public static final String TRACKER_ADD = "trackerAdd";
public static final String TRACKER_REMOVE = "trackerRemove";
public static final String TRACKER_REPLACE = "trackerReplace";
}
public static final class AddFields {
public static final String URI = "filename";
public static final String META = "metainfo";
public static final String LOCATION = "download-dir";
public static final String PAUSED = "paused";
}
// https://github.com/killemov/Shift/blob/master/shift.js#L864
public static class Status {
public final static int ALL = -1;
public final static int STOPPED = 0;
public final static int CHECK_WAITING = 1;
public final static int CHECKING = 2;
public final static int DOWNLOAD_WAITING = 3;
public final static int DOWNLOADING = 4;
public final static int SEED_WAITING = 5;
public final static int SEEDING = 6;
}
public static class OldStatus {
public final static int CHECK_WAITING = 1;
public final static int CHECKING = 2;
public final static int DOWNLOADING = 4;
public final static int SEEDING = 8;
public final static int STOPPED = 16;
}
// http://packages.python.org/transmissionrpc/reference/transmissionrpc.html
public static class SeedRatioMode {
public final static int GLOBAL_LIMIT = 0;
public final static int TORRENT_LIMIT = 1;
public final static int NO_LIMIT = 2;
}
public static class Error {
public static final int OK = 0;
public static final int TRACKER_WARNING = 1;
public static final int TRACKER_ERROR = 2;
public static final int LOCAL_ERROR = 3;
}
public static class Priority {
public static final int LOW = -1;
public static final int NORMAL = 0;
public static final int HIGH = 1;
}
public static class Fields {
public static final String hashString = "hashString";
/*
* commonly used fields which only need to be loaded once, either on
* startup or when a magnet finishes downloading its metadata
* */
public static final String[] METADATA = { "addedDate", "name", "totalSize", };
// commonly used fields which need to be periodically refreshed
public static final String[] STATS = {
hashString, "id", "error", "errorString", "eta", "isFinished", "isStalled",
"leftUntilDone", "metadataPercentComplete", "peersConnected",
"peersGettingFromUs", "peersSendingToUs", "percentDone",
SetterFields.QUEUE_POSITION, "rateDownload", "rateUpload",
"recheckProgress", SetterFields.SEED_RATIO_MODE, SetterFields.SEED_RATIO_LIMIT,
"sizeWhenDone", "status", "trackers", "uploadedEver",
"uploadRatio", "downloadDir"
};
// fields used by the inspector which only need to be loaded once
public static final String[] INFO_EXTRA = {
"comment", "creator", "dateCreated", "files",
"isPrivate", "pieceCount", "pieceSize"
};
// fields used in the inspector which need to be periodically refreshed
public static final String[] STATS_EXTRA = {
"activityDate", SetterFields.TORRENT_PRIORITY, "corruptEver",
"desiredAvailable", "downloadedEver", SetterFields.DOWNLOAD_LIMIT,
SetterFields.DOWNLOAD_LIMITED, "fileStats", "haveUnchecked",
"haveValid", SetterFields.SESSION_LIMITS, SetterFields.PEER_LIMIT, "peers",
"startDate", "trackerStats", SetterFields.UPLOAD_LIMIT,
SetterFields.UPLOAD_LIMITED, "webseedsSendingToUs"
};
}
public static class Tracker {
public static int getId(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_TRACKER_ID));
}
public static String getAnnounce(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Constants.C_ANNOUNCE));
}
public static String getScrape(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Constants.C_SCRAPE));
}
public static int getTier(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_TIER));
}
public static boolean hasAnnounced(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_HAS_ANNOUNCED)) > 0;
}
public static long getLastAnnounceTime(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_LAST_ANNOUNCE_TIME));
}
public static boolean hasLastAnnounceSucceeded(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_LAST_ANNOUNCE_SUCCEEDED)) > 0;
}
public static int getLastAnnouncePeerCount(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_LAST_ANNOUNCE_PEER_COUNT));
}
public static String getLastAnnounceResult(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Constants.C_LAST_ANNOUNCE_RESULT));
}
public static boolean hasScraped(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_HAS_SCRAPED)) > 0;
}
public static long getLastScrapeTime(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_LAST_SCRAPE_TIME));
}
public static boolean hasLastScrapeSucceeded(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_LAST_SCRAPE_SUCCEEDED)) > 0;
}
public static String getLastScrapeResult(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Constants.C_LAST_SCRAPE_RESULT));
}
public static int getSeederCount(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_SEEDER_COUNT));
}
public static int getLeecherCount(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_LEECHER_COUNT));
}
}
public static class File {
public static long getBytesCompleted(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_BYTES_COMPLETED));
}
public static long getLength(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_LENGTH));
}
public static String getName(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Constants.C_NAME));
}
public static int getPriority(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_PRIORITY));
}
public static boolean isWanted(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_WANTED)) > 0;
}
public static int getIndex(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_FILE_INDEX));
}
}
/* CURRENTLY UNUSED
public static class Peer {
public static String getAddress(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Constants.C_ADDRESS));
}
public static String getClientName(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Constants.C_CLIENT_NAME));
}
public static boolean isClientChoked(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_CLIENT_IS_CHOKED)) > 0;
}
public static boolean isClientInterested(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_CLIENT_IS_INTERESTED)) > 0;
}
public static boolean isDownloadingFrom(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_IS_DOWNLOADING_FROM)) > 0;
}
public static boolean isEncrypted(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_IS_ENCRYPTED)) > 0;
}
public static boolean isIncoming(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_IS_INCOMING)) > 0;
}
public static boolean isUploadingTo(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_IS_UPLOADING_TO)) > 0;
}
public static boolean isPeerChoked(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_PEER_IS_CHOKED)) > 0;
}
public static boolean isPeerInterested(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_PEER_IS_INTERESTED)) > 0;
}
public static int getPort(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_PORT));
}
public static float getProgress(Cursor cursor) {
return cursor.getFloat(cursor.getColumnIndex(Constants.C_PROGRESS));
}
public static long getRateToClient(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_RATE_TO_CLIENT));
}
public static long getRateToPeer(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_RATE_TO_PEER));
}
}
*/
/* This is the rowid in the database */
public static int getId(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_ID));
}
public static String getHashString(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Constants.C_HASH_STRING));
}
public static String getName(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Constants.C_NAME));
}
public static int getError(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_ERROR));
}
public static String getErrorString(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Constants.C_ERROR_STRING));
}
public static int getStatus(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_STATUS));
}
public static float getMetadataPercentDone(Cursor cursor) {
return cursor.getFloat(cursor.getColumnIndex(Constants.C_METADATA_PERCENT_COMPLETE));
}
public static float getPercentDone(Cursor cursor) {
return cursor.getFloat(cursor.getColumnIndex(Constants.C_PERCENT_DONE));
}
public static float getSeedRatioLimit(Cursor cursor) {
return cursor.getFloat(cursor.getColumnIndex(Constants.C_SEED_RATIO_LIMIT));
}
public static float getUploadRatio(Cursor cursor) {
return cursor.getFloat(cursor.getColumnIndex(Constants.C_UPLOAD_RATIO));
}
public static String getMimeType(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Constants.C_MIME_TYPE));
}
public static String getTrafficText(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Constants.C_TRAFFIC_TEXT));
}
public static String getStatusText(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Constants.C_STATUS_TEXT));
}
public static long getHaveValid(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_HAVE_VALID));
}
public static long getSizeWhenDone(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_SIZE_WHEN_DONE));
}
public static long getLeftUntilDone(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_LEFT_UNTIL_DONE));
}
public static long getDownloadedEver(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_DOWNLOADED_EVER));
}
public static long getUploadedEver(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_UPLOADED_EVER));
}
public static long getStartDate(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_START_DATE));
}
public static long getActivityDate(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_ACTIVITY_DATE));
}
public static long getAddedDate(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_ADDED_DATE));
}
public static long getEta(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_ETA));
}
public static long getTotalSize(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_TOTAL_SIZE));
}
public static long getPieceSize(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_PIECE_SIZE));
}
public static int getPieceCount(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_PIECE_COUNT));
}
public static boolean isPrivate(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_IS_PRIVATE)) > 0;
}
public static long getDateCreated(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_DATE_CREATED));
}
public static String getCreator(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Constants.C_CREATOR));
}
public static String getComment(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Constants.C_COMMENT));
}
public static int getQueuePosition(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_QUEUE_POSITION));
}
public static String getDownloadDir(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Constants.C_DOWNLOAD_DIR));
}
public static boolean areSessionLimitsHonored(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_HONORS_SESSION_LIMITS)) > 0;
}
public static int getTorrentPriority(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_TORRENT_PRIORITY));
}
public static boolean isDownloadLimited(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_DOWNLOAD_LIMITED)) > 0;
}
public static boolean isUploadLimited(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_UPLOAD_LIMITED)) > 0;
}
public static long getDownloadLimit(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_DOWNLOAD_LIMIT));
}
public static long getUploadLimit(Cursor cursor) {
return cursor.getLong(cursor.getColumnIndex(Constants.C_UPLOAD_LIMIT));
}
public static int getSeedRatioMode(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_SEED_RATIO_MODE));
}
public static int getPeerLimit(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Constants.C_PEER_LIMIT));
}
public static boolean isActive(int status) {
switch(status) {
case Status.CHECKING:
case Status.DOWNLOADING:
case Status.SEEDING:
return true;
default:
return false;
}
}
}