138 lines
4.0 KiB
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 + "×tamp=" + 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 + "×tamp=" + 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;
|
|
}
|
|
|
|
}
|