Files
assistant-android/app/src/main/java/com/gh/common/util/TimestampUtils.java

138 lines
4.0 KiB
Java

package com.gh.common.util;
import android.text.TextUtils;
import com.gh.common.constant.Constants;
import com.gh.gamecenter.BuildConfig;
import com.halo.assistant.HaloApp;
import java.util.regex.Pattern;
import androidx.collection.ArrayMap;
public class TimestampUtils {
// 基准时间
private static final long BASE = 1426608000000L;
private static ArrayMap<String, Integer> intervalMap; // 间隔
private static ArrayMap<String, Integer> cdMap; // cd
public static void initMap() {
initIntervalMap();
initCDMap();
}
private static void initIntervalMap() {
intervalMap = new ArrayMap<>();
intervalMap.put(".*index.*", 5);
intervalMap.put(".*columns.*", 10);
intervalMap.put(".*games.*", 15);
intervalMap.put(".*articles.*", 20);
intervalMap.put(".*halo_addons.*", 10);
intervalMap.put(".*packages.*", 1);
}
private static void initCDMap() {
cdMap = new ArrayMap<>();
cdMap.put(".*index.*", Constants.GAME_CD);
cdMap.put(".*columns.*", Constants.GAME_CD);
cdMap.put(".*games.*", Constants.GAME_CD);
cdMap.put(".*articles.*", Constants.NEWS_CD);
cdMap.put(".*halo_addons.*", Constants.ADDONS_CD);
cdMap.put(".*packages.*", Constants.PACKAGES_CD);
}
/*
* 为url添加timestamp
*/
public static String addTimestamp(String url) {
if (BuildConfig.DEBUG || "GH_REFRESH".equals(HaloApp.getInstance().getChannel())) {
if (TextUtils.isEmpty(url)) {
return url;
}
if (url.contains("?")) {
String u = url + "&timestamp=" + System.currentTimeMillis();
return u;
} else {
String u = url + "?timestamp=" + System.currentTimeMillis();
return u;
}
} else {
if (TextUtils.isEmpty(url)) {
return url;
}
int cd = 0;
for (String key : getCdMap().keySet()) {
if (Pattern.matches(key, url)) {
cd = getCdMap().get(key);
break;
}
}
if (cd == 0) {
return url;
}
if (url.contains("?")) {
String u = url + "&timestamp=" + getTimestamp(url, cd);
// Utils.log("url = " + u);
return u;
} else {
String u = url + "?timestamp=" + getTimestamp(url, cd);
// Utils.log("url = " + u);
return u;
}
}
}
private static ArrayMap<String, Integer> getCdMap() {
if (cdMap == null) {
cdMap = new ArrayMap<>();
}
return cdMap;
}
/*
* 根据CD获取时间戳
*/
public static long getTimestamp(String url, int cd) {
long base = BASE;
for (String key : getIntervalMap().keySet()) {
if (Pattern.matches(key, url)) {
// Utils.log("url add base = " + url);
base += getIntervalMap().get(key);
break;
}
}
long now = System.currentTimeMillis();
// Utils.log("url now timestamp = " + now);
return (long) (Math.ceil((now - base) / cd) * cd + base);
}
private static ArrayMap<String, Integer> getIntervalMap() {
if (intervalMap == null) {
intervalMap = new ArrayMap<>();
}
return intervalMap;
}
/*
* 去除url中的timestamp
*/
public static String removeTimestamp(String url) {
if (!url.contains("timestamp")) return url;
int index = url.lastIndexOf("timestamp");
String params = url.substring(index);
//连接符
String connector = url.substring(index - 1, index);
String key = url.substring(0, index - 1);
index = params.indexOf("&");
if (index != -1) {
key = key + connector + params.substring(index + 1);
}
return key;
}
}