Settings.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. using XUnity.AutoTranslator.Plugin.Core.Constants;
  8. using XUnity.AutoTranslator.Plugin.Core.Debugging;
  9. using XUnity.AutoTranslator.Plugin.Core.Extensions;
  10. using XUnity.AutoTranslator.Plugin.Core.Utilities;
  11. namespace XUnity.AutoTranslator.Plugin.Core.Configuration
  12. {
  13. internal static class Settings
  14. {
  15. // cannot be changed
  16. public static readonly int MaxFailuresForSameTextPerEndpoint = 3;
  17. public static readonly string PluginFolder = "Translators";
  18. public static readonly int MaxMaxCharactersPerTranslation = 500;
  19. public static readonly string DefaultLanguage = "en";
  20. public static readonly string DefaultFromLanguage = "ja";
  21. public static readonly string EnglishLanguage = "en";
  22. public static readonly string Romaji = "romaji";
  23. public static readonly int MaxErrors = 5;
  24. public static readonly float ClipboardDebounceTime = 1f;
  25. public static readonly int MaxTranslationsBeforeShutdown = 8000;
  26. public static readonly int MaxUnstartedJobs = 4000;
  27. public static readonly float IncreaseBatchOperationsEvery = 30;
  28. public static readonly int MaximumStaggers = 6;
  29. public static readonly int PreviousTextStaggerCount = 3;
  30. public static readonly int MaximumConsecutiveFramesTranslated = 90;
  31. public static readonly int MaximumConsecutiveSecondsTranslated = 60;
  32. public static bool UsesWhitespaceBetweenWords = false;
  33. public static string ApplicationName;
  34. public static float Timeout = 50.0f;
  35. public static bool IsShutdown = false;
  36. public static bool IsShutdownFatal = false;
  37. public static int TranslationCount = 0;
  38. public static int MaxAvailableBatchOperations = 50;
  39. public static readonly float MaxTranslationsQueuedPerSecond = 5;
  40. public static readonly int MaxSecondsAboveTranslationThreshold = 30;
  41. public static readonly int TranslationQueueWatchWindow = 6;
  42. // can be changed
  43. public static string ServiceEndpoint;
  44. public static string Language;
  45. public static string FromLanguage;
  46. public static string OutputFile;
  47. public static string TranslationDirectory;
  48. public static float Delay;
  49. public static int MaxCharactersPerTranslation;
  50. public static bool EnablePrintHierarchy;
  51. public static bool EnableConsole;
  52. public static bool EnableDebugLogs;
  53. public static string AutoTranslationsFilePath;
  54. public static bool EnableIMGUI;
  55. public static bool EnableUGUI;
  56. public static bool EnableNGUI;
  57. public static bool EnableTextMeshPro;
  58. public static bool EnableUtage;
  59. public static bool AllowPluginHookOverride;
  60. public static bool IgnoreWhitespaceInDialogue;
  61. public static bool IgnoreWhitespaceInNGUI;
  62. public static int MinDialogueChars;
  63. public static int ForceSplitTextAfterCharacters;
  64. public static bool EnableMigrations;
  65. public static string MigrationsTag;
  66. public static bool EnableBatching;
  67. public static bool TrimAllText;
  68. public static bool EnableUIResizing;
  69. public static bool UseStaticTranslations;
  70. public static string OverrideFont;
  71. public static string UserAgent;
  72. public static WhitespaceHandlingStrategy WhitespaceRemovalStrategy;
  73. public static float? ResizeUILineSpacingScale;
  74. public static bool ForceUIResizing;
  75. public static string[] IgnoreTextStartingWith;
  76. public static HashSet<string> GameLogTextPaths;
  77. public static bool TextGetterCompatibilityMode;
  78. public static TextPostProcessing RomajiPostProcessing;
  79. public static TextPostProcessing TranslationPostProcessing;
  80. public static string TextureDirectory;
  81. public static bool EnableTextureTranslation;
  82. public static bool EnableTextureDumping;
  83. public static bool EnableTextureToggling;
  84. public static bool EnableTextureScanOnSceneLoad;
  85. public static bool EnableSpriteRendererHooking;
  86. public static bool LoadUnmodifiedTextures;
  87. public static TextureHashGenerationStrategy TextureHashGenerationStrategy;
  88. public static bool CopyToClipboard;
  89. public static int MaxClipboardCopyCharacters;
  90. public static void SetEndpoint( string id )
  91. {
  92. ServiceEndpoint = id;
  93. PluginEnvironment.Current.Preferences[ "Service" ][ "Endpoint" ].Value = id;
  94. PluginEnvironment.Current.SaveConfig();
  95. }
  96. public static void Configure()
  97. {
  98. try
  99. {
  100. ApplicationName = Path.GetFileNameWithoutExtension( ApplicationInformation.StartupPath );
  101. }
  102. catch( Exception e )
  103. {
  104. ApplicationName = "Unknown";
  105. XuaLogger.Current.Error( e, "An error occurred while getting application name." );
  106. }
  107. ServiceEndpoint = PluginEnvironment.Current.Preferences.GetOrDefault( "Service", "Endpoint", KnownTranslateEndpointNames.GoogleTranslate );
  108. Language = string.Intern( PluginEnvironment.Current.Preferences.GetOrDefault( "General", "Language", DefaultLanguage ) );
  109. FromLanguage = string.Intern( PluginEnvironment.Current.Preferences.GetOrDefault( "General", "FromLanguage", DefaultFromLanguage ) );
  110. TranslationDirectory = PluginEnvironment.Current.Preferences.GetOrDefault( "Files", "Directory", "Translation" );
  111. OutputFile = PluginEnvironment.Current.Preferences.GetOrDefault( "Files", "OutputFile", @"Translation\_AutoGeneratedTranslations.{lang}.txt" );
  112. EnableIMGUI = PluginEnvironment.Current.Preferences.GetOrDefault( "TextFrameworks", "EnableIMGUI", false );
  113. EnableUGUI = PluginEnvironment.Current.Preferences.GetOrDefault( "TextFrameworks", "EnableUGUI", true );
  114. EnableNGUI = PluginEnvironment.Current.Preferences.GetOrDefault( "TextFrameworks", "EnableNGUI", true );
  115. EnableTextMeshPro = PluginEnvironment.Current.Preferences.GetOrDefault( "TextFrameworks", "EnableTextMeshPro", true );
  116. EnableUtage = PluginEnvironment.Current.Preferences.GetOrDefault( "TextFrameworks", "EnableUtage", true );
  117. AllowPluginHookOverride = PluginEnvironment.Current.Preferences.GetOrDefault( "TextFrameworks", "AllowPluginHookOverride", true );
  118. Delay = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "Delay", 0f );
  119. MaxCharactersPerTranslation = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "MaxCharactersPerTranslation", 200 );
  120. IgnoreWhitespaceInDialogue = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "IgnoreWhitespaceInDialogue", true );
  121. IgnoreWhitespaceInNGUI = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "IgnoreWhitespaceInNGUI", true );
  122. MinDialogueChars = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "MinDialogueChars", 20 );
  123. ForceSplitTextAfterCharacters = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "ForceSplitTextAfterCharacters", 0 );
  124. CopyToClipboard = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "CopyToClipboard", false );
  125. MaxClipboardCopyCharacters = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "MaxClipboardCopyCharacters", 450 );
  126. EnableUIResizing = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "EnableUIResizing", true );
  127. EnableBatching = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "EnableBatching", true );
  128. TrimAllText = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "TrimAllText", ClrTypes.AdvEngine == null );
  129. UseStaticTranslations = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "UseStaticTranslations", true );
  130. OverrideFont = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "OverrideFont", string.Empty );
  131. ResizeUILineSpacingScale = PluginEnvironment.Current.Preferences.GetOrDefault<float?>( "Behaviour", "ResizeUILineSpacingScale", null );
  132. ForceUIResizing = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "ForceUIResizing", false );
  133. IgnoreTextStartingWith = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "IgnoreTextStartingWith", "\\u180e;" )
  134. ?.Split( new[] { ';' }, StringSplitOptions.RemoveEmptyEntries ).Select( x => JsonHelper.Unescape( x ) ).ToArray() ?? new string[ 0 ];
  135. TextGetterCompatibilityMode = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "TextGetterCompatibilityMode", false );
  136. GameLogTextPaths = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "GameLogTextPaths", string.Empty )
  137. ?.Split( new[] { ';' }, StringSplitOptions.RemoveEmptyEntries ).ToHashSet() ?? new HashSet<string>();
  138. GameLogTextPaths.RemoveWhere( x => !x.StartsWith( "/" ) ); // clean up to ensure no 'empty' entries
  139. WhitespaceRemovalStrategy = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "WhitespaceRemovalStrategy", WhitespaceHandlingStrategy.TrimPerNewline );
  140. RomajiPostProcessing = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "RomajiPostProcessing", TextPostProcessing.ReplaceMacronWithCircumflex | TextPostProcessing.RemoveApostrophes );
  141. TranslationPostProcessing = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "TranslationPostProcessing", TextPostProcessing.ReplaceMacronWithCircumflex );
  142. TextureDirectory = PluginEnvironment.Current.Preferences.GetOrDefault( "Texture", "TextureDirectory", @"Translation\Texture" );
  143. EnableTextureTranslation = PluginEnvironment.Current.Preferences.GetOrDefault( "Texture", "EnableTextureTranslation", false );
  144. EnableTextureDumping = PluginEnvironment.Current.Preferences.GetOrDefault( "Texture", "EnableTextureDumping", false );
  145. EnableTextureToggling = PluginEnvironment.Current.Preferences.GetOrDefault( "Texture", "EnableTextureToggling", false );
  146. EnableTextureScanOnSceneLoad = PluginEnvironment.Current.Preferences.GetOrDefault( "Texture", "EnableTextureScanOnSceneLoad", false );
  147. EnableSpriteRendererHooking = PluginEnvironment.Current.Preferences.GetOrDefault( "Texture", "EnableSpriteRendererHooking", false );
  148. LoadUnmodifiedTextures = PluginEnvironment.Current.Preferences.GetOrDefault( "Texture", "LoadUnmodifiedTextures", false );
  149. TextureHashGenerationStrategy = PluginEnvironment.Current.Preferences.GetOrDefault( "Texture", "TextureHashGenerationStrategy", TextureHashGenerationStrategy.FromImageName );
  150. if( MaxCharactersPerTranslation > MaxMaxCharactersPerTranslation )
  151. {
  152. PluginEnvironment.Current.Preferences[ "Behaviour" ][ "MaxCharactersPerTranslation" ].Value = MaxMaxCharactersPerTranslation.ToString( CultureInfo.InvariantCulture );
  153. MaxCharactersPerTranslation = MaxMaxCharactersPerTranslation;
  154. }
  155. UserAgent = PluginEnvironment.Current.Preferences.GetOrDefault( "Http", "UserAgent", string.Empty );
  156. EnablePrintHierarchy = PluginEnvironment.Current.Preferences.GetOrDefault( "Debug", "EnablePrintHierarchy", false );
  157. EnableConsole = PluginEnvironment.Current.Preferences.GetOrDefault( "Debug", "EnableConsole", false );
  158. EnableDebugLogs = PluginEnvironment.Current.Preferences.GetOrDefault( "Debug", "EnableLog", false );
  159. EnableMigrations = PluginEnvironment.Current.Preferences.GetOrDefault( "Migrations", "Enable", true );
  160. MigrationsTag = PluginEnvironment.Current.Preferences.GetOrDefault( "Migrations", "Tag", string.Empty );
  161. AutoTranslationsFilePath = Path.Combine( PluginEnvironment.Current.DataPath, OutputFile.Replace( "{lang}", Language ) ).Replace( "/", "\\" ).Parameterize();
  162. UsesWhitespaceBetweenWords = LanguageHelper.RequiresWhitespaceUponLineMerging( FromLanguage );
  163. if( EnableMigrations )
  164. {
  165. Migrate();
  166. }
  167. // update tag
  168. MigrationsTag = PluginEnvironment.Current.Preferences[ "Migrations" ][ "Tag" ].Value = PluginData.Version;
  169. PluginEnvironment.Current.SaveConfig();
  170. }
  171. private static void Migrate()
  172. {
  173. }
  174. }
  175. }