瀏覽代碼

The JSON updater now stores some metainfo.

Iñigo Valentin 4 年之前
父節點
當前提交
c2d78e399f
共有 3 個文件被更改,包括 107 次插入1 次删除
  1. 1 0
      src/RuneOptimizer/RuneOptimizer.c
  2. 3 0
      src/RuneOptimizer/error/error.h
  3. 103 1
      src/RuneOptimizer/update/update.c

+ 1 - 0
src/RuneOptimizer/RuneOptimizer.c

@@ -21,6 +21,7 @@
 #include <sqlite3.h>
 #include <math.h>
 #include <unistd.h>
+#include <time.h>
 #include <json-c/json.h>
 #include "RuneOptimizer.h"
 #include "error/error.h"

+ 3 - 0
src/RuneOptimizer/error/error.h

@@ -68,3 +68,6 @@
 #define ERROR_DB_INSERT_UNITS_TEAMS 221
 #define ERROR_DB_UPDATE_UNITS 222
 #define ERROR_DB_RUNES 223
+#define ERROR_DB_DROP_INFO 213
+#define ERROR_DB_CREATE_INFO 214
+#define ERROR_DB_INSERT_INFO 215

+ 103 - 1
src/RuneOptimizer/update/update.c

@@ -68,6 +68,8 @@ int update_json(char file[]){
     json_object *wizard_info = json_object_object_get(root, "wizard_info");
     json_object *wizard_name = json_object_object_get(wizard_info, "wizard_name");
     printf("\tPlayer name: %s\n", json_object_get_string(wizard_name));
+    json_object *wizard_level = json_object_object_get(wizard_info, "wizard_level");
+    printf("\tPlayer level: %s\n", json_object_get_string(wizard_level));
 
     // Recreate the database tables
     int status = recreate_tables();
@@ -785,13 +787,60 @@ int update_json(char file[]){
 
     }
 
+    int calculate_result = calculate_current_stats();
+    if (SUCCESS != calculate_result){
+        return calculate_result;
+    }
+
+    // Insert into table info
+    time_t t = time(NULL);
+    struct tm tm = *localtime(&t);
+    char ts[130];
+    sprintf(ts, "%d-%02d-%02d %02d:%02d:%02d", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
+    //printf("now: %d-%02d-%02d %02d:%02d:%02d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
+    sqlite3_stmt *stmt_info;
+    char sql[1000];
+    strcpy(
+      sql,
+      "INSERT INTO info ( player_id, player_name, player_level, ts, modified)"
+      "VALUES (?, ?, ?, ?, ?)"
+    );
+    if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &stmt_info, 0)) {
+        fprintf(
+        stderr,
+        "Failed to prepare statement to insert into runes: %s\n",
+        sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(stmt_info);
+        sqlite3_close(db);
+        return ERROR_DB_INSERT_INFO;
+    }
+    sqlite3_bind_text(stmt_info, 1, json_object_get_string(wizard_id), strlen(json_object_get_string(wizard_id)), NULL);
+    sqlite3_bind_text(stmt_info, 2, json_object_get_string(wizard_name), strlen(json_object_get_string(wizard_name)), NULL);
+    sqlite3_bind_int(stmt_info, 3, json_object_get_string(wizard_level));
+    sqlite3_bind_text(stmt_info, 4, ts, strlen(ts), NULL);
+    sqlite3_bind_int(stmt_info, 5, 0);
+    if (SQLITE_DONE != sqlite3_step(stmt_info)){
+        fprintf(
+          stderr,
+          "Failed to execute statement to insert into info: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(stmt_info);
+        sqlite3_close(db);
+        return ERROR_DB_INSERT_INFO;
+    }
+
     // All parsed
     printf("%d units saved.\n", total_units);
     printf("%d runes saved.\n", total_runes);
     printf("%d rune stats saved.\n", total_stats);
+    printf("Player info updated");
+
     sqlite3_close(db);
 
-    return calculate_current_stats();
+
+    return
 }
 
 /**
@@ -1313,6 +1362,59 @@ int recreate_tables(){
         sqlite3_close(db);
         return ERROR_DB_CREATE_UNITS;
     }
+
+    // Table info
+    strcpy(sql, "DROP TABLE IF EXISTS info;");
+    if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+        fprintf(
+          stderr,
+          "Failed to create statement to drop table info: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_DROP_INFO;
+    }
+    if (SQLITE_DONE != sqlite3_step(res)){
+        fprintf(
+          stderr,
+          "Failed to execute statement to drop table info: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_DROP_INFO;
+    }
+    strcpy(
+      sql,
+      "CREATE TABLE info("
+      "  player_id CHAR(12),"
+      "  player_name CHAR(64),"
+      "  player_level INT,"
+      "  ts DATETIME,"
+      "  modified INT"
+      ");"
+    );
+    if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+        fprintf(
+          stderr,
+          "Failed to create statement to create table info: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_CREATE_INFO;
+    }
+    if (SQLITE_DONE != sqlite3_step(res)){
+        fprintf(
+          stderr,
+          "Failed to execute statement to create table info: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_CREATE_INFO;
+    }
     // TODO: Other tables
     sqlite3_finalize(res);
     sqlite3_close(db);