private void DownloadAndInstall(Game game, int modid, string mod_name) { utils.AddMod(mod_name); var client = new NexusApiClient(); var file = client.GetModFiles(game, modid).First(f => f.is_primary); var src = Path.Combine(DOWNLOAD_FOLDER, file.file_name); var ini = string.Join("\n", new List <string> { "[General]", $"gameName={GameRegistry.Games[game].MO2ArchiveName}", $"modID={modid}", $"fileID={file.file_id}" }); if (!File.Exists(file.file_name)) { var state = DownloadDispatcher.ResolveArchive(ini.LoadIniString()); state.Download(src); } if (!Directory.Exists(utils.DownloadsFolder)) { Directory.CreateDirectory(utils.DownloadsFolder); } var dest = Path.Combine(utils.DownloadsFolder, file.file_name); File.Copy(src, dest); FileExtractor.ExtractAll(src, Path.Combine(utils.ModsFolder, mod_name)); File.WriteAllText(dest + ".meta", ini); }
public async Task UpdateNexusCacheRSS() { using var _ = _logger.BeginScope("Nexus Update via RSS"); _logger.Log(LogLevel.Information, "Starting"); var results = await NexusUpdatesFeeds.GetUpdates(); NexusApiClient client = null; long updated = 0; foreach (var result in results) { try { var purgedMods = await _sql.DeleteNexusModFilesUpdatedBeforeDate(result.Game, result.ModId, result.TimeStamp); var purgedFiles = await _sql.DeleteNexusModInfosUpdatedBeforeDate(result.Game, result.ModId, result.TimeStamp); var totalPurged = purgedFiles + purgedMods; if (totalPurged > 0) { _logger.Log(LogLevel.Information, $"Purged {totalPurged} cache items {result.Game} {result.ModId} {result.TimeStamp}"); } if (await _sql.GetNexusModInfoString(result.Game, result.ModId) != null) { continue; } // Lazily create the client client ??= await NexusApiClient.Get(); // Cache the info var files = await client.GetModFiles(result.Game, result.ModId, false); await _sql.AddNexusModFiles(result.Game, result.ModId, result.TimeStamp, files); var modInfo = await client.GetModInfo(result.Game, result.ModId, useCache : false); await _sql.AddNexusModInfo(result.Game, result.ModId, result.TimeStamp, modInfo); updated++; } catch (Exception ex) { _logger.LogError(ex, $"Failed Nexus update for {result.Game} - {result.ModId} - {result.TimeStamp}"); } } if (updated > 0) { _logger.Log(LogLevel.Information, $"Primed {updated} nexus cache entries"); } _globalInformation.LastNexusSyncUTC = DateTime.UtcNow; }
public static async Task <long> UpdateNexusCacheFast(SqlService sql) { var results = await NexusUpdatesFeeds.GetUpdates(); NexusApiClient client = null; long updated = 0; foreach (var result in results) { var purgedMods = await sql.DeleteNexusModFilesUpdatedBeforeDate(result.Game, result.ModId, result.TimeStamp); var purgedFiles = await sql.DeleteNexusModInfosUpdatedBeforeDate(result.Game, result.ModId, result.TimeStamp); var totalPurged = purgedFiles + purgedMods; if (totalPurged > 0) { Utils.Log($"Purged {totalPurged} cache items"); } if (await sql.GetNexusModInfoString(result.Game, result.ModId) != null) { continue; } // Lazily create the client client ??= await NexusApiClient.Get(); // Cache the info var files = await client.GetModFiles(result.Game, result.ModId, false); await sql.AddNexusModFiles(result.Game, result.ModId, result.TimeStamp, files); var modInfo = await client.GetModInfo(result.Game, result.ModId); await sql.AddNexusModInfo(result.Game, result.ModId, result.TimeStamp, modInfo); updated++; } if (updated > 0) { Utils.Log($"Primed {updated} nexus cache entries"); } LastNexusSync = DateTime.Now; return(updated); }