// Encode contents from old database with "Windows-1252" and decode with "UTF-8" then input into new db static void Main() { VrcDb db_new = new VrcDb(); OldVrcDb db_main = new OldVrcDb(); OldVrcDb db_backup = new OldVrcDb(); db_new.Open($"URI=file:{Directory.GetCurrentDirectory()}\\new.db"); db_main.Open($"URI=file:{Directory.GetCurrentDirectory()}\\data.db"); db_backup.Open($"URI=file:{Directory.GetCurrentDirectory()}\\backup\\data.db"); db_main.Init(); db_backup.Init(); Console.WriteLine(db_new.GetAllIds().Length); Console.WriteLine(db_main.GetAllIds().Length); Console.WriteLine(db_backup.GetAllIds().Length); db_new.Close(); db_main.Close(); db_backup.Close(); Console.ReadLine(); }
private static void Main(string[] args) { // Register exit handler Console.CancelKeyPress += new ConsoleCancelEventHandler(KeyHandler); cmd = ParseArgs(args); #if !DEBUG if (cmd.type == CommandType.None) { PrintHelpMessage(); return; } #else inputFile = "avatars.txt"; cmd.type = CommandType.Download; cmd.ignoreDeleted = true; #endif Debug.LogText("[INFO ] Opening database...\t\t\t"); database = new OldVrcDb(); if (!database.Open($"URI=file:{Directory.GetCurrentDirectory()}\\data.db")) { Debug.LogLine("ERROR", ConsoleColor.Red); return; } Debug.LogLine("Done.", ConsoleColor.Green); Debug.LogText("[INFO ] Initializing database...\t\t\t"); if (!database.Init()) { Debug.LogLine("ERROR", ConsoleColor.Red); database.Close(); return; } Debug.LogLine("Done.", ConsoleColor.Green); client = new ApiClient(); var idsToDownload = new List <VrcId>(); // Read database { Debug.LogText("[INFO ] Reading ids from database...\t\t"); var ids = cmd.ignoreDeleted ? database.GetAllIds(false) : database.GetAllIds(); Debug.LogLine($"Got {ids.Length} ids", ConsoleColor.Green); downloadedAssets.AddRange(ids); } if (cmd.type == CommandType.ExtractIds) { File.WriteAllLines("extractedids.txt", downloadedAssets.Select(i => i.ToString())); foreach (var id in downloadedAssets) { Console.WriteLine(id); } return; } { Debug.LogText("[INFO ] Reading deleted ids from database...\t"); var ids = database.GetAllIds(true); Debug.LogLine($"Got {ids.Length} ids", ConsoleColor.Green); inactiveIds.AddRange(ids); } if (cmd.type == CommandType.Download) { // Read input avatar list Debug.LogText($"[INFO ] Reading file...\t\t\t\t"); string text = File.ReadAllText(inputFile); Debug.LogLine($"Read {ToolBox.FormatLog((ulong)text.Length, 'B')}", ConsoleColor.Green); Debug.LogText("[INFO ] Parsing file...\t\t\t\t"); if (!RipperTools.TryGetVrcIdList(text, out var ids)) { Debug.LogLine("ERROR", ConsoleColor.Red); PrintHelpMessage(); Cleanup(); return; } Debug.LogLine($"Got {ids.Length} ids", ConsoleColor.Green); Debug.LogText("[INFO ] Queueing ids...\t\t\t\t"); idsToDownload.AddRange(ids); Debug.LogLine("Done.", ConsoleColor.Green); Debug.LogText("[INFO ] Removing known ids...\t\t\t"); idsToDownload = idsToDownload.Except(downloadedAssets).Except(inactiveIds).ToList(); Debug.LogLine("Done.", ConsoleColor.Green); } else if (cmd.type == CommandType.Update) { idsToDownload.AddRange(downloadedAssets); } else if (cmd.type == CommandType.Refresh) { idsToDownload.AddRange(downloadedAssets); downloadedAssets.Clear(); } Debug.LogText("[INFO ] Removing duplicates...\t\t\t"); inactiveIds = inactiveIds.Distinct().ToList(); idsToDownload = idsToDownload.Distinct().ToList(); downloadedAssets = downloadedAssets.Distinct().ToList(); Debug.LogLine("Done.", ConsoleColor.Green); // TODO IMPLEMENTME: currently just lists found vrchat ids if (cmd.type == CommandType.Attach) { while (!CleanupDone()) { if (RipperTools.TryGetVrcCacheEntries(true, out var entries)) { entries.RemoveAll(m => downloadedAssets.Contains(m.id)); foreach (var entry in entries) { Debug.LogLine(entry.id.ToString()); downloadedAssets.Add(entry.id); } Thread.Sleep(libParseDelayTimeInMs); } else { Thread.Sleep(libCheckDelayTimeInMs); } } } else { Debug.LogText("[INFO ] Starting requets...\t\t\t"); Debug.LogLine($"{idsToDownload.Count} ids queued", ConsoleColor.Green); foreach (var id in idsToDownload) { if (CleanupDone()) { break; } try { switch (id.IdType) { case VrcId.VrcIdType.Avatar: client.GetAvatarById(id, RipAvatar, DisableId); Thread.Sleep(apiDelayTimeInMs); break; case VrcId.VrcIdType.World: client.GetWorldById(id, RipWorld, DisableId); Thread.Sleep(apiDelayTimeInMs); break; case VrcId.VrcIdType.User: case VrcId.VrcIdType.LegacyUser: //database.AddUser(); //Thread.Sleep(apiDelayTimeInMs); break; default: Debug.LogLine($"[UNPARSABLE] Skipping {id}", ConsoleColor.Yellow); continue; } } catch (Exception ex) { Debug.LogLine($"[EXCEPTION ] Failed to get {id}:\n\t{ex.Message}", ConsoleColor.Red, false, true); break; } } } // Exit after all processes are done protector.ExitAfterProcs(); Cleanup(); }