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);
        }
Пример #2
0
        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;
                }
            }
        }