protected override bool ReplaceOrUpdateAsset(string calculatedModificationPath, ref TextAsset asset, IAssetOrResourceLoadedContext context) { RedirectedResource file; var files = RedirectedDirectory.GetFile(calculatedModificationPath).ToList(); if (files.Count == 0) { return(false); } else { if (files.Count > 1) { XuaLogger.AutoTranslator.Warn("Found more than one resource file in the same path: " + calculatedModificationPath); } file = files.FirstOrDefault(); } if (file != null) { using (var stream = file.OpenStream()) { var data = stream.ReadFully((int)stream.Length); var ext = asset.GetOrCreateExtensionData <TextAssetExtensionData>(); ext.Encoding = Encoding.UTF8; ext.Data = data; return(true); } } return(false); }
private void Handle(IAssetOrResourceLoadedContext context) { if (context.Asset is TAsset castedAsset && ShouldHandleAsset(castedAsset, context)) { var unqiuePath = context.GetUniqueFileSystemAssetPath(castedAsset); var modificationFilePath = CalculateModificationFilePath(castedAsset, context); if ((CheckDirectory && RedirectedDirectory.DirectoryExists(modificationFilePath)) || (!CheckDirectory && RedirectedDirectory.FileExists(modificationFilePath))) { try { bool handled = ReplaceOrUpdateAsset(modificationFilePath, ref castedAsset, context); if (handled) { XuaLogger.AutoTranslator.Debug($"Replaced or updated resource file: '{unqiuePath}'."); } else { XuaLogger.AutoTranslator.Debug($"Did not replace or update resource file: '{unqiuePath}'."); } context.Complete( skipRemainingPostfixes: handled); } catch (Exception e) { XuaLogger.AutoTranslator.Error(e, $"An error occurred while replacing or updating resource file: '{unqiuePath}'."); } } else if (AutoTranslatorSettings.IsDumpingRedirectedResourcesEnabled) { try { bool handled = DumpAsset(modificationFilePath, castedAsset, context); if (handled) { XuaLogger.AutoTranslator.Debug($"Dumped resource file: '{unqiuePath}'."); } else { XuaLogger.AutoTranslator.Debug($"Did not dump resource file: '{unqiuePath}'."); } context.Complete( skipRemainingPostfixes: handled); } catch (Exception e) { XuaLogger.AutoTranslator.Error(e, $"An error occurred while dumping resource file: '{unqiuePath}'."); } } if (!ReferenceEquals(castedAsset, context.Asset)) { context.Asset = castedAsset; } } }