X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=addon.c;h=fe6693f89adf847a9f4bfad27c057d660eef7337;hb=4a567dd9ef3bd63fb924d80fd2e09323b99d0a34;hp=504904fac98c26546869ecc633033924eb7ef42e;hpb=7b1e8a237acc3121c86fab9b5946da6a8d3bf6c4;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/addon.c b/addon.c index 504904f..fe6693f 100644 --- a/addon.c +++ b/addon.c @@ -7,6 +7,8 @@ #include "workshop_types.h" #include "workshop.h" +#include "addon_cache.c" + static u32 addon_count( enum workshop_file_type type ){ return addon_system.registry_type_counts[ type ]; } @@ -42,6 +44,34 @@ static u32 get_index_from_addon( enum workshop_file_type type, addon_reg *a ){ return 0xffffffff; } +static u32 addon_match( enum workshop_file_type type, + u64 workshop_id, const char *foldername ){ + u32 foldername_djb2 = vg_strdjb2( foldername ); + + u32 count = 0; + for( u32 i=0; counttype == type ){ + + if( workshop_id ){ + if( workshop_id == reg->workshop_id ) + return count; + } + else{ + if( reg->foldername_hash == foldername_djb2 ){ + if( !strcmp( reg->foldername, foldername ) ){ + return count; + } + } + } + + count ++; + } + } + + return 0xffffffff; +} + static void addon_system_init( void ){ u32 reg_size = sizeof(addon_reg)*ADDON_MOUNTED_MAX; addon_system.registry = vg_linear_alloc( vg_mem.rtmemory, reg_size ); @@ -157,14 +187,14 @@ VG_STATIC addon_reg *addon_mount_workshop_folder( PublishedFileId_t workshop_id, } enum workshop_file_type type = k_workshop_file_type_none; - vg_msg root; - vg_msg_init( &root, reg->metadata, reg->metadata_len ); + vg_msg root = {0}; + root.buf = reg->metadata; + root.len = reg->metadata_len; + root.max = sizeof(reg->metadata); + vg_msg workshop = root; if( vg_msg_seekframe( &workshop, "workshop", k_vg_msg_first )){ - vg_msg_cmd kv_type = vg_msg_seekkv( &workshop, "type", k_vg_msg_first ); - if( kv_type.code & k_vg_msg_code_integer ){ - type = kv_type.value._u32; - } + type = vg_msg_seekkvu32( &workshop, "type", k_vg_msg_first ); } if( type == k_workshop_file_type_none ){ @@ -189,7 +219,7 @@ VG_STATIC addon_reg *addon_mount_local_addon( const char *folder, vg_strnull( &folder_path, folder_path_buf, 4096 ); vg_strcat( &folder_path, folder ); - const char *folder_name = vg_strch( &folder_path, '/' ); + const char *folder_name = vg_strch( &folder_path, '/' )+1; u32 folder_hash = vg_strdjb2(folder_name); for( u32 i=0; imetadata_len == 0 ){ /* create our own content commands */ - vg_msg msg; - vg_msg_init( &msg, reg->metadata, sizeof(reg->metadata) ); + vg_msg msg = {0}; + msg.buf = reg->metadata; + msg.len = 0; + msg.max = sizeof(reg->metadata); u32 content_count = 0;