ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/RomCheater/trunk/RomCheater.UserSettingsSupport/SettingSubscriber.cs
Revision: 722
Committed: Tue Jun 18 19:18:05 2013 UTC (9 years, 11 months ago) by william
File size: 8591 byte(s)
Log Message:

File Contents

# Content
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Reflection;
6 using System.Configuration;
7 using System.Xml.Serialization;
8 using System.IO;
9 using System.Collections;
10 using System.Security.Policy;
11 using System.Security.Cryptography;
12
13 namespace RomCheater.UserSettingsSupport
14 {
15 public sealed class SettingSubscriber
16 {
17 #region t
18
19
20 #endregion
21
22
23 public SettingSubscriber() { }
24 //public void AddSubscriber(System.Configuration.ApplicationSettingsBase settings) { AddSubscriber(null, settings); }
25 public void AddSubscriber(object consumer, System.Configuration.ApplicationSettingsBase ownersettings)
26 {
27 this.OwnerSettings = ownersettings;
28
29 if (this.OwnerSettings == null)
30 {
31 throw new ArgumentNullException("ownersettings", "ownersettings cannot be null");
32 }
33
34 this.Consumer = consumer;
35 LoadSettings();
36 this.UpgradeSettingsIfNeeded();
37 }
38
39
40
41 private object _Consumer;
42 /// <summary>
43 /// The object that will consume the settings
44 /// </summary>
45 private object Consumer
46 {
47 get { return _Consumer; }
48 set { _Consumer = value; }
49 }
50
51
52
53 /// <summary>
54 /// The Assembly that owns the settings
55 /// </summary>
56 private Assembly OwningAsembly
57 {
58 get { return this.OwnerSettings.GetType().Assembly; }
59 }
60
61 /// <summary>
62 /// The Assembly that will consume the settings
63 /// </summary>
64 private Assembly ConsumerAssembly
65 {
66 get { return this.Consumer == null ? Assembly.GetExecutingAssembly() : this.Consumer.GetType().Assembly; }
67 }
68
69 private System.Configuration.ApplicationSettingsBase _OwnerSettings;
70 public System.Configuration.ApplicationSettingsBase OwnerSettings
71 {
72 get { return _OwnerSettings; }
73 private set { _OwnerSettings = value; }
74 }
75
76 /// <summary>
77 /// Indicates if the consumer is the owning assemlby of the settings
78 /// If the value is false, then the settings are being accessed remotely
79 /// </summary>
80 private bool IsOwningAssembly
81 {
82 get { return this.ConsumerAssembly == this.OwningAsembly; }
83 }
84
85 private Configuration _config = null;
86
87 #region LoadSettings()
88 private void LoadSettings()
89 {
90 if (!this.IsOwningAssembly)
91 {
92 //// we need to read the settings in
93 ////string ConfigFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
94 ////string ConfigFile = ConfigurationManager.OpenExeConfiguration(SettingsAssmebly.Location).FilePath;
95 //string path = string.Empty;
96 //string profile_dir = Environment.GetEnvironmentVariable("LocalAppData");
97 //string company_name = ((AssemblyCompanyAttribute)Attribute.GetCustomAttribute(this.OwningAsembly, typeof(AssemblyCompanyAttribute), false)).Company;
98 //string app_fullname = new FileInfo(this.OwningAsembly.Location).Name;
99 //string evidence_type = this.OwningAsembly.GetName().GetPublicKey().Length == 0 ? EVIDENCE_URL : EVIDENCE_STRONGNAME;
100 //string evidence_hash = "<HASH>";
101 //string version = this.OwningAsembly.GetName().Version.ToString();
102 //string config = "user.config";
103 //StringBuilder builder = new StringBuilder();
104 //builder.AppendFormat(@"{0}", profile_dir);
105 //if (company_name != string.Empty)
106 //{
107 // builder.AppendFormat(@"\{0}", company_name.Replace(" ", "_"));
108 //}
109 //builder.AppendFormat(@"\{0}", app_fullname);
110 //builder.AppendFormat(@"_{0}", evidence_type);
111 //builder.AppendFormat(@"_{0}", evidence_hash);
112 //builder.AppendFormat(@"\{0}", version);
113 //builder.AppendFormat(@"\{0}", config);
114 //path = builder.ToString();
115 //#region Hash testing
116 //Hash owner = new Hash(this.OwningAsembly);
117 //Hash consumer = new Hash(this.ConsumerAssembly);
118 //#endregion
119
120 IsolatedStoragePath isp1 = new IsolatedStoragePath(this.OwningAsembly);
121 IsolatedStoragePath isp2 = new IsolatedStoragePath(this.ConsumerAssembly);
122
123 }
124 else
125 {
126 string ConfigFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
127 }
128 }
129 #endregion
130
131
132
133 public void UpgradeSettings()
134 {
135 if (this.OwnerSettings != null)
136 {
137 this.OwnerSettings.Upgrade();
138 return;
139 }
140 throw new ArgumentNullException("Settings", "Settings cannot be null");
141 }
142
143 public void SaveSettings()
144 {
145 if (this.OwnerSettings != null)
146 {
147 this.OwnerSettings.Save();
148 return;
149 }
150 throw new ArgumentNullException("Settings", "Settings cannot be null");
151
152 }
153 public void ReloadSettings()
154 {
155 if (this.OwnerSettings != null)
156 {
157 this.OwnerSettings.Reload();
158 return;
159 }
160 throw new ArgumentNullException("Settings", "Settings cannot be null");
161 }
162 public void ResetSettings()
163 {
164 if (this.OwnerSettings != null)
165 {
166 this.OwnerSettings.Reset();
167 return;
168 }
169 throw new ArgumentNullException("Settings", "Settings cannot be null");
170 }
171 public void UpgradeSettingsIfNeeded()
172 {
173 if (this.OwnerSettings != null)
174 {
175 //SettingCollections.Add(e.Settings);
176 foreach (SettingsProperty prop in this.OwnerSettings.Properties)
177 {
178 if (prop.Name == "UpgradeRequired")
179 {
180 bool UpgradeRequired = Convert.ToBoolean(this.OwnerSettings[prop.Name]);
181 try
182 {
183 if (UpgradeRequired)
184 {
185 UpgradeSettings();
186 //Settings.Reload();
187 SetValue(prop.Name, false);
188 SaveSettings();
189 }
190 }
191 catch { ResetSettings(); }
192 break;
193 }
194 }
195 }
196 else
197 {
198 throw new ArgumentNullException("Settings", "Settings cannot be null");
199 }
200 }
201 public void SetValue(string propertyName, object value)
202 {
203 if (this.OwnerSettings != null)
204 {
205 try
206 {
207 this.OwnerSettings[propertyName] = value;
208 }
209 catch (Exception ex)
210 {
211 throw new KeyNotFoundException(string.Format("Could not find property: '{0}'"), ex);
212 }
213 }
214 else
215 {
216 throw new ArgumentNullException("Settings", "Settings cannot be null");
217 }
218 }
219 public object GetValue(string propertyName)
220 {
221 if (this.OwnerSettings != null)
222 {
223 try
224 {
225 return this.OwnerSettings[propertyName];
226 }
227 catch (Exception ex)
228 {
229 throw new KeyNotFoundException(string.Format("Could not find property: '{0}'"), ex);
230 }
231 }
232 else
233 {
234 throw new ArgumentNullException("Settings", "Settings cannot be null");
235 }
236 }
237 }
238 }