threading fixes for skateshop
[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 async_workshop_filepath_info{
22 PublishedFileId_t id;
23 char *buf;
24 u32 len;
25 };
26
27 struct async_workshop_installed_files_info{
28 PublishedFileId_t *buffer;
29 u32 *len; /* inout */
30 };
31
32 VG_STATIC void async_workshop_get_filepath( void *data, u32 len );
33 VG_STATIC void async_workshop_get_installed_files( void *data, u32 len );
34
35 /*
36 * Start a new operation and crash if we are already running one.
37 */
38 VG_STATIC int workshop_begin_op( enum workshop_operation op )
39 {
40 if( workshop.operation != k_workshop_form_op_none ){
41 vg_error( "Workshop form currently executing op(%d), tried to "
42 "start op(%d)\n", workshop.operation, op );
43 return 0;
44 }
45
46 workshop.operation = op;
47 vg_info( "Starting op( %d )\n", op );
48 return 1;
49 }
50
51 /*
52 * Finished operation, otheres can now run
53 */
54 VG_STATIC void workshop_end_op(void)
55 {
56 vg_info( "Finishing op( %d )\n", workshop.operation );
57 workshop.operation = k_workshop_form_op_none;
58 }
59
60 #endif /* WORKSHOP_H */