private void DoSearchKnownAvatars() { if (FavCatMod.PageUserInfo == null) { return; } FavCatMod.GetUiManager().Method_Public_Void_String_Boolean_0("UserInterface/MenuContent/Screens/Avatar", false); SetSearchListHeaderAndScrollToIt("Search running..."); LastSearchRequest = "Created by " + FavCatMod.PageUserInfo.field_Private_APIUser_0.displayName; FavCatMod.Database.RunBackgroundAvatarSearchByUser(FavCatMod.PageUserInfo.field_Private_APIUser_0.id, AcceptSearchResult); }
public Task TrimCache(long maxSize) { return(Task.Run(async() => { MelonLogger.Log("Trimming image cache"); var allFileInfos = new List <(LiteFileInfo <string>, StoredImageInfo)>(); var runningSums = new List <long>(); foreach (var liteFileInfo in myFileDatabase.FileStorage.FindAll()) { if (string.IsNullOrEmpty(liteFileInfo.Id)) { continue; } allFileInfos.Add((liteFileInfo, myImageInfos.FindById(liteFileInfo.Id) ?? new StoredImageInfo { LastAccessed = DateTime.MinValue, Id = liteFileInfo.Id })); } allFileInfos.Sort((a, b) => a.Item2.LastAccessed.CompareTo(b.Item2.LastAccessed)); long totalSize = 0; foreach (var fileInfo in allFileInfos) { totalSize += fileInfo.Item1.Length; runningSums.Add(totalSize); } if (totalSize < maxSize) { MelonLogger.Log("Cache already under limit"); return; } var cutoffPoint = runningSums.BinarySearch(maxSize); if (cutoffPoint < 0) { cutoffPoint = ~cutoffPoint; } for (var i = 0; i < cutoffPoint; i++) { myFileDatabase.FileStorage.Delete(allFileInfos[i].Item1.Id); myImageInfos.Delete(allFileInfos[i].Item2.Id); } await FavCatMod.YieldToMainThread(); MelonLogger.Log($"Removed {cutoffPoint} images from cache"); })); }
public async Task LoadImageAsync(string url, Action <Texture2D?> onDone) { try { if (!myFileDatabase.FileStorage.Exists(url)) { onDone(null); return; } await Task.Run(() => { }).ConfigureAwait(false); using var imageStream = myFileDatabase.FileStorage.OpenRead(url); using var image = await Image.LoadAsync <Rgba32>(imageStream).ConfigureAwait(false); var newImageInfo = new StoredImageInfo { Id = url, LastAccessed = DateTime.UtcNow }; myImageInfos.Upsert(newImageInfo); await FavCatMod.YieldToMainThread(); try { onDone(CreateTextureFromImage(image)); } catch (Exception ex) { MelonLogger.LogError($"Exception in onDone callback: {ex}"); } } catch (Exception ex) { if (Imports.IsDebugMode()) { MelonLogger.LogWarning($"Exception in image load, will delete offending image: {ex}"); } myFileDatabase.FileStorage.Delete(url); myImageInfos.Delete(url); onDone(AssetsHandler.PreviewLoading.texture); } }