Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 63 additions & 33 deletions Rocket/Rocket.API/Collections/TranslationList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ namespace Rocket.API.Collections
{
[Serializable]
[XmlType(AnonymousType = false, IncludeInSchema = true, TypeName = "Translation")]


public class TranslationListEntry
{
[XmlAttribute]
Expand All @@ -23,6 +25,12 @@ public TranslationListEntry(string id, string value)
public TranslationListEntry() { }
}







public static class TranslationListExtension{
public static void AddUnknownEntries(this TranslationList defaultTranslations, IAsset<TranslationList> translations)
{
Expand All @@ -42,20 +50,33 @@ public static void AddUnknownEntries(this TranslationList defaultTranslations, I
[XmlRoot("Translations")]
[XmlType(AnonymousType = false, IncludeInSchema = true, TypeName = "Translation")]
[Serializable]
public class TranslationList : IDefaultable, IEnumerable<TranslationListEntry>


public class TranslationList : IDefaultable, ICollection<TranslationListEntry>
{
public TranslationList() { }

protected List<TranslationListEntry> translations = new List<TranslationListEntry>();

public IEnumerator<TranslationListEntry> GetEnumerator()
{
return translations.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
public int Count => translations.Count;

public bool IsReadOnly => false;

public string Translate(string translationKey, params object[] placeholder)
{
return translations.GetEnumerator();
}
string value = this[translationKey];
if (String.IsNullOrEmpty(value)) return translationKey;

if (value.Contains("{") && value.Contains("}") && placeholder != null && placeholder.Length != 0)
{
for (int i = 0; i < placeholder.Length; i++)
{
if (placeholder[i] == null) placeholder[i] = "NULL";
}
value = String.Format(value, placeholder);
}
return value;
}
public void Add(Object o)
{
translations.Add((TranslationListEntry)o);
Expand All @@ -66,16 +87,6 @@ public void Add(string key, string value)
translations.Add(new TranslationListEntry(key, value));
}

public void AddRange(IEnumerable<TranslationListEntry> collection)
{
translations.AddRange(collection);
}

public void AddRange(TranslationList collection)
{
translations.AddRange(collection.translations);
}

public string this[string key]
{
get
Expand All @@ -87,26 +98,45 @@ public string this[string key]
translations.ForEach(k => { if (k.Id == key) k.Value = value; });
}
}
public virtual void LoadDefaults()
{

public string Translate(string translationKey, params object[] placeholder)
}
public IEnumerator<TranslationListEntry> GetEnumerator()
{
string value = this[translationKey];
if (String.IsNullOrEmpty(value)) return translationKey;

if (value.Contains("{") && value.Contains("}") && placeholder != null && placeholder.Length != 0)
{
for (int i = 0; i < placeholder.Length; i++)
{
if (placeholder[i] == null) placeholder[i] = "NULL";
}
value = String.Format(value, placeholder);
}
return value;
return translations.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return translations.GetEnumerator();
}

public virtual void LoadDefaults()
public void Add(TranslationListEntry item)
{
translations.Add(item);
}

public void Clear()
{
translations.Clear();
}

public bool Contains(TranslationListEntry item)
{
return translations.Contains(item);
}

public void CopyTo(TranslationListEntry[] array, int arrayIndex)
{
translations.CopyTo(array, arrayIndex);
}

public bool Remove(TranslationListEntry item)
{

return translations.Remove(item);
}
}



}
79 changes: 79 additions & 0 deletions Rocket/Rocket.Core/Assets/JsonFileAsset.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
using Rocket.Core.Assets;
using System;
using System.IO;
using Rocket.API;
using System.Xml.Serialization;
using SDG.Framework.IO.Serialization;
using Newtonsoft.Json;
using SDG.Framework.IO.Deserialization;

namespace Rocket.Core.Assets
{
public class JsonFileAsset<T> : Asset<T> where T : class, IDefaultable
{
private JSONDeserializer deserializer;
private string file;
T defaultInstance;

public JsonFileAsset(string file, Type[] extraTypes = null, T defaultInstance = null)
{

this.deserializer = new JSONDeserializer();
this.file = file;
this.defaultInstance = defaultInstance;
Load();
}

public override T Save()
{

try
{
string directory = Path.GetDirectoryName(file);
if (!String.IsNullOrEmpty(directory) && !Directory.Exists(directory)) Directory.CreateDirectory(directory);


if (instance == null)
{
if (defaultInstance == null)
{
instance = Activator.CreateInstance<T>();
instance.LoadDefaults();
}
else
{
instance = defaultInstance;
}
}
File.WriteAllText(file,JsonConvert.SerializeObject(instance, Formatting.Indented));
return instance;

}
catch (Exception ex)
{
throw new Exception(String.Format("Failed to serialize JSONFileAsset: {0}", file), ex);
}
}

public override void Load(AssetLoaded<T> callback = null)
{
try
{
if (!String.IsNullOrEmpty(file) && File.Exists(file))
{
instance = deserializer.deserialize<T>(file);
}

Save();

if (callback != null)
callback(this);
}
catch (Exception ex)
{
throw new Exception(String.Format("Failed to deserialize JSONFileAsset: {0}", file), ex);
}
}

}
}
4 changes: 2 additions & 2 deletions Rocket/Rocket.Core/Environment.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ public static void Initialize()
public static readonly string CommandsFile = "Commands.config.xml";


public static readonly string PluginTranslationFileTemplate = "{0}.{1}.translation.xml";
public static readonly string PluginConfigurationFileTemplate = "{0}.configuration.xml";
public static readonly string PluginTranslationFileTemplate = "{0}.{1}.translation.{2}";
public static readonly string PluginConfigurationFileTemplate = "{0}.configuration.{1}";

public static readonly string WebConfigurationTemplate = "{0}?configuration={1}&instance={2}";
}
Expand Down
31 changes: 31 additions & 0 deletions Rocket/Rocket.Core/Extensions/JsonExtension.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using Newtonsoft.Json;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Rocket.Core.Extensions
{
public class JsonExtension : JsonConverter
{
private readonly string _comment;
public JsonExtension(string comment)
{
_comment = comment;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(value);
writer.WriteComment(_comment); // append comment
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanConvert(Type objectType) => true;
public override bool CanRead => false;
}
}
49 changes: 42 additions & 7 deletions Rocket/Rocket.Core/Plugins/RocketPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using Rocket.Core.Extensions;
using Rocket.Core.Logging;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
Expand All @@ -19,7 +20,7 @@ public class RocketPlugin<RocketPluginConfiguration> : RocketPlugin, IRocketPlug

public RocketPlugin() : base()
{
string configurationFile = Path.Combine(Directory, string.Format(Core.Environment.PluginConfigurationFileTemplate, Name));
string configurationFile = Path.Combine(Directory, string.Format(Core.Environment.PluginConfigurationFileTemplate, Name, Core.R.Settings.Instance.UseJsonForPlugins ? "json":"xml"));

string url = "";

Expand All @@ -36,7 +37,20 @@ public RocketPlugin() : base()
}
else
{
configuration = new XMLFileAsset<RocketPluginConfiguration>(configurationFile);
if(!Core.R.Settings.Instance.UseJsonForPlugins)
{
configuration = new XMLFileAsset<RocketPluginConfiguration>(configurationFile);
}
else
{
configuration = new JsonFileAsset<RocketPluginConfiguration>(configurationFile);
}






}
}

Expand All @@ -54,8 +68,22 @@ public class RocketPlugin : MonoBehaviour, IRocketPlugin
public delegate void PluginLoading(IRocketPlugin plugin, ref bool cancelLoading);
public static event PluginLoading OnPluginLoading;

private XMLFileAsset<TranslationList> translations;
public IAsset<TranslationList> Translations { get { return translations; } }

private XMLFileAsset<TranslationList> translationsXml;



private JsonFileAsset<TranslationList> translationsJson;

public IAsset<TranslationList> Translations { get
{
if(Core.R.Settings.Instance.UseJsonForPlugins)
return translationsJson;
else
return translationsXml;
}
}


private PluginState state = PluginState.Unloaded;
public PluginState State
Expand Down Expand Up @@ -88,8 +116,14 @@ public RocketPlugin()

if (DefaultTranslations != null | DefaultTranslations.Count() != 0)
{
translations = new XMLFileAsset<TranslationList>(Path.Combine(Directory,String.Format(Environment.PluginTranslationFileTemplate, Name, R.Settings.Instance.LanguageCode)), new Type[] { typeof(TranslationList), typeof(TranslationListEntry) }, DefaultTranslations);
DefaultTranslations.AddUnknownEntries(translations);
if(!Core.R.Settings.Instance.UseJsonForPlugins)
translationsXml = new XMLFileAsset<TranslationList>(Path.Combine(Directory,String.Format(Environment.PluginTranslationFileTemplate, Name, R.Settings.Instance.LanguageCode, Core.R.Settings.Instance.UseJsonForPlugins ? "json" : "xml")), new Type[] { typeof(TranslationList), typeof(TranslationListEntry) }, DefaultTranslations);
else
translationsJson = new JsonFileAsset<TranslationList>(Path.Combine(Directory, String.Format(Environment.PluginTranslationFileTemplate, Name, R.Settings.Instance.LanguageCode, Core.R.Settings.Instance.UseJsonForPlugins ? "json" : "xml")), new Type[] { typeof(TranslationList),typeof(TranslationListEntry)}, DefaultTranslations);



DefaultTranslations.AddUnknownEntries(Translations);
}
}

Expand Down Expand Up @@ -120,7 +154,7 @@ public void ReloadPlugin()
public virtual void LoadPlugin()
{
Logging.Logger.Log("\n[loading] " + Name, ConsoleColor.Cyan);
translations.Load();
Translations.Load();
R.Commands.RegisterFromAssembly(Assembly);

try
Expand Down Expand Up @@ -210,4 +244,5 @@ public void TryRemoveComponent<T>() where T : Component
gameObject.TryRemoveComponent<T>();
}
}

}
Loading