Skip to content
This repository has been archived by the owner on May 15, 2023. It is now read-only.

Commit

Permalink
FC: change avatar database building to be less aggressive, fix for bu…
Browse files Browse the repository at this point in the history
…ild 1078 of VRChat
  • Loading branch information
knah committed Apr 19, 2021
1 parent d39d75f commit 333a140
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 6 deletions.
2 changes: 1 addition & 1 deletion FavCat/FavCat.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Nullable>enable</Nullable>
<ClearOutputDirectory>False</ClearOutputDirectory>
<AssemblyVersion>1.0.12.0</AssemblyVersion>
<AssemblyVersion>1.0.13.0</AssemblyVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="LiteDB" Version="5.0.9" />
Expand Down
19 changes: 16 additions & 3 deletions FavCat/FavCatMod.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using FavCat.CustomLists;
using FavCat.Database;
using FavCat.Modules;
using Harmony;
using MelonLoader;
using UIExpansionKit.API;
using UnhollowerBaseLib;
Expand All @@ -20,7 +21,7 @@
using Object = UnityEngine.Object;
using ImageDownloaderClosure = ImageDownloader.__c__DisplayClass11_1;

[assembly:MelonInfo(typeof(FavCatMod), "FavCat", "1.0.12", "knah", "https://github.com/knah/VRCMods")]
[assembly:MelonInfo(typeof(FavCatMod), "FavCat", "1.0.13", "knah", "https://github.com/knah/VRCMods")]
[assembly:MelonGame("VRChat", "VRChat")]

namespace FavCat
Expand Down Expand Up @@ -57,6 +58,20 @@ public override void OnApplicationStart()
Database.ImageHandler.TrimCache(FavCatSettings.MaxCacheSizeBytes).NoAwait();

ExpansionKitApi.RegisterWaitConditionBeforeDecorating(WaitForInitDone());

foreach (var methodInfo in typeof(AvatarPedestal).GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public).Where(it => it.Name.StartsWith("Method_Private_Void_ApiContainer_") && it.GetParameters().Length == 1))
{
Harmony.Patch(methodInfo, new HarmonyMethod(typeof(FavCatMod), nameof(AvatarPedestalPatch)));
}
}

private static void AvatarPedestalPatch(ApiContainer __0)
{
if (__0.Error != null || __0.Code != 200) return;
var model = __0.Model?.TryCast<ApiAvatar>();
if (model == null) return;

Database?.UpdateStoredAvatar(model);
}

internal CustomPickerList CreateCustomList(Transform parent)
Expand Down Expand Up @@ -238,8 +253,6 @@ public static bool ApiSnifferStatic(IntPtr @this, IntPtr dictionary, IntPtr some

var maybeUser = apiModel.TryCast<APIUser>();
if (maybeUser != null) FavCatMod.Database?.UpdateStoredPlayer(maybeUser);
var maybeAvatar = apiModel.TryCast<ApiAvatar>();
if (maybeAvatar != null) FavCatMod.Database?.UpdateStoredAvatar(maybeAvatar);
var maybeWorld = apiModel.TryCast<ApiWorld>();
if (maybeWorld != null) FavCatMod.Database?.UpdateStoredWorld(maybeWorld);
}
Expand Down
5 changes: 4 additions & 1 deletion FavCat/Modules/AvatarModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,9 @@ private void OnFavButtonClicked(StoredCategory storedCategory, string avatarId,
return;

// something showed an unknown avatar, request it before favoriting
new ApiAvatar { id = avatarId }.Fetch(new Action<ApiContainer>(_ =>
new ApiAvatar { id = avatarId }.Fetch(new Action<ApiContainer>(model =>
{
FavCatMod.Database?.UpdateStoredAvatar(model.Model.Cast<ApiAvatar>());
MelonCoroutines.Start(ReFavAfterDelay(storedCategory, avatarId));
}));
return;
Expand Down Expand Up @@ -126,6 +127,8 @@ protected override void OnPickerSelected(IPickerElement model)
if (Imports.IsDebugMode())
MelonLogger.Log($"Done an API request for {model.Id}");

FavCatMod.Database?.UpdateStoredAvatar(avatar);

var canUse = avatar.releaseStatus == "public" || avatar.authorId == APIUser.CurrentUser.id;
if (!canUse)
{
Expand Down
2 changes: 1 addition & 1 deletion FavCat/ScanningReflectionCache.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public static void Refresh(this SimpleAvatarPedestal pedestal, ApiAvatar avatar)
var strings = XrefScanner.XrefScan(it)
.Select(jt => jt.Type == XrefType.Global ? jt.ReadAsObject()?.ToString() : null)
.Where(jt => jt != null).ToHashSet();
return strings.Contains("Refreshing with : ") && strings.Contains("local");
return strings.Contains("Refreshing with : ");
});

ourPedestalRefreshDelegate =
Expand Down

0 comments on commit 333a140

Please sign in to comment.