A complete workshop implementation, I guess
[carveJwlIkooP6JGAAIwe30JlM.git] / workshop.h
1 #ifndef WORKSHOP_H
2 #define WORKSHOP_H
3
4 #define VG_GAME
5 #include "vg/vg.h"
6 #include "vg/vg_steam_remote_storage.h"
7
8 struct workshop{
9 enum workshop_operation{
10 k_workshop_form_op_none,
11 k_workshop_form_op_loading_model,
12 k_workshop_form_op_downloading_submission,
13 k_workshop_form_op_publishing_update,
14 k_workshop_op_item_scan,
15 k_workshop_op_item_load
16 }
17 operation;
18 }
19 static workshop;
20
21 struct workshop_file_info{
22 u64 author;
23 char author_name[32];
24 char title[64];
25 };
26
27 struct async_workshop_filepath_info{
28 PublishedFileId_t id;
29 char *buf;
30 u32 len;
31 };
32
33 struct async_workshop_installed_files_info{
34 PublishedFileId_t *buffer;
35 u32 *len; /* inout */
36 };
37
38 struct async_workshop_metadata_info{
39 struct workshop_file_info *info;
40 const char *path;
41 };
42
43 VG_STATIC void workshop_file_info_clear( struct workshop_file_info *info )
44 {
45 info->author = 0ul;
46 info->author_name[0] = '\0';
47 info->title[0] = '\0';
48 }
49
50 VG_STATIC void async_workshop_get_filepath( void *data, u32 len );
51 VG_STATIC void async_workshop_get_installed_files( void *data, u32 len );
52 VG_STATIC void workshop_load_metadata( const char *path,
53 struct workshop_file_info *info );
54
55 /*
56 * Start a new operation and crash if we are already running one.
57 */
58 VG_STATIC int workshop_begin_op( enum workshop_operation op )
59 {
60 if( workshop.operation != k_workshop_form_op_none ){
61 vg_error( "Workshop form currently executing op(%d), tried to "
62 "start op(%d)\n", workshop.operation, op );
63 return 0;
64 }
65
66 workshop.operation = op;
67 vg_info( "Starting op( %d )\n", op );
68 return 1;
69 }
70
71 /*
72 * Finished operation, otheres can now run
73 */
74 VG_STATIC void workshop_end_op(void)
75 {
76 vg_info( "Finishing op( %d )\n", workshop.operation );
77 workshop.operation = k_workshop_form_op_none;
78 }
79
80 #endif /* WORKSHOP_H */