kopia lustrzana https://github.com/dl2alf/AirScout
210 wiersze
5.3 KiB
C#
210 wiersze
5.3 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using System.ComponentModel.Composition;
|
|
using System.ComponentModel;
|
|
using AirScout.PlaneFeeds.Plugin.MEFContract;
|
|
using System.IO;
|
|
using System.Xml.Serialization;
|
|
using System.Collections.Generic;
|
|
using System.Xml;
|
|
|
|
namespace AirScout.PlaneFeeds.Plugin
|
|
{
|
|
|
|
[Serializable]
|
|
public class PlaneFeedPluginSettings
|
|
{
|
|
[Browsable(false)]
|
|
[DefaultValue("")]
|
|
[XmlIgnore]
|
|
public string DisclaimerAccepted { get; set; }
|
|
|
|
public PlaneFeedPluginSettings()
|
|
{
|
|
// set all properties to their default values according to definition in [XmlElement(...] and overload all properties from configuration file
|
|
foreach (var property in this.GetType().GetProperties())
|
|
{
|
|
try
|
|
{
|
|
// initialize all properties with default value if set
|
|
if (Attribute.IsDefined(property, typeof(DefaultValueAttribute)))
|
|
{
|
|
property.SetValue(this, ((DefaultValueAttribute)Attribute.GetCustomAttribute(
|
|
property, typeof(DefaultValueAttribute)))?.Value, null);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
}
|
|
}
|
|
Load();
|
|
}
|
|
|
|
public void Load()
|
|
{
|
|
string filename = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase.ToLower().Replace(".dll", ".cfg")).LocalPath;
|
|
// do nothing if file not exists
|
|
if (!File.Exists(filename))
|
|
return;
|
|
try
|
|
{
|
|
string xml = "";
|
|
using (StreamReader sr = new StreamReader(filename))
|
|
{
|
|
xml = sr.ReadToEnd();
|
|
}
|
|
XmlDocument xdoc = new XmlDocument();
|
|
xdoc.LoadXml(xml);
|
|
PropertyInfo[] properties = this.GetType().GetProperties();
|
|
foreach (PropertyInfo p in properties)
|
|
{
|
|
XmlNodeList list = xdoc.GetElementsByTagName(p.Name);
|
|
if (list != null)
|
|
{
|
|
// setting found
|
|
p.SetValue(this,list[0].InnerText,null);
|
|
}
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("[" + this.GetType().Name + "]: Cannot load settings from " + filename + ", " + ex.Message);
|
|
}
|
|
}
|
|
|
|
public void Save()
|
|
{
|
|
string filename = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase.ToLower().Replace(".dll", ".cfg")).LocalPath;
|
|
try
|
|
{
|
|
XmlSerializer s = new XmlSerializer(this.GetType());
|
|
s.Serialize(File.Create(filename), this);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new InvalidOperationException("[" + this.GetType().Name + "]: Cannot save settings to " + filename + ", " + ex.Message);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
[Export(typeof(IPlaneFeedPlugin))]
|
|
[ExportMetadata("Name", "PlaneFeedPlugin")]
|
|
public class PlaneFeedPlugin : IPlaneFeedPlugin
|
|
{
|
|
protected PlaneFeedPluginSettings Settings = new PlaneFeedPluginSettings();
|
|
|
|
public string Name
|
|
{
|
|
get
|
|
{
|
|
return "";
|
|
}
|
|
}
|
|
public string Version
|
|
{
|
|
get
|
|
{
|
|
return Assembly.GetExecutingAssembly().GetName().Version.ToString();
|
|
}
|
|
}
|
|
|
|
public string Info { get; }
|
|
|
|
public bool HasSettings
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public bool CanImport
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public bool CanExport
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public string Disclaimer
|
|
{
|
|
get
|
|
{
|
|
return "";
|
|
}
|
|
}
|
|
|
|
public string DisclaimerAccepted
|
|
{
|
|
get
|
|
{
|
|
return Settings.DisclaimerAccepted;
|
|
}
|
|
set
|
|
{
|
|
Settings.DisclaimerAccepted = value;
|
|
}
|
|
}
|
|
|
|
public void ResetSettings()
|
|
{
|
|
// nothing to do
|
|
}
|
|
|
|
public void LoadSettings()
|
|
{
|
|
// nothing to do
|
|
}
|
|
|
|
public void SaveSettings()
|
|
{
|
|
// nothing to do
|
|
}
|
|
|
|
public object GetSettings()
|
|
{
|
|
return this.Settings;
|
|
}
|
|
|
|
public void ImportSettings()
|
|
{
|
|
// nothing to do
|
|
}
|
|
|
|
public void ExportSettings()
|
|
{
|
|
// nothing to do
|
|
}
|
|
|
|
public void Start(PlaneFeedPluginArgs args)
|
|
{
|
|
// nothing to do
|
|
}
|
|
|
|
public PlaneFeedPluginPlaneInfoList GetPlanes(PlaneFeedPluginArgs args)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
public void Stop(PlaneFeedPluginArgs args)
|
|
{
|
|
// nothing to do
|
|
}
|
|
|
|
// **************************** END OF INTERFACE *********************************
|
|
|
|
}
|
|
}
|