enable workshop world submissions
[carveJwlIkooP6JGAAIwe30JlM.git] / addon.h
1 #ifndef ADDON_H
2 #define ADDON_H
3
4 #include "common.h"
5 #include "vg/vg_steam_ugc.h"
6 #include "workshop_types.h"
7 #define ADDON_MOUNTED_MAX 128
8 #define ADDON_FOLDERNAME_MAX 64
9
10 typedef struct addon_reg addon_reg;
11 struct {
12 struct addon_reg{
13 PublishedFileId_t workshop_id;
14
15 enum workshop_file_type type;
16 u8 metadata[512]; /* vg_msg buffer */
17 u32 metadata_len;
18
19 char foldername[ ADDON_FOLDERNAME_MAX ];
20 u32 foldername_hash;
21 void *userdata;
22
23 enum addon_state{
24 k_addon_state_none,
25 k_addon_state_indexed,
26 k_addon_state_indexed_absent /* gone but not forgotten */
27 }
28 state;
29 }
30 *registry;
31 u32 registry_count;
32
33 /* deffered: updates in main thread */
34 u32 registry_type_counts[k_workshop_file_type_max];
35 }
36 static addon_system;
37
38 static void addon_system_init( void );
39 static u32 addon_count( enum workshop_file_type type );
40 static addon_reg *get_addon_from_index(enum workshop_file_type type, u32 index);
41 static u32 get_index_from_addon( enum workshop_file_type type, addon_reg *a );
42 static int addon_get_content_folder( addon_reg *reg, vg_str *folder );
43
44 /* scanning routines */
45 VG_STATIC void addon_mount_content_folder( enum workshop_file_type type,
46 const char *base_folder,
47 const char *content_ext );
48 VG_STATIC void addon_mount_workshop_items(void);
49 VG_STATIC void async_addon_reg_update( void *data, u32 size );
50 VG_STATIC addon_reg *addon_mount_local_addon( const char *folder,
51 enum workshop_file_type type,
52 const char *content_ext );
53
54 #endif /* ADDON_H */