package com.steamcommunity.siplus.steamscreenshots;
import java.io.File;
import java.util.Calendar;
import android.content.Context;
import android.os.Environment;
import android.provider.MediaStore;
public final class ScreenshotName {
static final int DAY_MASK = 31;
static final int DAY_SHIFT = 17;
static final int[] DAYS_IN_MONTH = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
static final int MONTH_MASK = 15;
static final int MONTH_SHIFT = 22;
static final int NUMBER_MASK = 131071;
static final String THUMB_SUFFIX = ".thumb";
static final int YEAR_SHIFT = 26;
static long creationTime(int name, long steamID, String packageName) {
Calendar calendar = Calendar.getInstance();
File file = new File(folderPath(steamID, packageName), nameToString(name));
if (file.isFile()) {
calendar.setTimeInMillis(file.lastModified());
}
if (isValid(name)) {
calendar.set(Calendar.YEAR, (name >> YEAR_SHIFT) + 2006);
calendar.set(Calendar.MONTH, ((name >> MONTH_SHIFT) & MONTH_MASK) - 1);
calendar.set(Calendar.DAY_OF_MONTH, (name >> DAY_SHIFT) & DAY_MASK);
}
return calendar.getTimeInMillis();
}
static void deleteScreenshot(Context context, int name, long steamID, String packageName) {
String path = folderPath(steamID, packageName);
String nameString = nameToString(name);
(new File(path, nameString)).delete();
(new File(path, nameString + THUMB_SUFFIX)).delete();
context.getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
MediaStore.Images.ImageColumns.DATA + "=?", new String[] {path + nameString});
File folder = new File(path);
String[] files = folder.list();
if ((files != null) && (files.length == 0)) {
folder.delete();
}
}
static String folderPath(long steamID, String packageName) {
return String.format("%s/Steamshots/%d/%s/",
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
steamID, packageName);
}
static int nameToInt(String name) {
if (!name.matches("\\A20[0-3][0-9]-[0-1][0-9]-[0-3][0-9]_[0-9]{5}\\.jpg\\z")) {
return 0;
}
int year = Integer.parseInt(name.substring(2, 4)) - 6;
if ((year < 0) || (year > 31)) {
return 0;
}
int month = (name.charAt(5) - 48) * 10 + (name.charAt(6) - 48);
if ((month == 0) || (month > 12)) {
return 0;
}
int day = (name.charAt(8) - 48) * 10 + (name.charAt(9) - 48);
if (day == 0) {
return 0;
}
int days = DAYS_IN_MONTH[month - 1];
if ((month == 2) && ((year & 3) == 2)) {
++days;
}
if (day > days) {
return 0;
}
int number = Integer.parseInt(name.substring(11, 16));
if (number == 0) {
return 0;
}
return number | (day << DAY_SHIFT) | (month << MONTH_SHIFT) | (year << YEAR_SHIFT);
}
static String nameToString(int name) {
return String.format("20%02d-%02d-%02d_%05d.jpg",
(name >> YEAR_SHIFT) + 6,
(name >> MONTH_SHIFT) & MONTH_MASK,
(name >> DAY_SHIFT) & DAY_MASK,
name & NUMBER_MASK);
}
static boolean isDayAndMonthValid(int day, int month, int year) {
if ((day == 0) || (month == 0) || (month > 12)) {
return false;
}
int days = DAYS_IN_MONTH[month - 1];
if ((month == 2) && ((year & 3) == 2)) {
++days;
}
return day <= days;
}
static boolean isValid(int name) {
if (name <= 0) {
return false;
}
int i = name & NUMBER_MASK;
if ((i == 0) || (i > 99999)) {
return false;
}
int month = (name >> MONTH_SHIFT) & MONTH_MASK;
if ((month == 0) || (month > 12)) {
return false;
}
int day = (name >> DAY_SHIFT) & DAY_MASK;
if (day == 0) {
return false;
}
i = DAYS_IN_MONTH[month - 1];
if ((month == 2) && (((name >> YEAR_SHIFT) & 3) == 2)) {
++i;
}
return day <= i;
}
}