-
Notifications
You must be signed in to change notification settings - Fork 2
/
SiteSettings.vb
211 lines (170 loc) · 7.11 KB
/
SiteSettings.vb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#Region "GPL"
' This file is part of MobileMyth.
' MobileMyth is free software: you can redistribute it and/or modify
' it under the terms of the GNU General Public License as published by
' the Free Software Foundation, either version 3 of the License, or
' (at your option) any later version.
' MobileMyth is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' GNU General Public License for more details.
' You should have received a copy of the GNU General Public License
' along with MobileMyth. If not, see <http://www.gnu.org/licenses/>.
' Copyright 2012-2014 Jonathan Heizer jheizer@gmail.com
#End Region
Public Class SiteSettings
Private Shared Logger As log4net.ILog = log4net.LogManager.GetLogger(GetType(SiteSettings))
Private Shared Path As String = ""
Private Shared Data As XElement
Private Shared LockObj As New Hashtable
Shared Sub New()
Try
Logger.Info("Loading settings file")
Path = IO.Path.Combine(HttpContext.Current.Server.MapPath("~"), "App_Data", "settings", "settings.xml")
SyncLock (LockObj)
If Not IO.File.Exists(Path) Then
Dim NwFile As New IO.StreamWriter(Path)
NwFile.Write("<settings><Frontends></Frontends></settings>")
NwFile.Close()
End If
Data = XElement.Load(Path)
End SyncLock
Catch ex As Exception
Logger.Error("Error loading settings file" & ControlChars.NewLine & ex.ToString)
End Try
End Sub
Public Shared Property Setting(ByVal Name As String) As String
Get
Dim Ret As String = HttpContext.Current.Cache("Setting:" & Name)
If Ret Is Nothing Then
SyncLock (LockObj)
Try
Ret = (From s In Data.Descendants(Name)
Select s).First().Value
HttpContext.Current.Cache.Insert("Setting:" & Name, Ret, New System.Web.Caching.CacheDependency(Path))
Catch ex As Exception
Ret = ""
End Try
End SyncLock
End If
Return Ret
End Get
Set(ByVal value As String)
SyncLock (LockObj)
Dim St As XElement = (From s In Data.Descendants(Name)
Select s).FirstOrDefault
If St Is Nothing Then
St = New XElement(Name)
Data.Add(St)
End If
St.Value = value
Data.Save(Path)
End SyncLock
End Set
End Property
Public Shared Property SettingBool(ByVal Name As String) As Boolean
Get
Dim ret As String = Setting(Name)
If Not String.IsNullOrEmpty(ret) Then
Dim tmp As Boolean = False
If Boolean.TryParse(ret, tmp) Then
Return tmp
End If
End If
Return False
End Get
Set(ByVal value As Boolean)
Setting(Name) = value.ToString
End Set
End Property
Public Shared ReadOnly Property SettingBool(ByVal Name As String, ByVal DefaultValue As Boolean) As Boolean
Get
Dim ret As String = Setting(Name)
If Not String.IsNullOrEmpty(ret) Then
Dim tmp As Boolean = False
If Boolean.TryParse(ret, tmp) Then
Return tmp
Else
Return DefaultValue
End If
Else
Return DefaultValue
End If
Return False
End Get
End Property
Public Shared Property FrontendSettingBool(ByVal Name As String) As Boolean
Get
Dim ret As String = FrontendSetting(Name)
If Not String.IsNullOrEmpty(ret) Then
Dim tmp As Boolean = False
If Boolean.TryParse(ret, tmp) Then
Return tmp
End If
End If
Return False
End Get
Set(ByVal value As Boolean)
FrontendSetting(Name) = value.ToString
End Set
End Property
Public Shared ReadOnly Property FrontendSettingBool(ByVal Name As String, ByVal DefaultValue As Boolean) As Boolean
Get
Dim ret As String = FrontendSetting(Name)
If Not String.IsNullOrEmpty(ret) Then
Dim tmp As Boolean = False
If Boolean.TryParse(ret, tmp) Then
Return tmp
Else
Return DefaultValue
End If
End If
Return False
End Get
End Property
Public Shared Property FrontendSetting(ByVal Name As String) As String
Get
Dim FE As String = HttpContext.Current.Request.UserHostName
Dim Ret As String = HttpContext.Current.Cache(FE & Name)
If Ret Is Nothing Then
SyncLock (LockObj)
Try
Dim Nd As XElement = (From s In Data.Descendants("Frontend")
Where s.Attribute("name") = FE
Select s).FirstOrDefault()
If Nd Is Nothing Then
Return ""
End If
Ret = Nd.Element(Name).Value
HttpContext.Current.Cache.Insert(FE & Name, Ret, New System.Web.Caching.CacheDependency(Path))
Catch ex As Exception
Ret = ""
End Try
End SyncLock
End If
Return Ret
End Get
Set(ByVal value As String)
Dim FE As String = HttpContext.Current.Request.UserHostName
'Look for the FE
Dim Nd As XElement = (From s In Data.Descendants("Frontend")
Where s.Attribute("name") = FE
Select s).FirstOrDefault()
SyncLock (LockObj)
If Nd Is Nothing Then
Nd = New XElement("Frontend")
Nd.SetAttributeValue("name", FE)
Data.Descendants("Frontends").First.Add(Nd)
End If
'Find the value
Dim ValNd As XElement = Nd.Descendants(Name).FirstOrDefault
If ValNd Is Nothing Then
ValNd = New XElement(Name)
Nd.Add(ValNd)
End If
ValNd.Value = value
Data.Save(Path)
End SyncLock
End Set
End Property
End Class