refactor(1)
[carveJwlIkooP6JGAAIwe30JlM.git] / save.c
diff --git a/save.c b/save.c
index 76cfb3cdade24194da2dc6583cd0a50c0745ebb5..ad1b35e0414186b650596a4a094aed3e3b76c67b 100644 (file)
--- a/save.c
+++ b/save.c
@@ -1,37 +1,52 @@
 #ifndef SAVE_C
 #define SAVE_C
 
+#include "save.h"
+#include "vg/vg_msg.h"
+
 struct {
-   u8  buf[ 1024 ];
+   u8  buf[1024];
    u32 len;
 }
 static savedata;
 
+static void skaterift_write_savedata_thread(void *_){
+   FILE *fp = fopen( "save.bkv", "wb" );
+   if( fp ){
+      fwrite( savedata.buf, savedata.len, 1, fp );
+      fclose( fp );
+   }
+   skaterift_end_op();
+}
+
 static void skaterift_write_savedata(void){
+   if( skaterift.async_op != k_async_op_none ) return;
+
+   skaterift_begin_op( k_async_op_write_savedata );
+
    vg_msg sav = {0};
    sav.buf = savedata.buf;
    sav.max = sizeof(savedata.buf);
 
    vg_msg_frame( &sav, "player" );
 
+   struct addon_cache *cache = &addon_system.cache[k_workshop_file_type_board];
+
    if( localplayer.board_view_slot ){
-      struct cache_board *cache_ptr = localplayer.board_view_slot;
-      if( cache_ptr->reg_ptr ){
-         if( cache_ptr->reg_ptr->workshop_id ) 
-            vg_msg_wkvu64( &sav, "board", cache_ptr->reg_ptr->workshop_id );
+      addon_cache_entry *entry = vg_pool_item( &cache->pool, 
+                                               localplayer.board_view_slot );
+
+      if( entry->reg_ptr ){
+         if( entry->reg_ptr->workshop_id ) 
+            vg_msg_wkvu64( &sav, "board", entry->reg_ptr->workshop_id );
          else
-            vg_msg_wkvstr( &sav, "board", cache_ptr->reg_ptr->foldername );
+            vg_msg_wkvstr( &sav, "board", entry->reg_ptr->foldername );
       }
    }
 
    vg_msg_end_frame( &sav );
    savedata.len = sav.len;
-
-   FILE *fp = fopen( "save.bkv", "wb" );
-   if( fp ){
-      fwrite( savedata.buf, sav.len, 1, fp );
-      fclose( fp );
-   }
+   vg_loader_start( skaterift_write_savedata_thread, NULL );
 }
 
 static void skaterift_read_savedata(void){