mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-13 01:26:50 -04:00
Change Updater_GetBuildTime/SetNewBuildTime to use unix timestamp instead of milliseconds since 1/1/0001 timestamp
This commit is contained in:
parent
1095418d41
commit
19f1ff3aa7
@ -1381,7 +1381,7 @@ CC_NOINLINE static void UpdatesScreen_FormatTime(String* str, char* type, int de
|
||||
String_AppendConst(str, " ago");
|
||||
}
|
||||
|
||||
static void UpdatesScreen_Format(struct LLabel* lbl, const char* prefix, TimeMS time) {
|
||||
static void UpdatesScreen_Format(struct LLabel* lbl, const char* prefix, cc_uint64 timestamp) {
|
||||
String str; char buffer[STRING_SIZE];
|
||||
TimeMS now;
|
||||
int delta;
|
||||
@ -1389,12 +1389,12 @@ static void UpdatesScreen_Format(struct LLabel* lbl, const char* prefix, TimeMS
|
||||
String_InitArray(str, buffer);
|
||||
String_AppendConst(&str, prefix);
|
||||
|
||||
if (!time) {
|
||||
if (!timestamp) {
|
||||
String_AppendConst(&str, "&cCheck failed");
|
||||
} else {
|
||||
now = DateTime_CurrentUTC_MS();
|
||||
now = DateTime_CurrentUTC_MS() - UNIX_EPOCH;
|
||||
/* must divide as cc_uint64, int delta overflows after 26 days */
|
||||
delta = (int)((now - time) / 1000);
|
||||
delta = (int)((now / 1000) - timestamp);
|
||||
|
||||
if (delta < SECS_PER_MIN) {
|
||||
UpdatesScreen_FormatTime(&str, "second", delta, 1);
|
||||
|
@ -451,16 +451,15 @@ void FetchServersTask_ResetOrder(void) {
|
||||
struct CheckUpdateData CheckUpdateTask;
|
||||
static char relVersionBuffer[16];
|
||||
|
||||
CC_NOINLINE static TimeMS CheckUpdateTask_ParseTime(const String* str) {
|
||||
CC_NOINLINE static cc_uint64 CheckUpdateTask_ParseTime(const String* str) {
|
||||
String time, fractional;
|
||||
TimeMS ms;
|
||||
cc_uint64 secs;
|
||||
/* timestamp is in form of "seconds.fractional" */
|
||||
/* But only need to care about the seconds here */
|
||||
String_UNSAFE_Separate(str, '.', &time, &fractional);
|
||||
|
||||
Convert_ParseUInt64(&time, &ms);
|
||||
if (!ms) return 0;
|
||||
return ms * 1000 + UNIX_EPOCH;
|
||||
Convert_ParseUInt64(&time, &secs);
|
||||
return secs;
|
||||
}
|
||||
|
||||
static void CheckUpdateTask_OnValue(struct JsonContext* ctx, const String* str) {
|
||||
|
@ -91,8 +91,8 @@ void FetchServersTask_ResetOrder(void);
|
||||
|
||||
extern struct CheckUpdateData {
|
||||
struct LWebTask Base;
|
||||
/* Timestamp latest commit/dev build and release were at. */
|
||||
TimeMS devTimestamp, relTimestamp;
|
||||
/* Unix timestamp latest commit/dev build and release were at. */
|
||||
cc_uint64 devTimestamp, relTimestamp;
|
||||
/* Version of latest release. */
|
||||
String latestRelease;
|
||||
} CheckUpdateTask; /* TODO: Work out the JSON for this.. */
|
||||
@ -101,8 +101,8 @@ void CheckUpdateTask_Run(void);
|
||||
|
||||
extern struct FetchUpdateData {
|
||||
struct LWebTask Base;
|
||||
/* Timestamp downloaded build was originally built at. */
|
||||
TimeMS timestamp;
|
||||
/* Unix timestamp downloaded build was originally built at. */
|
||||
cc_uint64 timestamp;
|
||||
} FetchUpdateTask;
|
||||
void FetchUpdateTask_Run(cc_bool release, cc_bool d3d9);
|
||||
|
||||
|
@ -221,7 +221,9 @@ void Platform_Log(const String* message) {
|
||||
}
|
||||
|
||||
#define FILETIME_EPOCH 50491123200000ULL
|
||||
#define FileTime_TotalMS(time) ((time / 10000) + FILETIME_EPOCH)
|
||||
#define FILETIME_UNIX_EPOCH 11644473600LL
|
||||
#define FileTime_TotalMS(time) ((time / 10000) + FILETIME_EPOCH)
|
||||
#define FileTime_UnixTime(time) ((time / 10000000) - FILETIME_UNIX_EPOCH)
|
||||
TimeMS DateTime_CurrentUTC_MS(void) {
|
||||
FILETIME ft;
|
||||
cc_uint64 raw;
|
||||
@ -1233,7 +1235,7 @@ cc_result Updater_Start(void) {
|
||||
return Process_RawStart(path, args);
|
||||
}
|
||||
|
||||
cc_result Updater_GetBuildTime(TimeMS* ms) {
|
||||
cc_result Updater_GetBuildTime(cc_uint64* timestamp) {
|
||||
TCHAR path[NATIVE_STR_LEN + 1];
|
||||
FileHandle file;
|
||||
FILETIME ft;
|
||||
@ -1248,8 +1250,8 @@ cc_result Updater_GetBuildTime(TimeMS* ms) {
|
||||
if (file == INVALID_HANDLE_VALUE) return GetLastError();
|
||||
|
||||
if (GetFileTime(file, NULL, NULL, &ft)) {
|
||||
raw = ft.dwLowDateTime | ((cc_uint64)ft.dwHighDateTime << 32);
|
||||
*ms = FileTime_TotalMS(raw);
|
||||
raw = ft.dwLowDateTime | ((cc_uint64)ft.dwHighDateTime << 32);
|
||||
*timestamp = FileTime_UnixTime(raw);
|
||||
} else {
|
||||
res = GetLastError();
|
||||
}
|
||||
@ -1260,7 +1262,7 @@ cc_result Updater_GetBuildTime(TimeMS* ms) {
|
||||
|
||||
/* Don't need special execute permission on windows */
|
||||
cc_result Updater_MarkExecutable(void) { return 0; }
|
||||
cc_result Updater_SetNewBuildTime(TimeMS ms) {
|
||||
cc_result Updater_SetNewBuildTime(cc_uint64 timestamp) {
|
||||
static const String path = String_FromConst(UPDATE_FILE);
|
||||
FileHandle file;
|
||||
FILETIME ft;
|
||||
@ -1268,7 +1270,7 @@ cc_result Updater_SetNewBuildTime(TimeMS ms) {
|
||||
cc_result res = File_OpenOrCreate(&file, &path);
|
||||
if (res) return res;
|
||||
|
||||
raw = 10000 * (ms - FILETIME_EPOCH);
|
||||
raw = 10000000 * (timestamp + FILETIME_UNIX_EPOCH);
|
||||
ft.dwLowDateTime = (cc_uint32)raw;
|
||||
ft.dwHighDateTime = (cc_uint32)(raw >> 32);
|
||||
|
||||
@ -1281,11 +1283,11 @@ cc_result Updater_SetNewBuildTime(TimeMS ms) {
|
||||
const char* const Updater_D3D9 = NULL;
|
||||
const char* const Updater_OGL = NULL;
|
||||
|
||||
cc_bool Updater_Clean(void) { return true; }
|
||||
cc_result Updater_Start(void) { return ERR_NOT_SUPPORTED; }
|
||||
cc_result Updater_GetBuildTime(TimeMS* ms) { return ERR_NOT_SUPPORTED; }
|
||||
cc_result Updater_MarkExecutable(void) { return 0; }
|
||||
cc_result Updater_SetNewBuildTime(TimeMS ms) { return ERR_NOT_SUPPORTED; }
|
||||
cc_bool Updater_Clean(void) { return true; }
|
||||
cc_result Updater_Start(void) { return ERR_NOT_SUPPORTED; }
|
||||
cc_result Updater_GetBuildTime(cc_uint64* t) { return ERR_NOT_SUPPORTED; }
|
||||
cc_result Updater_MarkExecutable(void) { return 0; }
|
||||
cc_result Updater_SetNewBuildTime(cc_uint64 t) { return ERR_NOT_SUPPORTED; }
|
||||
#elif defined CC_BUILD_POSIX
|
||||
cc_bool Updater_Clean(void) { return true; }
|
||||
|
||||
@ -1330,7 +1332,7 @@ cc_result Updater_Start(void) {
|
||||
return Process_RawStart(path, argv);
|
||||
}
|
||||
|
||||
cc_result Updater_GetBuildTime(TimeMS* ms) {
|
||||
cc_result Updater_GetBuildTime(cc_uint64* timestamp) {
|
||||
char path[NATIVE_STR_LEN + 1];
|
||||
struct stat sb;
|
||||
int len = 0;
|
||||
@ -1340,7 +1342,7 @@ cc_result Updater_GetBuildTime(TimeMS* ms) {
|
||||
path[len] = '\0';
|
||||
|
||||
if (stat(path, &sb) == -1) return errno;
|
||||
*ms = (cc_uint64)sb.st_mtime * 1000 + UNIX_EPOCH;
|
||||
*timestamp = (cc_uint64)sb.st_mtime;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1352,9 +1354,9 @@ cc_result Updater_MarkExecutable(void) {
|
||||
return chmod(UPDATE_FILE, st.st_mode) == -1 ? errno : 0;
|
||||
}
|
||||
|
||||
cc_result Updater_SetNewBuildTime(TimeMS ms) {
|
||||
cc_result Updater_SetNewBuildTime(cc_uint64 timestamp) {
|
||||
struct utimbuf times = { 0 };
|
||||
times.modtime = (ms - UNIX_EPOCH) / 1000;
|
||||
times.modtime = timestamp;
|
||||
return utime(UPDATE_FILE, ×) == -1 ? errno : 0;
|
||||
}
|
||||
#endif
|
||||
|
@ -69,12 +69,12 @@ extern const char* const Updater_OGL;
|
||||
cc_bool Updater_Clean(void);
|
||||
/* Starts the platform-specific method to update then start the game using the UPDATE_FILE file. */
|
||||
cc_result Updater_Start(void);
|
||||
/* Returns the last time the application was modified, as number of milliseconds since 1/1/0001 */
|
||||
cc_result Updater_GetBuildTime(TimeMS* ms);
|
||||
/* Returns the last time the application was modified, as a unix timestamp. */
|
||||
cc_result Updater_GetBuildTime(cc_uint64* timestamp);
|
||||
/* Marks the UPDATE_FILE file as being executable. (Needed for some platforms) */
|
||||
cc_result Updater_MarkExecutable(void);
|
||||
/* Sets the last time UPDATE_FILE file was modified, as number of milliseconds since 1/1/0001 */
|
||||
cc_result Updater_SetNewBuildTime(TimeMS ms);
|
||||
/* Sets the last time UPDATE_FILE file was modified, as a unix timestamp. */
|
||||
cc_result Updater_SetNewBuildTime(cc_uint64 timestamp);
|
||||
|
||||
/* The default file extension used for dynamic libraries on this platform. */
|
||||
extern const String DynamicLib_Ext;
|
||||
|
Loading…
x
Reference in New Issue
Block a user