Merge lp:~dangarner/xibo/1.2.2-pre into lp:xibo/1.3
- 1.2.2-pre
- Merge into faye
Proposed by
Dan Garner
Status: | Merged | ||||
---|---|---|---|---|---|
Merged at revision: | 211 | ||||
Proposed branch: | lp:~dangarner/xibo/1.2.2-pre | ||||
Merge into: | lp:xibo/1.3 | ||||
Diff against target: |
7154 lines (+4782/-473) (has conflicts) 36 files modified
client/dotNET/CacheManager.cs (+75/-1) client/dotNET/FileCollector.cs (+57/-28) client/dotNET/MainForm.cs (+88/-62) client/dotNET/Properties/Resources.Designer.cs (+1/-1) client/dotNET/Properties/Settings.Designer.cs (+14/-2) client/dotNET/Properties/Settings.settings (+5/-2) client/dotNET/Region.cs (+8/-1) client/dotNET/RequiredFiles.cs (+206/-0) client/dotNET/RssReader.cs (+1/-1) client/dotNET/Schedule.cs (+1/-1) client/dotNET/ScheduleManager.cs (+16/-1) client/dotNET/Web References/xmds/Reference.cs (+86/-19) client/dotNET/Web References/xmds/Reference.map (+1/-1) client/dotNET/Web References/xmds/xmds.wsdl (+24/-1) client/dotNET/XiboClient.csproj (+7/-5) client/dotNET/app.config (+5/-2) client/dotNET/bin/Release/XiboClient.exe.config (+24/-3) client/dotNET/bin/Release/XiboClient.vshost.exe.config (+24/-3) client/python/XiboClient.py (+196/-0) client/python/client.conf (+25/-0) client/python/configure.py (+1753/-0) client/python/gui.glade (+1451/-0) default.pot (+293/-283) server/README.TXT (+4/-4) server/install/database/27.sql (+9/-0) server/lib/app/kit.class.php (+9/-13) server/lib/data/display.data.class.php (+84/-6) server/lib/data/displaygroup.data.class.php (+9/-0) server/lib/data/schedule.data.class.php (+10/-5) server/lib/pages/display.class.php (+169/-19) server/lib/pages/layout.class.php (+8/-2) server/lib/pages/module.class.php (+16/-0) server/lib/pages/region.class.php (+5/-0) server/lib/pages/schedule.class.php (+14/-6) server/lib/service/service.wsdl (+23/-0) server/lib/service/xmdssoap.class.php (+61/-1) Text conflict in client/python/XiboClient.py Conflict adding file client/python/client.conf. Moved existing file to client/python/client.conf.moved. Conflict adding file client/python/configure.py. Moved existing file to client/python/configure.py.moved. Conflict adding file client/python/gui.glade. Moved existing file to client/python/gui.glade.moved. Conflict adding file client/python/xibo.ico. Moved existing file to client/python/xibo.ico.moved. |
||||
To merge this branch: | bzr merge lp:~dangarner/xibo/1.2.2-pre | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Dan Garner | Approve | ||
Review via email: mp+51553@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
Dan Garner (dangarner) : | # |
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'client/dotNET/CacheManager.cs' | |||
2 | --- client/dotNET/CacheManager.cs 2010-04-19 21:45:10 +0000 | |||
3 | +++ client/dotNET/CacheManager.cs 2011-02-28 15:09:00 +0000 | |||
4 | @@ -25,6 +25,7 @@ | |||
5 | 25 | using System.Windows.Forms; | 25 | using System.Windows.Forms; |
6 | 26 | using System.Xml.Serialization; | 26 | using System.Xml.Serialization; |
7 | 27 | using System.Diagnostics; | 27 | using System.Diagnostics; |
8 | 28 | using System.Xml; | ||
9 | 28 | 29 | ||
10 | 29 | namespace XiboClient | 30 | namespace XiboClient |
11 | 30 | { | 31 | { |
12 | @@ -173,7 +174,7 @@ | |||
13 | 173 | /// </summary> | 174 | /// </summary> |
14 | 174 | /// <param name="path"></param> | 175 | /// <param name="path"></param> |
15 | 175 | /// <returns>True is it is and false if it isnt</returns> | 176 | /// <returns>True is it is and false if it isnt</returns> |
17 | 176 | public bool IsValid(String path) | 177 | public bool IsValidPath(String path) |
18 | 177 | { | 178 | { |
19 | 178 | // TODO: what makes a path valid? | 179 | // TODO: what makes a path valid? |
20 | 179 | // Currently a path is valid if it is in the cache | 180 | // Currently a path is valid if it is in the cache |
21 | @@ -185,6 +186,10 @@ | |||
22 | 185 | { | 186 | { |
23 | 186 | if (file.path == path) | 187 | if (file.path == path) |
24 | 187 | { | 188 | { |
25 | 189 | // If we cached it over 2 minutes ago, then check the GetLastWriteTime | ||
26 | 190 | if (file.cacheDate > DateTime.Now.AddMinutes(-2)) | ||
27 | 191 | return true; | ||
28 | 192 | |||
29 | 188 | try | 193 | try |
30 | 189 | { | 194 | { |
31 | 190 | // Check to see if this file has been modified since the MD5 cache | 195 | // Check to see if this file has been modified since the MD5 cache |
32 | @@ -209,6 +214,75 @@ | |||
33 | 209 | // Reached the end of the cache and havent found the file. | 214 | // Reached the end of the cache and havent found the file. |
34 | 210 | return false; | 215 | return false; |
35 | 211 | } | 216 | } |
36 | 217 | |||
37 | 218 | /// <summary> | ||
38 | 219 | /// Is the provided layout file a valid layout (has all media) | ||
39 | 220 | /// </summary> | ||
40 | 221 | /// <param name="layoutFile"></param> | ||
41 | 222 | /// <returns></returns> | ||
42 | 223 | public bool IsValidLayout(string layoutFile) | ||
43 | 224 | { | ||
44 | 225 | Debug.WriteLine("Checking Layout " + layoutFile + " is valid"); | ||
45 | 226 | |||
46 | 227 | if (!IsValidPath(layoutFile)) | ||
47 | 228 | return false; | ||
48 | 229 | |||
49 | 230 | // Load the XLF, get all media ID's | ||
50 | 231 | XmlDocument layoutXml = new XmlDocument(); | ||
51 | 232 | layoutXml.Load(Properties.Settings.Default.LibraryPath + @"\" + layoutFile); | ||
52 | 233 | |||
53 | 234 | XmlNodeList mediaNodes = layoutXml.SelectNodes("//media"); | ||
54 | 235 | |||
55 | 236 | foreach (XmlNode media in mediaNodes) | ||
56 | 237 | { | ||
57 | 238 | // Is this a stored media type? | ||
58 | 239 | switch (media.Attributes["type"].Value) | ||
59 | 240 | { | ||
60 | 241 | case "video": | ||
61 | 242 | case "image": | ||
62 | 243 | case "flash": | ||
63 | 244 | case "ppt": | ||
64 | 245 | |||
65 | 246 | // Get the path and see if its valid | ||
66 | 247 | if (!IsValidPath(media.InnerText)) | ||
67 | 248 | return false; | ||
68 | 249 | |||
69 | 250 | break; | ||
70 | 251 | |||
71 | 252 | default: | ||
72 | 253 | continue; | ||
73 | 254 | } | ||
74 | 255 | } | ||
75 | 256 | |||
76 | 257 | return true; | ||
77 | 258 | } | ||
78 | 259 | |||
79 | 260 | /// <summary> | ||
80 | 261 | /// Regenerate from Required Files | ||
81 | 262 | /// </summary> | ||
82 | 263 | public void Regenerate() | ||
83 | 264 | { | ||
84 | 265 | if (!File.Exists(Application.UserAppDataPath + "\\" + Properties.Settings.Default.RequiredFilesFile)) | ||
85 | 266 | return; | ||
86 | 267 | |||
87 | 268 | // Open the XML file and check each required file that isnt already there | ||
88 | 269 | XmlDocument xml = new XmlDocument(); | ||
89 | 270 | xml.Load(Application.UserAppDataPath + "\\" + Properties.Settings.Default.RequiredFilesFile); | ||
90 | 271 | |||
91 | 272 | XmlNodeList fileNodes = xml.SelectNodes("//RequiredFile/Path"); | ||
92 | 273 | |||
93 | 274 | foreach (XmlNode file in fileNodes) | ||
94 | 275 | { | ||
95 | 276 | string path = file.InnerText; | ||
96 | 277 | |||
97 | 278 | // Does the file exist? | ||
98 | 279 | if (!File.Exists(Properties.Settings.Default.LibraryPath + @"\" + path)) | ||
99 | 280 | continue; | ||
100 | 281 | |||
101 | 282 | // Add this file to the cache manager | ||
102 | 283 | Add(path, GetMD5(path)); | ||
103 | 284 | } | ||
104 | 285 | } | ||
105 | 212 | } | 286 | } |
106 | 213 | 287 | ||
107 | 214 | public struct Md5Resource | 288 | public struct Md5Resource |
108 | 215 | 289 | ||
109 | === modified file 'client/dotNET/FileCollector.cs' | |||
110 | --- client/dotNET/FileCollector.cs 2010-04-19 21:45:10 +0000 | |||
111 | +++ client/dotNET/FileCollector.cs 2011-02-28 15:09:00 +0000 | |||
112 | @@ -31,28 +31,26 @@ | |||
113 | 31 | class FileCollector | 31 | class FileCollector |
114 | 32 | { | 32 | { |
115 | 33 | private CacheManager _cacheManager; | 33 | private CacheManager _cacheManager; |
116 | 34 | private RequiredFiles _requiredFiles; | ||
117 | 35 | private XmlDocument _xml; | ||
118 | 34 | 36 | ||
119 | 35 | public FileCollector(CacheManager cacheManager, string xmlString) | 37 | public FileCollector(CacheManager cacheManager, string xmlString) |
120 | 36 | { | 38 | { |
121 | 37 | _cacheManager = cacheManager; | 39 | _cacheManager = cacheManager; |
122 | 38 | 40 | ||
124 | 39 | xml = new XmlDocument(); | 41 | // Load the XML file RF call |
125 | 42 | _xml = new XmlDocument(); | ||
126 | 43 | _xml.LoadXml(xmlString); | ||
127 | 40 | 44 | ||
137 | 41 | try | 45 | // Create a required files object |
138 | 42 | { | 46 | _requiredFiles = new RequiredFiles(); |
139 | 43 | xml.LoadXml(xmlString); | 47 | _requiredFiles.RequiredFilesXml = _xml; |
131 | 44 | } | ||
132 | 45 | catch (Exception e) | ||
133 | 46 | { | ||
134 | 47 | //Log this error | ||
135 | 48 | System.Diagnostics.Debug.WriteLine(e.Message); | ||
136 | 49 | } | ||
140 | 50 | 48 | ||
141 | 51 | // Get the key for later use | 49 | // Get the key for later use |
142 | 52 | hardwareKey = new HardwareKey(); | 50 | hardwareKey = new HardwareKey(); |
143 | 53 | 51 | ||
144 | 54 | // Make a new filelist collection | 52 | // Make a new filelist collection |
146 | 55 | files = new Collection<FileList>(); | 53 | _files = new Collection<RequiredFile>(); |
147 | 56 | 54 | ||
148 | 57 | // Create a webservice call | 55 | // Create a webservice call |
149 | 58 | xmdsFile = new XiboClient.xmds.xmds(); | 56 | xmdsFile = new XiboClient.xmds.xmds(); |
150 | @@ -73,13 +71,13 @@ | |||
151 | 73 | /// </summary> | 71 | /// </summary> |
152 | 74 | public void CompareAndCollect() | 72 | public void CompareAndCollect() |
153 | 75 | { | 73 | { |
155 | 76 | XmlNodeList fileNodes = xml.SelectNodes("/files/file"); | 74 | XmlNodeList fileNodes = _xml.SelectNodes("/files/file"); |
156 | 77 | 75 | ||
157 | 78 | //Inspect each file we have here | 76 | //Inspect each file we have here |
158 | 79 | foreach (XmlNode file in fileNodes) | 77 | foreach (XmlNode file in fileNodes) |
159 | 80 | { | 78 | { |
160 | 81 | XmlAttributeCollection attributes = file.Attributes; | 79 | XmlAttributeCollection attributes = file.Attributes; |
162 | 82 | FileList fileList = new FileList(); | 80 | RequiredFile fileList = new RequiredFile(); |
163 | 83 | 81 | ||
164 | 84 | if (attributes["type"].Value == "layout") | 82 | if (attributes["type"].Value == "layout") |
165 | 85 | { | 83 | { |
166 | @@ -120,13 +118,15 @@ | |||
167 | 120 | fileList.md5 = attributes["md5"].Value; | 118 | fileList.md5 = attributes["md5"].Value; |
168 | 121 | fileList.retrys = 0; | 119 | fileList.retrys = 0; |
169 | 122 | 120 | ||
171 | 123 | files.Add(fileList); | 121 | _files.Add(fileList); |
172 | 124 | } | 122 | } |
173 | 125 | else | 123 | else |
174 | 126 | { | 124 | { |
175 | 127 | // The MD5 of the current file and the MD5 in RequiredFiles are the same. | 125 | // The MD5 of the current file and the MD5 in RequiredFiles are the same. |
176 | 128 | // Therefore make sure this MD5 is in the CacheManager | 126 | // Therefore make sure this MD5 is in the CacheManager |
177 | 129 | _cacheManager.Add(path + ".xlf", md5); | 127 | _cacheManager.Add(path + ".xlf", md5); |
178 | 128 | |||
179 | 129 | _requiredFiles.MarkComplete(int.Parse(path), md5); | ||
180 | 130 | } | 130 | } |
181 | 131 | } | 131 | } |
182 | 132 | else | 132 | else |
183 | @@ -141,7 +141,7 @@ | |||
184 | 141 | fileList.md5 = attributes["md5"].Value; | 141 | fileList.md5 = attributes["md5"].Value; |
185 | 142 | fileList.retrys = 0; | 142 | fileList.retrys = 0; |
186 | 143 | 143 | ||
188 | 144 | files.Add(fileList); | 144 | _files.Add(fileList); |
189 | 145 | } | 145 | } |
190 | 146 | } | 146 | } |
191 | 147 | else if (attributes["type"].Value == "media") | 147 | else if (attributes["type"].Value == "media") |
192 | @@ -183,13 +183,16 @@ | |||
193 | 183 | fileList.md5 = attributes["md5"].Value; | 183 | fileList.md5 = attributes["md5"].Value; |
194 | 184 | fileList.retrys = 0; | 184 | fileList.retrys = 0; |
195 | 185 | 185 | ||
197 | 186 | files.Add(fileList); | 186 | _files.Add(fileList); |
198 | 187 | } | 187 | } |
199 | 188 | else | 188 | else |
200 | 189 | { | 189 | { |
201 | 190 | // The MD5 of the current file and the MD5 in RequiredFiles are the same. | 190 | // The MD5 of the current file and the MD5 in RequiredFiles are the same. |
202 | 191 | // Therefore make sure this MD5 is in the CacheManager | 191 | // Therefore make sure this MD5 is in the CacheManager |
203 | 192 | _cacheManager.Add(path, md5); | 192 | _cacheManager.Add(path, md5); |
204 | 193 | |||
205 | 194 | string[] filePart = path.Split('.'); | ||
206 | 195 | _requiredFiles.MarkComplete(int.Parse(filePart[0]), md5); | ||
207 | 193 | } | 196 | } |
208 | 194 | } | 197 | } |
209 | 195 | else | 198 | else |
210 | @@ -205,7 +208,7 @@ | |||
211 | 205 | fileList.md5 = attributes["md5"].Value; | 208 | fileList.md5 = attributes["md5"].Value; |
212 | 206 | fileList.retrys = 0; | 209 | fileList.retrys = 0; |
213 | 207 | 210 | ||
215 | 208 | files.Add(fileList); | 211 | _files.Add(fileList); |
216 | 209 | } | 212 | } |
217 | 210 | } | 213 | } |
218 | 211 | else if (attributes["type"].Value == "blacklist") | 214 | else if (attributes["type"].Value == "blacklist") |
219 | @@ -234,10 +237,24 @@ | |||
220 | 234 | } | 237 | } |
221 | 235 | } | 238 | } |
222 | 236 | 239 | ||
224 | 237 | System.Diagnostics.Debug.WriteLine(String.Format("There are {0} files to get", files.Count.ToString())); | 240 | Debug.WriteLine(String.Format("There are {0} files to get", _files.Count.ToString())); |
225 | 241 | |||
226 | 242 | // Output a list of the files we need to get | ||
227 | 243 | string debugMessage = ""; | ||
228 | 244 | |||
229 | 245 | foreach (RequiredFile fileToGet in _files) | ||
230 | 246 | debugMessage += string.Format("File: {0}, Type: {1}, MD5: {2}. ", fileToGet.path, fileToGet.type, fileToGet.md5); | ||
231 | 247 | |||
232 | 248 | Debug.WriteLine(debugMessage); | ||
233 | 249 | |||
234 | 250 | // Report the files files back to XMDS | ||
235 | 251 | _requiredFiles.ReportInventory(); | ||
236 | 252 | |||
237 | 253 | // Write Required Files | ||
238 | 254 | _requiredFiles.WriteRequiredFiles(); | ||
239 | 238 | 255 | ||
240 | 239 | // Is there anything to get? | 256 | // Is there anything to get? |
242 | 240 | if (files.Count == 0) | 257 | if (_files.Count == 0) |
243 | 241 | { | 258 | { |
244 | 242 | CollectionComplete(); | 259 | CollectionComplete(); |
245 | 243 | return; | 260 | return; |
246 | @@ -247,7 +264,7 @@ | |||
247 | 247 | _currentFile = 0; | 264 | _currentFile = 0; |
248 | 248 | 265 | ||
249 | 249 | // Preload the first filelist | 266 | // Preload the first filelist |
251 | 250 | _currentFileList = files[_currentFile]; | 267 | _currentFileList = _files[_currentFile]; |
252 | 251 | 268 | ||
253 | 252 | // Get the first file | 269 | // Get the first file |
254 | 253 | GetFile(); | 270 | GetFile(); |
255 | @@ -367,6 +384,10 @@ | |||
256 | 367 | { | 384 | { |
257 | 368 | // Add to the CacheManager | 385 | // Add to the CacheManager |
258 | 369 | _cacheManager.Add(_currentFileList.path + ".xlf", md5sum); | 386 | _cacheManager.Add(_currentFileList.path + ".xlf", md5sum); |
259 | 387 | |||
260 | 388 | // Report this completion back to XMDS | ||
261 | 389 | _requiredFiles.MarkComplete(int.Parse(_currentFileList.path), md5sum); | ||
262 | 390 | _requiredFiles.ReportInventory(); | ||
263 | 370 | } | 391 | } |
264 | 371 | 392 | ||
265 | 372 | // Fire a layout complete event | 393 | // Fire a layout complete event |
266 | @@ -437,6 +458,11 @@ | |||
267 | 437 | 458 | ||
268 | 438 | System.Diagnostics.Debug.WriteLine(string.Format("File downloaded: {0}", _currentFileList.path)); | 459 | System.Diagnostics.Debug.WriteLine(string.Format("File downloaded: {0}", _currentFileList.path)); |
269 | 439 | 460 | ||
270 | 461 | // Report this completion back to XMDS | ||
271 | 462 | string[] filePart = _currentFileList.path.Split('.'); | ||
272 | 463 | _requiredFiles.MarkComplete(int.Parse(filePart[0]), md5sum); | ||
273 | 464 | _requiredFiles.ReportInventory(); | ||
274 | 465 | |||
275 | 440 | // All the file has been recieved. Move on to the next file. | 466 | // All the file has been recieved. Move on to the next file. |
276 | 441 | _currentFile++; | 467 | _currentFile++; |
277 | 442 | } | 468 | } |
278 | @@ -467,13 +493,16 @@ | |||
279 | 467 | /// </summary> | 493 | /// </summary> |
280 | 468 | public void GetFile() | 494 | public void GetFile() |
281 | 469 | { | 495 | { |
283 | 470 | if (_currentFile > (files.Count - 1)) | 496 | if (_currentFile > (_files.Count - 1)) |
284 | 471 | { | 497 | { |
286 | 472 | System.Diagnostics.Debug.WriteLine(String.Format("Finished Recieving {0} files", files.Count)); | 498 | System.Diagnostics.Debug.WriteLine(String.Format("Finished Receiving {0} files", _files.Count)); |
287 | 473 | 499 | ||
288 | 474 | // Clean up | 500 | // Clean up |
291 | 475 | files.Clear(); | 501 | _files.Clear(); |
292 | 476 | xmdsFile.Dispose(); | 502 | xmdsFile.Dispose(); |
293 | 503 | |||
294 | 504 | // Write Required Files | ||
295 | 505 | _requiredFiles.WriteRequiredFiles(); | ||
296 | 477 | 506 | ||
297 | 478 | // Finished getting this file list | 507 | // Finished getting this file list |
298 | 479 | CollectionComplete(); | 508 | CollectionComplete(); |
299 | @@ -483,7 +512,7 @@ | |||
300 | 483 | // Get the current file into the currentfilelist if the current one is finished | 512 | // Get the current file into the currentfilelist if the current one is finished |
301 | 484 | if (_currentFileList.complete) | 513 | if (_currentFileList.complete) |
302 | 485 | { | 514 | { |
304 | 486 | _currentFileList = files[_currentFile]; | 515 | _currentFileList = _files[_currentFile]; |
305 | 487 | } | 516 | } |
306 | 488 | 517 | ||
307 | 489 | System.Diagnostics.Debug.WriteLine(String.Format("Getting the file : {0} chunk : {1}", _currentFileList.path, _currentFileList.chunkOffset.ToString())); | 518 | System.Diagnostics.Debug.WriteLine(String.Format("Getting the file : {0} chunk : {1}", _currentFileList.path, _currentFileList.chunkOffset.ToString())); |
308 | @@ -496,7 +525,7 @@ | |||
309 | 496 | } | 525 | } |
310 | 497 | 526 | ||
311 | 498 | [Serializable] | 527 | [Serializable] |
313 | 499 | private struct FileList | 528 | private struct RequiredFile |
314 | 500 | { | 529 | { |
315 | 501 | public string path; | 530 | public string path; |
316 | 502 | public string type; | 531 | public string type; |
317 | @@ -511,9 +540,9 @@ | |||
318 | 511 | 540 | ||
319 | 512 | private XmlDocument xml; | 541 | private XmlDocument xml; |
320 | 513 | private HardwareKey hardwareKey; | 542 | private HardwareKey hardwareKey; |
322 | 514 | private Collection<FileList> files; | 543 | private Collection<RequiredFile> _files; |
323 | 515 | private int _currentFile; | 544 | private int _currentFile; |
325 | 516 | private FileList _currentFileList; | 545 | private RequiredFile _currentFileList; |
326 | 517 | private xmds.xmds xmdsFile; | 546 | private xmds.xmds xmdsFile; |
327 | 518 | 547 | ||
328 | 519 | public event LayoutFileChangedDelegate LayoutFileChanged; | 548 | public event LayoutFileChangedDelegate LayoutFileChanged; |
329 | 520 | 549 | ||
330 | === modified file 'client/dotNET/MainForm.cs' | |||
331 | --- client/dotNET/MainForm.cs 2010-08-26 20:15:36 +0000 | |||
332 | +++ client/dotNET/MainForm.cs 2011-02-28 15:09:00 +0000 | |||
333 | @@ -72,14 +72,45 @@ | |||
334 | 72 | 72 | ||
335 | 73 | _statLog = new StatLog(); | 73 | _statLog = new StatLog(); |
336 | 74 | 74 | ||
337 | 75 | this.FormClosing += new FormClosingEventHandler(MainForm_FormClosing); | ||
338 | 76 | this.Shown += new EventHandler(MainForm_Shown); | ||
339 | 77 | } | ||
340 | 78 | |||
341 | 79 | /// <summary> | ||
342 | 80 | /// Called after the form has been shown | ||
343 | 81 | /// </summary> | ||
344 | 82 | /// <param name="sender"></param> | ||
345 | 83 | /// <param name="e"></param> | ||
346 | 84 | void MainForm_Shown(object sender, EventArgs e) | ||
347 | 85 | { | ||
348 | 86 | // Process any stuff that has happened during the loading process | ||
349 | 87 | Application.DoEvents(); | ||
350 | 88 | |||
351 | 75 | // Create a cachemanager | 89 | // Create a cachemanager |
352 | 76 | SetCacheManager(); | 90 | SetCacheManager(); |
353 | 77 | 91 | ||
355 | 78 | this.FormClosing += new FormClosingEventHandler(MainForm_FormClosing); | 92 | try |
356 | 93 | { | ||
357 | 94 | // Create the Schedule | ||
358 | 95 | _schedule = new Schedule(Application.UserAppDataPath + "\\" + Properties.Settings.Default.ScheduleFile, ref _cacheManager); | ||
359 | 96 | |||
360 | 97 | // Bind to the schedule change event - notifys of changes to the schedule | ||
361 | 98 | _schedule.ScheduleChangeEvent += new Schedule.ScheduleChangeDelegate(schedule_ScheduleChangeEvent); | ||
362 | 99 | |||
363 | 100 | // Initialize the other schedule components | ||
364 | 101 | _schedule.InitializeComponents(); | ||
365 | 102 | } | ||
366 | 103 | catch (Exception ex) | ||
367 | 104 | { | ||
368 | 105 | Debug.WriteLine(ex.Message, LogType.Error.ToString()); | ||
369 | 106 | MessageBox.Show("Fatal Error initialising the application", "Fatal Error"); | ||
370 | 107 | Close(); | ||
371 | 108 | Dispose(); | ||
372 | 109 | } | ||
373 | 79 | } | 110 | } |
374 | 80 | 111 | ||
375 | 81 | /// <summary> | 112 | /// <summary> |
377 | 82 | /// Called when the form has finished loading | 113 | /// Called before the form has loaded for the first time |
378 | 83 | /// </summary> | 114 | /// </summary> |
379 | 84 | /// <param name="sender"></param> | 115 | /// <param name="sender"></param> |
380 | 85 | /// <param name="e"></param> | 116 | /// <param name="e"></param> |
381 | @@ -96,30 +127,13 @@ | |||
382 | 96 | Cursor.Position = new Point(_clientSize.Width, _clientSize.Height); | 127 | Cursor.Position = new Point(_clientSize.Width, _clientSize.Height); |
383 | 97 | Cursor.Hide(); | 128 | Cursor.Hide(); |
384 | 98 | 129 | ||
385 | 130 | ShowSplashScreen(); | ||
386 | 131 | |||
387 | 99 | // Change the default Proxy class | 132 | // Change the default Proxy class |
388 | 100 | OptionForm.SetGlobalProxy(); | 133 | OptionForm.SetGlobalProxy(); |
389 | 101 | 134 | ||
390 | 102 | // UserApp data | 135 | // UserApp data |
391 | 103 | Debug.WriteLine(new LogMessage("MainForm_Load", "User AppData Path: " + Application.UserAppDataPath), LogType.Info.ToString()); | 136 | Debug.WriteLine(new LogMessage("MainForm_Load", "User AppData Path: " + Application.UserAppDataPath), LogType.Info.ToString()); |
392 | 104 | |||
393 | 105 | try | ||
394 | 106 | { | ||
395 | 107 | // Create the Schedule | ||
396 | 108 | _schedule = new Schedule(Application.UserAppDataPath + "\\" + Properties.Settings.Default.ScheduleFile, ref _cacheManager); | ||
397 | 109 | |||
398 | 110 | // Bind to the schedule change event - notifys of changes to the schedule | ||
399 | 111 | _schedule.ScheduleChangeEvent += new Schedule.ScheduleChangeDelegate(schedule_ScheduleChangeEvent); | ||
400 | 112 | |||
401 | 113 | // Initialize the other schedule components | ||
402 | 114 | _schedule.InitializeComponents(); | ||
403 | 115 | } | ||
404 | 116 | catch (Exception ex) | ||
405 | 117 | { | ||
406 | 118 | Debug.WriteLine(ex.Message, LogType.Error.ToString()); | ||
407 | 119 | MessageBox.Show("Fatal Error initialising the application", "Fatal Error"); | ||
408 | 120 | Close(); | ||
409 | 121 | Dispose(); | ||
410 | 122 | } | ||
411 | 123 | } | 137 | } |
412 | 124 | 138 | ||
413 | 125 | private void MainForm_FormClosing(object sender, FormClosingEventArgs e) | 139 | private void MainForm_FormClosing(object sender, FormClosingEventArgs e) |
414 | @@ -152,11 +166,20 @@ | |||
415 | 152 | } | 166 | } |
416 | 153 | catch (Exception ex) | 167 | catch (Exception ex) |
417 | 154 | { | 168 | { |
419 | 155 | Trace.WriteLine(new LogMessage("Schedule", "Unable to reuse the Cache Manager because: " + ex.Message)); | 169 | Trace.WriteLine(new LogMessage("MainForm - SetCacheManager", "Unable to reuse the Cache Manager because: " + ex.Message)); |
420 | 156 | 170 | ||
421 | 157 | // Create a new cache manager | 171 | // Create a new cache manager |
422 | 158 | _cacheManager = new CacheManager(); | 172 | _cacheManager = new CacheManager(); |
423 | 159 | } | 173 | } |
424 | 174 | |||
425 | 175 | try | ||
426 | 176 | { | ||
427 | 177 | _cacheManager.Regenerate(); | ||
428 | 178 | } | ||
429 | 179 | catch (Exception ex) | ||
430 | 180 | { | ||
431 | 181 | Trace.WriteLine(new LogMessage("MainForm - SetCacheManager", "Regenerate failed because: " + ex.Message)); | ||
432 | 182 | } | ||
433 | 160 | } | 183 | } |
434 | 161 | 184 | ||
435 | 162 | /// <summary> | 185 | /// <summary> |
436 | @@ -191,9 +214,29 @@ | |||
437 | 191 | { | 214 | { |
438 | 192 | Debug.WriteLine(ex.Message); | 215 | Debug.WriteLine(ex.Message); |
439 | 193 | _isExpired = true; | 216 | _isExpired = true; |
440 | 217 | |||
441 | 218 | ShowSplashScreen(); | ||
442 | 219 | |||
443 | 220 | // In 10 seconds fire the next layout? | ||
444 | 221 | Timer timer = new Timer(); | ||
445 | 222 | timer.Interval = 10000; | ||
446 | 223 | timer.Tick += new EventHandler(splashScreenTimer_Tick); | ||
447 | 224 | |||
448 | 225 | // Start the timer | ||
449 | 226 | timer.Start(); | ||
450 | 194 | } | 227 | } |
451 | 195 | } | 228 | } |
452 | 196 | 229 | ||
453 | 230 | void splashScreenTimer_Tick(object sender, EventArgs e) | ||
454 | 231 | { | ||
455 | 232 | Debug.WriteLine(new LogMessage("timer_Tick", "Loading next layout after splashscreen")); | ||
456 | 233 | |||
457 | 234 | Timer timer = (Timer)sender; | ||
458 | 235 | timer.Stop(); | ||
459 | 236 | timer.Dispose(); | ||
460 | 237 | |||
461 | 238 | _schedule.NextLayout(); | ||
462 | 239 | } | ||
463 | 197 | 240 | ||
464 | 198 | /// <summary> | 241 | /// <summary> |
465 | 199 | /// Prepares the Layout.. rendering all the necessary controls | 242 | /// Prepares the Layout.. rendering all the necessary controls |
466 | @@ -213,8 +256,7 @@ | |||
467 | 213 | // Default or not | 256 | // Default or not |
468 | 214 | if (layoutPath == Properties.Settings.Default.LibraryPath + @"\Default.xml" || String.IsNullOrEmpty(layoutPath)) | 257 | if (layoutPath == Properties.Settings.Default.LibraryPath + @"\Default.xml" || String.IsNullOrEmpty(layoutPath)) |
469 | 215 | { | 258 | { |
472 | 216 | ShowSplashScreen(); | 259 | throw new Exception("Default layout"); |
471 | 217 | return; | ||
473 | 218 | } | 260 | } |
474 | 219 | else | 261 | else |
475 | 220 | { | 262 | { |
476 | @@ -232,33 +274,16 @@ | |||
477 | 232 | } | 274 | } |
478 | 233 | catch (Exception ex) | 275 | catch (Exception ex) |
479 | 234 | { | 276 | { |
499 | 235 | // couldnt open the layout file, so use the embedded one | 277 | Trace.WriteLine(string.Format("Could not find the layout file {0}: {1}", layoutPath, ex.Message)); |
500 | 236 | System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); | 278 | throw; |
482 | 237 | Stream resourceStream = assembly.GetManifestResourceStream("XiboClient.Resources.splash.jpg"); | ||
483 | 238 | |||
484 | 239 | // Load into a stream and then into an Image | ||
485 | 240 | try | ||
486 | 241 | { | ||
487 | 242 | Image bgSplash = Image.FromStream(resourceStream); | ||
488 | 243 | |||
489 | 244 | Bitmap bmpSplash = new Bitmap(bgSplash, _clientSize); | ||
490 | 245 | this.BackgroundImage = bmpSplash; | ||
491 | 246 | } | ||
492 | 247 | catch | ||
493 | 248 | { | ||
494 | 249 | // Log | ||
495 | 250 | System.Diagnostics.Debug.WriteLine(ex.Message); | ||
496 | 251 | System.Diagnostics.Trace.WriteLine("Could not find the layout file {0}", layoutPath); | ||
497 | 252 | } | ||
498 | 253 | return; | ||
501 | 254 | } | 279 | } |
502 | 255 | } | 280 | } |
503 | 256 | 281 | ||
504 | 257 | // Attributes of the main layout node | 282 | // Attributes of the main layout node |
505 | 258 | XmlNode layoutNode = layoutXml.SelectSingleNode("/layout"); | 283 | XmlNode layoutNode = layoutXml.SelectSingleNode("/layout"); |
509 | 259 | 284 | ||
510 | 260 | XmlAttributeCollection layoutAttributes = layoutNode.Attributes; | 285 | XmlAttributeCollection layoutAttributes = layoutNode.Attributes; |
511 | 261 | 286 | ||
512 | 262 | // Set the background and size of the form | 287 | // Set the background and size of the form |
513 | 263 | _layoutWidth = int.Parse(layoutAttributes["width"].Value); | 288 | _layoutWidth = int.Parse(layoutAttributes["width"].Value); |
514 | 264 | _layoutHeight = int.Parse(layoutAttributes["height"].Value); | 289 | _layoutHeight = int.Parse(layoutAttributes["height"].Value); |
515 | @@ -266,7 +291,7 @@ | |||
516 | 266 | 291 | ||
517 | 267 | // Scaling factor, will be applied to all regions | 292 | // Scaling factor, will be applied to all regions |
518 | 268 | _scaleFactor = Math.Min(_clientSize.Width / _layoutWidth, _clientSize.Height / _layoutHeight); | 293 | _scaleFactor = Math.Min(_clientSize.Width / _layoutWidth, _clientSize.Height / _layoutHeight); |
520 | 269 | 294 | ||
521 | 270 | // Want to be able to center this shiv - therefore work out which one of these is going to have left overs | 295 | // Want to be able to center this shiv - therefore work out which one of these is going to have left overs |
522 | 271 | int backgroundWidth = (int)(_layoutWidth * _scaleFactor); | 296 | int backgroundWidth = (int)(_layoutWidth * _scaleFactor); |
523 | 272 | int backgroundHeight = (int)(_layoutHeight * _scaleFactor); | 297 | int backgroundHeight = (int)(_layoutHeight * _scaleFactor); |
524 | @@ -282,7 +307,7 @@ | |||
525 | 282 | if (leftOverX != 0) leftOverX = leftOverX / 2; | 307 | if (leftOverX != 0) leftOverX = leftOverX / 2; |
526 | 283 | if (leftOverY != 0) leftOverY = leftOverY / 2; | 308 | if (leftOverY != 0) leftOverY = leftOverY / 2; |
527 | 284 | } | 309 | } |
529 | 285 | catch | 310 | catch |
530 | 286 | { | 311 | { |
531 | 287 | leftOverX = 0; | 312 | leftOverX = 0; |
532 | 288 | leftOverY = 0; | 313 | leftOverY = 0; |
533 | @@ -361,25 +386,24 @@ | |||
534 | 361 | // Check to see if there are any regions on this layout. | 386 | // Check to see if there are any regions on this layout. |
535 | 362 | if (listRegions.Count == 0 || listMedia.Count == 0) | 387 | if (listRegions.Count == 0 || listMedia.Count == 0) |
536 | 363 | { | 388 | { |
539 | 364 | Trace.WriteLine(new LogMessage("PrepareLayout", | 389 | Trace.WriteLine(new LogMessage("PrepareLayout", |
540 | 365 | string.Format("A layout with {0} regions and {1} media has been detected.", listRegions.Count.ToString(), listMedia.Count.ToString())), | 390 | string.Format("A layout with {0} regions and {1} media has been detected.", listRegions.Count.ToString(), listMedia.Count.ToString())), |
541 | 366 | LogType.Info.ToString()); | 391 | LogType.Info.ToString()); |
542 | 367 | 392 | ||
543 | 368 | if (_schedule.ActiveLayouts == 1) | 393 | if (_schedule.ActiveLayouts == 1) |
544 | 369 | { | 394 | { |
545 | 370 | Trace.WriteLine(new LogMessage("PrepareLayout", "Only 1 layout scheduled and it has nothing to show."), LogType.Info.ToString()); | 395 | Trace.WriteLine(new LogMessage("PrepareLayout", "Only 1 layout scheduled and it has nothing to show."), LogType.Info.ToString()); |
546 | 371 | 396 | ||
549 | 372 | // Fall back to the splash screen (will only shift from here once a new schedule is detected) | 397 | throw new Exception("Only 1 layout schduled and it has nothing to show"); |
548 | 373 | ShowSplashScreen(); | ||
550 | 374 | } | 398 | } |
551 | 375 | else | 399 | else |
552 | 376 | { | 400 | { |
554 | 377 | Trace.WriteLine(new LogMessage("PrepareLayout", | 401 | Trace.WriteLine(new LogMessage("PrepareLayout", |
555 | 378 | string.Format(string.Format("An empty layout detected, will show for {0} seconds.", Properties.Settings.Default.emptyLayoutDuration.ToString()))), LogType.Info.ToString()); | 402 | string.Format(string.Format("An empty layout detected, will show for {0} seconds.", Properties.Settings.Default.emptyLayoutDuration.ToString()))), LogType.Info.ToString()); |
556 | 379 | 403 | ||
557 | 380 | // Put a small dummy region in place, with a small dummy media node - which expires in 10 seconds. | 404 | // Put a small dummy region in place, with a small dummy media node - which expires in 10 seconds. |
558 | 381 | XmlDocument dummyXml = new XmlDocument(); | 405 | XmlDocument dummyXml = new XmlDocument(); |
560 | 382 | dummyXml.LoadXml(string.Format("<region id='blah' width='1' height='1' top='1' left='1'><media id='blah' type='text' duration='{0}'><raw><text></text></raw></media></region>", | 406 | dummyXml.LoadXml(string.Format("<region id='blah' width='1' height='1' top='1' left='1'><media id='blah' type='text' duration='{0}'><raw><text></text></raw></media></region>", |
561 | 383 | Properties.Settings.Default.emptyLayoutDuration.ToString())); | 407 | Properties.Settings.Default.emptyLayoutDuration.ToString())); |
562 | 384 | 408 | ||
563 | 385 | // Replace the list of regions (they mean nothing as they are empty) | 409 | // Replace the list of regions (they mean nothing as they are empty) |
564 | @@ -400,10 +424,10 @@ | |||
565 | 400 | 424 | ||
566 | 401 | options.scheduleId = _scheduleId; | 425 | options.scheduleId = _scheduleId; |
567 | 402 | options.layoutId = _layoutId; | 426 | options.layoutId = _layoutId; |
572 | 403 | options.width = (int) (double.Parse(nodeAttibutes["width"].Value) * _scaleFactor); | 427 | options.width = (int)(double.Parse(nodeAttibutes["width"].Value) * _scaleFactor); |
573 | 404 | options.height = (int) (double.Parse(nodeAttibutes["height"].Value) * _scaleFactor); | 428 | options.height = (int)(double.Parse(nodeAttibutes["height"].Value) * _scaleFactor); |
574 | 405 | options.left = (int) (double.Parse(nodeAttibutes["left"].Value) * _scaleFactor); | 429 | options.left = (int)(double.Parse(nodeAttibutes["left"].Value) * _scaleFactor); |
575 | 406 | options.top = (int) (double.Parse(nodeAttibutes["top"].Value) * _scaleFactor); | 430 | options.top = (int)(double.Parse(nodeAttibutes["top"].Value) * _scaleFactor); |
576 | 407 | options.scaleFactor = _scaleFactor; | 431 | options.scaleFactor = _scaleFactor; |
577 | 408 | 432 | ||
578 | 409 | // Set the backgrounds (used for Web content offsets) | 433 | // Set the backgrounds (used for Web content offsets) |
579 | @@ -411,9 +435,9 @@ | |||
580 | 411 | options.backgroundTop = options.top * -1; | 435 | options.backgroundTop = options.top * -1; |
581 | 412 | 436 | ||
582 | 413 | //Account for scaling | 437 | //Account for scaling |
586 | 414 | options.left = options.left + (int) leftOverX; | 438 | options.left = options.left + (int)leftOverX; |
587 | 415 | options.top = options.top + (int) leftOverY; | 439 | options.top = options.top + (int)leftOverY; |
588 | 416 | 440 | ||
589 | 417 | // All the media nodes for this region / layout combination | 441 | // All the media nodes for this region / layout combination |
590 | 418 | options.mediaNodes = region.ChildNodes; | 442 | options.mediaNodes = region.ChildNodes; |
591 | 419 | 443 | ||
592 | @@ -421,7 +445,7 @@ | |||
593 | 421 | temp.DurationElapsedEvent += new Region.DurationElapsedDelegate(temp_DurationElapsedEvent); | 445 | temp.DurationElapsedEvent += new Region.DurationElapsedDelegate(temp_DurationElapsedEvent); |
594 | 422 | 446 | ||
595 | 423 | Debug.WriteLine("Created new region", "MainForm - Prepare Layout"); | 447 | Debug.WriteLine("Created new region", "MainForm - Prepare Layout"); |
597 | 424 | 448 | ||
598 | 425 | // Dont be fooled, this innocent little statement kicks everything off | 449 | // Dont be fooled, this innocent little statement kicks everything off |
599 | 426 | temp.regionOptions = options; | 450 | temp.regionOptions = options; |
600 | 427 | 451 | ||
601 | @@ -456,6 +480,8 @@ | |||
602 | 456 | 480 | ||
603 | 457 | Bitmap bmpSplash = new Bitmap(bgSplash, _clientSize); | 481 | Bitmap bmpSplash = new Bitmap(bgSplash, _clientSize); |
604 | 458 | this.BackgroundImage = bmpSplash; | 482 | this.BackgroundImage = bmpSplash; |
605 | 483 | |||
606 | 484 | bgSplash.Dispose(); | ||
607 | 459 | } | 485 | } |
608 | 460 | catch (Exception ex) | 486 | catch (Exception ex) |
609 | 461 | { | 487 | { |
610 | 462 | 488 | ||
611 | === modified file 'client/dotNET/Properties/Resources.Designer.cs' | |||
612 | --- client/dotNET/Properties/Resources.Designer.cs 2009-12-31 11:38:50 +0000 | |||
613 | +++ client/dotNET/Properties/Resources.Designer.cs 2011-02-28 15:09:00 +0000 | |||
614 | @@ -1,7 +1,7 @@ | |||
615 | 1 | //------------------------------------------------------------------------------ | 1 | //------------------------------------------------------------------------------ |
616 | 2 | // <auto-generated> | 2 | // <auto-generated> |
617 | 3 | // This code was generated by a tool. | 3 | // This code was generated by a tool. |
619 | 4 | // Runtime Version:2.0.50727.4927 | 4 | // Runtime Version:2.0.50727.4952 |
620 | 5 | // | 5 | // |
621 | 6 | // Changes to this file may cause incorrect behavior and will be lost if | 6 | // Changes to this file may cause incorrect behavior and will be lost if |
622 | 7 | // the code is regenerated. | 7 | // the code is regenerated. |
623 | 8 | 8 | ||
624 | === modified file 'client/dotNET/Properties/Settings.Designer.cs' | |||
625 | --- client/dotNET/Properties/Settings.Designer.cs 2010-09-26 14:33:38 +0000 | |||
626 | +++ client/dotNET/Properties/Settings.Designer.cs 2011-02-28 15:09:00 +0000 | |||
627 | @@ -47,7 +47,7 @@ | |||
628 | 47 | [global::System.Configuration.UserScopedSettingAttribute()] | 47 | [global::System.Configuration.UserScopedSettingAttribute()] |
629 | 48 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] | 48 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] |
630 | 49 | [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.WebServiceUrl)] | 49 | [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.WebServiceUrl)] |
632 | 50 | [global::System.Configuration.DefaultSettingValueAttribute("http://localhost/xibo/xmds.php")] | 50 | [global::System.Configuration.DefaultSettingValueAttribute("http://localhost/Series%201.2/server-121-soap-wsdl/server/xmds.php")] |
633 | 51 | public string XiboClient_xmds_xmds { | 51 | public string XiboClient_xmds_xmds { |
634 | 52 | get { | 52 | get { |
635 | 53 | return ((string)(this["XiboClient_xmds_xmds"])); | 53 | return ((string)(this["XiboClient_xmds_xmds"])); |
636 | @@ -271,7 +271,7 @@ | |||
637 | 271 | 271 | ||
638 | 272 | [global::System.Configuration.ApplicationScopedSettingAttribute()] | 272 | [global::System.Configuration.ApplicationScopedSettingAttribute()] |
639 | 273 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] | 273 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] |
641 | 274 | [global::System.Configuration.DefaultSettingValueAttribute("1.2.0")] | 274 | [global::System.Configuration.DefaultSettingValueAttribute("1.2.2")] |
642 | 275 | public string ClientVersion { | 275 | public string ClientVersion { |
643 | 276 | get { | 276 | get { |
644 | 277 | return ((string)(this["ClientVersion"])); | 277 | return ((string)(this["ClientVersion"])); |
645 | @@ -370,5 +370,17 @@ | |||
646 | 370 | this["emptyLayoutDuration"] = value; | 370 | this["emptyLayoutDuration"] = value; |
647 | 371 | } | 371 | } |
648 | 372 | } | 372 | } |
649 | 373 | |||
650 | 374 | [global::System.Configuration.UserScopedSettingAttribute()] | ||
651 | 375 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] | ||
652 | 376 | [global::System.Configuration.DefaultSettingValueAttribute("requiredFiles.xml")] | ||
653 | 377 | public string RequiredFilesFile { | ||
654 | 378 | get { | ||
655 | 379 | return ((string)(this["RequiredFilesFile"])); | ||
656 | 380 | } | ||
657 | 381 | set { | ||
658 | 382 | this["RequiredFilesFile"] = value; | ||
659 | 383 | } | ||
660 | 384 | } | ||
661 | 373 | } | 385 | } |
662 | 374 | } | 386 | } |
663 | 375 | 387 | ||
664 | === modified file 'client/dotNET/Properties/Settings.settings' | |||
665 | --- client/dotNET/Properties/Settings.settings 2010-09-26 14:33:38 +0000 | |||
666 | +++ client/dotNET/Properties/Settings.settings 2011-02-28 15:09:00 +0000 | |||
667 | @@ -9,7 +9,7 @@ | |||
668 | 9 | <Value Profile="(Default)">schedule.xml</Value> | 9 | <Value Profile="(Default)">schedule.xml</Value> |
669 | 10 | </Setting> | 10 | </Setting> |
670 | 11 | <Setting Name="XiboClient_xmds_xmds" Type="(Web Service URL)" Scope="User"> | 11 | <Setting Name="XiboClient_xmds_xmds" Type="(Web Service URL)" Scope="User"> |
672 | 12 | <Value Profile="(Default)">http://localhost/xibo/xmds.php</Value> | 12 | <Value Profile="(Default)">http://localhost/Series%201.2/server-121-soap-wsdl/server/xmds.php</Value> |
673 | 13 | </Setting> | 13 | </Setting> |
674 | 14 | <Setting Name="ServerKey" Type="System.String" Scope="User"> | 14 | <Setting Name="ServerKey" Type="System.String" Scope="User"> |
675 | 15 | <Value Profile="(Default)">yourserverkey</Value> | 15 | <Value Profile="(Default)">yourserverkey</Value> |
676 | @@ -69,7 +69,7 @@ | |||
677 | 69 | <Value Profile="(Default)">cacheManager.xml</Value> | 69 | <Value Profile="(Default)">cacheManager.xml</Value> |
678 | 70 | </Setting> | 70 | </Setting> |
679 | 71 | <Setting Name="ClientVersion" Type="System.String" Scope="Application"> | 71 | <Setting Name="ClientVersion" Type="System.String" Scope="Application"> |
681 | 72 | <Value Profile="(Default)">1.2.0</Value> | 72 | <Value Profile="(Default)">1.2.2</Value> |
682 | 73 | </Setting> | 73 | </Setting> |
683 | 74 | <Setting Name="scrollStepAmount" Type="System.Decimal" Scope="User"> | 74 | <Setting Name="scrollStepAmount" Type="System.Decimal" Scope="User"> |
684 | 75 | <Value Profile="(Default)">1</Value> | 75 | <Value Profile="(Default)">1</Value> |
685 | @@ -95,5 +95,8 @@ | |||
686 | 95 | <Setting Name="emptyLayoutDuration" Type="System.Decimal" Scope="User"> | 95 | <Setting Name="emptyLayoutDuration" Type="System.Decimal" Scope="User"> |
687 | 96 | <Value Profile="(Default)">10</Value> | 96 | <Value Profile="(Default)">10</Value> |
688 | 97 | </Setting> | 97 | </Setting> |
689 | 98 | <Setting Name="RequiredFilesFile" Type="System.String" Scope="User"> | ||
690 | 99 | <Value Profile="(Default)">requiredFiles.xml</Value> | ||
691 | 100 | </Setting> | ||
692 | 98 | </Settings> | 101 | </Settings> |
693 | 99 | </SettingsFile> | 102 | </SettingsFile> |
694 | 100 | \ No newline at end of file | 103 | \ No newline at end of file |
695 | 101 | 104 | ||
696 | === modified file 'client/dotNET/Region.cs' | |||
697 | --- client/dotNET/Region.cs 2010-08-26 19:23:14 +0000 | |||
698 | +++ client/dotNET/Region.cs 2011-02-28 15:09:00 +0000 | |||
699 | @@ -309,6 +309,13 @@ | |||
700 | 309 | System.Diagnostics.Trace.WriteLine("Duration is Empty, using a default of 60.", "Region - SetNextMediaNode"); | 309 | System.Diagnostics.Trace.WriteLine("Duration is Empty, using a default of 60.", "Region - SetNextMediaNode"); |
701 | 310 | } | 310 | } |
702 | 311 | 311 | ||
703 | 312 | // We cannot have a 0 duration here... not sure why we would... but | ||
704 | 313 | if (options.duration == 0 && options.type != "video") | ||
705 | 314 | { | ||
706 | 315 | int emptyLayoutDuration = int.Parse(Properties.Settings.Default.emptyLayoutDuration.ToString()); | ||
707 | 316 | options.duration = (emptyLayoutDuration == 0) ? 10 : emptyLayoutDuration; | ||
708 | 317 | } | ||
709 | 318 | |||
710 | 312 | // There will be some stuff on option nodes | 319 | // There will be some stuff on option nodes |
711 | 313 | XmlNode optionNode = mediaNode.FirstChild; | 320 | XmlNode optionNode = mediaNode.FirstChild; |
712 | 314 | 321 | ||
713 | @@ -378,7 +385,7 @@ | |||
714 | 378 | if (options.type == "video" || options.type == "flash" || options.type == "image" || options.type == "powerpoint") | 385 | if (options.type == "video" || options.type == "flash" || options.type == "image" || options.type == "powerpoint") |
715 | 379 | { | 386 | { |
716 | 380 | // Use the cache manager to determine if the file is valid | 387 | // Use the cache manager to determine if the file is valid |
718 | 381 | validNode = _cacheManager.IsValid(options.uri); | 388 | validNode = _cacheManager.IsValidPath(options.uri); |
719 | 382 | } | 389 | } |
720 | 383 | } | 390 | } |
721 | 384 | 391 | ||
722 | 385 | 392 | ||
723 | === added file 'client/dotNET/RequiredFiles.cs' | |||
724 | --- client/dotNET/RequiredFiles.cs 1970-01-01 00:00:00 +0000 | |||
725 | +++ client/dotNET/RequiredFiles.cs 2011-02-28 15:09:00 +0000 | |||
726 | @@ -0,0 +1,206 @@ | |||
727 | 1 | /* | ||
728 | 2 | * Xibo - Digitial Signage - http://www.xibo.org.uk | ||
729 | 3 | * Copyright (C) 2011 Daniel Garner | ||
730 | 4 | * | ||
731 | 5 | * This file is part of Xibo. | ||
732 | 6 | * | ||
733 | 7 | * Xibo is free software: you can redistribute it and/or modify | ||
734 | 8 | * it under the terms of the GNU Affero General Public License as published by | ||
735 | 9 | * the Free Software Foundation, either version 3 of the License, or | ||
736 | 10 | * any later version. | ||
737 | 11 | * | ||
738 | 12 | * Xibo is distributed in the hope that it will be useful, | ||
739 | 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
740 | 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
741 | 15 | * GNU Affero General Public License for more details. | ||
742 | 16 | * | ||
743 | 17 | * You should have received a copy of the GNU Affero General Public License | ||
744 | 18 | * along with Xibo. If not, see <http://www.gnu.org/licenses/>. | ||
745 | 19 | */ | ||
746 | 20 | using System; | ||
747 | 21 | using System.Collections.Generic; | ||
748 | 22 | using System.Collections.ObjectModel; | ||
749 | 23 | using System.Text; | ||
750 | 24 | using System.IO; | ||
751 | 25 | using System.Security.Cryptography; | ||
752 | 26 | using System.Xml; | ||
753 | 27 | using System.Diagnostics; | ||
754 | 28 | using System.Windows.Forms; | ||
755 | 29 | using System.Xml.Serialization; | ||
756 | 30 | |||
757 | 31 | namespace XiboClient | ||
758 | 32 | { | ||
759 | 33 | public class RequiredFiles | ||
760 | 34 | { | ||
761 | 35 | private XmlDocument _requiredFilesXml; | ||
762 | 36 | public Collection<RequiredFile> _requiredFiles; | ||
763 | 37 | private xmds.xmds _report; | ||
764 | 38 | |||
765 | 39 | public RequiredFiles() | ||
766 | 40 | { | ||
767 | 41 | _requiredFiles = new Collection<RequiredFile>(); | ||
768 | 42 | |||
769 | 43 | // Create a webservice call | ||
770 | 44 | _report = new XiboClient.xmds.xmds(); | ||
771 | 45 | |||
772 | 46 | // Start up the Xmds Service Object | ||
773 | 47 | _report.Credentials = null; | ||
774 | 48 | _report.Url = Properties.Settings.Default.XiboClient_xmds_xmds; | ||
775 | 49 | _report.UseDefaultCredentials = false; | ||
776 | 50 | } | ||
777 | 51 | |||
778 | 52 | /// <summary> | ||
779 | 53 | /// Set required files from the XML document | ||
780 | 54 | /// </summary> | ||
781 | 55 | private void SetRequiredFiles() | ||
782 | 56 | { | ||
783 | 57 | // Itterate through the RF XML and populate the RF collection | ||
784 | 58 | XmlNodeList fileNodes = _requiredFilesXml.SelectNodes("/files/file"); | ||
785 | 59 | |||
786 | 60 | foreach (XmlNode file in fileNodes) | ||
787 | 61 | { | ||
788 | 62 | RequiredFile rf = new RequiredFile(); | ||
789 | 63 | |||
790 | 64 | XmlAttributeCollection attributes = file.Attributes; | ||
791 | 65 | |||
792 | 66 | rf.FileType = attributes["type"].Value; | ||
793 | 67 | rf.Complete = 0; | ||
794 | 68 | rf.Md5 = ""; | ||
795 | 69 | rf.LastChecked = DateTime.Now; | ||
796 | 70 | |||
797 | 71 | if (rf.FileType == "media") | ||
798 | 72 | { | ||
799 | 73 | string[] filePart = attributes["path"].Value.Split('.'); | ||
800 | 74 | rf.Id = int.Parse(filePart[0]); | ||
801 | 75 | rf.Path = attributes["path"].Value; | ||
802 | 76 | } | ||
803 | 77 | else if (rf.FileType == "layout") | ||
804 | 78 | { | ||
805 | 79 | rf.Id = int.Parse(attributes["path"].Value); | ||
806 | 80 | rf.Path = attributes["path"].Value + ".xlf"; | ||
807 | 81 | } | ||
808 | 82 | else | ||
809 | 83 | { | ||
810 | 84 | continue; | ||
811 | 85 | } | ||
812 | 86 | |||
813 | 87 | _requiredFiles.Add(rf); | ||
814 | 88 | } | ||
815 | 89 | } | ||
816 | 90 | |||
817 | 91 | /// <summary> | ||
818 | 92 | /// Required Files XML | ||
819 | 93 | /// </summary> | ||
820 | 94 | public XmlDocument RequiredFilesXml | ||
821 | 95 | { | ||
822 | 96 | set | ||
823 | 97 | { | ||
824 | 98 | _requiredFilesXml = value; | ||
825 | 99 | SetRequiredFiles(); | ||
826 | 100 | } | ||
827 | 101 | } | ||
828 | 102 | |||
829 | 103 | /// <summary> | ||
830 | 104 | /// Mark a RequiredFile as complete | ||
831 | 105 | /// </summary> | ||
832 | 106 | /// <param name="id"></param> | ||
833 | 107 | /// <param name="md5"></param> | ||
834 | 108 | public void MarkComplete(int id, string md5) | ||
835 | 109 | { | ||
836 | 110 | foreach (RequiredFile rf in _requiredFiles) | ||
837 | 111 | { | ||
838 | 112 | if (rf.Id == id) | ||
839 | 113 | { | ||
840 | 114 | RequiredFile newRf = rf; | ||
841 | 115 | |||
842 | 116 | newRf.Complete = 1; | ||
843 | 117 | newRf.Md5 = md5; | ||
844 | 118 | |||
845 | 119 | |||
846 | 120 | _requiredFiles.Add(newRf); | ||
847 | 121 | _requiredFiles.Remove(rf); | ||
848 | 122 | |||
849 | 123 | return; | ||
850 | 124 | } | ||
851 | 125 | } | ||
852 | 126 | } | ||
853 | 127 | |||
854 | 128 | /// <summary> | ||
855 | 129 | /// Mark a RequiredFile as incomplete | ||
856 | 130 | /// </summary> | ||
857 | 131 | /// <param name="id"></param> | ||
858 | 132 | /// <param name="md5"></param> | ||
859 | 133 | public void MarkIncomplete(int id, string md5) | ||
860 | 134 | { | ||
861 | 135 | foreach (RequiredFile rf in _requiredFiles) | ||
862 | 136 | { | ||
863 | 137 | if (rf.Id == id) | ||
864 | 138 | { | ||
865 | 139 | RequiredFile newRf = rf; | ||
866 | 140 | |||
867 | 141 | newRf.Complete = 0; | ||
868 | 142 | newRf.Md5 = md5; | ||
869 | 143 | |||
870 | 144 | _requiredFiles.Add(newRf); | ||
871 | 145 | _requiredFiles.Remove(rf); | ||
872 | 146 | |||
873 | 147 | return; | ||
874 | 148 | } | ||
875 | 149 | } | ||
876 | 150 | } | ||
877 | 151 | |||
878 | 152 | /// <summary> | ||
879 | 153 | /// Writes Required Files to disk | ||
880 | 154 | /// </summary> | ||
881 | 155 | public void WriteRequiredFiles() | ||
882 | 156 | { | ||
883 | 157 | Debug.WriteLine(new LogMessage("RequiredFiles - WriteRequiredFiles", "About to Write RequiredFiles"), LogType.Info.ToString()); | ||
884 | 158 | |||
885 | 159 | try | ||
886 | 160 | { | ||
887 | 161 | using (StreamWriter streamWriter = new StreamWriter(Application.UserAppDataPath + "\\" + Properties.Settings.Default.RequiredFilesFile)) | ||
888 | 162 | { | ||
889 | 163 | XmlSerializer xmlSerializer = new XmlSerializer(typeof(RequiredFiles)); | ||
890 | 164 | |||
891 | 165 | xmlSerializer.Serialize(streamWriter, this); | ||
892 | 166 | } | ||
893 | 167 | } | ||
894 | 168 | catch (Exception ex) | ||
895 | 169 | { | ||
896 | 170 | System.Diagnostics.Trace.WriteLine(new LogMessage("RequiredFiles - WriteRequiredFiles", "Unable to write RequiredFiles to disk because: " + ex.Message)); | ||
897 | 171 | } | ||
898 | 172 | } | ||
899 | 173 | |||
900 | 174 | /// <summary> | ||
901 | 175 | /// Report Required Files to XMDS | ||
902 | 176 | /// </summary> | ||
903 | 177 | public void ReportInventory() | ||
904 | 178 | { | ||
905 | 179 | HardwareKey hardwareKey = new HardwareKey(); | ||
906 | 180 | |||
907 | 181 | // Build the XML required by media file | ||
908 | 182 | string xml = ""; | ||
909 | 183 | |||
910 | 184 | foreach (RequiredFile rf in _requiredFiles) | ||
911 | 185 | { | ||
912 | 186 | xml += string.Format("<file type=\"{0}\" id=\"{1}\" complete=\"{2}\" lastChecked=\"{3}\" md5=\"{4}\" />", | ||
913 | 187 | rf.FileType, rf.Id.ToString(), rf.Complete.ToString(), rf.LastChecked.ToString(), rf.Md5); | ||
914 | 188 | } | ||
915 | 189 | |||
916 | 190 | xml = string.Format("<files>{0}</files>", xml); | ||
917 | 191 | |||
918 | 192 | _report.MediaInventoryAsync(Properties.Settings.Default.Version, Properties.Settings.Default.ServerKey, | ||
919 | 193 | hardwareKey.Key, xml); | ||
920 | 194 | } | ||
921 | 195 | } | ||
922 | 196 | |||
923 | 197 | public struct RequiredFile | ||
924 | 198 | { | ||
925 | 199 | public string FileType; | ||
926 | 200 | public int Id; | ||
927 | 201 | public int Complete; | ||
928 | 202 | public DateTime LastChecked; | ||
929 | 203 | public string Md5; | ||
930 | 204 | public string Path; | ||
931 | 205 | } | ||
932 | 206 | } | ||
933 | 0 | 207 | ||
934 | === modified file 'client/dotNET/Resources/splash.jpg' | |||
935 | 1 | Binary files client/dotNET/Resources/splash.jpg 2008-12-19 23:34:13 +0000 and client/dotNET/Resources/splash.jpg 2011-02-28 15:09:00 +0000 differ | 208 | Binary files client/dotNET/Resources/splash.jpg 2008-12-19 23:34:13 +0000 and client/dotNET/Resources/splash.jpg 2011-02-28 15:09:00 +0000 differ |
936 | === modified file 'client/dotNET/RssReader.cs' | |||
937 | --- client/dotNET/RssReader.cs 2010-09-26 17:37:39 +0000 | |||
938 | +++ client/dotNET/RssReader.cs 2011-02-28 15:09:00 +0000 | |||
939 | @@ -120,7 +120,7 @@ | |||
940 | 120 | item.DateString = date; | 120 | item.DateString = date; |
941 | 121 | 121 | ||
942 | 122 | // Fudge the date... | 122 | // Fudge the date... |
944 | 123 | if (date.Contains("+")) | 123 | if (date.Contains("+") || date.Contains("-")) |
945 | 124 | DateTime.TryParse(date, out item.Date); | 124 | DateTime.TryParse(date, out item.Date); |
946 | 125 | else | 125 | else |
947 | 126 | DateTime.TryParse(date.Substring(0, date.Length - 4), out item.Date); | 126 | DateTime.TryParse(date.Substring(0, date.Length - 4), out item.Date); |
948 | 127 | 127 | ||
949 | === modified file 'client/dotNET/Schedule.cs' | |||
950 | --- client/dotNET/Schedule.cs 2010-08-22 16:49:09 +0000 | |||
951 | +++ client/dotNET/Schedule.cs 2011-02-28 15:09:00 +0000 | |||
952 | @@ -74,7 +74,7 @@ | |||
953 | 74 | _cacheManager = cacheManager; | 74 | _cacheManager = cacheManager; |
954 | 75 | 75 | ||
955 | 76 | // Create a schedule manager | 76 | // Create a schedule manager |
957 | 77 | _scheduleManager = new ScheduleManager(scheduleLocation); | 77 | _scheduleManager = new ScheduleManager(_cacheManager, scheduleLocation); |
958 | 78 | 78 | ||
959 | 79 | // Create a new Xmds service object | 79 | // Create a new Xmds service object |
960 | 80 | _xmds2 = new XiboClient.xmds.xmds(); | 80 | _xmds2 = new XiboClient.xmds.xmds(); |
961 | 81 | 81 | ||
962 | === modified file 'client/dotNET/ScheduleManager.cs' | |||
963 | --- client/dotNET/ScheduleManager.cs 2010-08-25 21:39:53 +0000 | |||
964 | +++ client/dotNET/ScheduleManager.cs 2011-02-28 15:09:00 +0000 | |||
965 | @@ -42,13 +42,15 @@ | |||
966 | 42 | private Collection<LayoutSchedule> _layoutSchedule; | 42 | private Collection<LayoutSchedule> _layoutSchedule; |
967 | 43 | private Collection<LayoutSchedule> _currentSchedule; | 43 | private Collection<LayoutSchedule> _currentSchedule; |
968 | 44 | private bool _refreshSchedule; | 44 | private bool _refreshSchedule; |
969 | 45 | private CacheManager _cacheManager; | ||
970 | 45 | 46 | ||
971 | 46 | /// <summary> | 47 | /// <summary> |
972 | 47 | /// Creates a new schedule Manager | 48 | /// Creates a new schedule Manager |
973 | 48 | /// </summary> | 49 | /// </summary> |
974 | 49 | /// <param name="scheduleLocation"></param> | 50 | /// <param name="scheduleLocation"></param> |
976 | 50 | public ScheduleManager(string scheduleLocation) | 51 | public ScheduleManager(CacheManager cacheManager, string scheduleLocation) |
977 | 51 | { | 52 | { |
978 | 53 | _cacheManager = cacheManager; | ||
979 | 52 | _location = scheduleLocation; | 54 | _location = scheduleLocation; |
980 | 53 | 55 | ||
981 | 54 | // Create an empty layout schedule | 56 | // Create an empty layout schedule |
982 | @@ -178,6 +180,19 @@ | |||
983 | 178 | // For each layout in the schedule determine if it is currently inside the _currentSchedule, and whether it should be | 180 | // For each layout in the schedule determine if it is currently inside the _currentSchedule, and whether it should be |
984 | 179 | foreach (LayoutSchedule layout in _layoutSchedule) | 181 | foreach (LayoutSchedule layout in _layoutSchedule) |
985 | 180 | { | 182 | { |
986 | 183 | // Is the layout valid in the cachemanager? | ||
987 | 184 | try | ||
988 | 185 | { | ||
989 | 186 | if (!_cacheManager.IsValidLayout(layout.id + ".xlf")) | ||
990 | 187 | continue; | ||
991 | 188 | } | ||
992 | 189 | catch | ||
993 | 190 | { | ||
994 | 191 | // TODO: Ignore this layout.. raise an error? | ||
995 | 192 | Trace.WriteLine("Unable to determine if layout is valid or not"); | ||
996 | 193 | continue; | ||
997 | 194 | } | ||
998 | 195 | |||
999 | 181 | // If this is the default, skip it | 196 | // If this is the default, skip it |
1000 | 182 | if (layout.NodeName == "default") | 197 | if (layout.NodeName == "default") |
1001 | 183 | { | 198 | { |
1002 | 184 | 199 | ||
1003 | === modified file 'client/dotNET/Web References/xmds/Reference.cs' | |||
1004 | --- client/dotNET/Web References/xmds/Reference.cs 2009-12-31 11:38:50 +0000 | |||
1005 | +++ client/dotNET/Web References/xmds/Reference.cs 2011-02-28 15:09:00 +0000 | |||
1006 | @@ -1,7 +1,7 @@ | |||
1007 | 1 | //------------------------------------------------------------------------------ | 1 | //------------------------------------------------------------------------------ |
1008 | 2 | // <auto-generated> | 2 | // <auto-generated> |
1009 | 3 | // This code was generated by a tool. | 3 | // This code was generated by a tool. |
1011 | 4 | // Runtime Version:2.0.50727.4927 | 4 | // Runtime Version:2.0.50727.4952 |
1012 | 5 | // | 5 | // |
1013 | 6 | // Changes to this file may cause incorrect behavior and will be lost if | 6 | // Changes to this file may cause incorrect behavior and will be lost if |
1014 | 7 | // the code is regenerated. | 7 | // the code is regenerated. |
1015 | @@ -9,7 +9,7 @@ | |||
1016 | 9 | //------------------------------------------------------------------------------ | 9 | //------------------------------------------------------------------------------ |
1017 | 10 | 10 | ||
1018 | 11 | // | 11 | // |
1020 | 12 | // This source code was auto-generated by Microsoft.VSDesigner, Version 2.0.50727.4927. | 12 | // This source code was auto-generated by Microsoft.VSDesigner, Version 2.0.50727.4952. |
1021 | 13 | // | 13 | // |
1022 | 14 | #pragma warning disable 1591 | 14 | #pragma warning disable 1591 |
1023 | 15 | 15 | ||
1024 | @@ -23,7 +23,7 @@ | |||
1025 | 23 | 23 | ||
1026 | 24 | 24 | ||
1027 | 25 | /// <remarks/> | 25 | /// <remarks/> |
1029 | 26 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 26 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1030 | 27 | [System.Diagnostics.DebuggerStepThroughAttribute()] | 27 | [System.Diagnostics.DebuggerStepThroughAttribute()] |
1031 | 28 | [System.ComponentModel.DesignerCategoryAttribute("code")] | 28 | [System.ComponentModel.DesignerCategoryAttribute("code")] |
1032 | 29 | [System.Web.Services.WebServiceBindingAttribute(Name="xmdsBinding", Namespace="urn:xmds")] | 29 | [System.Web.Services.WebServiceBindingAttribute(Name="xmdsBinding", Namespace="urn:xmds")] |
1033 | @@ -45,6 +45,8 @@ | |||
1034 | 45 | 45 | ||
1035 | 46 | private System.Threading.SendOrPostCallback SubmitStatsOperationCompleted; | 46 | private System.Threading.SendOrPostCallback SubmitStatsOperationCompleted; |
1036 | 47 | 47 | ||
1037 | 48 | private System.Threading.SendOrPostCallback MediaInventoryOperationCompleted; | ||
1038 | 49 | |||
1039 | 48 | private bool useDefaultCredentialsSetExplicitly; | 50 | private bool useDefaultCredentialsSetExplicitly; |
1040 | 49 | 51 | ||
1041 | 50 | /// <remarks/> | 52 | /// <remarks/> |
1042 | @@ -108,6 +110,9 @@ | |||
1043 | 108 | public event SubmitStatsCompletedEventHandler SubmitStatsCompleted; | 110 | public event SubmitStatsCompletedEventHandler SubmitStatsCompleted; |
1044 | 109 | 111 | ||
1045 | 110 | /// <remarks/> | 112 | /// <remarks/> |
1046 | 113 | public event MediaInventoryCompletedEventHandler MediaInventoryCompleted; | ||
1047 | 114 | |||
1048 | 115 | /// <remarks/> | ||
1049 | 111 | [System.Web.Services.Protocols.SoapRpcMethodAttribute("urn:xmds#RegisterDisplay", RequestNamespace="urn:xmds", ResponseNamespace="urn:xmds")] | 116 | [System.Web.Services.Protocols.SoapRpcMethodAttribute("urn:xmds#RegisterDisplay", RequestNamespace="urn:xmds", ResponseNamespace="urn:xmds")] |
1050 | 112 | [return: System.Xml.Serialization.SoapElementAttribute("ActivationMessage")] | 117 | [return: System.Xml.Serialization.SoapElementAttribute("ActivationMessage")] |
1051 | 113 | public string RegisterDisplay(string serverKey, string hardwareKey, string displayName, string version) { | 118 | public string RegisterDisplay(string serverKey, string hardwareKey, string displayName, string version) { |
1052 | @@ -402,6 +407,42 @@ | |||
1053 | 402 | } | 407 | } |
1054 | 403 | 408 | ||
1055 | 404 | /// <remarks/> | 409 | /// <remarks/> |
1056 | 410 | [System.Web.Services.Protocols.SoapRpcMethodAttribute("urn:xmds#MediaInventory", RequestNamespace="urn:xmds", ResponseNamespace="urn:xmds")] | ||
1057 | 411 | [return: System.Xml.Serialization.SoapElementAttribute("success")] | ||
1058 | 412 | public bool MediaInventory(string version, string serverKey, string hardwareKey, [System.Xml.Serialization.SoapElementAttribute("mediaInventory")] string mediaInventory1) { | ||
1059 | 413 | object[] results = this.Invoke("MediaInventory", new object[] { | ||
1060 | 414 | version, | ||
1061 | 415 | serverKey, | ||
1062 | 416 | hardwareKey, | ||
1063 | 417 | mediaInventory1}); | ||
1064 | 418 | return ((bool)(results[0])); | ||
1065 | 419 | } | ||
1066 | 420 | |||
1067 | 421 | /// <remarks/> | ||
1068 | 422 | public void MediaInventoryAsync(string version, string serverKey, string hardwareKey, string mediaInventory1) { | ||
1069 | 423 | this.MediaInventoryAsync(version, serverKey, hardwareKey, mediaInventory1, null); | ||
1070 | 424 | } | ||
1071 | 425 | |||
1072 | 426 | /// <remarks/> | ||
1073 | 427 | public void MediaInventoryAsync(string version, string serverKey, string hardwareKey, string mediaInventory1, object userState) { | ||
1074 | 428 | if ((this.MediaInventoryOperationCompleted == null)) { | ||
1075 | 429 | this.MediaInventoryOperationCompleted = new System.Threading.SendOrPostCallback(this.OnMediaInventoryOperationCompleted); | ||
1076 | 430 | } | ||
1077 | 431 | this.InvokeAsync("MediaInventory", new object[] { | ||
1078 | 432 | version, | ||
1079 | 433 | serverKey, | ||
1080 | 434 | hardwareKey, | ||
1081 | 435 | mediaInventory1}, this.MediaInventoryOperationCompleted, userState); | ||
1082 | 436 | } | ||
1083 | 437 | |||
1084 | 438 | private void OnMediaInventoryOperationCompleted(object arg) { | ||
1085 | 439 | if ((this.MediaInventoryCompleted != null)) { | ||
1086 | 440 | System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); | ||
1087 | 441 | this.MediaInventoryCompleted(this, new MediaInventoryCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); | ||
1088 | 442 | } | ||
1089 | 443 | } | ||
1090 | 444 | |||
1091 | 445 | /// <remarks/> | ||
1092 | 405 | public new void CancelAsync(object userState) { | 446 | public new void CancelAsync(object userState) { |
1093 | 406 | base.CancelAsync(userState); | 447 | base.CancelAsync(userState); |
1094 | 407 | } | 448 | } |
1095 | @@ -421,11 +462,11 @@ | |||
1096 | 421 | } | 462 | } |
1097 | 422 | 463 | ||
1098 | 423 | /// <remarks/> | 464 | /// <remarks/> |
1100 | 424 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 465 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1101 | 425 | public delegate void RegisterDisplayCompletedEventHandler(object sender, RegisterDisplayCompletedEventArgs e); | 466 | public delegate void RegisterDisplayCompletedEventHandler(object sender, RegisterDisplayCompletedEventArgs e); |
1102 | 426 | 467 | ||
1103 | 427 | /// <remarks/> | 468 | /// <remarks/> |
1105 | 428 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 469 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1106 | 429 | [System.Diagnostics.DebuggerStepThroughAttribute()] | 470 | [System.Diagnostics.DebuggerStepThroughAttribute()] |
1107 | 430 | [System.ComponentModel.DesignerCategoryAttribute("code")] | 471 | [System.ComponentModel.DesignerCategoryAttribute("code")] |
1108 | 431 | public partial class RegisterDisplayCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { | 472 | public partial class RegisterDisplayCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { |
1109 | @@ -447,11 +488,11 @@ | |||
1110 | 447 | } | 488 | } |
1111 | 448 | 489 | ||
1112 | 449 | /// <remarks/> | 490 | /// <remarks/> |
1114 | 450 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 491 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1115 | 451 | public delegate void RequiredFilesCompletedEventHandler(object sender, RequiredFilesCompletedEventArgs e); | 492 | public delegate void RequiredFilesCompletedEventHandler(object sender, RequiredFilesCompletedEventArgs e); |
1116 | 452 | 493 | ||
1117 | 453 | /// <remarks/> | 494 | /// <remarks/> |
1119 | 454 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 495 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1120 | 455 | [System.Diagnostics.DebuggerStepThroughAttribute()] | 496 | [System.Diagnostics.DebuggerStepThroughAttribute()] |
1121 | 456 | [System.ComponentModel.DesignerCategoryAttribute("code")] | 497 | [System.ComponentModel.DesignerCategoryAttribute("code")] |
1122 | 457 | public partial class RequiredFilesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { | 498 | public partial class RequiredFilesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { |
1123 | @@ -473,11 +514,11 @@ | |||
1124 | 473 | } | 514 | } |
1125 | 474 | 515 | ||
1126 | 475 | /// <remarks/> | 516 | /// <remarks/> |
1128 | 476 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 517 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1129 | 477 | public delegate void GetFileCompletedEventHandler(object sender, GetFileCompletedEventArgs e); | 518 | public delegate void GetFileCompletedEventHandler(object sender, GetFileCompletedEventArgs e); |
1130 | 478 | 519 | ||
1131 | 479 | /// <remarks/> | 520 | /// <remarks/> |
1133 | 480 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 521 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1134 | 481 | [System.Diagnostics.DebuggerStepThroughAttribute()] | 522 | [System.Diagnostics.DebuggerStepThroughAttribute()] |
1135 | 482 | [System.ComponentModel.DesignerCategoryAttribute("code")] | 523 | [System.ComponentModel.DesignerCategoryAttribute("code")] |
1136 | 483 | public partial class GetFileCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { | 524 | public partial class GetFileCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { |
1137 | @@ -499,11 +540,11 @@ | |||
1138 | 499 | } | 540 | } |
1139 | 500 | 541 | ||
1140 | 501 | /// <remarks/> | 542 | /// <remarks/> |
1142 | 502 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 543 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1143 | 503 | public delegate void ScheduleCompletedEventHandler(object sender, ScheduleCompletedEventArgs e); | 544 | public delegate void ScheduleCompletedEventHandler(object sender, ScheduleCompletedEventArgs e); |
1144 | 504 | 545 | ||
1145 | 505 | /// <remarks/> | 546 | /// <remarks/> |
1147 | 506 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 547 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1148 | 507 | [System.Diagnostics.DebuggerStepThroughAttribute()] | 548 | [System.Diagnostics.DebuggerStepThroughAttribute()] |
1149 | 508 | [System.ComponentModel.DesignerCategoryAttribute("code")] | 549 | [System.ComponentModel.DesignerCategoryAttribute("code")] |
1150 | 509 | public partial class ScheduleCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { | 550 | public partial class ScheduleCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { |
1151 | @@ -525,11 +566,11 @@ | |||
1152 | 525 | } | 566 | } |
1153 | 526 | 567 | ||
1154 | 527 | /// <remarks/> | 568 | /// <remarks/> |
1156 | 528 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 569 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1157 | 529 | public delegate void RecieveXmlLogCompletedEventHandler(object sender, RecieveXmlLogCompletedEventArgs e); | 570 | public delegate void RecieveXmlLogCompletedEventHandler(object sender, RecieveXmlLogCompletedEventArgs e); |
1158 | 530 | 571 | ||
1159 | 531 | /// <remarks/> | 572 | /// <remarks/> |
1161 | 532 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 573 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1162 | 533 | [System.Diagnostics.DebuggerStepThroughAttribute()] | 574 | [System.Diagnostics.DebuggerStepThroughAttribute()] |
1163 | 534 | [System.ComponentModel.DesignerCategoryAttribute("code")] | 575 | [System.ComponentModel.DesignerCategoryAttribute("code")] |
1164 | 535 | public partial class RecieveXmlLogCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { | 576 | public partial class RecieveXmlLogCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { |
1165 | @@ -551,11 +592,11 @@ | |||
1166 | 551 | } | 592 | } |
1167 | 552 | 593 | ||
1168 | 553 | /// <remarks/> | 594 | /// <remarks/> |
1170 | 554 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 595 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1171 | 555 | public delegate void BlackListCompletedEventHandler(object sender, BlackListCompletedEventArgs e); | 596 | public delegate void BlackListCompletedEventHandler(object sender, BlackListCompletedEventArgs e); |
1172 | 556 | 597 | ||
1173 | 557 | /// <remarks/> | 598 | /// <remarks/> |
1175 | 558 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 599 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1176 | 559 | [System.Diagnostics.DebuggerStepThroughAttribute()] | 600 | [System.Diagnostics.DebuggerStepThroughAttribute()] |
1177 | 560 | [System.ComponentModel.DesignerCategoryAttribute("code")] | 601 | [System.ComponentModel.DesignerCategoryAttribute("code")] |
1178 | 561 | public partial class BlackListCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { | 602 | public partial class BlackListCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { |
1179 | @@ -577,11 +618,11 @@ | |||
1180 | 577 | } | 618 | } |
1181 | 578 | 619 | ||
1182 | 579 | /// <remarks/> | 620 | /// <remarks/> |
1184 | 580 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 621 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1185 | 581 | public delegate void SubmitLogCompletedEventHandler(object sender, SubmitLogCompletedEventArgs e); | 622 | public delegate void SubmitLogCompletedEventHandler(object sender, SubmitLogCompletedEventArgs e); |
1186 | 582 | 623 | ||
1187 | 583 | /// <remarks/> | 624 | /// <remarks/> |
1189 | 584 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 625 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1190 | 585 | [System.Diagnostics.DebuggerStepThroughAttribute()] | 626 | [System.Diagnostics.DebuggerStepThroughAttribute()] |
1191 | 586 | [System.ComponentModel.DesignerCategoryAttribute("code")] | 627 | [System.ComponentModel.DesignerCategoryAttribute("code")] |
1192 | 587 | public partial class SubmitLogCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { | 628 | public partial class SubmitLogCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { |
1193 | @@ -603,11 +644,11 @@ | |||
1194 | 603 | } | 644 | } |
1195 | 604 | 645 | ||
1196 | 605 | /// <remarks/> | 646 | /// <remarks/> |
1198 | 606 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 647 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1199 | 607 | public delegate void SubmitStatsCompletedEventHandler(object sender, SubmitStatsCompletedEventArgs e); | 648 | public delegate void SubmitStatsCompletedEventHandler(object sender, SubmitStatsCompletedEventArgs e); |
1200 | 608 | 649 | ||
1201 | 609 | /// <remarks/> | 650 | /// <remarks/> |
1203 | 610 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4918")] | 651 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] |
1204 | 611 | [System.Diagnostics.DebuggerStepThroughAttribute()] | 652 | [System.Diagnostics.DebuggerStepThroughAttribute()] |
1205 | 612 | [System.ComponentModel.DesignerCategoryAttribute("code")] | 653 | [System.ComponentModel.DesignerCategoryAttribute("code")] |
1206 | 613 | public partial class SubmitStatsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { | 654 | public partial class SubmitStatsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { |
1207 | @@ -627,6 +668,32 @@ | |||
1208 | 627 | } | 668 | } |
1209 | 628 | } | 669 | } |
1210 | 629 | } | 670 | } |
1211 | 671 | |||
1212 | 672 | /// <remarks/> | ||
1213 | 673 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] | ||
1214 | 674 | public delegate void MediaInventoryCompletedEventHandler(object sender, MediaInventoryCompletedEventArgs e); | ||
1215 | 675 | |||
1216 | 676 | /// <remarks/> | ||
1217 | 677 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")] | ||
1218 | 678 | [System.Diagnostics.DebuggerStepThroughAttribute()] | ||
1219 | 679 | [System.ComponentModel.DesignerCategoryAttribute("code")] | ||
1220 | 680 | public partial class MediaInventoryCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { | ||
1221 | 681 | |||
1222 | 682 | private object[] results; | ||
1223 | 683 | |||
1224 | 684 | internal MediaInventoryCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : | ||
1225 | 685 | base(exception, cancelled, userState) { | ||
1226 | 686 | this.results = results; | ||
1227 | 687 | } | ||
1228 | 688 | |||
1229 | 689 | /// <remarks/> | ||
1230 | 690 | public bool Result { | ||
1231 | 691 | get { | ||
1232 | 692 | this.RaiseExceptionIfNecessary(); | ||
1233 | 693 | return ((bool)(this.results[0])); | ||
1234 | 694 | } | ||
1235 | 695 | } | ||
1236 | 696 | } | ||
1237 | 630 | } | 697 | } |
1238 | 631 | 698 | ||
1239 | 632 | #pragma warning restore 1591 | 699 | #pragma warning restore 1591 |
1240 | 633 | \ No newline at end of file | 700 | \ No newline at end of file |
1241 | 634 | 701 | ||
1242 | === modified file 'client/dotNET/Web References/xmds/Reference.map' | |||
1243 | --- client/dotNET/Web References/xmds/Reference.map 2009-12-31 11:38:50 +0000 | |||
1244 | +++ client/dotNET/Web References/xmds/Reference.map 2011-02-28 15:09:00 +0000 | |||
1245 | @@ -1,6 +1,6 @@ | |||
1246 | 1 | <?xml version="1.0" encoding="utf-8"?> | 1 | <?xml version="1.0" encoding="utf-8"?> |
1247 | 2 | <DiscoveryClientResultsFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> | 2 | <DiscoveryClientResultsFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> |
1248 | 3 | <Results> | 3 | <Results> |
1250 | 4 | <DiscoveryClientResult referenceType="System.Web.Services.Discovery.ContractReference" url="http://localhost/1.0.0/server/xmds.php?wsdl" filename="xmds.wsdl" /> | 4 | <DiscoveryClientResult referenceType="System.Web.Services.Discovery.ContractReference" url="http://localhost/Series 1.2/server-121-soap-wsdl/server/xmds.php?wsdl" filename="xmds.wsdl" /> |
1251 | 5 | </Results> | 5 | </Results> |
1252 | 6 | </DiscoveryClientResultsFile> | 6 | </DiscoveryClientResultsFile> |
1253 | 7 | \ No newline at end of file | 7 | \ No newline at end of file |
1254 | 8 | 8 | ||
1255 | === modified file 'client/dotNET/Web References/xmds/xmds.wsdl' | |||
1256 | --- client/dotNET/Web References/xmds/xmds.wsdl 2009-12-31 11:38:50 +0000 | |||
1257 | +++ client/dotNET/Web References/xmds/xmds.wsdl 2011-02-28 15:09:00 +0000 | |||
1258 | @@ -81,6 +81,15 @@ | |||
1259 | 81 | <wsdl:message name="SubmitStatsResponse"> | 81 | <wsdl:message name="SubmitStatsResponse"> |
1260 | 82 | <wsdl:part name="success" type="xsd:boolean" /> | 82 | <wsdl:part name="success" type="xsd:boolean" /> |
1261 | 83 | </wsdl:message> | 83 | </wsdl:message> |
1262 | 84 | <wsdl:message name="MediaInventoryRequest"> | ||
1263 | 85 | <wsdl:part name="version" type="xsd:string" /> | ||
1264 | 86 | <wsdl:part name="serverKey" type="xsd:string" /> | ||
1265 | 87 | <wsdl:part name="hardwareKey" type="xsd:string" /> | ||
1266 | 88 | <wsdl:part name="mediaInventory" type="xsd:string" /> | ||
1267 | 89 | </wsdl:message> | ||
1268 | 90 | <wsdl:message name="MediaInventoryResponse"> | ||
1269 | 91 | <wsdl:part name="success" type="xsd:boolean" /> | ||
1270 | 92 | </wsdl:message> | ||
1271 | 84 | <wsdl:portType name="xmdsPortType"> | 93 | <wsdl:portType name="xmdsPortType"> |
1272 | 85 | <wsdl:operation name="RegisterDisplay"> | 94 | <wsdl:operation name="RegisterDisplay"> |
1273 | 86 | <documentation>Registered the Display on the Xibo Network</documentation> | 95 | <documentation>Registered the Display on the Xibo Network</documentation> |
1274 | @@ -122,6 +131,11 @@ | |||
1275 | 122 | <wsdl:input message="tns:SubmitStatsRequest" /> | 131 | <wsdl:input message="tns:SubmitStatsRequest" /> |
1276 | 123 | <wsdl:output message="tns:SubmitStatsResponse" /> | 132 | <wsdl:output message="tns:SubmitStatsResponse" /> |
1277 | 124 | </wsdl:operation> | 133 | </wsdl:operation> |
1278 | 134 | <wsdl:operation name="MediaInventory"> | ||
1279 | 135 | <documentation>Report back the clients MediaInventory</documentation> | ||
1280 | 136 | <wsdl:input message="tns:MediaInventoryRequest" /> | ||
1281 | 137 | <wsdl:output message="tns:MediaInventoryResponse" /> | ||
1282 | 138 | </wsdl:operation> | ||
1283 | 125 | </wsdl:portType> | 139 | </wsdl:portType> |
1284 | 126 | <wsdl:binding name="xmdsBinding" type="tns:xmdsPortType"> | 140 | <wsdl:binding name="xmdsBinding" type="tns:xmdsPortType"> |
1285 | 127 | <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc" /> | 141 | <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc" /> |
1286 | @@ -197,10 +211,19 @@ | |||
1287 | 197 | <soap:body use="encoded" namespace="urn:xmds" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> | 211 | <soap:body use="encoded" namespace="urn:xmds" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> |
1288 | 198 | </wsdl:output> | 212 | </wsdl:output> |
1289 | 199 | </wsdl:operation> | 213 | </wsdl:operation> |
1290 | 214 | <wsdl:operation name="MediaInventory"> | ||
1291 | 215 | <soap:operation soapAction="urn:xmds#MediaInventory" style="rpc" /> | ||
1292 | 216 | <wsdl:input> | ||
1293 | 217 | <soap:body use="encoded" namespace="urn:xmds" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> | ||
1294 | 218 | </wsdl:input> | ||
1295 | 219 | <wsdl:output> | ||
1296 | 220 | <soap:body use="encoded" namespace="urn:xmds" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> | ||
1297 | 221 | </wsdl:output> | ||
1298 | 222 | </wsdl:operation> | ||
1299 | 200 | </wsdl:binding> | 223 | </wsdl:binding> |
1300 | 201 | <wsdl:service name="xmds"> | 224 | <wsdl:service name="xmds"> |
1301 | 202 | <wsdl:port name="xmdsPort" binding="tns:xmdsBinding"> | 225 | <wsdl:port name="xmdsPort" binding="tns:xmdsBinding"> |
1303 | 203 | <soap:address location="http://localhost/1.0.0/server/xmds.php" /> | 226 | <soap:address location="http://localhost/Series%201.2/server-121-soap-wsdl/server/xmds.php" /> |
1304 | 204 | </wsdl:port> | 227 | </wsdl:port> |
1305 | 205 | </wsdl:service> | 228 | </wsdl:service> |
1306 | 206 | </wsdl:definitions> | 229 | </wsdl:definitions> |
1307 | 207 | \ No newline at end of file | 230 | \ No newline at end of file |
1308 | 208 | 231 | ||
1309 | === modified file 'client/dotNET/XiboClient.csproj' | |||
1310 | --- client/dotNET/XiboClient.csproj 2010-08-22 12:42:36 +0000 | |||
1311 | +++ client/dotNET/XiboClient.csproj 2011-02-28 15:09:00 +0000 | |||
1312 | @@ -161,6 +161,7 @@ | |||
1313 | 161 | <Compile Include="Region.cs"> | 161 | <Compile Include="Region.cs"> |
1314 | 162 | <SubType>Component</SubType> | 162 | <SubType>Component</SubType> |
1315 | 163 | </Compile> | 163 | </Compile> |
1316 | 164 | <Compile Include="RequiredFiles.cs" /> | ||
1317 | 164 | <Compile Include="Rss.cs"> | 165 | <Compile Include="Rss.cs"> |
1318 | 165 | <SubType>Form</SubType> | 166 | <SubType>Form</SubType> |
1319 | 166 | </Compile> | 167 | </Compile> |
1320 | @@ -267,10 +268,10 @@ | |||
1321 | 267 | <WebReferences Include="Web References\" /> | 268 | <WebReferences Include="Web References\" /> |
1322 | 268 | </ItemGroup> | 269 | </ItemGroup> |
1323 | 269 | <ItemGroup> | 270 | <ItemGroup> |
1325 | 270 | <WebReferenceUrl Include="http://localhost/1.0.0/server/xmds.php%3fwsdl"> | 271 | <WebReferenceUrl Include="http://localhost/Series%25201.2/server-121-soap-wsdl/server/xmds.php%3fwsdl"> |
1326 | 271 | <UrlBehavior>Dynamic</UrlBehavior> | 272 | <UrlBehavior>Dynamic</UrlBehavior> |
1327 | 272 | <RelPath>Web References\xmds\</RelPath> | 273 | <RelPath>Web References\xmds\</RelPath> |
1329 | 273 | <UpdateFromURL>http://localhost/1.0.0/server/xmds.php%3fwsdl</UpdateFromURL> | 274 | <UpdateFromURL>http://localhost/Series%25201.2/server-121-soap-wsdl/server/xmds.php%3fwsdl</UpdateFromURL> |
1330 | 274 | <ServiceLocationURL> | 275 | <ServiceLocationURL> |
1331 | 275 | </ServiceLocationURL> | 276 | </ServiceLocationURL> |
1332 | 276 | <CachedDynamicPropName> | 277 | <CachedDynamicPropName> |
1333 | @@ -294,11 +295,12 @@ | |||
1334 | 294 | </EmbeddedResource> | 295 | </EmbeddedResource> |
1335 | 295 | </ItemGroup> | 296 | </ItemGroup> |
1336 | 296 | <ItemGroup> | 297 | <ItemGroup> |
1337 | 297 | <EmbeddedResource Include="Resources\splash.jpg" /> | ||
1338 | 298 | </ItemGroup> | ||
1339 | 299 | <ItemGroup> | ||
1340 | 300 | <EmbeddedResource Include="Resources\HtmlTemplate.htm" /> | 298 | <EmbeddedResource Include="Resources\HtmlTemplate.htm" /> |
1341 | 301 | </ItemGroup> | 299 | </ItemGroup> |
1342 | 300 | <ItemGroup> | ||
1343 | 301 | <EmbeddedResource Include="Resources\splash.jpg"> | ||
1344 | 302 | </EmbeddedResource> | ||
1345 | 303 | </ItemGroup> | ||
1346 | 302 | <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> | 304 | <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> |
1347 | 303 | <!-- To modify your build process, add your task inside one of the targets below and uncomment it. | 305 | <!-- To modify your build process, add your task inside one of the targets below and uncomment it. |
1348 | 304 | Other similar extension points exist, see Microsoft.Common.targets. | 306 | Other similar extension points exist, see Microsoft.Common.targets. |
1349 | 305 | 307 | ||
1350 | === modified file 'client/dotNET/app.config' | |||
1351 | --- client/dotNET/app.config 2010-09-26 14:33:38 +0000 | |||
1352 | +++ client/dotNET/app.config 2011-02-28 15:09:00 +0000 | |||
1353 | @@ -14,7 +14,7 @@ | |||
1354 | 14 | <value>DEFAULT</value> | 14 | <value>DEFAULT</value> |
1355 | 15 | </setting> | 15 | </setting> |
1356 | 16 | <setting name="XiboClient_xmds_xmds" serializeAs="String"> | 16 | <setting name="XiboClient_xmds_xmds" serializeAs="String"> |
1358 | 17 | <value>http://localhost/xibo/xmds.php</value> | 17 | <value>http://localhost/Series%201.2/server-121-soap-wsdl/server/xmds.php</value> |
1359 | 18 | </setting> | 18 | </setting> |
1360 | 19 | <setting name="ServerKey" serializeAs="String"> | 19 | <setting name="ServerKey" serializeAs="String"> |
1361 | 20 | <value>yourserverkey</value> | 20 | <value>yourserverkey</value> |
1362 | @@ -79,6 +79,9 @@ | |||
1363 | 79 | <setting name="emptyLayoutDuration" serializeAs="String"> | 79 | <setting name="emptyLayoutDuration" serializeAs="String"> |
1364 | 80 | <value>10</value> | 80 | <value>10</value> |
1365 | 81 | </setting> | 81 | </setting> |
1366 | 82 | <setting name="RequiredFilesFile" serializeAs="String"> | ||
1367 | 83 | <value>requiredFiles.xml</value> | ||
1368 | 84 | </setting> | ||
1369 | 82 | </XiboClient.Properties.Settings> | 85 | </XiboClient.Properties.Settings> |
1370 | 83 | </userSettings> | 86 | </userSettings> |
1371 | 84 | <applicationSettings> | 87 | <applicationSettings> |
1372 | @@ -102,7 +105,7 @@ | |||
1373 | 102 | <value>cacheManager.xml</value> | 105 | <value>cacheManager.xml</value> |
1374 | 103 | </setting> | 106 | </setting> |
1375 | 104 | <setting name="ClientVersion" serializeAs="String"> | 107 | <setting name="ClientVersion" serializeAs="String"> |
1377 | 105 | <value>1.2.0</value> | 108 | <value>1.2.2</value> |
1378 | 106 | </setting> | 109 | </setting> |
1379 | 107 | <setting name="xmdsResetTimeout" serializeAs="String"> | 110 | <setting name="xmdsResetTimeout" serializeAs="String"> |
1380 | 108 | <value>900</value> | 111 | <value>900</value> |
1381 | 109 | 112 | ||
1382 | === modified file 'client/dotNET/bin/Release/AxInterop.ShockwaveFlashObjects.dll' | |||
1383 | 110 | Binary files client/dotNET/bin/Release/AxInterop.ShockwaveFlashObjects.dll 2010-04-19 21:45:10 +0000 and client/dotNET/bin/Release/AxInterop.ShockwaveFlashObjects.dll 2011-02-28 15:09:00 +0000 differ | 113 | Binary files client/dotNET/bin/Release/AxInterop.ShockwaveFlashObjects.dll 2010-04-19 21:45:10 +0000 and client/dotNET/bin/Release/AxInterop.ShockwaveFlashObjects.dll 2011-02-28 15:09:00 +0000 differ |
1384 | === modified file 'client/dotNET/bin/Release/AxInterop.WMPLib.dll' | |||
1385 | 111 | Binary files client/dotNET/bin/Release/AxInterop.WMPLib.dll 2010-04-19 21:45:10 +0000 and client/dotNET/bin/Release/AxInterop.WMPLib.dll 2011-02-28 15:09:00 +0000 differ | 114 | Binary files client/dotNET/bin/Release/AxInterop.WMPLib.dll 2010-04-19 21:45:10 +0000 and client/dotNET/bin/Release/AxInterop.WMPLib.dll 2011-02-28 15:09:00 +0000 differ |
1386 | === modified file 'client/dotNET/bin/Release/Interop.ShockwaveFlashObjects.dll' | |||
1387 | 112 | Binary files client/dotNET/bin/Release/Interop.ShockwaveFlashObjects.dll 2010-04-19 21:45:10 +0000 and client/dotNET/bin/Release/Interop.ShockwaveFlashObjects.dll 2011-02-28 15:09:00 +0000 differ | 115 | Binary files client/dotNET/bin/Release/Interop.ShockwaveFlashObjects.dll 2010-04-19 21:45:10 +0000 and client/dotNET/bin/Release/Interop.ShockwaveFlashObjects.dll 2011-02-28 15:09:00 +0000 differ |
1388 | === modified file 'client/dotNET/bin/Release/Interop.WMPLib.dll' | |||
1389 | 113 | Binary files client/dotNET/bin/Release/Interop.WMPLib.dll 2010-04-19 21:45:10 +0000 and client/dotNET/bin/Release/Interop.WMPLib.dll 2011-02-28 15:09:00 +0000 differ | 116 | Binary files client/dotNET/bin/Release/Interop.WMPLib.dll 2010-04-19 21:45:10 +0000 and client/dotNET/bin/Release/Interop.WMPLib.dll 2011-02-28 15:09:00 +0000 differ |
1390 | === modified file 'client/dotNET/bin/Release/XiboClient.exe.config' | |||
1391 | --- client/dotNET/bin/Release/XiboClient.exe.config 2010-04-19 21:45:10 +0000 | |||
1392 | +++ client/dotNET/bin/Release/XiboClient.exe.config 2011-02-28 15:09:00 +0000 | |||
1393 | @@ -14,7 +14,7 @@ | |||
1394 | 14 | <value>DEFAULT</value> | 14 | <value>DEFAULT</value> |
1395 | 15 | </setting> | 15 | </setting> |
1396 | 16 | <setting name="XiboClient_xmds_xmds" serializeAs="String"> | 16 | <setting name="XiboClient_xmds_xmds" serializeAs="String"> |
1398 | 17 | <value>http://localhost/xibo/xmds.php</value> | 17 | <value>http://localhost/Series%201.2/server-121-soap-wsdl/server/xmds.php</value> |
1399 | 18 | </setting> | 18 | </setting> |
1400 | 19 | <setting name="ServerKey" serializeAs="String"> | 19 | <setting name="ServerKey" serializeAs="String"> |
1401 | 20 | <value>yourserverkey</value> | 20 | <value>yourserverkey</value> |
1402 | @@ -61,6 +61,27 @@ | |||
1403 | 61 | <setting name="scrollStepAmount" serializeAs="String"> | 61 | <setting name="scrollStepAmount" serializeAs="String"> |
1404 | 62 | <value>1</value> | 62 | <value>1</value> |
1405 | 63 | </setting> | 63 | </setting> |
1406 | 64 | <setting name="sizeX" serializeAs="String"> | ||
1407 | 65 | <value>0</value> | ||
1408 | 66 | </setting> | ||
1409 | 67 | <setting name="sizeY" serializeAs="String"> | ||
1410 | 68 | <value>0</value> | ||
1411 | 69 | </setting> | ||
1412 | 70 | <setting name="offsetX" serializeAs="String"> | ||
1413 | 71 | <value>0</value> | ||
1414 | 72 | </setting> | ||
1415 | 73 | <setting name="offsetY" serializeAs="String"> | ||
1416 | 74 | <value>0</value> | ||
1417 | 75 | </setting> | ||
1418 | 76 | <setting name="expireModifiedLayouts" serializeAs="String"> | ||
1419 | 77 | <value>True</value> | ||
1420 | 78 | </setting> | ||
1421 | 79 | <setting name="emptyLayoutDuration" serializeAs="String"> | ||
1422 | 80 | <value>10</value> | ||
1423 | 81 | </setting> | ||
1424 | 82 | <setting name="RequiredFilesFile" serializeAs="String"> | ||
1425 | 83 | <value>requiredFiles.xml</value> | ||
1426 | 84 | </setting> | ||
1427 | 64 | </XiboClient.Properties.Settings> | 85 | </XiboClient.Properties.Settings> |
1428 | 65 | </userSettings> | 86 | </userSettings> |
1429 | 66 | <applicationSettings> | 87 | <applicationSettings> |
1430 | @@ -75,7 +96,7 @@ | |||
1431 | 75 | <value>blacklist.xml</value> | 96 | <value>blacklist.xml</value> |
1432 | 76 | </setting> | 97 | </setting> |
1433 | 77 | <setting name="Version" serializeAs="String"> | 98 | <setting name="Version" serializeAs="String"> |
1435 | 78 | <value>1</value> | 99 | <value>2</value> |
1436 | 79 | </setting> | 100 | </setting> |
1437 | 80 | <setting name="StatsLogFile" serializeAs="String"> | 101 | <setting name="StatsLogFile" serializeAs="String"> |
1438 | 81 | <value>stats.xml</value> | 102 | <value>stats.xml</value> |
1439 | @@ -84,7 +105,7 @@ | |||
1440 | 84 | <value>cacheManager.xml</value> | 105 | <value>cacheManager.xml</value> |
1441 | 85 | </setting> | 106 | </setting> |
1442 | 86 | <setting name="ClientVersion" serializeAs="String"> | 107 | <setting name="ClientVersion" serializeAs="String"> |
1444 | 87 | <value>1.0.7</value> | 108 | <value>1.2.2</value> |
1445 | 88 | </setting> | 109 | </setting> |
1446 | 89 | <setting name="xmdsResetTimeout" serializeAs="String"> | 110 | <setting name="xmdsResetTimeout" serializeAs="String"> |
1447 | 90 | <value>900</value> | 111 | <value>900</value> |
1448 | 91 | 112 | ||
1449 | === modified file 'client/dotNET/bin/Release/XiboClient.vshost.exe.config' | |||
1450 | --- client/dotNET/bin/Release/XiboClient.vshost.exe.config 2010-04-19 21:45:10 +0000 | |||
1451 | +++ client/dotNET/bin/Release/XiboClient.vshost.exe.config 2011-02-28 15:09:00 +0000 | |||
1452 | @@ -14,7 +14,7 @@ | |||
1453 | 14 | <value>DEFAULT</value> | 14 | <value>DEFAULT</value> |
1454 | 15 | </setting> | 15 | </setting> |
1455 | 16 | <setting name="XiboClient_xmds_xmds" serializeAs="String"> | 16 | <setting name="XiboClient_xmds_xmds" serializeAs="String"> |
1457 | 17 | <value>http://localhost/xibo/xmds.php</value> | 17 | <value>http://localhost/Series%201.2/server-121-soap-wsdl/server/xmds.php</value> |
1458 | 18 | </setting> | 18 | </setting> |
1459 | 19 | <setting name="ServerKey" serializeAs="String"> | 19 | <setting name="ServerKey" serializeAs="String"> |
1460 | 20 | <value>yourserverkey</value> | 20 | <value>yourserverkey</value> |
1461 | @@ -61,6 +61,27 @@ | |||
1462 | 61 | <setting name="scrollStepAmount" serializeAs="String"> | 61 | <setting name="scrollStepAmount" serializeAs="String"> |
1463 | 62 | <value>1</value> | 62 | <value>1</value> |
1464 | 63 | </setting> | 63 | </setting> |
1465 | 64 | <setting name="sizeX" serializeAs="String"> | ||
1466 | 65 | <value>0</value> | ||
1467 | 66 | </setting> | ||
1468 | 67 | <setting name="sizeY" serializeAs="String"> | ||
1469 | 68 | <value>0</value> | ||
1470 | 69 | </setting> | ||
1471 | 70 | <setting name="offsetX" serializeAs="String"> | ||
1472 | 71 | <value>0</value> | ||
1473 | 72 | </setting> | ||
1474 | 73 | <setting name="offsetY" serializeAs="String"> | ||
1475 | 74 | <value>0</value> | ||
1476 | 75 | </setting> | ||
1477 | 76 | <setting name="expireModifiedLayouts" serializeAs="String"> | ||
1478 | 77 | <value>True</value> | ||
1479 | 78 | </setting> | ||
1480 | 79 | <setting name="emptyLayoutDuration" serializeAs="String"> | ||
1481 | 80 | <value>10</value> | ||
1482 | 81 | </setting> | ||
1483 | 82 | <setting name="RequiredFilesFile" serializeAs="String"> | ||
1484 | 83 | <value>requiredFiles.xml</value> | ||
1485 | 84 | </setting> | ||
1486 | 64 | </XiboClient.Properties.Settings> | 85 | </XiboClient.Properties.Settings> |
1487 | 65 | </userSettings> | 86 | </userSettings> |
1488 | 66 | <applicationSettings> | 87 | <applicationSettings> |
1489 | @@ -75,7 +96,7 @@ | |||
1490 | 75 | <value>blacklist.xml</value> | 96 | <value>blacklist.xml</value> |
1491 | 76 | </setting> | 97 | </setting> |
1492 | 77 | <setting name="Version" serializeAs="String"> | 98 | <setting name="Version" serializeAs="String"> |
1494 | 78 | <value>1</value> | 99 | <value>2</value> |
1495 | 79 | </setting> | 100 | </setting> |
1496 | 80 | <setting name="StatsLogFile" serializeAs="String"> | 101 | <setting name="StatsLogFile" serializeAs="String"> |
1497 | 81 | <value>stats.xml</value> | 102 | <value>stats.xml</value> |
1498 | @@ -84,7 +105,7 @@ | |||
1499 | 84 | <value>cacheManager.xml</value> | 105 | <value>cacheManager.xml</value> |
1500 | 85 | </setting> | 106 | </setting> |
1501 | 86 | <setting name="ClientVersion" serializeAs="String"> | 107 | <setting name="ClientVersion" serializeAs="String"> |
1503 | 87 | <value>1.0.7</value> | 108 | <value>1.2.2</value> |
1504 | 88 | </setting> | 109 | </setting> |
1505 | 89 | <setting name="xmdsResetTimeout" serializeAs="String"> | 110 | <setting name="xmdsResetTimeout" serializeAs="String"> |
1506 | 90 | <value>900</value> | 111 | <value>900</value> |
1507 | 91 | 112 | ||
1508 | === modified file 'client/python/XiboClient.py' | |||
1509 | --- client/python/XiboClient.py 2011-02-10 22:25:35 +0000 | |||
1510 | +++ client/python/XiboClient.py 2011-02-28 15:09:00 +0000 | |||
1511 | @@ -48,7 +48,11 @@ | |||
1512 | 48 | import PIL.Image | 48 | import PIL.Image |
1513 | 49 | import math | 49 | import math |
1514 | 50 | 50 | ||
1515 | 51 | <<<<<<< TREE | ||
1516 | 51 | version = "1.3.0a1" | 52 | version = "1.3.0a1" |
1517 | 53 | ======= | ||
1518 | 54 | version = "1.2.1a1" | ||
1519 | 55 | >>>>>>> MERGE-SOURCE | ||
1520 | 52 | 56 | ||
1521 | 53 | # What layout schema version is supported | 57 | # What layout schema version is supported |
1522 | 54 | schemaVersion = 1 | 58 | schemaVersion = 1 |
1523 | @@ -1015,11 +1019,18 @@ | |||
1524 | 1015 | if config.get('Main','manualUpdate') == 'true': | 1019 | if config.get('Main','manualUpdate') == 'true': |
1525 | 1016 | log.lights('offlineUpdate','start') | 1020 | log.lights('offlineUpdate','start') |
1526 | 1017 | 1021 | ||
1527 | 1022 | if config.get('Main','manualUpdate') == 'true': | ||
1528 | 1023 | log.lights('offlineUpdate','start') | ||
1529 | 1024 | |||
1530 | 1018 | # Check if the file is downloading already | 1025 | # Check if the file is downloading already |
1531 | 1019 | if not tmpFileName in self.runningDownloads: | 1026 | if not tmpFileName in self.runningDownloads: |
1532 | 1020 | # Make a download thread and actually download the file. | 1027 | # Make a download thread and actually download the file. |
1533 | 1021 | # Add the running thread to the self.runningDownloads dictionary | 1028 | # Add the running thread to the self.runningDownloads dictionary |
1534 | 1029 | <<<<<<< TREE | ||
1535 | 1022 | self.runningDownloads[tmpFileName] = XiboDownloadThread(self,tmpType,tmpFileName,tmpSize,tmpHash,tmpId) | 1030 | self.runningDownloads[tmpFileName] = XiboDownloadThread(self,tmpType,tmpFileName,tmpSize,tmpHash,tmpId) |
1536 | 1031 | ======= | ||
1537 | 1032 | self.runningDownloads[tmpFileName] = XiboDownloadThread(self,tmpType,tmpFileName,tmpSize,tmpHash) | ||
1538 | 1033 | >>>>>>> MERGE-SOURCE | ||
1539 | 1023 | log.updateRunningDownloads(len(self.runningDownloads)) | 1034 | log.updateRunningDownloads(len(self.runningDownloads)) |
1540 | 1024 | 1035 | ||
1541 | 1025 | if self.offline: | 1036 | if self.offline: |
1542 | @@ -2544,7 +2555,11 @@ | |||
1543 | 2544 | 2555 | ||
1544 | 2545 | class XMDS: | 2556 | class XMDS: |
1545 | 2546 | def __init__(self): | 2557 | def __init__(self): |
1546 | 2558 | <<<<<<< TREE | ||
1547 | 2547 | self.__schemaVersion__ = "3" | 2559 | self.__schemaVersion__ = "3" |
1548 | 2560 | ======= | ||
1549 | 2561 | self.__schemaVersion__ = "2" | ||
1550 | 2562 | >>>>>>> MERGE-SOURCE | ||
1551 | 2548 | 2563 | ||
1552 | 2549 | # Semaphore to allow only one XMDS call to run check simultaneously | 2564 | # Semaphore to allow only one XMDS call to run check simultaneously |
1553 | 2550 | self.checkLock = Semaphore() | 2565 | self.checkLock = Semaphore() |
1554 | @@ -2959,6 +2974,7 @@ | |||
1555 | 2959 | log.log(0,"error",str(err)) | 2974 | log.log(0,"error",str(err)) |
1556 | 2960 | self.hasInitialised = False | 2975 | self.hasInitialised = False |
1557 | 2961 | 2976 | ||
1558 | 2977 | <<<<<<< TREE | ||
1559 | 2962 | def MediaInventory(self,inventoryXml): | 2978 | def MediaInventory(self,inventoryXml): |
1560 | 2963 | response = None | 2979 | response = None |
1561 | 2964 | log.lights('Log','amber') | 2980 | log.lights('Log','amber') |
1562 | @@ -3186,6 +3202,186 @@ | |||
1563 | 3186 | log.lights('RD','green') | 3202 | log.lights('RD','green') |
1564 | 3187 | 3203 | ||
1565 | 3188 | #### Finish Webservice | 3204 | #### Finish Webservice |
1566 | 3205 | ======= | ||
1567 | 3206 | class XMDSOffline(Thread): | ||
1568 | 3207 | def __init__(self,displayManager): | ||
1569 | 3208 | Thread.__init__(self) | ||
1570 | 3209 | self.__schemaVersion__ = "2" | ||
1571 | 3210 | self.displayManager = displayManager | ||
1572 | 3211 | self.updatePath = "" | ||
1573 | 3212 | self.__running__ = True | ||
1574 | 3213 | self.__scanPath__ = '/media' | ||
1575 | 3214 | |||
1576 | 3215 | # Semaphore to allow only one XMDS call to run check simultaneously | ||
1577 | 3216 | self.checkLock = Semaphore() | ||
1578 | 3217 | |||
1579 | 3218 | self.hasInitialised = False | ||
1580 | 3219 | |||
1581 | 3220 | salt = None | ||
1582 | 3221 | try: | ||
1583 | 3222 | salt = config.get('Main','xmdsClientID') | ||
1584 | 3223 | except: | ||
1585 | 3224 | log.log(0,"error",_("No XMDS Client ID specified in your configuration")) | ||
1586 | 3225 | log.log(0,"error",_("Please check your xmdsClientID configuration option")) | ||
1587 | 3226 | exit(1) | ||
1588 | 3227 | |||
1589 | 3228 | self.uuid = uuid.uuid5(uuid.NAMESPACE_DNS, salt) | ||
1590 | 3229 | # Convert the UUID in to a SHA1 hash | ||
1591 | 3230 | self.uuid = hashlib.sha1(str(self.uuid)).hexdigest() | ||
1592 | 3231 | |||
1593 | 3232 | licenseKey = '' | ||
1594 | 3233 | try: | ||
1595 | 3234 | licenseKey = config.get('Main','xmdsLicenseKey') | ||
1596 | 3235 | except: | ||
1597 | 3236 | pass | ||
1598 | 3237 | |||
1599 | 3238 | if licenseKey != '': | ||
1600 | 3239 | self.uuid = licenseKey | ||
1601 | 3240 | |||
1602 | 3241 | self.name = None | ||
1603 | 3242 | try: | ||
1604 | 3243 | self.name = config.get('Main','xmdsClientName') | ||
1605 | 3244 | except: | ||
1606 | 3245 | pass | ||
1607 | 3246 | |||
1608 | 3247 | if self.name == None or self.name == "": | ||
1609 | 3248 | import platform | ||
1610 | 3249 | self.name = platform.node() | ||
1611 | 3250 | |||
1612 | 3251 | self.start() | ||
1613 | 3252 | |||
1614 | 3253 | def run(self): | ||
1615 | 3254 | # Sleep for 10 seconds to allow the client time to start and settle. | ||
1616 | 3255 | time.sleep(10) | ||
1617 | 3256 | |||
1618 | 3257 | # Startup a loop listening scanning for new mounts | ||
1619 | 3258 | log.log(5,'info','Offline Update: Scanning.',True) | ||
1620 | 3259 | while self.__running__: | ||
1621 | 3260 | for folder in os.listdir(self.__scanPath__): | ||
1622 | 3261 | log.log(5,'info','Offline Update: Checking %s for new content.' % os.path.join(self.__scanPath__,folder),True) | ||
1623 | 3262 | log.log(5,'info','Offline Update: Client License Key: %s' % self.uuid,True) | ||
1624 | 3263 | if os.path.isdir(os.path.join(self.__scanPath__,folder,self.uuid)): | ||
1625 | 3264 | log.log(5,'info','Offline Update: Starting update from %s.' % os.path.join(self.__scanPath__,folder,self.uuid),True) | ||
1626 | 3265 | self.updatePath = os.path.join(self.__scanPath__,folder) | ||
1627 | 3266 | self.displayManager.scheduler.collect() | ||
1628 | 3267 | time.sleep(5) | ||
1629 | 3268 | self.displayManager.downloader.collect() | ||
1630 | 3269 | log.log(5,'info','Offline Update: Sleeping 30 seconds.',True) | ||
1631 | 3270 | time.sleep(30) | ||
1632 | 3271 | |||
1633 | 3272 | def getIP(self): | ||
1634 | 3273 | return 'Offline Mode' | ||
1635 | 3274 | |||
1636 | 3275 | def getDisk(self): | ||
1637 | 3276 | s = os.statvfs(config.get('Main','libraryDir')) | ||
1638 | 3277 | return (s.f_bsize * s.f_blocks,s.f_bsize * s.f_bavail) | ||
1639 | 3278 | |||
1640 | 3279 | def getUUID(self): | ||
1641 | 3280 | return str(self.uuid) | ||
1642 | 3281 | |||
1643 | 3282 | def getName(self): | ||
1644 | 3283 | return str(self.name) | ||
1645 | 3284 | |||
1646 | 3285 | def getKey(self): | ||
1647 | 3286 | return 'Offline' | ||
1648 | 3287 | |||
1649 | 3288 | def check(self): | ||
1650 | 3289 | return True | ||
1651 | 3290 | |||
1652 | 3291 | def RequiredFiles(self): | ||
1653 | 3292 | """Connect to XMDS and get a list of required files""" | ||
1654 | 3293 | log.lights('RF','amber') | ||
1655 | 3294 | req = None | ||
1656 | 3295 | if self.check(): | ||
1657 | 3296 | try: | ||
1658 | 3297 | # Update the IP Address shown on the infoScreen | ||
1659 | 3298 | log.updateIP(self.getIP()) | ||
1660 | 3299 | except: | ||
1661 | 3300 | pass | ||
1662 | 3301 | |||
1663 | 3302 | log.updateFreeSpace(self.getDisk()) | ||
1664 | 3303 | |||
1665 | 3304 | try: | ||
1666 | 3305 | fh = open(os.path.join(self.updatePath,self.uuid,'rf.xml'), 'r') | ||
1667 | 3306 | req = fh.read() | ||
1668 | 3307 | fh.close() | ||
1669 | 3308 | except IOError: | ||
1670 | 3309 | log.lights('RF','red') | ||
1671 | 3310 | raise XMDSException("XMDS could not be initialised") | ||
1672 | 3311 | |||
1673 | 3312 | else: | ||
1674 | 3313 | log.log(0,"error","XMDS could not be initialised") | ||
1675 | 3314 | log.lights('RF','grey') | ||
1676 | 3315 | raise XMDSException("XMDS could not be initialised") | ||
1677 | 3316 | |||
1678 | 3317 | log.lights('RF','green') | ||
1679 | 3318 | return req | ||
1680 | 3319 | |||
1681 | 3320 | def SubmitLog(self,logXml): | ||
1682 | 3321 | pass | ||
1683 | 3322 | |||
1684 | 3323 | def SubmitStats(self,statXml): | ||
1685 | 3324 | pass | ||
1686 | 3325 | |||
1687 | 3326 | def Schedule(self): | ||
1688 | 3327 | """Connect to XMDS and get the current schedule""" | ||
1689 | 3328 | log.lights('S','amber') | ||
1690 | 3329 | req = None | ||
1691 | 3330 | if self.check(): | ||
1692 | 3331 | try: | ||
1693 | 3332 | fh = open(os.path.join(self.updatePath,self.uuid,'schedule.xml'), 'r') | ||
1694 | 3333 | req = fh.read() | ||
1695 | 3334 | fh.close() | ||
1696 | 3335 | except IOError: | ||
1697 | 3336 | log.lights('S','red') | ||
1698 | 3337 | raise XMDSException("XMDS could not be initialised") | ||
1699 | 3338 | else: | ||
1700 | 3339 | log.log(0,"error","XMDS could not be initialised") | ||
1701 | 3340 | log.lights('S','grey') | ||
1702 | 3341 | raise XMDSException("XMDS could not be initialised") | ||
1703 | 3342 | |||
1704 | 3343 | log.lights('S','green') | ||
1705 | 3344 | return req | ||
1706 | 3345 | |||
1707 | 3346 | def GetFile(self,tmpPath,tmpType,tmpOffset,tmpChunk): | ||
1708 | 3347 | """Connect to XMDS and download a file""" | ||
1709 | 3348 | response = None | ||
1710 | 3349 | log.lights('GF','amber') | ||
1711 | 3350 | if self.check(): | ||
1712 | 3351 | if tmpType == 'media': | ||
1713 | 3352 | try: | ||
1714 | 3353 | fh = open(os.path.join(self.updatePath,self.uuid,tmpPath), 'r') | ||
1715 | 3354 | fh.seek(tmpOffset) | ||
1716 | 3355 | response = fh.read(tmpChunk) | ||
1717 | 3356 | fh.close() | ||
1718 | 3357 | except: | ||
1719 | 3358 | log.lights('GF','red') | ||
1720 | 3359 | raise XMDSException("XMDS could not be initialised") | ||
1721 | 3360 | if tmpType == 'layout': | ||
1722 | 3361 | try: | ||
1723 | 3362 | fh = open(os.path.join(self.updatePath,self.uuid,tmpPath), 'r') | ||
1724 | 3363 | response = fh.read() | ||
1725 | 3364 | fh.close() | ||
1726 | 3365 | except: | ||
1727 | 3366 | log.lights('GF','red') | ||
1728 | 3367 | raise XMDSException("XMDS could not be initialised") | ||
1729 | 3368 | if tmpType == 'blacklist': | ||
1730 | 3369 | response = "" | ||
1731 | 3370 | else: | ||
1732 | 3371 | log.log(0,"error","XMDS could not be initialised") | ||
1733 | 3372 | log.lights('GF','grey') | ||
1734 | 3373 | raise XMDSException("XMDS could not be initialised") | ||
1735 | 3374 | |||
1736 | 3375 | log.lights('GF','green') | ||
1737 | 3376 | return response | ||
1738 | 3377 | |||
1739 | 3378 | def RegisterDisplay(self): | ||
1740 | 3379 | log.lights('RD','amber') | ||
1741 | 3380 | time.sleep(5) | ||
1742 | 3381 | log.lights('RD','green') | ||
1743 | 3382 | |||
1744 | 3383 | #### Finish Webservice | ||
1745 | 3384 | >>>>>>> MERGE-SOURCE | ||
1746 | 3189 | 3385 | ||
1747 | 3190 | class XiboDisplayManager: | 3386 | class XiboDisplayManager: |
1748 | 3191 | def __init__(self): | 3387 | def __init__(self): |
1749 | 3192 | 3388 | ||
1750 | === added file 'client/python/client.conf' | |||
1751 | --- client/python/client.conf 1970-01-01 00:00:00 +0000 | |||
1752 | +++ client/python/client.conf 2011-02-28 15:09:00 +0000 | |||
1753 | @@ -0,0 +1,25 @@ | |||
1754 | 1 | [Main] | ||
1755 | 2 | ;clientConfLoc=/home/matt/xibo | ||
1756 | 3 | ;clientConfName=site.cfg | ||
1757 | 4 | |||
1758 | 5 | ;logWriter defines where the log file is written to | ||
1759 | 6 | ;xiboLogScreen - Console | ||
1760 | 7 | ;xiboLogFile - Log file stored in the same folder as the executable | ||
1761 | 8 | |||
1762 | 9 | logWriter=xiboLogFile | ||
1763 | 10 | |||
1764 | 11 | ;logLevel defines the level of information written to the logger | ||
1765 | 12 | ;INFO - information, warning and error messages | ||
1766 | 13 | ;WARNING - warning and error messages | ||
1767 | 14 | ;ERROR - error messages | ||
1768 | 15 | |||
1769 | 16 | logLevel=INFO | ||
1770 | 17 | |||
1771 | 18 | logFileName=error.log | ||
1772 | 19 | |||
1773 | 20 | [Options] | ||
1774 | 21 | logType=XiboLogXmds,XiboLogFile,XiboLogScreen | ||
1775 | 22 | logTypeHuman=Xibo Server,Local File,Console | ||
1776 | 23 | scheduler=XmdsScheduler | ||
1777 | 24 | downloader=XiboDownloadManager | ||
1778 | 25 | colourDepth=8,16,24 | ||
1779 | 0 | 26 | ||
1780 | === renamed file 'client/python/client.conf' => 'client/python/client.conf.moved' | |||
1781 | === added file 'client/python/configure.py' | |||
1782 | --- client/python/configure.py 1970-01-01 00:00:00 +0000 | |||
1783 | +++ client/python/configure.py 2011-02-28 15:09:00 +0000 | |||
1784 | @@ -0,0 +1,1753 @@ | |||
1785 | 1 | #!/usr/bin/python | ||
1786 | 2 | |||
1787 | 3 | # -*- coding: utf-8 -*- | ||
1788 | 4 | |||
1789 | 5 | # | ||
1790 | 6 | # Xibo - Digitial Signage - http://www.xibo.org.uk | ||
1791 | 7 | # Copyright (C) 2011 Matt Holder | ||
1792 | 8 | # | ||
1793 | 9 | # This file is part of Xibo. | ||
1794 | 10 | # | ||
1795 | 11 | # Xibo is free software: you can redistribute it and/or modify | ||
1796 | 12 | # it under the terms of the GNU Affero General Public License as published by | ||
1797 | 13 | # the Free Software Foundation, either version 3 of the License, or | ||
1798 | 14 | # any later version. | ||
1799 | 15 | # | ||
1800 | 16 | # Xibo is distributed in the hope that it will be useful, | ||
1801 | 17 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
1802 | 18 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
1803 | 19 | # GNU Affero General Public License for more details. | ||
1804 | 20 | # | ||
1805 | 21 | # You should have received a copy of the GNU Affero General Public License | ||
1806 | 22 | # along with Xibo. If not, see <http://www.gnu.org/licenses/>. | ||
1807 | 23 | # | ||
1808 | 24 | |||
1809 | 25 | gettextAvailable = None | ||
1810 | 26 | |||
1811 | 27 | try: | ||
1812 | 28 | import gettext | ||
1813 | 29 | gettextAvailable = True | ||
1814 | 30 | except: | ||
1815 | 31 | print "Could not import gettext" | ||
1816 | 32 | print "Creating dummy function for _()" | ||
1817 | 33 | def _(string): | ||
1818 | 34 | return string | ||
1819 | 35 | try: | ||
1820 | 36 | import sys | ||
1821 | 37 | except: | ||
1822 | 38 | print "Could not import sys module" | ||
1823 | 39 | sys.exit() | ||
1824 | 40 | |||
1825 | 41 | try: | ||
1826 | 42 | import uuid | ||
1827 | 43 | except: | ||
1828 | 44 | print "Could not import uuid module" | ||
1829 | 45 | sys.exit() | ||
1830 | 46 | |||
1831 | 47 | try: | ||
1832 | 48 | import ConfigParser | ||
1833 | 49 | except: | ||
1834 | 50 | print "Could not import ConfigParser module" | ||
1835 | 51 | sys.exit() | ||
1836 | 52 | |||
1837 | 53 | try: | ||
1838 | 54 | import os | ||
1839 | 55 | except: | ||
1840 | 56 | print "Could not import os module" | ||
1841 | 57 | sys.exit() | ||
1842 | 58 | |||
1843 | 59 | try: | ||
1844 | 60 | import logging | ||
1845 | 61 | except: | ||
1846 | 62 | print "Could not import logging module" | ||
1847 | 63 | sys.exit() | ||
1848 | 64 | |||
1849 | 65 | try: | ||
1850 | 66 | import pygtk | ||
1851 | 67 | pygtk.require("2.0") | ||
1852 | 68 | except: | ||
1853 | 69 | print "Could not import pygtk" | ||
1854 | 70 | sys.exit() | ||
1855 | 71 | |||
1856 | 72 | try: | ||
1857 | 73 | import gtk | ||
1858 | 74 | except: | ||
1859 | 75 | print "Could not import gtk" | ||
1860 | 76 | sys.exit(1) | ||
1861 | 77 | |||
1862 | 78 | try: | ||
1863 | 79 | import gtk.glade | ||
1864 | 80 | except: | ||
1865 | 81 | print "Could not import gtk.glade" | ||
1866 | 82 | sys.exit(1) | ||
1867 | 83 | |||
1868 | 84 | try: | ||
1869 | 85 | import gobject | ||
1870 | 86 | except: | ||
1871 | 87 | print "Could not import gobject" | ||
1872 | 88 | sys.exit() | ||
1873 | 89 | |||
1874 | 90 | #Only run this if gettext is available | ||
1875 | 91 | if gettextAvailable: | ||
1876 | 92 | gettext.install('ivcm', './locale', unicode=False) | ||
1877 | 93 | |||
1878 | 94 | |||
1879 | 95 | class xiboConfWindow: | ||
1880 | 96 | """This is the PyWine application""" | ||
1881 | 97 | |||
1882 | 98 | |||
1883 | 99 | def __init__(self,clientConfFile,lift = False): | ||
1884 | 100 | |||
1885 | 101 | #This is the location of the config. file for the client | ||
1886 | 102 | #itself. This comes from when the instance of the class | ||
1887 | 103 | #is created. | ||
1888 | 104 | self.clientConfFile = clientConfFile | ||
1889 | 105 | |||
1890 | 106 | #Firstly, read in the values relating to log from the config. client config. file | ||
1891 | 107 | config = None | ||
1892 | 108 | try: | ||
1893 | 109 | config = ConfigParser.ConfigParser() | ||
1894 | 110 | config.read(self.clientConfFile) | ||
1895 | 111 | except: | ||
1896 | 112 | print "Could not open %s"%self.clientConfFile | ||
1897 | 113 | |||
1898 | 114 | #Xibo client configuration file name | ||
1899 | 115 | logFileName="error.log" | ||
1900 | 116 | try: | ||
1901 | 117 | logFileName = config.get('Main','logFileName') | ||
1902 | 118 | except: | ||
1903 | 119 | pass | ||
1904 | 120 | |||
1905 | 121 | logWriter="xiboLogScreen" | ||
1906 | 122 | try: | ||
1907 | 123 | logWriter = config.get('Main','logWriter') | ||
1908 | 124 | except: | ||
1909 | 125 | pass | ||
1910 | 126 | |||
1911 | 127 | |||
1912 | 128 | logLevel="INFO" | ||
1913 | 129 | try: | ||
1914 | 130 | logLevel = config.get('Main','logLevel') | ||
1915 | 131 | except: | ||
1916 | 132 | pass | ||
1917 | 133 | a=logging | ||
1918 | 134 | |||
1919 | 135 | loggingLevel = None | ||
1920 | 136 | if logLevel == "INFO": | ||
1921 | 137 | loggingLevel = a.INFO | ||
1922 | 138 | elif logLevel == "WARNING": | ||
1923 | 139 | loggingLevel = a.WARNING | ||
1924 | 140 | elif logLevel == "ERROR": | ||
1925 | 141 | loggingLevel = a.ERROR | ||
1926 | 142 | |||
1927 | 143 | if logWriter == "xiboLogScreen": | ||
1928 | 144 | a.basicConfig(level=loggingLevel) | ||
1929 | 145 | elif logWriter == "xiboLogFile": | ||
1930 | 146 | |||
1931 | 147 | a.basicConfig(level=loggingLevel,filename=logFileName,filemode="w") | ||
1932 | 148 | |||
1933 | 149 | # #Set up the logger | ||
1934 | 150 | # logging.basicConfig(level=logging.INFO,filename="error.log",filemode="w") | ||
1935 | 151 | # #format='%(asctime)s %(levelname)s %(lineno)d %(message)s' | ||
1936 | 152 | |||
1937 | 153 | |||
1938 | 154 | self.logger = a.getLogger("PyClientConfig") | ||
1939 | 155 | self.logger1 = a.getLogger("PyClientConfig.GUI") | ||
1940 | 156 | self.logger2 = a.getLogger('PyClientConfig.readConfig') | ||
1941 | 157 | self.logger3 = a.getLogger("PyClientConfig.saveConfigSignal") | ||
1942 | 158 | self.logger4 = a.getLogger("PyClientConfig.genClientID") | ||
1943 | 159 | self.logger5 = a.getLogger("PyClientConfig.getConfValues") | ||
1944 | 160 | self.logger6 = a.getLogger("PyClientConfig.advancedOptionsCheck") | ||
1945 | 161 | self.logger7 = a.getLogger("PyClientConfig.readConfigAppConf") | ||
1946 | 162 | self.logger8 = a.getLogger("PyClientConfig.offlineOperationToggle") | ||
1947 | 163 | self.logger9 = a.getLogger("PyClientConfig.clearFormSignal") | ||
1948 | 164 | self.logger10 = a.getLogger("PyClientConfig.onDestroy") | ||
1949 | 165 | self.logger11 = a.getLogger("PyClientConfig.saveSignal") | ||
1950 | 166 | self.logger12 = a.getLogger("PyclientConfig.LoadDefaultValues") | ||
1951 | 167 | |||
1952 | 168 | self.logger1.info('Config. client config. file: %s'%self.clientConfFile) | ||
1953 | 169 | |||
1954 | 170 | self.logger1.info("logWriter: %s"%logWriter) | ||
1955 | 171 | self.logger1.info("logLevel: %s"%logLevel) | ||
1956 | 172 | self.logger.info("logFileName: %s"%logFileName) | ||
1957 | 173 | |||
1958 | 174 | #Name of the default log file for the python client | ||
1959 | 175 | self.pyClientLogName = "run.log" | ||
1960 | 176 | |||
1961 | 177 | |||
1962 | 178 | #Read out the values from the client configuration file | ||
1963 | 179 | configValues = self.readConfigAppConf() | ||
1964 | 180 | |||
1965 | 181 | #Take the options for log type from the file, and set the | ||
1966 | 182 | #class instance variable. The combo box is then populated from this. | ||
1967 | 183 | self.logWriterTypes = configValues["logTypeOptions"] | ||
1968 | 184 | |||
1969 | 185 | self.logger1.info("logWriter: %s"%self.logWriterTypes) | ||
1970 | 186 | |||
1971 | 187 | #Take the options for the human readable log type options | ||
1972 | 188 | self.logWriterHumanTypes = configValues["logTypeHumanOptions"] | ||
1973 | 189 | |||
1974 | 190 | self.logger1.info("logWriteHumanOptions: %s"%self.logWriterHumanTypes) | ||
1975 | 191 | |||
1976 | 192 | #Take the location of the configuration file and set the class | ||
1977 | 193 | #instance variable. This path is then used when the config. | ||
1978 | 194 | #file is written | ||
1979 | 195 | |||
1980 | 196 | self.pyClientConfName = configValues["xiboClientConf"] | ||
1981 | 197 | |||
1982 | 198 | |||
1983 | 199 | self.logger1.info("Xibo client config. file: %s"%self.pyClientConfName) | ||
1984 | 200 | |||
1985 | 201 | self.pyClientConfDefaultsName = "defaults.cfg" | ||
1986 | 202 | |||
1987 | 203 | #Grab the directory location and check this directory exists. | ||
1988 | 204 | |||
1989 | 205 | self.pyclientConfPath = configValues["clientConfLoc"] | ||
1990 | 206 | |||
1991 | 207 | self.logger1.info("Xibo client config. file path: %s"%self.pyclientConfPath) | ||
1992 | 208 | |||
1993 | 209 | self.logger1.info("Config file combined path: %s"%os.path.join(self.pyclientConfPath,self.pyClientConfName)) | ||
1994 | 210 | |||
1995 | 211 | #Take the options for scheduler type and add them to a class | ||
1996 | 212 | #instance variable | ||
1997 | 213 | |||
1998 | 214 | self.schedulerOptions = configValues["schedulerOptions"] | ||
1999 | 215 | |||
2000 | 216 | #Add a blank entry to the combo box, so that a blank option | ||
2001 | 217 | #can mean that the value is not written to the config. file | ||
2002 | 218 | self.schedulerOptions.insert(0,"") | ||
2003 | 219 | |||
2004 | 220 | #Downloader options | ||
2005 | 221 | self.downloaderOptions = configValues["downloaderOptions"] | ||
2006 | 222 | self.downloaderOptions.insert(0,"") | ||
2007 | 223 | |||
2008 | 224 | #Colour Depth options | ||
2009 | 225 | self.colourDepthOptions = configValues["colourDepthOptions"] | ||
2010 | 226 | self.colourDepthOptions.insert(0,"") | ||
2011 | 227 | |||
2012 | 228 | #Lift enable options | ||
2013 | 229 | self.liftEnableOptions = ["True","False"] | ||
2014 | 230 | |||
2015 | 231 | #Manual update options | ||
2016 | 232 | self.manualUpdateOptions = ["True","False"] | ||
2017 | 233 | |||
2018 | 234 | #Set the Glade file | ||
2019 | 235 | self.builder = gtk.Builder() | ||
2020 | 236 | self.builder.add_from_file("gui.glade") | ||
2021 | 237 | self.builder.connect_signals(self) | ||
2022 | 238 | |||
2023 | 239 | #Create instances of the text fields, window etc | ||
2024 | 240 | self.window = self.builder.get_object("mainWindow") | ||
2025 | 241 | self.clearButton = self.builder.get_object("clearFields") | ||
2026 | 242 | self.saveButton = self.builder.get_object("saveConfig") | ||
2027 | 243 | |||
2028 | 244 | self.serverURLText = self.builder.get_object("serverURLText") | ||
2029 | 245 | self.clientIDText = self.builder.get_object("clientIDText") | ||
2030 | 246 | self.serverKeyText = self.builder.get_object("serverKeyText") | ||
2031 | 247 | self.refreshText = self.builder.get_object("refreshText") | ||
2032 | 248 | self.serverConnBool = self.builder.get_object("serverConnection") | ||
2033 | 249 | self.fullScreenBool = self.builder.get_object("fullScreen") | ||
2034 | 250 | self.screenWidthText = self.builder.get_object("screenWidthText") | ||
2035 | 251 | self.screenHeightText = self.builder.get_object("screenHeightText") | ||
2036 | 252 | self.captureStatisticsBool = self.builder.get_object("captureStatistics") | ||
2037 | 253 | self.queueSizeText = self.builder.get_object("queueSizeText") | ||
2038 | 254 | self.logLevelSpin = self.builder.get_object("logLevelSpin") | ||
2039 | 255 | self.logTypeCombo = self.builder.get_object("logTypeCombo") | ||
2040 | 256 | self.clientNameText = self.builder.get_object("clientNameText") | ||
2041 | 257 | |||
2042 | 258 | self.offlineCheckButton = self.builder.get_object("offlineCheckButton") | ||
2043 | 259 | |||
2044 | 260 | #Advanced options widgets | ||
2045 | 261 | |||
2046 | 262 | self.liftDefaultTagText = self.builder.get_object('liftDefaultTagText') | ||
2047 | 263 | self.lift7TagText = self.builder.get_object('lift7TagText') | ||
2048 | 264 | self.lift6TagText = self.builder.get_object('lift6TagText') | ||
2049 | 265 | self.lift5TagText = self.builder.get_object('lift5TagText') | ||
2050 | 266 | self.lift4TagText = self.builder.get_object('lift4TagText') | ||
2051 | 267 | self.lift3TagText = self.builder.get_object('lift3TagText') | ||
2052 | 268 | self.lift2TagText = self.builder.get_object('lift2TagText') | ||
2053 | 269 | self.lift1TagText = self.builder.get_object('lift1TagText') | ||
2054 | 270 | self.lift0TagText = self.builder.get_object('lift0TagText') | ||
2055 | 271 | self.firstSerialText = self.builder.get_object('firstSerialText') | ||
2056 | 272 | self.secondSerialText = self.builder.get_object('secondSerialText') | ||
2057 | 273 | self.liftTriggerValue = self.builder.get_object('liftTriggerValue') | ||
2058 | 274 | self.liftEnableCombo = self.builder.get_object('liftEnableCombo') | ||
2059 | 275 | self.dateFormatEntry = self.builder.get_object('dateFormatEntry') | ||
2060 | 276 | self.libraryEntry = self.builder.get_object('libraryEntry') | ||
2061 | 277 | self.socketTimeSpin = self.builder.get_object('socketTimeSpin') | ||
2062 | 278 | self.checksumCheckButton = self.builder.get_object('checksumCheckButton') | ||
2063 | 279 | self.lowTextureCheckButton = self.builder.get_object('lowTextureCheckButton') | ||
2064 | 280 | self.framesSpin = self.builder.get_object('framesSpin') | ||
2065 | 281 | self.vwidthSpin = self.builder.get_object('vwidthSpin') | ||
2066 | 282 | self.vheightSpin = self.builder.get_object('vheightSpin') | ||
2067 | 283 | self.vrotateSpin = self.builder.get_object('vrotateSpin') | ||
2068 | 284 | self.schedulerCombo = self.builder.get_object("schedulerCombo") | ||
2069 | 285 | self.downloaderCombo = self.builder.get_object("downloaderCombo") | ||
2070 | 286 | self.colourDepthCombo = self.builder.get_object("colourDepthCombo") | ||
2071 | 287 | self.notebook1 = self.builder.get_object("notebook1") | ||
2072 | 288 | |||
2073 | 289 | self.errorDialog = self.builder.get_object("errorDialog") | ||
2074 | 290 | self.messageDialog = self.builder.get_object("infoDialog") | ||
2075 | 291 | |||
2076 | 292 | self.statsCaptureLabel = self.builder.get_object("statsCaptureLabel") | ||
2077 | 293 | self.statsQueueSizeLabel = self.builder.get_object("statsQueueSizeLabel") | ||
2078 | 294 | |||
2079 | 295 | #Grab the log file link button and make it invisible by default | ||
2080 | 296 | self.logFileLinkButton = self.builder.get_object("logFileLinkButton") | ||
2081 | 297 | self.logFileLinkButton.hide() | ||
2082 | 298 | |||
2083 | 299 | self.statsFrame = self.builder.get_object("frame2") | ||
2084 | 300 | |||
2085 | 301 | #We want to be able to hide the lift options if the command line flag | ||
2086 | 302 | #has not been passed. We can do this by grabbing the 5th (4th when | ||
2087 | 303 | #counting from zero) page, and using the hide method. | ||
2088 | 304 | |||
2089 | 305 | self.liftTabVisible = lift | ||
2090 | 306 | print self.liftTabVisible | ||
2091 | 307 | |||
2092 | 308 | if lift == False: | ||
2093 | 309 | liftPage = self.notebook1.get_nth_page(4) | ||
2094 | 310 | liftPage.hide() | ||
2095 | 311 | self.logger1.info("Lift options hidden") | ||
2096 | 312 | |||
2097 | 313 | #Hide the statistics options unless the lift | ||
2098 | 314 | #tab is being shown | ||
2099 | 315 | self.captureStatisticsBool.hide() | ||
2100 | 316 | self.queueSizeText.hide() | ||
2101 | 317 | self.statsCaptureLabel.hide() | ||
2102 | 318 | self.statsQueueSizeLabel.hide() | ||
2103 | 319 | self.statsFrame.hide() | ||
2104 | 320 | |||
2105 | 321 | else: | ||
2106 | 322 | self.logger1.info("Lift options available") | ||
2107 | 323 | |||
2108 | 324 | #Set a class instance variable for whether the advanced tab is shown or not | ||
2109 | 325 | self.advancedTabVisible = False | ||
2110 | 326 | |||
2111 | 327 | #Now hide the tab | ||
2112 | 328 | advancedPage = self.notebook1.get_nth_page(3) | ||
2113 | 329 | advancedPage.hide() | ||
2114 | 330 | |||
2115 | 331 | #Fill in the comboboxes | ||
2116 | 332 | |||
2117 | 333 | #log type combobox | ||
2118 | 334 | |||
2119 | 335 | liststore = gtk.ListStore(gobject.TYPE_STRING) | ||
2120 | 336 | print "ABC: ",self.logWriterHumanTypes | ||
2121 | 337 | for elem in self.logWriterHumanTypes: | ||
2122 | 338 | liststore.append([elem]) | ||
2123 | 339 | |||
2124 | 340 | self.logTypeCombo.set_model(liststore) | ||
2125 | 341 | self.logTypeCombo.set_active(0) | ||
2126 | 342 | |||
2127 | 343 | cell = gtk.CellRendererText() | ||
2128 | 344 | self.logTypeCombo.pack_start(cell, True) | ||
2129 | 345 | self.logTypeCombo.add_attribute(cell, "text", 0) | ||
2130 | 346 | |||
2131 | 347 | #scheduler combobox | ||
2132 | 348 | |||
2133 | 349 | schedulerListStore = gtk.ListStore(gobject.TYPE_STRING) | ||
2134 | 350 | |||
2135 | 351 | for elem in self.schedulerOptions: | ||
2136 | 352 | schedulerListStore.append([elem]) | ||
2137 | 353 | |||
2138 | 354 | self.schedulerCombo.set_model(schedulerListStore) | ||
2139 | 355 | self.schedulerCombo.set_active(0) | ||
2140 | 356 | |||
2141 | 357 | self.schedulerCombo.pack_start(cell, True) | ||
2142 | 358 | self.schedulerCombo.add_attribute(cell, "text", 0) | ||
2143 | 359 | |||
2144 | 360 | |||
2145 | 361 | #downloader combobox | ||
2146 | 362 | |||
2147 | 363 | downloaderListStore = gtk.ListStore(gobject.TYPE_STRING) | ||
2148 | 364 | |||
2149 | 365 | for elem in self.downloaderOptions: | ||
2150 | 366 | downloaderListStore.append([elem]) | ||
2151 | 367 | |||
2152 | 368 | self.downloaderCombo.set_model(downloaderListStore) | ||
2153 | 369 | self.downloaderCombo.set_active(0) | ||
2154 | 370 | |||
2155 | 371 | self.downloaderCombo.pack_start(cell, True) | ||
2156 | 372 | self.downloaderCombo.add_attribute(cell, "text", 0) | ||
2157 | 373 | |||
2158 | 374 | #colour depth combobox | ||
2159 | 375 | |||
2160 | 376 | colourDepthListStore = gtk.ListStore(gobject.TYPE_STRING) | ||
2161 | 377 | |||
2162 | 378 | for elem in self.colourDepthOptions: | ||
2163 | 379 | colourDepthListStore.append([elem]) | ||
2164 | 380 | |||
2165 | 381 | self.colourDepthCombo.set_model(colourDepthListStore) | ||
2166 | 382 | self.colourDepthCombo.set_active(0) | ||
2167 | 383 | |||
2168 | 384 | self.colourDepthCombo.pack_start(cell, True) | ||
2169 | 385 | self.colourDepthCombo.add_attribute(cell, "text", 0) | ||
2170 | 386 | |||
2171 | 387 | |||
2172 | 388 | |||
2173 | 389 | #lift enable combobox | ||
2174 | 390 | |||
2175 | 391 | liftEnableListStore = gtk.ListStore(gobject.TYPE_STRING) | ||
2176 | 392 | |||
2177 | 393 | liftEnableOptions = ["True","False"] | ||
2178 | 394 | |||
2179 | 395 | for elem in liftEnableOptions: | ||
2180 | 396 | liftEnableListStore.append([elem]) | ||
2181 | 397 | |||
2182 | 398 | self.liftEnableCombo.set_model(liftEnableListStore) | ||
2183 | 399 | self.liftEnableCombo.set_active(0) | ||
2184 | 400 | |||
2185 | 401 | self.liftEnableCombo.pack_start(cell, True) | ||
2186 | 402 | self.liftEnableCombo.add_attribute(cell, "text", 0) | ||
2187 | 403 | |||
2188 | 404 | |||
2189 | 405 | #Set the range of values we accept for the spin controls | ||
2190 | 406 | |||
2191 | 407 | width_adj = gtk.Adjustment(1024, 1.0, 10000, 1.0, 5.0, 0.0) | ||
2192 | 408 | height_adj = gtk.Adjustment(1024, 1.0, 10000, 1.0, 5.0, 0.0) | ||
2193 | 409 | queue_adj = gtk.Adjustment(10, 1.0, 10000, 1.0, 5.0, 0.0) | ||
2194 | 410 | refresh_adj = gtk.Adjustment(100, 1.0, 10000, 1.0, 5.0, 0.0) | ||
2195 | 411 | logLevel_adj = gtk.Adjustment(0, 0, 10, 1.0, 2.0, 0.0) | ||
2196 | 412 | |||
2197 | 413 | socketTime_adj = gtk.Adjustment(0, 0, 100, 1.0, 2.0, 0.0) | ||
2198 | 414 | frames_adj = gtk.Adjustment(0, 0, 100, 1.0, 2.0, 0.0) | ||
2199 | 415 | vwidth_adj = gtk.Adjustment(0, 0, 10000, 1.0, 2.0, 0.0) | ||
2200 | 416 | vheight_adj = gtk.Adjustment(0, 0, 10000, 1.0, 2.0, 0.0) | ||
2201 | 417 | vrotate_adj = gtk.Adjustment(0, -359, 359, 1.0, 2.0, 0.0) | ||
2202 | 418 | liftTrigger_adj = gtk.Adjustment(0, 0, 100, 1.0, 2.0, 0.0) | ||
2203 | 419 | |||
2204 | 420 | self.screenWidthText.configure(width_adj, 0, 0) | ||
2205 | 421 | self.screenWidthText.set_wrap(True) | ||
2206 | 422 | |||
2207 | 423 | self.screenHeightText.configure(height_adj, 0, 0) | ||
2208 | 424 | self.screenHeightText.set_wrap(True) | ||
2209 | 425 | |||
2210 | 426 | self.queueSizeText.configure(queue_adj, 0, 0) | ||
2211 | 427 | self.queueSizeText.set_wrap(True) | ||
2212 | 428 | |||
2213 | 429 | self.refreshText.configure(refresh_adj, 0, 0) | ||
2214 | 430 | self.refreshText.set_wrap(True) | ||
2215 | 431 | |||
2216 | 432 | self.logLevelSpin.configure(logLevel_adj, 0, 0) | ||
2217 | 433 | self.logLevelSpin.set_wrap(True) | ||
2218 | 434 | |||
2219 | 435 | self.socketTimeSpin.configure(socketTime_adj,0,0) | ||
2220 | 436 | self.socketTimeSpin.set_wrap(True) | ||
2221 | 437 | |||
2222 | 438 | self.framesSpin.configure(frames_adj,0,0) | ||
2223 | 439 | self.framesSpin.set_wrap(True) | ||
2224 | 440 | |||
2225 | 441 | self.vwidthSpin.configure(vwidth_adj,0,0) | ||
2226 | 442 | self.vwidthSpin.set_wrap(True) | ||
2227 | 443 | |||
2228 | 444 | self.vheightSpin.configure(vheight_adj,0,0) | ||
2229 | 445 | self.vheightSpin.set_wrap(True) | ||
2230 | 446 | |||
2231 | 447 | self.vrotateSpin.configure(vrotate_adj,0,0) | ||
2232 | 448 | self.vrotateSpin.set_wrap(True) | ||
2233 | 449 | |||
2234 | 450 | self.liftTriggerValue.configure(liftTrigger_adj,0,0) | ||
2235 | 451 | self.liftTriggerValue.set_wrap(True) | ||
2236 | 452 | |||
2237 | 453 | #We want the labels to be translatable, | ||
2238 | 454 | #Using the Glade stuff grab the labels | ||
2239 | 455 | self.serverURLLabel = self.builder.get_object("serverURLLabel") | ||
2240 | 456 | self.clientIDLabel = self.builder.get_object("clientIDLabel") | ||
2241 | 457 | self.serverKeyLabel = self.builder.get_object("serverKeyLabel") | ||
2242 | 458 | self.refreshLabel = self.builder.get_object("refreshLabel") | ||
2243 | 459 | self.connectionLabel = self.builder.get_object("connectionLabel") | ||
2244 | 460 | self.fullscreenLabel = self.builder.get_object("fullscreenLabel") | ||
2245 | 461 | self.widthLabel = self.builder.get_object("widthLabel") | ||
2246 | 462 | self.heightLabel = self.builder.get_object("heightLabel") | ||
2247 | 463 | self.logLevelLabel = self.builder.get_object("logLevelLabel") | ||
2248 | 464 | self.logTypeLabel = self.builder.get_object("logTypeLabel") | ||
2249 | 465 | self.loggingFrameLabel = self.builder.get_object("loggingFrameLabel") | ||
2250 | 466 | self.statsFrameLabel = self.builder.get_object("statsFrameLabel") | ||
2251 | 467 | self.clientNameLabel = self.builder.get_object("clientNameLabel") | ||
2252 | 468 | |||
2253 | 469 | #Labels for advanced options and tabs | ||
2254 | 470 | self.liftDefaultLabel = self.builder.get_object('liftDefaultLabel') | ||
2255 | 471 | self.lift7Label = self.builder.get_object('lift7Label') | ||
2256 | 472 | self.lift6Label = self.builder.get_object('lift6Label') | ||
2257 | 473 | self.lift5Label = self.builder.get_object('lift5Label') | ||
2258 | 474 | self.lift4Label = self.builder.get_object('lift4Label') | ||
2259 | 475 | self.lift3Label = self.builder.get_object('lift3Label') | ||
2260 | 476 | self.lift2Label = self.builder.get_object('lift2Label') | ||
2261 | 477 | self.lift1Label = self.builder.get_object('lift1Label') | ||
2262 | 478 | self.lift0Label = self.builder.get_object('lift0Label') | ||
2263 | 479 | self.tagLiftLabel = self.builder.get_object('tagLiftLabel') | ||
2264 | 480 | self.genLiftOptions = self.builder.get_object('genLiftOptions') | ||
2265 | 481 | self.firstSerialLabel = self.builder.get_object('firstSerialLabel') | ||
2266 | 482 | self.secondSerialLabel = self.builder.get_object('secondSerialLabel') | ||
2267 | 483 | self.liftTriggerLabel = self.builder.get_object('liftTriggerLabel') | ||
2268 | 484 | self.liftEnableLabel = self.builder.get_object('liftEnableLabel') | ||
2269 | 485 | self.liftOptionsLabel = self.builder.get_object('liftOptionsLabel') | ||
2270 | 486 | self.advancedOptionsLabel = self.builder.get_object('advancedOptionsLabel') | ||
2271 | 487 | self.otherSettingsLabel = self.builder.get_object('otherSettingsLabel') | ||
2272 | 488 | self.clientSettingsLabel = self.builder.get_object('clientSettingsLabel') | ||
2273 | 489 | self.serverSettingsLabel = self.builder.get_object('serverSettingsLabel') | ||
2274 | 490 | self.dateFormatLabel = self.builder.get_object('dateFormatLabel') | ||
2275 | 491 | self.schedulerLabel = self.builder.get_object('schedulerLabel') | ||
2276 | 492 | self.downloaderLabel = self.builder.get_object('downloaderLabel') | ||
2277 | 493 | self.libraryLabel = self.builder.get_object('libraryLabel') | ||
2278 | 494 | self.bppLabel = self.builder.get_object('bppLabel') | ||
2279 | 495 | self.socketTimeLabel = self.builder.get_object('socketTimeLabel') | ||
2280 | 496 | self.checksumLabel = self.builder.get_object('checksumLabel') | ||
2281 | 497 | self.lowTextureLabel = self.builder.get_object('lowTextureLabel') | ||
2282 | 498 | self.framesLabel = self.builder.get_object('framesLabel') | ||
2283 | 499 | self.vwidthLabel = self.builder.get_object('vwidthLabel') | ||
2284 | 500 | self.vheightLabel = self.builder.get_object('vheightLabel') | ||
2285 | 501 | self.vrotationLabel = self.builder.get_object('vrotationLabel') | ||
2286 | 502 | self.advancedOptionsCheck = self.builder.get_object("advancedOptionsCheck") | ||
2287 | 503 | |||
2288 | 504 | # self.manualUpdateLabel = self.builder.get_object("manualUpdateLabel") | ||
2289 | 505 | # self.manualUpdateCombo = self.builder.get_object("manualUpdateCombo") | ||
2290 | 506 | self.xmdsLicenseKeyLabel = self.builder.get_object("xmdsLicenseKeyLabel") | ||
2291 | 507 | self.xmdsLicenseKeyEntry = self.builder.get_object("xmdsLicenseKeyEntry") | ||
2292 | 508 | |||
2293 | 509 | self.onlineOpLabel = self.builder.get_object("onlineOpLabel") | ||
2294 | 510 | self.offlineOpLabel = self.builder.get_object("offlineOpLabel") | ||
2295 | 511 | |||
2296 | 512 | |||
2297 | 513 | #Now set the text in the labels. This is useful so that we can | ||
2298 | 514 | #then use this as a basis for translations on launchpad | ||
2299 | 515 | |||
2300 | 516 | # self.manualUpdateLabel.set_text(_("Manual Update")) | ||
2301 | 517 | self.xmdsLicenseKeyLabel.set_text(_("xmdsLicenseKey")) | ||
2302 | 518 | |||
2303 | 519 | self.serverURLLabel.set_text(_("Server URL")) | ||
2304 | 520 | self.clientIDLabel.set_text(_("Client ID")) | ||
2305 | 521 | self.serverKeyLabel.set_text(_("Server Key")) | ||
2306 | 522 | self.refreshLabel.set_text(_("Set the number of seconds between the client contacting the server for updates")) | ||
2307 | 523 | self.connectionLabel.set_text(_("Require connection to server")) | ||
2308 | 524 | self.fullscreenLabel.set_text(_("Fullscreen")) | ||
2309 | 525 | self.widthLabel.set_text(_("Width")) | ||
2310 | 526 | self.heightLabel.set_text(_("Height")) | ||
2311 | 527 | self.logLevelLabel.set_text(_("Log Level")) | ||
2312 | 528 | self.logTypeLabel.set_text(_("Log Type")) | ||
2313 | 529 | self.statsCaptureLabel.set_text(_("Statistics Capturing")) | ||
2314 | 530 | self.statsQueueSizeLabel.set_text(_("Queue Size")) | ||
2315 | 531 | self.loggingFrameLabel.set_text(_("Logging")) | ||
2316 | 532 | self.statsFrameLabel.set_text(_("Statistics Generation")) | ||
2317 | 533 | |||
2318 | 534 | self.clientNameLabel.set_text(_("Client Name")) | ||
2319 | 535 | |||
2320 | 536 | self.liftDefaultLabel.set_label(_('Default')) | ||
2321 | 537 | self.lift7Label.set_label(_('Lift 7')) | ||
2322 | 538 | self.lift6Label.set_label(_('Lift 6')) | ||
2323 | 539 | self.lift5Label.set_label(_('Lift 5')) | ||
2324 | 540 | self.lift4Label.set_label(_('Lift 4')) | ||
2325 | 541 | self.lift3Label.set_label(_('Lift 3')) | ||
2326 | 542 | self.lift2Label.set_label(_('Lift 2')) | ||
2327 | 543 | self.lift1Label.set_label(_('Lift 1')) | ||
2328 | 544 | self.lift0Label.set_label(_('Lift 0')) | ||
2329 | 545 | self.tagLiftLabel.set_label(_('Tagging Lift Options')) | ||
2330 | 546 | self.genLiftOptions.set_label(_('General Lift Options')) | ||
2331 | 547 | self.firstSerialLabel.set_label(_('1st Serial Port')) | ||
2332 | 548 | self.secondSerialLabel.set_label(_('2nd Serial Port')) | ||
2333 | 549 | self.liftTriggerLabel.set_label(_('Lift Trigger')) | ||
2334 | 550 | self.liftEnableLabel.set_label(_('Lift Enable')) | ||
2335 | 551 | self.liftOptionsLabel.set_label(_('Lift Options')) | ||
2336 | 552 | self.advancedOptionsLabel.set_label(_('Advanced Options')) | ||
2337 | 553 | self.otherSettingsLabel.set_label(_('Other Settings')) | ||
2338 | 554 | self.clientSettingsLabel.set_label(_('Client Settings')) | ||
2339 | 555 | self.serverSettingsLabel.set_label(_('Server Settings')) | ||
2340 | 556 | self.dateFormatLabel.set_label(_('Date Format')) | ||
2341 | 557 | self.schedulerLabel.set_label(_('Scheduler')) | ||
2342 | 558 | self.downloaderLabel.set_label(_('Downloader')) | ||
2343 | 559 | self.libraryLabel.set_label(_('Library Location')) | ||
2344 | 560 | self.bppLabel.set_label(_('Colour Depth (BPP)')) | ||
2345 | 561 | self.socketTimeLabel.set_label(_('Socket Timeout (s)')) | ||
2346 | 562 | self.checksumLabel.set_label(_('Checksum Downloaded Media')) | ||
2347 | 563 | self.lowTextureLabel.set_label(_('Low Texture Memory')) | ||
2348 | 564 | self.framesLabel.set_label(_('Frames per Second')) | ||
2349 | 565 | self.vwidthLabel.set_label(_('Virtual Width')) | ||
2350 | 566 | self.vheightLabel.set_label(_('Virtual Height')) | ||
2351 | 567 | self.vrotationLabel.set_label(_('Rotation')) | ||
2352 | 568 | |||
2353 | 569 | self.onlineOpLabel.set_label(_("Online operation (syncronise with Xibo server)")) | ||
2354 | 570 | # self.offlineOpLabel.set_label(_("Offline operation (synchronise with USB memory stick)")) | ||
2355 | 571 | |||
2356 | 572 | #Set the icon for the Window | ||
2357 | 573 | self.window.set_icon_from_file("xibo.ico") | ||
2358 | 574 | |||
2359 | 575 | |||
2360 | 576 | #Now set the labels of the buttons and window | ||
2361 | 577 | |||
2362 | 578 | self.clearButton.set_label(_("Clear Form")) | ||
2363 | 579 | self.saveButton.set_label(_("Save Config")) | ||
2364 | 580 | self.window.set_title(_("Xibo Client Configuration")) | ||
2365 | 581 | |||
2366 | 582 | |||
2367 | 583 | #Set up the combo box | ||
2368 | 584 | |||
2369 | 585 | # manualUpdateListStore = gtk.ListStore(gobject.TYPE_STRING) | ||
2370 | 586 | |||
2371 | 587 | # for elem in self.manualUpdateOptions: | ||
2372 | 588 | # manualUpdateListStore.append([elem]) | ||
2373 | 589 | |||
2374 | 590 | # self.manualUpdateCombo.set_model(manualUpdateListStore) | ||
2375 | 591 | # self.manualUpdateCombo.set_active(1) | ||
2376 | 592 | |||
2377 | 593 | # self.manualUpdateCombo.pack_start(cell, True) | ||
2378 | 594 | # self.manualUpdateCombo.add_attribute(cell, "text", 0) | ||
2379 | 595 | |||
2380 | 596 | logFilePath = os.path.join(os.path.abspath(''),self.pyClientLogName) | ||
2381 | 597 | |||
2382 | 598 | self.logFileLinkButton.set_uri("file:%s%s%s"%(os.sep,os.sep,logFilePath)) | ||
2383 | 599 | |||
2384 | 600 | # print "File path: ", logFilePath | ||
2385 | 601 | |||
2386 | 602 | #Set the tick box to online operation | ||
2387 | 603 | self.offlineCheckButton.set_active(True) | ||
2388 | 604 | self.offlineCheckButton.set_active(False) | ||
2389 | 605 | |||
2390 | 606 | #Set tooltips | ||
2391 | 607 | self.set_tooltips() | ||
2392 | 608 | |||
2393 | 609 | self.window.show() | ||
2394 | 610 | |||
2395 | 611 | #Check that the directory exists where the configuration file | ||
2396 | 612 | #is stored. | ||
2397 | 613 | |||
2398 | 614 | if os.path.exists(self.pyclientConfPath): | ||
2399 | 615 | if os.path.isfile(self.pyclientConfPath): | ||
2400 | 616 | |||
2401 | 617 | self.logger1.error("Python client path chosen is a file") | ||
2402 | 618 | |||
2403 | 619 | print "Location is a file." | ||
2404 | 620 | self.errorDialog.set_markup(_("File path is a file. Cannot write to it")) | ||
2405 | 621 | self.errorDialog.show() | ||
2406 | 622 | print "Exiting gracefully" | ||
2407 | 623 | # sys.exit() | ||
2408 | 624 | elif os.path.isdir(self.pyclientConfPath): | ||
2409 | 625 | self.logger1.info("Python client path chosen is available") | ||
2410 | 626 | print "Location exists." | ||
2411 | 627 | print "Carrying on..." | ||
2412 | 628 | |||
2413 | 629 | self.pyClientConfName = os.path.join(self.pyclientConfPath,self.pyClientConfName) | ||
2414 | 630 | else: | ||
2415 | 631 | print "Configuration directory does not exist" | ||
2416 | 632 | self.logger1.warning("Python client path chosen does not exist") | ||
2417 | 633 | try: | ||
2418 | 634 | os.makedirs(self.pyclientConfPath) | ||
2419 | 635 | print "Directory created" | ||
2420 | 636 | self.logger1.info("Python client path chosen has been created") | ||
2421 | 637 | self.pyClientConfName = os.path.join(self.pyclientConfPath,self.pyClientConfName) | ||
2422 | 638 | except OSError: | ||
2423 | 639 | self.logger1.error("Python client path chosen could not be created") | ||
2424 | 640 | self.errorDialog.set_markup(_("File path could not be created")) | ||
2425 | 641 | self.errorDialog.show() | ||
2426 | 642 | |||
2427 | 643 | |||
2428 | 644 | #Check that a file can be written to this directory | ||
2429 | 645 | try: | ||
2430 | 646 | file_written = open(os.path.join(self.pyclientConfPath,"tmp"),"w") | ||
2431 | 647 | file_written.close() | ||
2432 | 648 | except: | ||
2433 | 649 | self.logger1.error("Could not write to testing file") | ||
2434 | 650 | |||
2435 | 651 | is_file = os.path.isfile(os.path.join(self.pyclientConfPath,"tmp")) | ||
2436 | 652 | |||
2437 | 653 | self.logger1.info("Testing file has been created in the chosen location") | ||
2438 | 654 | |||
2439 | 655 | #Check that the file can be written to | ||
2440 | 656 | |||
2441 | 657 | try: | ||
2442 | 658 | file_edit = open(os.path.join(self.pyclientConfPath,"tmp"),"w") | ||
2443 | 659 | file_edit.write("tmp") | ||
2444 | 660 | file_edit.close() | ||
2445 | 661 | print "boo" | ||
2446 | 662 | except: | ||
2447 | 663 | self.logger1.info("Testing file could not be written to") | ||
2448 | 664 | |||
2449 | 665 | is_data = False | ||
2450 | 666 | data = None | ||
2451 | 667 | |||
2452 | 668 | try: | ||
2453 | 669 | data = open(os.path.join(self.pyclientConfPath,"tmp"),"r").read() | ||
2454 | 670 | except: | ||
2455 | 671 | self.logger1.error("Cannot open testing file to read data") | ||
2456 | 672 | if data == "tmp": | ||
2457 | 673 | is_data = True | ||
2458 | 674 | self.logger1.info("Testing file could be written to") | ||
2459 | 675 | else: | ||
2460 | 676 | self.logger1.info("Testing file could not be written to") | ||
2461 | 677 | |||
2462 | 678 | #Check that the file can be deleted | ||
2463 | 679 | is_deleted = False | ||
2464 | 680 | try: | ||
2465 | 681 | os.remove(os.path.join(self.pyclientConfPath,"tmp")) | ||
2466 | 682 | except: | ||
2467 | 683 | self.logger1.error("Cannot delete testing file") | ||
2468 | 684 | |||
2469 | 685 | if os.path.isfile(os.path.join(self.pyclientConfPath,"tmp")) == False: | ||
2470 | 686 | is_deleted = True | ||
2471 | 687 | self.logger1.info("Testing file has been deleted successfully") | ||
2472 | 688 | |||
2473 | 689 | if is_deleted and is_data and is_file: | ||
2474 | 690 | print "Location is acceptable for file writing" | ||
2475 | 691 | self.logger1.info("Location is acceptable for file writing") | ||
2476 | 692 | self.messageDialog.set_markup(_("File location is acceptable")) | ||
2477 | 693 | self.messageDialog.show() | ||
2478 | 694 | |||
2479 | 695 | else: | ||
2480 | 696 | print "Cannot write to file" | ||
2481 | 697 | self.logger1.error("Location selected is not acceptable for file writing") | ||
2482 | 698 | print "Exiting gracefully" | ||
2483 | 699 | self.errorDialog.show() | ||
2484 | 700 | self.errorDialog.set_markup(_("Cannot write to file")) | ||
2485 | 701 | # sys.exit() | ||
2486 | 702 | |||
2487 | 703 | |||
2488 | 704 | |||
2489 | 705 | print self.pyClientConfName | ||
2490 | 706 | |||
2491 | 707 | |||
2492 | 708 | if is_deleted and is_data and is_file: | ||
2493 | 709 | |||
2494 | 710 | #Read the configuration information from the configuration file | ||
2495 | 711 | self.readConfig() | ||
2496 | 712 | |||
2497 | 713 | #Check to see if the client ID field is blank. | ||
2498 | 714 | #If so, then generate one | ||
2499 | 715 | |||
2500 | 716 | if self.clientIDText.get_text() == "": | ||
2501 | 717 | uuid = self.genClientID() | ||
2502 | 718 | self.clientIDText.set_text(str(uuid)) | ||
2503 | 719 | |||
2504 | 720 | def messageDialogExit(self,widget): | ||
2505 | 721 | sys.exit() | ||
2506 | 722 | |||
2507 | 723 | def infoDialogOKSignal(self,widget): | ||
2508 | 724 | self.messageDialog.hide() | ||
2509 | 725 | |||
2510 | 726 | def offlineOperationToggle(self,widget): | ||
2511 | 727 | |||
2512 | 728 | offlineOperation = widget.get_active() | ||
2513 | 729 | |||
2514 | 730 | self.logger8.info(_("Offline operation checkbox toggled")) | ||
2515 | 731 | |||
2516 | 732 | if offlineOperation: | ||
2517 | 733 | print "Offline operation selected" | ||
2518 | 734 | # self.manualUpdateCombo.set_sensitive(True) | ||
2519 | 735 | # self.xmdsLicenseKeyEntry.set_sensitive(True) | ||
2520 | 736 | |||
2521 | 737 | self.logger8.info(_("Offline operation selected")) | ||
2522 | 738 | |||
2523 | 739 | self.serverURLText.set_sensitive(False) | ||
2524 | 740 | self.clientIDText.set_sensitive(False) | ||
2525 | 741 | self.serverKeyText.set_sensitive(False) | ||
2526 | 742 | self.clientNameText.set_sensitive(False) | ||
2527 | 743 | |||
2528 | 744 | else: | ||
2529 | 745 | print "Online operation selected" | ||
2530 | 746 | self.logger8.info(_("Online operation selected")) | ||
2531 | 747 | # self.manualUpdateCombo.set_sensitive(False) | ||
2532 | 748 | # self.xmdsLicenseKeyEntry.set_sensitive(False) | ||
2533 | 749 | |||
2534 | 750 | self.serverURLText.set_sensitive(True) | ||
2535 | 751 | self.clientIDText.set_sensitive(True) | ||
2536 | 752 | self.serverKeyText.set_sensitive(True) | ||
2537 | 753 | self.clientNameText.set_sensitive(True) | ||
2538 | 754 | |||
2539 | 755 | def on_advancedOptionsCheck(self,widget): | ||
2540 | 756 | """Function called when advanced options checkbox is toggled. | ||
2541 | 757 | Used to hide / display the advanced notebook tab""" | ||
2542 | 758 | |||
2543 | 759 | advancedPage = self.notebook1.get_nth_page(3) | ||
2544 | 760 | |||
2545 | 761 | if self.advancedOptionsCheck.get_active() and self.advancedTabVisible == False: | ||
2546 | 762 | advancedPage.show() | ||
2547 | 763 | self.advancedTabVisible = True | ||
2548 | 764 | self.logger6.info(_("advancedTabEnabled")) | ||
2549 | 765 | |||
2550 | 766 | elif self.advancedOptionsCheck.get_active() == False and self.advancedTabVisible: | ||
2551 | 767 | advancedPage.hide() | ||
2552 | 768 | self.advancedTabVisible = False | ||
2553 | 769 | self.logger6.info(_("advancedTabDisabled")) | ||
2554 | 770 | |||
2555 | 771 | def readConfigAppConf(self): | ||
2556 | 772 | """This reads the configuration file that is used by the configuration application""" | ||
2557 | 773 | self.logger7.info(_("Configuration application configuration file being read in")) | ||
2558 | 774 | config_file = "" | ||
2559 | 775 | try: | ||
2560 | 776 | config_file = open(self.clientConfFile,"r") | ||
2561 | 777 | |||
2562 | 778 | #Implement all the stuff to read the config file in | ||
2563 | 779 | data = config_file.read() | ||
2564 | 780 | config_file.close() | ||
2565 | 781 | self.logger7.info(_("Reading configuration file to make sure file is not empty")) | ||
2566 | 782 | #If the file is not empty, then try and process it | ||
2567 | 783 | |||
2568 | 784 | if len(data) != 0: | ||
2569 | 785 | config = ConfigParser.ConfigParser() | ||
2570 | 786 | config.read(self.clientConfFile) | ||
2571 | 787 | |||
2572 | 788 | self.logger7.info(_("Reading configuration file")) | ||
2573 | 789 | |||
2574 | 790 | #Get the information from the configuration file | ||
2575 | 791 | #and display into the GUI | ||
2576 | 792 | |||
2577 | 793 | #Xibo client configuration file location | ||
2578 | 794 | xiboClientConf = None | ||
2579 | 795 | |||
2580 | 796 | try: | ||
2581 | 797 | xiboClientConf = config.get('Main','clientConfName') | ||
2582 | 798 | except: | ||
2583 | 799 | xiboClientConf = "site.cfg" | ||
2584 | 800 | |||
2585 | 801 | self.logger7.info(_("Client configuration: %s"%xiboClientConf)) | ||
2586 | 802 | |||
2587 | 803 | #Options pertaining to log type | ||
2588 | 804 | logTypeOptions = config.get("Options","logType").split(",") | ||
2589 | 805 | for i in range(len(logTypeOptions)): | ||
2590 | 806 | logTypeOptions[i] = _(logTypeOptions[i]) | ||
2591 | 807 | |||
2592 | 808 | print logTypeOptions | ||
2593 | 809 | |||
2594 | 810 | #Options pertaining to log type (human readable form) | ||
2595 | 811 | logTypeHumanOptions = config.get("Options","logTypeHuman").split(",") | ||
2596 | 812 | |||
2597 | 813 | for i in range(len(logTypeHumanOptions)): | ||
2598 | 814 | logTypeHumanOptions[i] = _(logTypeHumanOptions[i]) | ||
2599 | 815 | |||
2600 | 816 | self.logger7.info(_("logTypeOptions: %s"%logTypeOptions)) | ||
2601 | 817 | |||
2602 | 818 | self.logger7.info(_("logTypeHumanOptions: %s"%logTypeHumanOptions)) | ||
2603 | 819 | |||
2604 | 820 | #Options pertaining to scheduler | ||
2605 | 821 | schedulerOptions = config.get("Options","scheduler").split(",") | ||
2606 | 822 | for i in range(len(schedulerOptions)): | ||
2607 | 823 | schedulerOptions[i] = _(schedulerOptions[i]) | ||
2608 | 824 | |||
2609 | 825 | print schedulerOptions | ||
2610 | 826 | |||
2611 | 827 | self.logger7.info(_("schedulerOptions: %s"%schedulerOptions)) | ||
2612 | 828 | |||
2613 | 829 | |||
2614 | 830 | #Options pertaining to downloader | ||
2615 | 831 | downloaderOptions = config.get("Options","downloader").split(",") | ||
2616 | 832 | for i in range(len(downloaderOptions)): | ||
2617 | 833 | downloaderOptions[i] = _(downloaderOptions[i]) | ||
2618 | 834 | |||
2619 | 835 | print downloaderOptions | ||
2620 | 836 | |||
2621 | 837 | self.logger7.info(_("downloaderOptions: %s"%downloaderOptions)) | ||
2622 | 838 | |||
2623 | 839 | #Options pertaining to colour depth (BPP) | ||
2624 | 840 | colourDepthOptions = config.get("Options","colourDepth").split(",") | ||
2625 | 841 | for i in range(len(colourDepthOptions)): | ||
2626 | 842 | colourDepthOptions[i] = _(colourDepthOptions[i]) | ||
2627 | 843 | |||
2628 | 844 | print colourDepthOptions | ||
2629 | 845 | |||
2630 | 846 | self.logger7.info(_("colourDepthOptions: %s"%colourDepthOptions)) | ||
2631 | 847 | |||
2632 | 848 | clientConfLoc = None | ||
2633 | 849 | |||
2634 | 850 | try: | ||
2635 | 851 | clientConfLoc = config.get("Main","clientConfLoc") | ||
2636 | 852 | except: | ||
2637 | 853 | clientConfLoc = os.path.expanduser('~/.xibo') | ||
2638 | 854 | |||
2639 | 855 | clientConfName = None | ||
2640 | 856 | try: | ||
2641 | 857 | clientConfName = config.get("Main","clientConfName") | ||
2642 | 858 | except: | ||
2643 | 859 | clientConfName = "site.cfg" | ||
2644 | 860 | |||
2645 | 861 | |||
2646 | 862 | self.logger7.info(_("clientConfLocation: %s"%clientConfLoc)) | ||
2647 | 863 | self.logger7.info(_("clientConfName: %s"%clientConfName)) | ||
2648 | 864 | |||
2649 | 865 | |||
2650 | 866 | return {"xiboClientConf":xiboClientConf,"logTypeOptions":logTypeOptions,"logTypeHumanOptions":logTypeHumanOptions,"clientConfLoc":clientConfLoc,"clientConfName":clientConfName,"schedulerOptions":schedulerOptions,"downloaderOptions":downloaderOptions,"colourDepthOptions":colourDepthOptions} | ||
2651 | 867 | |||
2652 | 868 | else: | ||
2653 | 869 | self.logger7.error("Configuration file is empty. Cannot continue") | ||
2654 | 870 | self.errorDialog.set_markup(_("The configuration application configuration file is empty. Cannot continue")) | ||
2655 | 871 | self.errorDialog.show() | ||
2656 | 872 | |||
2657 | 873 | except: | ||
2658 | 874 | print "Could not open the configuration application configuration file" | ||
2659 | 875 | |||
2660 | 876 | self.logger7.error(_("Could not open configuration file. Cannot continue")) | ||
2661 | 877 | |||
2662 | 878 | self.errorDialog.set_markup(_("File path is a file. Cannot write to itCould not open the configuration application configuration file")) | ||
2663 | 879 | self.errorDialog.show() | ||
2664 | 880 | return -1 | ||
2665 | 881 | |||
2666 | 882 | def clearFormSignal(self,widget,data=None): | ||
2667 | 883 | |||
2668 | 884 | self.serverURLText.set_text("") | ||
2669 | 885 | self.clientIDText.set_text("") | ||
2670 | 886 | self.serverKeyText.set_text("") | ||
2671 | 887 | self.refreshText.set_text("") | ||
2672 | 888 | self.serverConnBool.set_active(False) | ||
2673 | 889 | self.fullScreenBool.set_active(False) | ||
2674 | 890 | self.screenWidthText.set_text("") | ||
2675 | 891 | self.screenHeightText.set_text("") | ||
2676 | 892 | self.captureStatisticsBool.set_active(False) | ||
2677 | 893 | self.queueSizeText.set_text("") | ||
2678 | 894 | |||
2679 | 895 | self.screenWidthText.set_value(0) | ||
2680 | 896 | self.screenHeightText.set_value(0) | ||
2681 | 897 | self.queueSizeText.set_value(0) | ||
2682 | 898 | |||
2683 | 899 | |||
2684 | 900 | self.clearButton.set_tooltip_text(_("Clear input fields")) | ||
2685 | 901 | self.saveButton.set_tooltip_text(_("Save data to file")) | ||
2686 | 902 | |||
2687 | 903 | self.logLevelSpin.set_value(0) | ||
2688 | 904 | |||
2689 | 905 | self.logTypeCombo.set_active(0) | ||
2690 | 906 | self.liftEnableCombo.set_active(0) | ||
2691 | 907 | self.schedulerCombo.set_active(0) | ||
2692 | 908 | self.downloaderCombo.set_active(0) | ||
2693 | 909 | self.colourDepthCombo.set_active(0) | ||
2694 | 910 | self.manualUpdateCombo.set_active(0) | ||
2695 | 911 | |||
2696 | 912 | |||
2697 | 913 | self.checksumCheckButton.set_active(False) | ||
2698 | 914 | self.lowTextureCheckButton.set_active(False) | ||
2699 | 915 | |||
2700 | 916 | self.clientNameText.set_text("") | ||
2701 | 917 | |||
2702 | 918 | #Advanced options widgets | ||
2703 | 919 | |||
2704 | 920 | self.liftDefaultTagText.set_text("") | ||
2705 | 921 | self.lift7TagText.set_text("") | ||
2706 | 922 | self.lift6TagText.set_text("") | ||
2707 | 923 | self.lift5TagText.set_text("") | ||
2708 | 924 | self.lift4TagText.set_text("") | ||
2709 | 925 | self.lift3TagText.set_text("") | ||
2710 | 926 | self.lift2TagText.set_text("") | ||
2711 | 927 | self.lift1TagText.set_text("") | ||
2712 | 928 | self.lift0TagText.set_text("") | ||
2713 | 929 | self.firstSerialText.set_text("") | ||
2714 | 930 | self.secondSerialText.set_text("") | ||
2715 | 931 | self.liftTriggerValue.set_value(0) | ||
2716 | 932 | |||
2717 | 933 | self.dateFormatEntry.set_text("") | ||
2718 | 934 | self.libraryEntry.set_text("") | ||
2719 | 935 | self.socketTimeSpin.set_value(0) | ||
2720 | 936 | |||
2721 | 937 | self.framesSpin.set_value(0) | ||
2722 | 938 | self.vwidthSpin.set_value(0) | ||
2723 | 939 | self.vheightSpin.set_value(0) | ||
2724 | 940 | self.vrotateSpin.set_value(0) | ||
2725 | 941 | |||
2726 | 942 | self.xmdsLicenseKeyEntry.set_text("") | ||
2727 | 943 | |||
2728 | 944 | self.logger9.info("Clearing form elements") | ||
2729 | 945 | |||
2730 | 946 | def logTypeComboChanged(self,widget,data=None): | ||
2731 | 947 | |||
2732 | 948 | model = widget.get_model() | ||
2733 | 949 | index = widget.get_active() | ||
2734 | 950 | logTypeText = model[index][0].lower() | ||
2735 | 951 | |||
2736 | 952 | if logTypeText == "local file": | ||
2737 | 953 | #Check to see if the file pointed to by the link exists | ||
2738 | 954 | error_file = self.logFileLinkButton.get_uri().split(":%s%s"%(os.sep,os.sep))[1] | ||
2739 | 955 | if os.path.isfile(error_file): | ||
2740 | 956 | self.logFileLinkButton.show() | ||
2741 | 957 | else: | ||
2742 | 958 | self.logFileLinkButton.hide() | ||
2743 | 959 | |||
2744 | 960 | val = widget.get_active() | ||
2745 | 961 | |||
2746 | 962 | |||
2747 | 963 | def onDestroy(self,widget,data=None): | ||
2748 | 964 | """ | ||
2749 | 965 | Close the program. Executes when the main | ||
2750 | 966 | window is destroyed | ||
2751 | 967 | """ | ||
2752 | 968 | self.logger10.info("Exiting program") | ||
2753 | 969 | gtk.main_quit() | ||
2754 | 970 | |||
2755 | 971 | |||
2756 | 972 | def confValErr(self,err,logger): | ||
2757 | 973 | #print "Error finding config. value in file: %s"%err | ||
2758 | 974 | #self.logger2.warning("%s item not in config. file"%err) | ||
2759 | 975 | logger.warning("%s item not in config. file"%err) | ||
2760 | 976 | |||
2761 | 977 | def readConfig(self): | ||
2762 | 978 | """Function used to read in the configuration file and | ||
2763 | 979 | fill in the GUI text elements""" | ||
2764 | 980 | |||
2765 | 981 | #Firstly check if the configuration file exists. If it does then | ||
2766 | 982 | #open it and extract the values. These can then be filled into the | ||
2767 | 983 | #fields on the GUI | ||
2768 | 984 | |||
2769 | 985 | #Try opening the configuration file, if it does not exists, then | ||
2770 | 986 | #create it | ||
2771 | 987 | |||
2772 | 988 | config_file = "" | ||
2773 | 989 | try: | ||
2774 | 990 | config_file = open(self.pyClientConfName,"r") | ||
2775 | 991 | |||
2776 | 992 | self.logger2.info("Config. file opened successfully") | ||
2777 | 993 | |||
2778 | 994 | #Implement all the stuff to read the config file in | ||
2779 | 995 | data = config_file.read() | ||
2780 | 996 | config_file.close() | ||
2781 | 997 | #If the file is not empty, then try and process it | ||
2782 | 998 | |||
2783 | 999 | if len(data) != 0: | ||
2784 | 1000 | self.logger2.info("Config. data read in successfully") | ||
2785 | 1001 | |||
2786 | 1002 | |||
2787 | 1003 | self.readDataFromConfigFile(self.pyClientConfName,self.logger2) | ||
2788 | 1004 | |||
2789 | 1005 | |||
2790 | 1006 | except IOError: | ||
2791 | 1007 | print "Cannot open" | ||
2792 | 1008 | self.logger2.warning("Cannot open configuration file") | ||
2793 | 1009 | #Read in the values from the site.cfg.default | ||
2794 | 1010 | |||
2795 | 1011 | self.readDataFromConfigFile(self.pyClientConfDefaultsName,self.logger12,defaults=True) | ||
2796 | 1012 | self.messageDialog.set_markup(_("Could not open configuration file. A new one will be created")) | ||
2797 | 1013 | self.messageDialog.show() | ||
2798 | 1014 | |||
2799 | 1015 | |||
2800 | 1016 | |||
2801 | 1017 | |||
2802 | 1018 | def readDataFromConfigFile(self,confFileName,logger,defaults=False): | ||
2803 | 1019 | |||
2804 | 1020 | |||
2805 | 1021 | config = ConfigParser.ConfigParser() | ||
2806 | 1022 | config.read(confFileName) | ||
2807 | 1023 | |||
2808 | 1024 | #Get the information from the configuration file | ||
2809 | 1025 | #and display into the GUI | ||
2810 | 1026 | |||
2811 | 1027 | try: | ||
2812 | 1028 | self.serverURLText.set_text(config.get('Main','xmdsUrl')) | ||
2813 | 1029 | logger.info("serverURL: %s"%config.get('Main','xmdsUrl')) | ||
2814 | 1030 | except: | ||
2815 | 1031 | self.confValErr('xmdsUrl',logger) | ||
2816 | 1032 | |||
2817 | 1033 | if defaults == False: | ||
2818 | 1034 | try: | ||
2819 | 1035 | self.clientIDText.set_text(config.get("Main","xmdsClientID")) | ||
2820 | 1036 | logger.info("clientID: %s"%config.get('Main','xmdsClientID')) | ||
2821 | 1037 | except: | ||
2822 | 1038 | self.confValErr("xmdsClientID",logger) | ||
2823 | 1039 | logger.warning("xmdClientID item not in config. file") | ||
2824 | 1040 | |||
2825 | 1041 | try: | ||
2826 | 1042 | self.serverKeyText.set_text(config.get('Main','xmdsKey')) | ||
2827 | 1043 | logger.info("xmdsKey: %s"%config.get('Main','xmdsKey')) | ||
2828 | 1044 | except: | ||
2829 | 1045 | self.confValErr('xmdsKey',logger) | ||
2830 | 1046 | |||
2831 | 1047 | try: | ||
2832 | 1048 | self.refreshText.set_text(config.get('Main','xmdsUpdateInterval')) | ||
2833 | 1049 | logger.info("xmdsUpdateInterval: %s"%config.get('Main','xmdsUpdateInterval')) | ||
2834 | 1050 | except: | ||
2835 | 1051 | self.confValErr('xmdsUpdateInterval',logger) | ||
2836 | 1052 | |||
2837 | 1053 | try: | ||
2838 | 1054 | self.clientNameText.set_text(config.get('Main','xmdsClientName')) | ||
2839 | 1055 | logger.info("xmdsClientName: %s"%config.get('Main','xmdsClientName')) | ||
2840 | 1056 | except: | ||
2841 | 1057 | self.confValErr('xmdsClientName',logger) | ||
2842 | 1058 | |||
2843 | 1059 | |||
2844 | 1060 | try: | ||
2845 | 1061 | requireXmds = False | ||
2846 | 1062 | if config.get('Main','requireXmds') == "true": | ||
2847 | 1063 | requireXmds = True | ||
2848 | 1064 | |||
2849 | 1065 | self.serverConnBool.set_active(requireXmds) | ||
2850 | 1066 | logger.info("requireXMDS: %s"%requireXmds) | ||
2851 | 1067 | |||
2852 | 1068 | except: | ||
2853 | 1069 | self.confValErr("requireXmds",logger) | ||
2854 | 1070 | |||
2855 | 1071 | try: | ||
2856 | 1072 | fullScreen = False | ||
2857 | 1073 | if config.get('Main','fullscreen') == "true": | ||
2858 | 1074 | fullScreen = True | ||
2859 | 1075 | self.fullScreenBool.set_active(fullScreen) | ||
2860 | 1076 | logger.info("fullscreen: %s"%fullscreen) | ||
2861 | 1077 | |||
2862 | 1078 | |||
2863 | 1079 | except: | ||
2864 | 1080 | self.confValErr("fullscreen",logger) | ||
2865 | 1081 | |||
2866 | 1082 | try: | ||
2867 | 1083 | captureStats = False | ||
2868 | 1084 | if config.get('Stats','collect') == "true": | ||
2869 | 1085 | captureStats = True | ||
2870 | 1086 | logger.info("captureStats: %s"%captureStats) | ||
2871 | 1087 | |||
2872 | 1088 | self.captureStatisticsBool.set_active(captureStats) | ||
2873 | 1089 | except: | ||
2874 | 1090 | self.confValErr("Stats - Collect",logger) | ||
2875 | 1091 | |||
2876 | 1092 | |||
2877 | 1093 | try: | ||
2878 | 1094 | self.screenWidthText.set_value(int(config.get('Main','width'))) | ||
2879 | 1095 | logger.info("screenWidth: %s"%config.get('Main','width')) | ||
2880 | 1096 | |||
2881 | 1097 | except: | ||
2882 | 1098 | self.confValErr("width",logger) | ||
2883 | 1099 | |||
2884 | 1100 | try: | ||
2885 | 1101 | self.screenHeightText.set_value(int(config.get('Main','height'))) | ||
2886 | 1102 | logger.info("screenHeight: %s"%config.get('Main','height')) | ||
2887 | 1103 | |||
2888 | 1104 | except: | ||
2889 | 1105 | self.confValErr("height",logger) | ||
2890 | 1106 | |||
2891 | 1107 | try: | ||
2892 | 1108 | self.queueSizeText.set_value(int(config.get('Stats','queueSize'))) | ||
2893 | 1109 | logger.info("queueSize: %s"%config.get('Stats','queueSize')) | ||
2894 | 1110 | |||
2895 | 1111 | except: | ||
2896 | 1112 | self.confValErr("queueSize",logger) | ||
2897 | 1113 | |||
2898 | 1114 | try: | ||
2899 | 1115 | self.logLevelSpin.set_value(int(config.get('Logging','logLevel'))) | ||
2900 | 1116 | logger.info("Logging level: %s"%config.get('Logging','logLevel')) | ||
2901 | 1117 | |||
2902 | 1118 | except: | ||
2903 | 1119 | self.confValErr("logLevel",logger) | ||
2904 | 1120 | |||
2905 | 1121 | try: | ||
2906 | 1122 | logType = config.get('Logging','logWriter') | ||
2907 | 1123 | |||
2908 | 1124 | val = 0 | ||
2909 | 1125 | |||
2910 | 1126 | for elem in self.logWriterTypes: | ||
2911 | 1127 | if elem.lower() == logType.lower(): | ||
2912 | 1128 | print elem.lower(), logType.lower() | ||
2913 | 1129 | break | ||
2914 | 1130 | val += 1 | ||
2915 | 1131 | print "*"*len(str(self.logWriterTypes)) | ||
2916 | 1132 | print logType | ||
2917 | 1133 | print self.logWriterTypes | ||
2918 | 1134 | print " "*(len(str(self.logWriterTypes))/2),val | ||
2919 | 1135 | print self.logWriterHumanTypes | ||
2920 | 1136 | print "*"*len(str(self.logWriterTypes)) | ||
2921 | 1137 | |||
2922 | 1138 | logger.info("logWriter: %s"%self.logWriterTypes[val]) | ||
2923 | 1139 | logger.info("logWriterHuman: %s"%self.logWriterHumanTypes[val]) | ||
2924 | 1140 | self.logTypeCombo.set_active(val) | ||
2925 | 1141 | except: | ||
2926 | 1142 | self.confValErr("logWriter",logger) | ||
2927 | 1143 | |||
2928 | 1144 | |||
2929 | 1145 | #Advanced options | ||
2930 | 1146 | |||
2931 | 1147 | try: | ||
2932 | 1148 | self.dateFormatEntry.set_text(config.get("TickerMedia","dateFormat")) | ||
2933 | 1149 | logger.info("tickerMedia: %s"%config.get('TickerMedia','dateFormat')) | ||
2934 | 1150 | |||
2935 | 1151 | except: | ||
2936 | 1152 | self.confValErr("dateFormat",logger) | ||
2937 | 1153 | |||
2938 | 1154 | try: | ||
2939 | 1155 | self.libraryEntry.set_text(config.get("Main","libraryDir")) | ||
2940 | 1156 | logger.info("libraryDir: %s"%config.get('Main','libraryDir')) | ||
2941 | 1157 | |||
2942 | 1158 | except: | ||
2943 | 1159 | self.confValErr("libraryDir",logger) | ||
2944 | 1160 | |||
2945 | 1161 | try: | ||
2946 | 1162 | self.socketTimeSpin.set_value(int(config.get("Main","socketTimeout"))) | ||
2947 | 1163 | logger.info("socketTimeout: %s"%config.get('Main','socketTimeout')) | ||
2948 | 1164 | |||
2949 | 1165 | except: | ||
2950 | 1166 | self.confValErr("socketTimeout",logger) | ||
2951 | 1167 | |||
2952 | 1168 | try: | ||
2953 | 1169 | self.framesSpin.set_value(int(config.get("Main","fps"))) | ||
2954 | 1170 | logger.info("FPS: %s"%config.get('Main','fps')) | ||
2955 | 1171 | |||
2956 | 1172 | except: | ||
2957 | 1173 | self.confValErr("fps",logger) | ||
2958 | 1174 | |||
2959 | 1175 | try: | ||
2960 | 1176 | self.vwidthSpin.set_value(int(config.get("Main","vwidth"))) | ||
2961 | 1177 | logger.info("VirtualWidth: %s"%config.get('Main','vwidth')) | ||
2962 | 1178 | |||
2963 | 1179 | except: | ||
2964 | 1180 | self.confValErr("vwidth",logger) | ||
2965 | 1181 | |||
2966 | 1182 | try: | ||
2967 | 1183 | self.vheightSpin.set_value(int(config.get("Main","vheight"))) | ||
2968 | 1184 | logger.info("VirtualHeight: %s"%config.get('Main','vheight')) | ||
2969 | 1185 | |||
2970 | 1186 | except: | ||
2971 | 1187 | self.confValErr("vheight",logger) | ||
2972 | 1188 | |||
2973 | 1189 | try: | ||
2974 | 1190 | self.vrotateSpin.set_value(int(config.get("Main","vrotation"))) | ||
2975 | 1191 | logger.info("VirtualRotation: %s"%config.get('Main','vrotation')) | ||
2976 | 1192 | |||
2977 | 1193 | except: | ||
2978 | 1194 | self.confValErr("vrotation",logger) | ||
2979 | 1195 | |||
2980 | 1196 | |||
2981 | 1197 | try: | ||
2982 | 1198 | self.xmdsLicenseKeyEntry.set_text(config.get("Main","xmdsLicenseKey")) | ||
2983 | 1199 | logger.info("xmdsLicenseKey: %s"%config.get('Main','xmdsLicenseKey')) | ||
2984 | 1200 | |||
2985 | 1201 | except: | ||
2986 | 1202 | self.confValErr('xmdsLicenseKey',logger) | ||
2987 | 1203 | |||
2988 | 1204 | |||
2989 | 1205 | #Sort out the combo boxes | ||
2990 | 1206 | |||
2991 | 1207 | try: | ||
2992 | 1208 | schedType = config.get("Main","Scheduler") | ||
2993 | 1209 | |||
2994 | 1210 | val = 0 | ||
2995 | 1211 | for elem in self.schedulerOptions: | ||
2996 | 1212 | if elem.lower() == schedType.lower(): | ||
2997 | 1213 | break | ||
2998 | 1214 | val += 1 | ||
2999 | 1215 | logger.info("scheduler: %s"%self.schedulerOptions[val]) | ||
3000 | 1216 | |||
3001 | 1217 | self.schedulerCombo.set_active(val) | ||
3002 | 1218 | except: | ||
3003 | 1219 | self.confValErr("scheduler",logger) | ||
3004 | 1220 | |||
3005 | 1221 | try: | ||
3006 | 1222 | dloadType = config.get("Main","Downloader") | ||
3007 | 1223 | |||
3008 | 1224 | val = 0 | ||
3009 | 1225 | for elem in self.downloaderOptions: | ||
3010 | 1226 | if elem.lower() == dloadType.lower(): | ||
3011 | 1227 | break | ||
3012 | 1228 | val += 1 | ||
3013 | 1229 | logger.info("downloader: %s"%self.downloaderOptions[val]) | ||
3014 | 1230 | |||
3015 | 1231 | self.downloaderCombo.set_active(val) | ||
3016 | 1232 | except: | ||
3017 | 1233 | self.confValErr("downloader",logger) | ||
3018 | 1234 | |||
3019 | 1235 | try: | ||
3020 | 1236 | bppType = config.get("Main","bpp") | ||
3021 | 1237 | |||
3022 | 1238 | val = 0 | ||
3023 | 1239 | |||
3024 | 1240 | for elem in self.colourDepthOptions: | ||
3025 | 1241 | if elem.lower() == bppType.lower(): | ||
3026 | 1242 | break | ||
3027 | 1243 | val += 1 | ||
3028 | 1244 | logger.info("BPP: %s"%self.colourDepthOptions[val]) | ||
3029 | 1245 | |||
3030 | 1246 | self.colourDepthCombo.set_active(val) | ||
3031 | 1247 | except: | ||
3032 | 1248 | self.confValErr("bpp",logger) | ||
3033 | 1249 | |||
3034 | 1250 | #USB update section | ||
3035 | 1251 | try: | ||
3036 | 1252 | manualUpdateType = config.get("Main","manualUpdate") | ||
3037 | 1253 | logger.info("offlineUpdate: %s"%manualUpdateType) | ||
3038 | 1254 | |||
3039 | 1255 | if manualUpdateType == "true": | ||
3040 | 1256 | manualUpdateType = True | ||
3041 | 1257 | elif manualUpdateType == "false": | ||
3042 | 1258 | manualUpdateType = False | ||
3043 | 1259 | |||
3044 | 1260 | if manualUpdateType == True or manualUpdateType == False: | ||
3045 | 1261 | if manualUpdateType == True: | ||
3046 | 1262 | print "Stuff done" | ||
3047 | 1263 | self.offlineCheckButton.set_active(True) | ||
3048 | 1264 | self.offlineOperationToggle(self,self.offlineCheckButton) | ||
3049 | 1265 | |||
3050 | 1266 | except: | ||
3051 | 1267 | self.confValErr('offlineUpdate',logger) | ||
3052 | 1268 | print "Manual Update Failed" | ||
3053 | 1269 | |||
3054 | 1270 | #Now the check boxes | ||
3055 | 1271 | |||
3056 | 1272 | checksum = False | ||
3057 | 1273 | try: | ||
3058 | 1274 | if config.get('Main','checksumPreviousDownloads') == "true": | ||
3059 | 1275 | checksum = True | ||
3060 | 1276 | |||
3061 | 1277 | logger.info("checksumPreviousDownloads: %s"%checksum) | ||
3062 | 1278 | |||
3063 | 1279 | except: | ||
3064 | 1280 | self.confValErr("checksumPreviousDownloads",logger) | ||
3065 | 1281 | |||
3066 | 1282 | |||
3067 | 1283 | lowTexture = False | ||
3068 | 1284 | |||
3069 | 1285 | try: | ||
3070 | 1286 | if config.get('Main','lowTextureMemory') == "true": | ||
3071 | 1287 | lowTexture = True | ||
3072 | 1288 | logger.info("lowTextureMemory: %s"%lowTexture) | ||
3073 | 1289 | |||
3074 | 1290 | except: | ||
3075 | 1291 | self.confValErr("lowTextureMemory",logger) | ||
3076 | 1292 | |||
3077 | 1293 | |||
3078 | 1294 | self.checksumCheckButton.set_active(checksum) | ||
3079 | 1295 | |||
3080 | 1296 | self.lowTextureCheckButton.set_active(lowTexture) | ||
3081 | 1297 | |||
3082 | 1298 | |||
3083 | 1299 | #Now the lift options | ||
3084 | 1300 | try: | ||
3085 | 1301 | self.liftDefaultTagText.set_text(config.get("LiftTags","default")) | ||
3086 | 1302 | logger.info("DefaultLiftTag: %s"%config.get('LiftTags','default')) | ||
3087 | 1303 | |||
3088 | 1304 | except: | ||
3089 | 1305 | self.confValErr("liftTags",logger) | ||
3090 | 1306 | |||
3091 | 1307 | try: | ||
3092 | 1308 | self.lift7TagText.set_text(config.get("LiftTags","lift7")) | ||
3093 | 1309 | logger.info("Lift7Tag: %s"%config.get('LiftTags','lift7')) | ||
3094 | 1310 | |||
3095 | 1311 | except: | ||
3096 | 1312 | self.confValErr("lift7",logger) | ||
3097 | 1313 | |||
3098 | 1314 | try: | ||
3099 | 1315 | self.lift6TagText.set_text(config.get("LiftTags","lift6")) | ||
3100 | 1316 | logger.info("Lift6Tag: %s"%config.get('LiftTags','lift6')) | ||
3101 | 1317 | except: | ||
3102 | 1318 | self.confValErr("lift6",logger) | ||
3103 | 1319 | |||
3104 | 1320 | try: | ||
3105 | 1321 | self.lift5TagText.set_text(config.get("LiftTags","lift5")) | ||
3106 | 1322 | logger.info("Lift5Tag: %s"%config.get('LiftTags','lift5')) | ||
3107 | 1323 | except: | ||
3108 | 1324 | self.confValErr("lift5",logger) | ||
3109 | 1325 | |||
3110 | 1326 | try: | ||
3111 | 1327 | self.lift4TagText.set_text(config.get("LiftTags","lift4")) | ||
3112 | 1328 | logger.info("Lift4Tag: %s"%config.get('LiftTags','lift4')) | ||
3113 | 1329 | except: | ||
3114 | 1330 | self.confValErr("lift4",logger) | ||
3115 | 1331 | |||
3116 | 1332 | try: | ||
3117 | 1333 | self.lift3TagText.set_text(config.get("LiftTags","lift3")) | ||
3118 | 1334 | logger.info("Lift3Tag: %s"%config.get('LiftTags','lift3')) | ||
3119 | 1335 | except: | ||
3120 | 1336 | self.confValErr("lift3",logger) | ||
3121 | 1337 | |||
3122 | 1338 | try: | ||
3123 | 1339 | self.lift2TagText.set_text(config.get("LiftTags","lift2")) | ||
3124 | 1340 | logger.info("Lift2Tag: %s"%config.get('LiftTags','lift2')) | ||
3125 | 1341 | except: | ||
3126 | 1342 | self.confValErr("lift2",logger) | ||
3127 | 1343 | |||
3128 | 1344 | try: | ||
3129 | 1345 | self.lift1TagText.set_text(config.get("LiftTags","lift1")) | ||
3130 | 1346 | logger.info("Lift1Tag: %s"%config.get('LiftTags','lift1')) | ||
3131 | 1347 | except: | ||
3132 | 1348 | self.confValErr("lift1",logger) | ||
3133 | 1349 | |||
3134 | 1350 | try: | ||
3135 | 1351 | self.lift0TagText.set_text(config.get("LiftTags","lift0")) | ||
3136 | 1352 | logger.info("Lift0Tag: %s"%config.get('LiftTags','lift0')) | ||
3137 | 1353 | except: | ||
3138 | 1354 | self.confValErr("lift0",logger) | ||
3139 | 1355 | |||
3140 | 1356 | try: | ||
3141 | 1357 | self.firstSerialText.set_text(config.get("Lift","serial0")) | ||
3142 | 1358 | logger.info("FirstSerial: %s"%config.get('Lift','serial0')) | ||
3143 | 1359 | except: | ||
3144 | 1360 | self.confValErr("serial0",logger) | ||
3145 | 1361 | |||
3146 | 1362 | try: | ||
3147 | 1363 | self.secondSerialText.set_text(config.get("Lift","serial1")) | ||
3148 | 1364 | logger.info("SecondSerial: %s"%config.get('Lift','serial1')) | ||
3149 | 1365 | except: | ||
3150 | 1366 | self.confValErr("serial1",logger) | ||
3151 | 1367 | |||
3152 | 1368 | try: | ||
3153 | 1369 | self.liftTriggerValue.set_value(int(config.get("Lift","trigger"))) | ||
3154 | 1370 | logger.info("LiftTrigger: %s"%config.get('Lift','trigger')) | ||
3155 | 1371 | except: | ||
3156 | 1372 | self.confValErr("trigger",logger) | ||
3157 | 1373 | |||
3158 | 1374 | try: | ||
3159 | 1375 | |||
3160 | 1376 | liftEnableType = config.get("Lift","enabled") | ||
3161 | 1377 | logger.info("LiftEnabled: %s"%config.get('Lift','enabled')) | ||
3162 | 1378 | |||
3163 | 1379 | val = 0 | ||
3164 | 1380 | |||
3165 | 1381 | for elem in self.liftEnableOptions: | ||
3166 | 1382 | if elem.lower() == liftEnableType.lower(): | ||
3167 | 1383 | break | ||
3168 | 1384 | val += 1 | ||
3169 | 1385 | |||
3170 | 1386 | self.liftEnableCombo.set_active(val) | ||
3171 | 1387 | except: | ||
3172 | 1388 | self.confValErr("liftEnabled",logger) | ||
3173 | 1389 | |||
3174 | 1390 | def saveConfigSignal(self,widget,data=None): | ||
3175 | 1391 | a = self.getConfValues() | ||
3176 | 1392 | self.logger11.info("Config Values to process: %s"%a) | ||
3177 | 1393 | config = ConfigParser.RawConfigParser() | ||
3178 | 1394 | |||
3179 | 1395 | config.optionxform = str | ||
3180 | 1396 | |||
3181 | 1397 | configOptions = ["Main", "Logging", "Stats", "TickerMedia", "Lift", "LiftTags"] | ||
3182 | 1398 | |||
3183 | 1399 | for configOption in configOptions: | ||
3184 | 1400 | #print configOption | ||
3185 | 1401 | config.add_section(configOption) | ||
3186 | 1402 | |||
3187 | 1403 | for elem in a: | ||
3188 | 1404 | #print elem, a[elem][1], configOption | ||
3189 | 1405 | if a[elem][0] == configOption: | ||
3190 | 1406 | print elem, a[elem][1],configOption | ||
3191 | 1407 | try: | ||
3192 | 1408 | |||
3193 | 1409 | config.set(configOption, elem, str(a[elem][1])) | ||
3194 | 1410 | self.logger11.info("Value: %s %s %s"%(configOption,elem,str(a[elem][1]))) | ||
3195 | 1411 | except: | ||
3196 | 1412 | print "Error setting option:" | ||
3197 | 1413 | print "Element:", elem | ||
3198 | 1414 | print "Data:", a[elem] | ||
3199 | 1415 | print "Error setting: %s, %s"%(elem,a[elem][1]) | ||
3200 | 1416 | print a[elem][1] | ||
3201 | 1417 | print str(a[elem][1]) | ||
3202 | 1418 | self.logger11.error("Error setting value: %s %s %s"%(configOption,elem,str(a[elem][1]))) | ||
3203 | 1419 | finally: | ||
3204 | 1420 | #Write everything, barring the error item | ||
3205 | 1421 | |||
3206 | 1422 | # with open(self.pyClientConfName, 'wb') as configfile: | ||
3207 | 1423 | # config.write(configfile) | ||
3208 | 1424 | |||
3209 | 1425 | try: | ||
3210 | 1426 | configfile = open(self.pyClientConfName,"wb") | ||
3211 | 1427 | config.write(configfile) | ||
3212 | 1428 | self.logger11.info("Data successfully written") | ||
3213 | 1429 | self.messageDialog.set_markup(_("Successfully written configuration file")) | ||
3214 | 1430 | self.messageDialog.show() | ||
3215 | 1431 | |||
3216 | 1432 | except: | ||
3217 | 1433 | self.logger11.error("Data could not be written") | ||
3218 | 1434 | self.errorDialog.set_markup(_("Could not open / write to configuration file. Cannot continue")) | ||
3219 | 1435 | self.errorDialog.show() | ||
3220 | 1436 | |||
3221 | 1437 | # #Read in the existing configuration file as a string | ||
3222 | 1438 | # #we can then replace every instance of %s with one of the | ||
3223 | 1439 | # #configuration items | ||
3224 | 1440 | |||
3225 | 1441 | # #I have chosen this way because then we can keep the comments | ||
3226 | 1442 | # #in place for manual usage | ||
3227 | 1443 | |||
3228 | 1444 | # config_template_string = "" | ||
3229 | 1445 | # try: | ||
3230 | 1446 | # f = open("site.cfg.default","r") | ||
3231 | 1447 | # config_template_string = f.read() | ||
3232 | 1448 | # f.close() | ||
3233 | 1449 | # except: | ||
3234 | 1450 | # print "Error reading default config file" | ||
3235 | 1451 | |||
3236 | 1452 | #Now create the string to write to the new config. file | ||
3237 | 1453 | |||
3238 | 1454 | # config_string = config_template_string%(a["serverURL"],a["clientID"],a["serverKey"],a["refresh"],a["serverConn"],a["screenWidth"],a["screenHeight"],a["fullScreen"],a["logType"],a["logVal"],a["captureStats"],a["queueSize"]) | ||
3239 | 1455 | |||
3240 | 1456 | # #Now write the configuration file | ||
3241 | 1457 | |||
3242 | 1458 | # try: | ||
3243 | 1459 | # f = open(self.pyClientConfLoc,"w") | ||
3244 | 1460 | # # f.write(config_string) | ||
3245 | 1461 | # f.close() | ||
3246 | 1462 | # except: | ||
3247 | 1463 | # print "Could not write configuration file" | ||
3248 | 1464 | |||
3249 | 1465 | def genClientID(self): | ||
3250 | 1466 | """Function used to generate a random client ID. Returns a generated UUID""" | ||
3251 | 1467 | uuidStr = uuid.uuid4() | ||
3252 | 1468 | self.logger4.info("UUID Generated: %s"%uuidStr) | ||
3253 | 1469 | return uuidStr | ||
3254 | 1470 | |||
3255 | 1471 | |||
3256 | 1472 | def set_tooltips(self): | ||
3257 | 1473 | |||
3258 | 1474 | self.clearButton.set_tooltip_text(_("Clear input fields")) | ||
3259 | 1475 | self.saveButton.set_tooltip_text(_("Save data to file")) | ||
3260 | 1476 | |||
3261 | 1477 | self.serverURLText.set_tooltip_text(_("URL of your Xibo server")) | ||
3262 | 1478 | self.clientIDText.set_tooltip_text(_("Client identifier (used to generate license key hash)")) | ||
3263 | 1479 | self.serverKeyText.set_tooltip_text(_("Server key")) | ||
3264 | 1480 | self.refreshText.set_tooltip_text(_("Collection interval")) | ||
3265 | 1481 | self.serverConnBool.set_tooltip_text(_("Does the client have to connect to XMDS before playing cached content?")) | ||
3266 | 1482 | self.fullScreenBool.set_tooltip_text(_("Should the client run fullscreen")) | ||
3267 | 1483 | self.screenWidthText.set_tooltip_text(_("Width of the rendered output screen")) | ||
3268 | 1484 | self.screenHeightText.set_tooltip_text(_("Height of the rendered output screen")) | ||
3269 | 1485 | self.captureStatisticsBool.set_tooltip_text(_("States whether statistics are generated or not")) | ||
3270 | 1486 | self.queueSizeText.set_tooltip_text(_("Statistics queue size")) | ||
3271 | 1487 | self.logLevelSpin.set_tooltip_text(_("Amount of log data to write. The higher the number, the more is written")) | ||
3272 | 1488 | self.logTypeCombo.set_tooltip_text(_("Where log data should be written to")) | ||
3273 | 1489 | self.clientNameText.set_tooltip_text(_("Name as it will be displayed in the server app")) | ||
3274 | 1490 | |||
3275 | 1491 | #Advanced options widgets | ||
3276 | 1492 | |||
3277 | 1493 | self.liftDefaultTagText.set_tooltip_text(_("Tag associated with lift input")) | ||
3278 | 1494 | self.lift7TagText.set_tooltip_text(_("Tag associated with lift input")) | ||
3279 | 1495 | self.lift6TagText.set_tooltip_text(_("Tag associated with lift input")) | ||
3280 | 1496 | self.lift5TagText.set_tooltip_text(_("Tag associated with lift input")) | ||
3281 | 1497 | self.lift4TagText.set_tooltip_text(_("Tag associated with lift input")) | ||
3282 | 1498 | self.lift3TagText.set_tooltip_text(_("Tag associated with lift input")) | ||
3283 | 1499 | self.lift2TagText.set_tooltip_text(_("Tag associated with lift input")) | ||
3284 | 1500 | self.lift1TagText.set_tooltip_text(_("Tag associated with lift input")) | ||
3285 | 1501 | self.lift0TagText.set_tooltip_text(_("Tag associated with lift input")) | ||
3286 | 1502 | self.firstSerialText.set_tooltip_text(_("First serial port to use for lift purposes")) | ||
3287 | 1503 | self.secondSerialText.set_tooltip_text(_("First serial port to use for lift purposes")) | ||
3288 | 1504 | self.liftTriggerValue.set_tooltip_text(_("Number of times lift is triggered before layout is changed")) | ||
3289 | 1505 | self.liftEnableCombo.set_tooltip_text(_("Sets whether lift functionality is enabled or not")) | ||
3290 | 1506 | self.dateFormatEntry.set_tooltip_text(_("Date format the client should render dates in when displaying RSS tickers")) | ||
3291 | 1507 | self.libraryEntry.set_tooltip_text(_("Which folder to store content in. Can be relative or absolute path")) | ||
3292 | 1508 | self.socketTimeSpin.set_tooltip_text(_("How long should we wait (in seconds) before timing out a hung socket")) | ||
3293 | 1509 | self.checksumCheckButton.set_tooltip_text(_("Should the client checksum all downloaded content to ensure it's unchanged at startup")) | ||
3294 | 1510 | self.lowTextureCheckButton.set_tooltip_text(_("Should the client attempt to minimise the amount of graphics texture memory it uses")) | ||
3295 | 1511 | self.framesSpin.set_tooltip_text(_("How many fps to force the client to run")) | ||
3296 | 1512 | self.vwidthSpin.set_tooltip_text(_("Width of the rendered virtual output screen (this will be a section within the overall window")) | ||
3297 | 1513 | self.vheightSpin.set_tooltip_text(_("Height of the rendered virtual output screen (this will be a section within the overall window")) | ||
3298 | 1514 | self.vrotateSpin.set_tooltip_text(_("Angle to rotate virtual window within the rendered output window")) | ||
3299 | 1515 | self.schedulerCombo.set_tooltip_text(_("Which scheduler module to use")) | ||
3300 | 1516 | self.downloaderCombo.set_tooltip_text(_("Which download manager module to use")) | ||
3301 | 1517 | self.colourDepthCombo.set_tooltip_text(_("Colour depth of the rendered output")) | ||
3302 | 1518 | |||
3303 | 1519 | self.xmdsLicenseKeyEntry.set_tooltip_text(_("Sets license key value to use when syncronising from memory stick")) | ||
3304 | 1520 | # self.manualUpdateCombo.set_tooltip_text(_("Sets whether update from memory stick is enabled")) | ||
3305 | 1521 | |||
3306 | 1522 | def getConfValues(self): | ||
3307 | 1523 | |||
3308 | 1524 | model = self.logTypeCombo.get_model() | ||
3309 | 1525 | index = self.logTypeCombo.get_active() | ||
3310 | 1526 | # logTypeText = model[index][0] | ||
3311 | 1527 | |||
3312 | 1528 | logTypeText = self.logWriterTypes[index] | ||
3313 | 1529 | |||
3314 | 1530 | configType = "Main" | ||
3315 | 1531 | |||
3316 | 1532 | serverUrl = [configType,self.serverURLText.get_text()] | ||
3317 | 1533 | clientId = [configType,self.clientIDText.get_text()] | ||
3318 | 1534 | serverKey = [configType,self.serverKeyText.get_text()] | ||
3319 | 1535 | refresh = [configType,int(self.refreshText.get_text())] | ||
3320 | 1536 | serverConn = [configType,str(self.serverConnBool.get_active()).lower()] | ||
3321 | 1537 | fullScreen = [configType,str(self.fullScreenBool.get_active()).lower()] | ||
3322 | 1538 | screenWidth = [configType, self.screenWidthText.get_value_as_int()] | ||
3323 | 1539 | screenHeight = [configType, self.screenHeightText.get_value_as_int()] | ||
3324 | 1540 | captureStats = ["Stats",str(self.captureStatisticsBool.get_active()).lower()] | ||
3325 | 1541 | queueSize = ["Stats",self.queueSizeText.get_value_as_int()] | ||
3326 | 1542 | logType = ["Logging", logTypeText] | ||
3327 | 1543 | logVal = ["Logging",self.logLevelSpin.get_value_as_int()] | ||
3328 | 1544 | xmdsClientName = ["Main",self.clientNameText.get_text()] | ||
3329 | 1545 | |||
3330 | 1546 | self.logger5.info("ServerURL: %s"%serverUrl) | ||
3331 | 1547 | self.logger5.info("clientID: %s"%clientId) | ||
3332 | 1548 | self.logger5.info("serverKey: %s"%serverKey) | ||
3333 | 1549 | self.logger5.info("refresh: %s"%refresh) | ||
3334 | 1550 | self.logger5.info("serverConn: %s"%serverConn) | ||
3335 | 1551 | self.logger5.info("fullScreen: %s"%fullScreen) | ||
3336 | 1552 | self.logger5.info("screenWidth: %s"%screenWidth) | ||
3337 | 1553 | self.logger5.info("screenHeight: %s"%screenHeight) | ||
3338 | 1554 | self.logger5.info("captureStats: %s"%captureStats) | ||
3339 | 1555 | self.logger5.info("queueSize: %s"%queueSize) | ||
3340 | 1556 | self.logger5.info("logType: %s"%logType) | ||
3341 | 1557 | self.logger5.info("logVal: %s"%logVal) | ||
3342 | 1558 | self.logger5.info("xmdsClientName: %s"%xmdsClientName) | ||
3343 | 1559 | |||
3344 | 1560 | #Take the boolean values and make them lower case. | ||
3345 | 1561 | |||
3346 | 1562 | configOptions = {"xmdsUrl": serverUrl, "xmdsClientID": clientId,"xmdsKey":serverKey,"xmdsUpdateInterval":refresh,"requireXMDS":serverConn,"fullScreen":fullScreen,"width":screenWidth,"height":screenHeight,"collect":captureStats,"queueSize":queueSize,"logWriter":logType,"logLevel":logVal,"xmdsClientName":xmdsClientName} | ||
3347 | 1563 | |||
3348 | 1564 | #GET THE LIFT OPTIONS | ||
3349 | 1565 | |||
3350 | 1566 | |||
3351 | 1567 | #ONLY DO THIS IF THE LIFT TAB IS SHOWING | ||
3352 | 1568 | #THEN ADD THEM TO THE DICTIONARY | ||
3353 | 1569 | |||
3354 | 1570 | # if self.liftTabVisible == True: | ||
3355 | 1571 | |||
3356 | 1572 | #The above is deprecated. This is because we don't want the information to be | ||
3357 | 1573 | #"deleted" from the configuration file if we choose not to show these options | ||
3358 | 1574 | #on subsequent file loads | ||
3359 | 1575 | if 1: | ||
3360 | 1576 | |||
3361 | 1577 | configType = "Lift" | ||
3362 | 1578 | configType1 = "LiftTags" | ||
3363 | 1579 | |||
3364 | 1580 | model = self.liftEnableCombo.get_model() | ||
3365 | 1581 | index = self.liftEnableCombo.get_active() | ||
3366 | 1582 | liftEnableText = model[index][0].lower() | ||
3367 | 1583 | |||
3368 | 1584 | liftDefaultTag = [configType1,self.liftDefaultTagText.get_text()] | ||
3369 | 1585 | lift7Tag = [configType1, self.lift7TagText.get_text()] | ||
3370 | 1586 | lift6Tag = [configType1, self.lift6TagText.get_text()] | ||
3371 | 1587 | lift5Tag = [configType1, self.lift5TagText.get_text()] | ||
3372 | 1588 | lift4Tag = [configType1, self.lift4TagText.get_text()] | ||
3373 | 1589 | lift3Tag = [configType1, self.lift3TagText.get_text()] | ||
3374 | 1590 | lift2Tag = [configType1, self.lift2TagText.get_text()] | ||
3375 | 1591 | lift1Tag = [configType1, self.lift1TagText.get_text()] | ||
3376 | 1592 | lift0Tag = [configType1, self.lift0TagText.get_text()] | ||
3377 | 1593 | firstSerial = [configType, self.firstSerialText.get_text()] | ||
3378 | 1594 | secondSerial = [configType, self.secondSerialText.get_text()] | ||
3379 | 1595 | liftTrigger = [configType, self.liftTriggerValue.get_text()] | ||
3380 | 1596 | liftEnable = [configType, liftEnableText] | ||
3381 | 1597 | |||
3382 | 1598 | if liftDefaultTag[1] != "": | ||
3383 | 1599 | configOptions["default"] = liftDefaultTag | ||
3384 | 1600 | |||
3385 | 1601 | if lift7Tag[1] != "": | ||
3386 | 1602 | configOptions["lift7"] =lift7Tag | ||
3387 | 1603 | |||
3388 | 1604 | if lift6Tag[1] != "": | ||
3389 | 1605 | configOptions["lift6"] =lift6Tag | ||
3390 | 1606 | |||
3391 | 1607 | if lift5Tag[1] != "": | ||
3392 | 1608 | configOptions["lift5"] =lift5Tag | ||
3393 | 1609 | |||
3394 | 1610 | if lift4Tag[1] != "": | ||
3395 | 1611 | configOptions["lift4"] =lift4Tag | ||
3396 | 1612 | |||
3397 | 1613 | if lift3Tag[1] != "": | ||
3398 | 1614 | configOptions["lift3"] =lift3Tag | ||
3399 | 1615 | |||
3400 | 1616 | if lift2Tag[1] != "": | ||
3401 | 1617 | configOptions["lift2"] =lift2Tag | ||
3402 | 1618 | |||
3403 | 1619 | if lift1Tag[1] != "": | ||
3404 | 1620 | configOptions["lift1"] =lift1Tag | ||
3405 | 1621 | |||
3406 | 1622 | if lift0Tag[1] != "": | ||
3407 | 1623 | configOptions["lift0"] =lift0Tag | ||
3408 | 1624 | |||
3409 | 1625 | if firstSerial[1] != "": | ||
3410 | 1626 | configOptions["serial0"] =firstSerial | ||
3411 | 1627 | |||
3412 | 1628 | if secondSerial[1] != "": | ||
3413 | 1629 | configOptions["serial1"] =secondSerial | ||
3414 | 1630 | |||
3415 | 1631 | if liftEnable[1] != "false": | ||
3416 | 1632 | configOptions["enabled"] =liftEnable | ||
3417 | 1633 | |||
3418 | 1634 | if liftTrigger != "0": | ||
3419 | 1635 | configOptions["trigger"] =liftTrigger | ||
3420 | 1636 | |||
3421 | 1637 | # if self.advancedTabVisible == True: | ||
3422 | 1638 | |||
3423 | 1639 | #The above is deprecated. This is because we don't want the information to be | ||
3424 | 1640 | #"deleted" from the configuration file if we choose not to show these options | ||
3425 | 1641 | #on subsequent file loads | ||
3426 | 1642 | if 1: | ||
3427 | 1643 | configType = "Main" | ||
3428 | 1644 | |||
3429 | 1645 | model = self.schedulerCombo.get_model() | ||
3430 | 1646 | index = self.schedulerCombo.get_active() | ||
3431 | 1647 | schedulerComboText = model[index][0] | ||
3432 | 1648 | |||
3433 | 1649 | model = self.downloaderCombo.get_model() | ||
3434 | 1650 | index = self.downloaderCombo.get_active() | ||
3435 | 1651 | downloaderComboText = model[index][0] | ||
3436 | 1652 | |||
3437 | 1653 | model = self.colourDepthCombo.get_model() | ||
3438 | 1654 | index = self.colourDepthCombo.get_active() | ||
3439 | 1655 | colourDepthComboText = model[index][0] | ||
3440 | 1656 | |||
3441 | 1657 | xmdsLicenseKeyEntry = [configType,self.xmdsLicenseKeyEntry.get_text()] | ||
3442 | 1658 | |||
3443 | 1659 | # model = self.manualUpdateCombo.get_model() | ||
3444 | 1660 | # index = self.manualUpdateCombo.get_active() | ||
3445 | 1661 | # manualUpdateText = model[index][0] | ||
3446 | 1662 | |||
3447 | 1663 | manualUpdateText = str(self.offlineCheckButton.get_active()).lower() | ||
3448 | 1664 | |||
3449 | 1665 | manualUpdate = [configType,manualUpdateText.lower()] | ||
3450 | 1666 | |||
3451 | 1667 | dateFormatEntry = ["TickerMedia", self.dateFormatEntry.get_text()] | ||
3452 | 1668 | |||
3453 | 1669 | libraryEntry = [configType, self.libraryEntry.get_text()] | ||
3454 | 1670 | socketTimeSpin = [configType, self.socketTimeSpin.get_text()] | ||
3455 | 1671 | checksum = [configType, str(self.checksumCheckButton.get_active()).lower()] | ||
3456 | 1672 | lowTexture = [configType, str(self.lowTextureCheckButton.get_active()).lower()] | ||
3457 | 1673 | |||
3458 | 1674 | |||
3459 | 1675 | frames = [configType, self.framesSpin.get_text()] | ||
3460 | 1676 | vwidth = [configType, self.vwidthSpin.get_text()] | ||
3461 | 1677 | vheight = [configType, self.vheightSpin.get_text()] | ||
3462 | 1678 | vrotate = [configType, self.vrotateSpin.get_text()] | ||
3463 | 1679 | scheduler = [configType, schedulerComboText] | ||
3464 | 1680 | downloader = [configType, downloaderComboText] | ||
3465 | 1681 | colourDepth = [configType, colourDepthComboText] | ||
3466 | 1682 | |||
3467 | 1683 | if xmdsLicenseKeyEntry[1] != "": | ||
3468 | 1684 | configOptions["xmdsLicenseKey"] = xmdsLicenseKeyEntry | ||
3469 | 1685 | |||
3470 | 1686 | if manualUpdateText[1] != "": | ||
3471 | 1687 | configOptions["manualUpdate"] = manualUpdate | ||
3472 | 1688 | |||
3473 | 1689 | |||
3474 | 1690 | if dateFormatEntry[1] != "": | ||
3475 | 1691 | configOptions["dateFormat"] = dateFormatEntry | ||
3476 | 1692 | |||
3477 | 1693 | if libraryEntry[1] != "": | ||
3478 | 1694 | configOptions["libraryDir"] = libraryEntry | ||
3479 | 1695 | |||
3480 | 1696 | if socketTimeSpin[1] != "0": | ||
3481 | 1697 | configOptions["socketTimeout"] = socketTimeSpin | ||
3482 | 1698 | |||
3483 | 1699 | if checksum[1] == "true": | ||
3484 | 1700 | configOptions["checksumPreviousDownloads"] = checksum | ||
3485 | 1701 | |||
3486 | 1702 | if lowTexture[1] == "true": | ||
3487 | 1703 | configOptions["lowTextureMemory"] = lowTexture | ||
3488 | 1704 | |||
3489 | 1705 | if frames[1] != "0": | ||
3490 | 1706 | configOptions["fps"] = frames | ||
3491 | 1707 | |||
3492 | 1708 | if vwidth[1] != "0": | ||
3493 | 1709 | configOptions["vwidth"] = vwidth | ||
3494 | 1710 | |||
3495 | 1711 | if vheight[1] != "0": | ||
3496 | 1712 | configOptions["vheight"] = vheight | ||
3497 | 1713 | |||
3498 | 1714 | if vrotate[1] != "0": | ||
3499 | 1715 | configOptions["vrotation"] = vrotate | ||
3500 | 1716 | |||
3501 | 1717 | if scheduler[1] != "": | ||
3502 | 1718 | configOptions["scheduler"] = scheduler | ||
3503 | 1719 | |||
3504 | 1720 | if downloader[1] != "": | ||
3505 | 1721 | configOptions["downloader"] = downloader | ||
3506 | 1722 | |||
3507 | 1723 | if colourDepth[1] != "": | ||
3508 | 1724 | configOptions["bpp"] = colourDepth | ||
3509 | 1725 | |||
3510 | 1726 | return configOptions | ||
3511 | 1727 | def cmdOptions(): | ||
3512 | 1728 | options = sys.argv[1:] | ||
3513 | 1729 | |||
3514 | 1730 | #For each option in the array strip off any - characters and convert to lower case | ||
3515 | 1731 | |||
3516 | 1732 | for i in range(len(options)): | ||
3517 | 1733 | options[i] = options[i].strip("-").lower() | ||
3518 | 1734 | |||
3519 | 1735 | return options | ||
3520 | 1736 | |||
3521 | 1737 | if __name__ == "__main__": | ||
3522 | 1738 | |||
3523 | 1739 | #Grab the command line options | ||
3524 | 1740 | options = cmdOptions() | ||
3525 | 1741 | |||
3526 | 1742 | #Find out of the lift option has been passed | ||
3527 | 1743 | lift = False | ||
3528 | 1744 | try: | ||
3529 | 1745 | options.index("lift") | ||
3530 | 1746 | lift = True | ||
3531 | 1747 | except ValueError: | ||
3532 | 1748 | print "Option not found" | ||
3533 | 1749 | lift = False | ||
3534 | 1750 | |||
3535 | 1751 | |||
3536 | 1752 | wine = xiboConfWindow("client.conf", lift = lift) | ||
3537 | 1753 | gtk.main() | ||
3538 | 0 | 1754 | ||
3539 | === renamed file 'client/python/configure.py' => 'client/python/configure.py.moved' | |||
3540 | === modified file 'client/python/defaults.cfg' | |||
3541 | === added file 'client/python/gui.glade' | |||
3542 | --- client/python/gui.glade 1970-01-01 00:00:00 +0000 | |||
3543 | +++ client/python/gui.glade 2011-02-28 15:09:00 +0000 | |||
3544 | @@ -0,0 +1,1451 @@ | |||
3545 | 1 | <?xml version="1.0" encoding="UTF-8"?> | ||
3546 | 2 | <interface> | ||
3547 | 3 | <requires lib="gtk+" version="2.16"/> | ||
3548 | 4 | <!-- interface-naming-policy project-wide --> | ||
3549 | 5 | <object class="GtkWindow" id="mainWindow"> | ||
3550 | 6 | <property name="width_request">600</property> | ||
3551 | 7 | <property name="height_request">445</property> | ||
3552 | 8 | <property name="title" translatable="yes">Xibo Client Configuration</property> | ||
3553 | 9 | <property name="resizable">False</property> | ||
3554 | 10 | <signal name="destroy" handler="onDestroy"/> | ||
3555 | 11 | <child> | ||
3556 | 12 | <object class="GtkFixed" id="fixed1"> | ||
3557 | 13 | <property name="width_request">600</property> | ||
3558 | 14 | <property name="height_request">445</property> | ||
3559 | 15 | <property name="visible">True</property> | ||
3560 | 16 | <child> | ||
3561 | 17 | <object class="GtkNotebook" id="notebook1"> | ||
3562 | 18 | <property name="width_request">600</property> | ||
3563 | 19 | <property name="height_request">440</property> | ||
3564 | 20 | <property name="visible">True</property> | ||
3565 | 21 | <property name="can_focus">True</property> | ||
3566 | 22 | <child> | ||
3567 | 23 | <object class="GtkFixed" id="fixed2"> | ||
3568 | 24 | <property name="visible">True</property> | ||
3569 | 25 | <child> | ||
3570 | 26 | <object class="GtkLabel" id="refreshLabel"> | ||
3571 | 27 | <property name="width_request">267</property> | ||
3572 | 28 | <property name="height_request">38</property> | ||
3573 | 29 | <property name="visible">True</property> | ||
3574 | 30 | <property name="label" translatable="yes">Set the number of seconds between the client contacting the server for updates</property> | ||
3575 | 31 | <property name="justify">right</property> | ||
3576 | 32 | <property name="wrap">True</property> | ||
3577 | 33 | </object> | ||
3578 | 34 | <packing> | ||
3579 | 35 | <property name="x">8</property> | ||
3580 | 36 | <property name="y">303</property> | ||
3581 | 37 | </packing> | ||
3582 | 38 | </child> | ||
3583 | 39 | <child> | ||
3584 | 40 | <object class="GtkButton" id="clearFields"> | ||
3585 | 41 | <property name="label" translatable="yes">Clear Form</property> | ||
3586 | 42 | <property name="width_request">100</property> | ||
3587 | 43 | <property name="height_request">33</property> | ||
3588 | 44 | <property name="visible">True</property> | ||
3589 | 45 | <property name="can_focus">True</property> | ||
3590 | 46 | <property name="receives_default">True</property> | ||
3591 | 47 | <signal name="clicked" handler="clearFormSignal"/> | ||
3592 | 48 | </object> | ||
3593 | 49 | <packing> | ||
3594 | 50 | <property name="x">370</property> | ||
3595 | 51 | <property name="y">364</property> | ||
3596 | 52 | </packing> | ||
3597 | 53 | </child> | ||
3598 | 54 | <child> | ||
3599 | 55 | <object class="GtkButton" id="saveConfig"> | ||
3600 | 56 | <property name="label" translatable="yes">Save Config</property> | ||
3601 | 57 | <property name="width_request">100</property> | ||
3602 | 58 | <property name="height_request">33</property> | ||
3603 | 59 | <property name="visible">True</property> | ||
3604 | 60 | <property name="can_focus">True</property> | ||
3605 | 61 | <property name="receives_default">True</property> | ||
3606 | 62 | <signal name="clicked" handler="saveConfigSignal"/> | ||
3607 | 63 | </object> | ||
3608 | 64 | <packing> | ||
3609 | 65 | <property name="x">475</property> | ||
3610 | 66 | <property name="y">363</property> | ||
3611 | 67 | </packing> | ||
3612 | 68 | </child> | ||
3613 | 69 | <child> | ||
3614 | 70 | <object class="GtkLabel" id="connectionLabel"> | ||
3615 | 71 | <property name="width_request">213</property> | ||
3616 | 72 | <property name="height_request">40</property> | ||
3617 | 73 | <property name="visible">True</property> | ||
3618 | 74 | <property name="label" translatable="yes">Require connection to server</property> | ||
3619 | 75 | <property name="justify">right</property> | ||
3620 | 76 | <property name="wrap">True</property> | ||
3621 | 77 | </object> | ||
3622 | 78 | <packing> | ||
3623 | 79 | <property name="x">12</property> | ||
3624 | 80 | <property name="y">357</property> | ||
3625 | 81 | </packing> | ||
3626 | 82 | </child> | ||
3627 | 83 | <child> | ||
3628 | 84 | <object class="GtkCheckButton" id="serverConnection"> | ||
3629 | 85 | <property name="width_request">40</property> | ||
3630 | 86 | <property name="height_request">32</property> | ||
3631 | 87 | <property name="visible">True</property> | ||
3632 | 88 | <property name="can_focus">True</property> | ||
3633 | 89 | <property name="receives_default">False</property> | ||
3634 | 90 | <property name="tooltip_text" translatable="yes">This setting is used by the client to | ||
3635 | 91 | determine whether a connection to | ||
3636 | 92 | the server is needed before the client | ||
3637 | 93 | displays any content. | ||
3638 | 94 | |||
3639 | 95 | This can be used to allow client that | ||
3640 | 96 | are not connected to a network to show | ||
3641 | 97 | pre-loaded content</property> | ||
3642 | 98 | <property name="draw_indicator">True</property> | ||
3643 | 99 | </object> | ||
3644 | 100 | <packing> | ||
3645 | 101 | <property name="x">220</property> | ||
3646 | 102 | <property name="y">362</property> | ||
3647 | 103 | </packing> | ||
3648 | 104 | </child> | ||
3649 | 105 | <child> | ||
3650 | 106 | <object class="GtkSpinButton" id="refreshText"> | ||
3651 | 107 | <property name="width_request">100</property> | ||
3652 | 108 | <property name="height_request">27</property> | ||
3653 | 109 | <property name="visible">True</property> | ||
3654 | 110 | <property name="can_focus">True</property> | ||
3655 | 111 | <property name="invisible_char">●</property> | ||
3656 | 112 | </object> | ||
3657 | 113 | <packing> | ||
3658 | 114 | <property name="x">272</property> | ||
3659 | 115 | <property name="y">308</property> | ||
3660 | 116 | </packing> | ||
3661 | 117 | </child> | ||
3662 | 118 | <child> | ||
3663 | 119 | <object class="GtkCheckButton" id="advancedOptionsCheck"> | ||
3664 | 120 | <property name="label" translatable="yes">Display Advanced Options</property> | ||
3665 | 121 | <property name="width_request">200</property> | ||
3666 | 122 | <property name="height_request">33</property> | ||
3667 | 123 | <property name="visible">True</property> | ||
3668 | 124 | <property name="can_focus">True</property> | ||
3669 | 125 | <property name="receives_default">False</property> | ||
3670 | 126 | <property name="draw_indicator">True</property> | ||
3671 | 127 | <signal name="toggled" handler="on_advancedOptionsCheck"/> | ||
3672 | 128 | </object> | ||
3673 | 129 | <packing> | ||
3674 | 130 | <property name="x">386</property> | ||
3675 | 131 | <property name="y">316</property> | ||
3676 | 132 | </packing> | ||
3677 | 133 | </child> | ||
3678 | 134 | <child> | ||
3679 | 135 | <object class="GtkFrame" id="frame7"> | ||
3680 | 136 | <property name="width_request">561</property> | ||
3681 | 137 | <property name="height_request">186</property> | ||
3682 | 138 | <property name="visible">True</property> | ||
3683 | 139 | <property name="label_xalign">0</property> | ||
3684 | 140 | <property name="shadow_type">out</property> | ||
3685 | 141 | <child> | ||
3686 | 142 | <object class="GtkAlignment" id="alignment7"> | ||
3687 | 143 | <property name="visible">True</property> | ||
3688 | 144 | <property name="left_padding">12</property> | ||
3689 | 145 | <child> | ||
3690 | 146 | <object class="GtkFixed" id="fixed13"> | ||
3691 | 147 | <property name="visible">True</property> | ||
3692 | 148 | <child> | ||
3693 | 149 | <object class="GtkEntry" id="serverURLText"> | ||
3694 | 150 | <property name="width_request">375</property> | ||
3695 | 151 | <property name="height_request">30</property> | ||
3696 | 152 | <property name="visible">True</property> | ||
3697 | 153 | <property name="can_focus">True</property> | ||
3698 | 154 | <property name="invisible_char">●</property> | ||
3699 | 155 | </object> | ||
3700 | 156 | <packing> | ||
3701 | 157 | <property name="x">108</property> | ||
3702 | 158 | <property name="y">7</property> | ||
3703 | 159 | </packing> | ||
3704 | 160 | </child> | ||
3705 | 161 | <child> | ||
3706 | 162 | <object class="GtkLabel" id="serverURLLabel"> | ||
3707 | 163 | <property name="width_request">100</property> | ||
3708 | 164 | <property name="height_request">27</property> | ||
3709 | 165 | <property name="visible">True</property> | ||
3710 | 166 | <property name="label" translatable="yes">Server URL</property> | ||
3711 | 167 | <property name="justify">right</property> | ||
3712 | 168 | </object> | ||
3713 | 169 | <packing> | ||
3714 | 170 | <property name="y">10</property> | ||
3715 | 171 | </packing> | ||
3716 | 172 | </child> | ||
3717 | 173 | <child> | ||
3718 | 174 | <object class="GtkEntry" id="clientIDText"> | ||
3719 | 175 | <property name="width_request">375</property> | ||
3720 | 176 | <property name="height_request">30</property> | ||
3721 | 177 | <property name="visible">True</property> | ||
3722 | 178 | <property name="can_focus">True</property> | ||
3723 | 179 | <property name="invisible_char">●</property> | ||
3724 | 180 | </object> | ||
3725 | 181 | <packing> | ||
3726 | 182 | <property name="x">108</property> | ||
3727 | 183 | <property name="y">48</property> | ||
3728 | 184 | </packing> | ||
3729 | 185 | </child> | ||
3730 | 186 | <child> | ||
3731 | 187 | <object class="GtkLabel" id="clientIDLabel"> | ||
3732 | 188 | <property name="width_request">100</property> | ||
3733 | 189 | <property name="height_request">30</property> | ||
3734 | 190 | <property name="visible">True</property> | ||
3735 | 191 | <property name="label" translatable="yes">Client ID</property> | ||
3736 | 192 | <property name="justify">right</property> | ||
3737 | 193 | </object> | ||
3738 | 194 | <packing> | ||
3739 | 195 | <property name="x">7</property> | ||
3740 | 196 | <property name="y">49</property> | ||
3741 | 197 | </packing> | ||
3742 | 198 | </child> | ||
3743 | 199 | <child> | ||
3744 | 200 | <object class="GtkEntry" id="serverKeyText"> | ||
3745 | 201 | <property name="width_request">375</property> | ||
3746 | 202 | <property name="height_request">30</property> | ||
3747 | 203 | <property name="visible">True</property> | ||
3748 | 204 | <property name="can_focus">True</property> | ||
3749 | 205 | <property name="invisible_char">●</property> | ||
3750 | 206 | </object> | ||
3751 | 207 | <packing> | ||
3752 | 208 | <property name="x">108</property> | ||
3753 | 209 | <property name="y">91</property> | ||
3754 | 210 | </packing> | ||
3755 | 211 | </child> | ||
3756 | 212 | <child> | ||
3757 | 213 | <object class="GtkLabel" id="serverKeyLabel"> | ||
3758 | 214 | <property name="width_request">100</property> | ||
3759 | 215 | <property name="height_request">30</property> | ||
3760 | 216 | <property name="visible">True</property> | ||
3761 | 217 | <property name="label" translatable="yes">Server Key</property> | ||
3762 | 218 | <property name="justify">right</property> | ||
3763 | 219 | </object> | ||
3764 | 220 | <packing> | ||
3765 | 221 | <property name="y">92</property> | ||
3766 | 222 | </packing> | ||
3767 | 223 | </child> | ||
3768 | 224 | <child> | ||
3769 | 225 | <object class="GtkEntry" id="clientNameText"> | ||
3770 | 226 | <property name="width_request">375</property> | ||
3771 | 227 | <property name="height_request">30</property> | ||
3772 | 228 | <property name="visible">True</property> | ||
3773 | 229 | <property name="can_focus">True</property> | ||
3774 | 230 | <property name="invisible_char">●</property> | ||
3775 | 231 | </object> | ||
3776 | 232 | <packing> | ||
3777 | 233 | <property name="x">108</property> | ||
3778 | 234 | <property name="y">132</property> | ||
3779 | 235 | </packing> | ||
3780 | 236 | </child> | ||
3781 | 237 | <child> | ||
3782 | 238 | <object class="GtkLabel" id="clientNameLabel"> | ||
3783 | 239 | <property name="width_request">87</property> | ||
3784 | 240 | <property name="height_request">27</property> | ||
3785 | 241 | <property name="visible">True</property> | ||
3786 | 242 | <property name="label" translatable="yes">Client Name</property> | ||
3787 | 243 | </object> | ||
3788 | 244 | <packing> | ||
3789 | 245 | <property name="y">135</property> | ||
3790 | 246 | </packing> | ||
3791 | 247 | </child> | ||
3792 | 248 | </object> | ||
3793 | 249 | </child> | ||
3794 | 250 | </object> | ||
3795 | 251 | </child> | ||
3796 | 252 | <child type="label"> | ||
3797 | 253 | <object class="GtkLabel" id="onlineOpLabel"> | ||
3798 | 254 | <property name="visible">True</property> | ||
3799 | 255 | <property name="label" translatable="yes"><b>Online operation (synchronise with server)</b></property> | ||
3800 | 256 | <property name="use_markup">True</property> | ||
3801 | 257 | </object> | ||
3802 | 258 | </child> | ||
3803 | 259 | </object> | ||
3804 | 260 | <packing> | ||
3805 | 261 | <property name="x">17</property> | ||
3806 | 262 | <property name="y">46</property> | ||
3807 | 263 | </packing> | ||
3808 | 264 | </child> | ||
3809 | 265 | <child> | ||
3810 | 266 | <object class="GtkCheckButton" id="offlineCheckButton"> | ||
3811 | 267 | <property name="label" translatable="yes">Offline operation (syncronise from memory stick)</property> | ||
3812 | 268 | <property name="width_request">362</property> | ||
3813 | 269 | <property name="height_request">30</property> | ||
3814 | 270 | <property name="visible">True</property> | ||
3815 | 271 | <property name="can_focus">True</property> | ||
3816 | 272 | <property name="receives_default">False</property> | ||
3817 | 273 | <property name="draw_indicator">True</property> | ||
3818 | 274 | <signal name="toggled" handler="offlineOperationToggle"/> | ||
3819 | 275 | </object> | ||
3820 | 276 | <packing> | ||
3821 | 277 | <property name="x">16</property> | ||
3822 | 278 | <property name="y">7</property> | ||
3823 | 279 | </packing> | ||
3824 | 280 | </child> | ||
3825 | 281 | <child> | ||
3826 | 282 | <object class="GtkLabel" id="xmdsLicenseKeyLabel"> | ||
3827 | 283 | <property name="width_request">122</property> | ||
3828 | 284 | <property name="height_request">30</property> | ||
3829 | 285 | <property name="visible">True</property> | ||
3830 | 286 | <property name="label" translatable="yes">XMDS License Key</property> | ||
3831 | 287 | </object> | ||
3832 | 288 | <packing> | ||
3833 | 289 | <property name="x">16</property> | ||
3834 | 290 | <property name="y">247</property> | ||
3835 | 291 | </packing> | ||
3836 | 292 | </child> | ||
3837 | 293 | <child> | ||
3838 | 294 | <object class="GtkEntry" id="xmdsLicenseKeyEntry"> | ||
3839 | 295 | <property name="width_request">296</property> | ||
3840 | 296 | <property name="height_request">30</property> | ||
3841 | 297 | <property name="visible">True</property> | ||
3842 | 298 | <property name="can_focus">True</property> | ||
3843 | 299 | <property name="invisible_char">●</property> | ||
3844 | 300 | </object> | ||
3845 | 301 | <packing> | ||
3846 | 302 | <property name="x">140</property> | ||
3847 | 303 | <property name="y">246</property> | ||
3848 | 304 | </packing> | ||
3849 | 305 | </child> | ||
3850 | 306 | </object> | ||
3851 | 307 | </child> | ||
3852 | 308 | <child type="tab"> | ||
3853 | 309 | <object class="GtkLabel" id="serverSettingsLabel"> | ||
3854 | 310 | <property name="visible">True</property> | ||
3855 | 311 | <property name="label" translatable="yes">Server Settings</property> | ||
3856 | 312 | </object> | ||
3857 | 313 | <packing> | ||
3858 | 314 | <property name="tab_fill">False</property> | ||
3859 | 315 | </packing> | ||
3860 | 316 | </child> | ||
3861 | 317 | <child> | ||
3862 | 318 | <object class="GtkFixed" id="fixed3"> | ||
3863 | 319 | <property name="visible">True</property> | ||
3864 | 320 | <child> | ||
3865 | 321 | <object class="GtkLabel" id="fullscreenLabel"> | ||
3866 | 322 | <property name="width_request">100</property> | ||
3867 | 323 | <property name="height_request">32</property> | ||
3868 | 324 | <property name="visible">True</property> | ||
3869 | 325 | <property name="label" translatable="yes">Fullscreen</property> | ||
3870 | 326 | </object> | ||
3871 | 327 | <packing> | ||
3872 | 328 | <property name="x">19</property> | ||
3873 | 329 | <property name="y">27</property> | ||
3874 | 330 | </packing> | ||
3875 | 331 | </child> | ||
3876 | 332 | <child> | ||
3877 | 333 | <object class="GtkCheckButton" id="fullScreen"> | ||
3878 | 334 | <property name="width_request">100</property> | ||
3879 | 335 | <property name="height_request">32</property> | ||
3880 | 336 | <property name="visible">True</property> | ||
3881 | 337 | <property name="can_focus">True</property> | ||
3882 | 338 | <property name="receives_default">False</property> | ||
3883 | 339 | <property name="tooltip_text" translatable="yes">Set this option if the client | ||
3884 | 340 | should run in full screen mode</property> | ||
3885 | 341 | <property name="draw_indicator">True</property> | ||
3886 | 342 | </object> | ||
3887 | 343 | <packing> | ||
3888 | 344 | <property name="x">125</property> | ||
3889 | 345 | <property name="y">24</property> | ||
3890 | 346 | </packing> | ||
3891 | 347 | </child> | ||
3892 | 348 | <child> | ||
3893 | 349 | <object class="GtkLabel" id="widthLabel"> | ||
3894 | 350 | <property name="width_request">57</property> | ||
3895 | 351 | <property name="height_request">32</property> | ||
3896 | 352 | <property name="visible">True</property> | ||
3897 | 353 | <property name="label" translatable="yes">Width</property> | ||
3898 | 354 | <property name="justify">right</property> | ||
3899 | 355 | </object> | ||
3900 | 356 | <packing> | ||
3901 | 357 | <property name="x">54</property> | ||
3902 | 358 | <property name="y">60</property> | ||
3903 | 359 | </packing> | ||
3904 | 360 | </child> | ||
3905 | 361 | <child> | ||
3906 | 362 | <object class="GtkSpinButton" id="screenWidthText"> | ||
3907 | 363 | <property name="width_request">100</property> | ||
3908 | 364 | <property name="height_request">27</property> | ||
3909 | 365 | <property name="visible">True</property> | ||
3910 | 366 | <property name="can_focus">True</property> | ||
3911 | 367 | <property name="invisible_char">●</property> | ||
3912 | 368 | </object> | ||
3913 | 369 | <packing> | ||
3914 | 370 | <property name="x">126</property> | ||
3915 | 371 | <property name="y">61</property> | ||
3916 | 372 | </packing> | ||
3917 | 373 | </child> | ||
3918 | 374 | <child> | ||
3919 | 375 | <object class="GtkLabel" id="heightLabel"> | ||
3920 | 376 | <property name="width_request">57</property> | ||
3921 | 377 | <property name="height_request">27</property> | ||
3922 | 378 | <property name="visible">True</property> | ||
3923 | 379 | <property name="label" translatable="yes">Height</property> | ||
3924 | 380 | </object> | ||
3925 | 381 | <packing> | ||
3926 | 382 | <property name="x">49</property> | ||
3927 | 383 | <property name="y">100</property> | ||
3928 | 384 | </packing> | ||
3929 | 385 | </child> | ||
3930 | 386 | <child> | ||
3931 | 387 | <object class="GtkSpinButton" id="screenHeightText"> | ||
3932 | 388 | <property name="width_request">100</property> | ||
3933 | 389 | <property name="height_request">30</property> | ||
3934 | 390 | <property name="visible">True</property> | ||
3935 | 391 | <property name="can_focus">True</property> | ||
3936 | 392 | <property name="invisible_char">●</property> | ||
3937 | 393 | </object> | ||
3938 | 394 | <packing> | ||
3939 | 395 | <property name="x">125</property> | ||
3940 | 396 | <property name="y">97</property> | ||
3941 | 397 | </packing> | ||
3942 | 398 | </child> | ||
3943 | 399 | </object> | ||
3944 | 400 | <packing> | ||
3945 | 401 | <property name="position">1</property> | ||
3946 | 402 | </packing> | ||
3947 | 403 | </child> | ||
3948 | 404 | <child type="tab"> | ||
3949 | 405 | <object class="GtkLabel" id="clientSettingsLabel"> | ||
3950 | 406 | <property name="visible">True</property> | ||
3951 | 407 | <property name="label" translatable="yes">Client Settings</property> | ||
3952 | 408 | </object> | ||
3953 | 409 | <packing> | ||
3954 | 410 | <property name="position">1</property> | ||
3955 | 411 | <property name="tab_fill">False</property> | ||
3956 | 412 | </packing> | ||
3957 | 413 | </child> | ||
3958 | 414 | <child> | ||
3959 | 415 | <object class="GtkFixed" id="fixed4"> | ||
3960 | 416 | <property name="visible">True</property> | ||
3961 | 417 | <child> | ||
3962 | 418 | <object class="GtkFrame" id="frame1"> | ||
3963 | 419 | <property name="width_request">582</property> | ||
3964 | 420 | <property name="height_request">172</property> | ||
3965 | 421 | <property name="visible">True</property> | ||
3966 | 422 | <property name="label_xalign">0</property> | ||
3967 | 423 | <property name="shadow_type">out</property> | ||
3968 | 424 | <child> | ||
3969 | 425 | <object class="GtkAlignment" id="alignment1"> | ||
3970 | 426 | <property name="visible">True</property> | ||
3971 | 427 | <property name="left_padding">12</property> | ||
3972 | 428 | <child> | ||
3973 | 429 | <object class="GtkFixed" id="fixed5"> | ||
3974 | 430 | <property name="visible">True</property> | ||
3975 | 431 | <child> | ||
3976 | 432 | <object class="GtkLabel" id="logTypeLabel"> | ||
3977 | 433 | <property name="width_request">100</property> | ||
3978 | 434 | <property name="height_request">28</property> | ||
3979 | 435 | <property name="visible">True</property> | ||
3980 | 436 | <property name="label" translatable="yes">Log Type</property> | ||
3981 | 437 | </object> | ||
3982 | 438 | <packing> | ||
3983 | 439 | <property name="x">4</property> | ||
3984 | 440 | <property name="y">15</property> | ||
3985 | 441 | </packing> | ||
3986 | 442 | </child> | ||
3987 | 443 | <child> | ||
3988 | 444 | <object class="GtkLabel" id="logLevelLabel"> | ||
3989 | 445 | <property name="width_request">100</property> | ||
3990 | 446 | <property name="height_request">30</property> | ||
3991 | 447 | <property name="visible">True</property> | ||
3992 | 448 | <property name="label" translatable="yes">Log Level</property> | ||
3993 | 449 | </object> | ||
3994 | 450 | <packing> | ||
3995 | 451 | <property name="y">44</property> | ||
3996 | 452 | </packing> | ||
3997 | 453 | </child> | ||
3998 | 454 | <child> | ||
3999 | 455 | <object class="GtkComboBox" id="logTypeCombo"> | ||
4000 | 456 | <property name="width_request">218</property> | ||
4001 | 457 | <property name="height_request">28</property> | ||
4002 | 458 | <property name="visible">True</property> | ||
4003 | 459 | <signal name="changed" handler="logTypeComboChanged"/> | ||
4004 | 460 | </object> | ||
4005 | 461 | <packing> | ||
4006 | 462 | <property name="x">103</property> | ||
4007 | 463 | <property name="y">14</property> | ||
4008 | 464 | </packing> | ||
4009 | 465 | </child> | ||
4010 | 466 | <child> | ||
4011 | 467 | <object class="GtkSpinButton" id="logLevelSpin"> | ||
4012 | 468 | <property name="width_request">97</property> | ||
4013 | 469 | <property name="height_request">27</property> | ||
4014 | 470 | <property name="visible">True</property> | ||
4015 | 471 | <property name="can_focus">True</property> | ||
4016 | 472 | <property name="tooltip_text" translatable="yes">The higher the value, the | ||
4017 | 473 | more verbose the logging</property> | ||
4018 | 474 | <property name="invisible_char">●</property> | ||
4019 | 475 | </object> | ||
4020 | 476 | <packing> | ||
4021 | 477 | <property name="x">103</property> | ||
4022 | 478 | <property name="y">50</property> | ||
4023 | 479 | </packing> | ||
4024 | 480 | </child> | ||
4025 | 481 | <child> | ||
4026 | 482 | <object class="GtkLinkButton" id="logFileLinkButton"> | ||
4027 | 483 | <property name="label" translatable="yes">Open Log File</property> | ||
4028 | 484 | <property name="width_request">114</property> | ||
4029 | 485 | <property name="height_request">27</property> | ||
4030 | 486 | <property name="visible">True</property> | ||
4031 | 487 | <property name="can_focus">True</property> | ||
4032 | 488 | <property name="receives_default">True</property> | ||
4033 | 489 | <property name="has_tooltip">True</property> | ||
4034 | 490 | <property name="relief">none</property> | ||
4035 | 491 | </object> | ||
4036 | 492 | <packing> | ||
4037 | 493 | <property name="x">207</property> | ||
4038 | 494 | <property name="y">50</property> | ||
4039 | 495 | </packing> | ||
4040 | 496 | </child> | ||
4041 | 497 | </object> | ||
4042 | 498 | </child> | ||
4043 | 499 | </object> | ||
4044 | 500 | </child> | ||
4045 | 501 | <child type="label"> | ||
4046 | 502 | <object class="GtkLabel" id="loggingFrameLabel"> | ||
4047 | 503 | <property name="visible">True</property> | ||
4048 | 504 | <property name="label" translatable="yes"><b>Logging</b></property> | ||
4049 | 505 | <property name="use_markup">True</property> | ||
4050 | 506 | </object> | ||
4051 | 507 | </child> | ||
4052 | 508 | </object> | ||
4053 | 509 | <packing> | ||
4054 | 510 | <property name="x">8</property> | ||
4055 | 511 | <property name="y">9</property> | ||
4056 | 512 | </packing> | ||
4057 | 513 | </child> | ||
4058 | 514 | <child> | ||
4059 | 515 | <object class="GtkFrame" id="frame2"> | ||
4060 | 516 | <property name="width_request">582</property> | ||
4061 | 517 | <property name="height_request">208</property> | ||
4062 | 518 | <property name="visible">True</property> | ||
4063 | 519 | <property name="label_xalign">0</property> | ||
4064 | 520 | <property name="shadow_type">out</property> | ||
4065 | 521 | <child> | ||
4066 | 522 | <object class="GtkAlignment" id="alignment2"> | ||
4067 | 523 | <property name="visible">True</property> | ||
4068 | 524 | <property name="left_padding">12</property> | ||
4069 | 525 | <child> | ||
4070 | 526 | <object class="GtkFixed" id="fixed6"> | ||
4071 | 527 | <property name="visible">True</property> | ||
4072 | 528 | <child> | ||
4073 | 529 | <object class="GtkLabel" id="statsCaptureLabel"> | ||
4074 | 530 | <property name="width_request">63</property> | ||
4075 | 531 | <property name="height_request">43</property> | ||
4076 | 532 | <property name="visible">True</property> | ||
4077 | 533 | <property name="label" translatable="yes">Statistics capturing</property> | ||
4078 | 534 | <property name="justify">right</property> | ||
4079 | 535 | <property name="wrap">True</property> | ||
4080 | 536 | </object> | ||
4081 | 537 | <packing> | ||
4082 | 538 | <property name="x">17</property> | ||
4083 | 539 | <property name="y">13</property> | ||
4084 | 540 | </packing> | ||
4085 | 541 | </child> | ||
4086 | 542 | <child> | ||
4087 | 543 | <object class="GtkCheckButton" id="captureStatistics"> | ||
4088 | 544 | <property name="width_request">100</property> | ||
4089 | 545 | <property name="height_request">30</property> | ||
4090 | 546 | <property name="visible">True</property> | ||
4091 | 547 | <property name="can_focus">True</property> | ||
4092 | 548 | <property name="receives_default">False</property> | ||
4093 | 549 | <property name="draw_indicator">True</property> | ||
4094 | 550 | </object> | ||
4095 | 551 | <packing> | ||
4096 | 552 | <property name="x">99</property> | ||
4097 | 553 | <property name="y">18</property> | ||
4098 | 554 | </packing> | ||
4099 | 555 | </child> | ||
4100 | 556 | <child> | ||
4101 | 557 | <object class="GtkLabel" id="statsQueueSizeLabel"> | ||
4102 | 558 | <property name="width_request">73</property> | ||
4103 | 559 | <property name="height_request">25</property> | ||
4104 | 560 | <property name="visible">True</property> | ||
4105 | 561 | <property name="label" translatable="yes">Queue Size</property> | ||
4106 | 562 | </object> | ||
4107 | 563 | <packing> | ||
4108 | 564 | <property name="x">5</property> | ||
4109 | 565 | <property name="y">62</property> | ||
4110 | 566 | </packing> | ||
4111 | 567 | </child> | ||
4112 | 568 | <child> | ||
4113 | 569 | <object class="GtkSpinButton" id="queueSizeText"> | ||
4114 | 570 | <property name="width_request">100</property> | ||
4115 | 571 | <property name="height_request">30</property> | ||
4116 | 572 | <property name="visible">True</property> | ||
4117 | 573 | <property name="can_focus">True</property> | ||
4118 | 574 | <property name="invisible_char">●</property> | ||
4119 | 575 | </object> | ||
4120 | 576 | <packing> | ||
4121 | 577 | <property name="x">101</property> | ||
4122 | 578 | <property name="y">57</property> | ||
4123 | 579 | </packing> | ||
4124 | 580 | </child> | ||
4125 | 581 | </object> | ||
4126 | 582 | </child> | ||
4127 | 583 | </object> | ||
4128 | 584 | </child> | ||
4129 | 585 | <child type="label"> | ||
4130 | 586 | <object class="GtkLabel" id="statsFrameLabel"> | ||
4131 | 587 | <property name="visible">True</property> | ||
4132 | 588 | <property name="label" translatable="yes"><b>Statistic Capturing</b></property> | ||
4133 | 589 | <property name="use_markup">True</property> | ||
4134 | 590 | </object> | ||
4135 | 591 | </child> | ||
4136 | 592 | </object> | ||
4137 | 593 | <packing> | ||
4138 | 594 | <property name="x">8</property> | ||
4139 | 595 | <property name="y">192</property> | ||
4140 | 596 | </packing> | ||
4141 | 597 | </child> | ||
4142 | 598 | </object> | ||
4143 | 599 | <packing> | ||
4144 | 600 | <property name="position">2</property> | ||
4145 | 601 | </packing> | ||
4146 | 602 | </child> | ||
4147 | 603 | <child type="tab"> | ||
4148 | 604 | <object class="GtkLabel" id="otherSettingsLabel"> | ||
4149 | 605 | <property name="visible">True</property> | ||
4150 | 606 | <property name="label" translatable="yes">Other settings</property> | ||
4151 | 607 | </object> | ||
4152 | 608 | <packing> | ||
4153 | 609 | <property name="position">2</property> | ||
4154 | 610 | <property name="tab_fill">False</property> | ||
4155 | 611 | </packing> | ||
4156 | 612 | </child> | ||
4157 | 613 | <child> | ||
4158 | 614 | <object class="GtkFixed" id="fixed10"> | ||
4159 | 615 | <property name="visible">True</property> | ||
4160 | 616 | <child> | ||
4161 | 617 | <object class="GtkLabel" id="schedulerLabel"> | ||
4162 | 618 | <property name="width_request">73</property> | ||
4163 | 619 | <property name="height_request">25</property> | ||
4164 | 620 | <property name="visible">True</property> | ||
4165 | 621 | <property name="label" translatable="yes">Scheduler</property> | ||
4166 | 622 | </object> | ||
4167 | 623 | <packing> | ||
4168 | 624 | <property name="x">14</property> | ||
4169 | 625 | <property name="y">16</property> | ||
4170 | 626 | </packing> | ||
4171 | 627 | </child> | ||
4172 | 628 | <child> | ||
4173 | 629 | <object class="GtkLabel" id="downloaderLabel"> | ||
4174 | 630 | <property name="width_request">82</property> | ||
4175 | 631 | <property name="height_request">22</property> | ||
4176 | 632 | <property name="visible">True</property> | ||
4177 | 633 | <property name="label" translatable="yes">Downloader</property> | ||
4178 | 634 | </object> | ||
4179 | 635 | <packing> | ||
4180 | 636 | <property name="x">15</property> | ||
4181 | 637 | <property name="y">51</property> | ||
4182 | 638 | </packing> | ||
4183 | 639 | </child> | ||
4184 | 640 | <child> | ||
4185 | 641 | <object class="GtkLabel" id="libraryLabel"> | ||
4186 | 642 | <property name="width_request">68</property> | ||
4187 | 643 | <property name="height_request">38</property> | ||
4188 | 644 | <property name="visible">True</property> | ||
4189 | 645 | <property name="label" translatable="yes">Library Location</property> | ||
4190 | 646 | <property name="wrap">True</property> | ||
4191 | 647 | </object> | ||
4192 | 648 | <packing> | ||
4193 | 649 | <property name="x">17</property> | ||
4194 | 650 | <property name="y">82</property> | ||
4195 | 651 | </packing> | ||
4196 | 652 | </child> | ||
4197 | 653 | <child> | ||
4198 | 654 | <object class="GtkLabel" id="bppLabel"> | ||
4199 | 655 | <property name="width_request">82</property> | ||
4200 | 656 | <property name="height_request">40</property> | ||
4201 | 657 | <property name="visible">True</property> | ||
4202 | 658 | <property name="label" translatable="yes">Colour depth (BPP)</property> | ||
4203 | 659 | <property name="wrap">True</property> | ||
4204 | 660 | </object> | ||
4205 | 661 | <packing> | ||
4206 | 662 | <property name="x">17</property> | ||
4207 | 663 | <property name="y">129</property> | ||
4208 | 664 | </packing> | ||
4209 | 665 | </child> | ||
4210 | 666 | <child> | ||
4211 | 667 | <object class="GtkFrame" id="frame5"> | ||
4212 | 668 | <property name="width_request">278</property> | ||
4213 | 669 | <property name="height_request">125</property> | ||
4214 | 670 | <property name="visible">True</property> | ||
4215 | 671 | <property name="label_xalign">0</property> | ||
4216 | 672 | <property name="shadow_type">out</property> | ||
4217 | 673 | <child> | ||
4218 | 674 | <object class="GtkAlignment" id="alignment5"> | ||
4219 | 675 | <property name="visible">True</property> | ||
4220 | 676 | <property name="left_padding">12</property> | ||
4221 | 677 | <child> | ||
4222 | 678 | <object class="GtkFixed" id="fixed11"> | ||
4223 | 679 | <property name="visible">True</property> | ||
4224 | 680 | <child> | ||
4225 | 681 | <object class="GtkLabel" id="vwidthLabel"> | ||
4226 | 682 | <property name="width_request">100</property> | ||
4227 | 683 | <property name="height_request">25</property> | ||
4228 | 684 | <property name="visible">True</property> | ||
4229 | 685 | <property name="label" translatable="yes">Virtual Width</property> | ||
4230 | 686 | </object> | ||
4231 | 687 | <packing> | ||
4232 | 688 | <property name="y">9</property> | ||
4233 | 689 | </packing> | ||
4234 | 690 | </child> | ||
4235 | 691 | <child> | ||
4236 | 692 | <object class="GtkLabel" id="vheightLabel"> | ||
4237 | 693 | <property name="width_request">100</property> | ||
4238 | 694 | <property name="height_request">25</property> | ||
4239 | 695 | <property name="visible">True</property> | ||
4240 | 696 | <property name="label" translatable="yes">Virtual Height</property> | ||
4241 | 697 | </object> | ||
4242 | 698 | <packing> | ||
4243 | 699 | <property name="y">41</property> | ||
4244 | 700 | </packing> | ||
4245 | 701 | </child> | ||
4246 | 702 | <child> | ||
4247 | 703 | <object class="GtkLabel" id="vrotationLabel"> | ||
4248 | 704 | <property name="width_request">66</property> | ||
4249 | 705 | <property name="height_request">25</property> | ||
4250 | 706 | <property name="visible">True</property> | ||
4251 | 707 | <property name="label" translatable="yes">Rotation</property> | ||
4252 | 708 | </object> | ||
4253 | 709 | <packing> | ||
4254 | 710 | <property name="y">72</property> | ||
4255 | 711 | </packing> | ||
4256 | 712 | </child> | ||
4257 | 713 | <child> | ||
4258 | 714 | <object class="GtkSpinButton" id="vwidthSpin"> | ||
4259 | 715 | <property name="width_request">100</property> | ||
4260 | 716 | <property name="height_request">27</property> | ||
4261 | 717 | <property name="visible">True</property> | ||
4262 | 718 | <property name="can_focus">True</property> | ||
4263 | 719 | <property name="invisible_char">●</property> | ||
4264 | 720 | </object> | ||
4265 | 721 | <packing> | ||
4266 | 722 | <property name="x">135</property> | ||
4267 | 723 | <property name="y">7</property> | ||
4268 | 724 | </packing> | ||
4269 | 725 | </child> | ||
4270 | 726 | <child> | ||
4271 | 727 | <object class="GtkSpinButton" id="vheightSpin"> | ||
4272 | 728 | <property name="width_request">100</property> | ||
4273 | 729 | <property name="height_request">27</property> | ||
4274 | 730 | <property name="visible">True</property> | ||
4275 | 731 | <property name="can_focus">True</property> | ||
4276 | 732 | <property name="invisible_char">●</property> | ||
4277 | 733 | </object> | ||
4278 | 734 | <packing> | ||
4279 | 735 | <property name="x">135</property> | ||
4280 | 736 | <property name="y">39</property> | ||
4281 | 737 | </packing> | ||
4282 | 738 | </child> | ||
4283 | 739 | <child> | ||
4284 | 740 | <object class="GtkSpinButton" id="vrotateSpin"> | ||
4285 | 741 | <property name="width_request">100</property> | ||
4286 | 742 | <property name="height_request">27</property> | ||
4287 | 743 | <property name="visible">True</property> | ||
4288 | 744 | <property name="can_focus">True</property> | ||
4289 | 745 | <property name="invisible_char">●</property> | ||
4290 | 746 | </object> | ||
4291 | 747 | <packing> | ||
4292 | 748 | <property name="x">135</property> | ||
4293 | 749 | <property name="y">71</property> | ||
4294 | 750 | </packing> | ||
4295 | 751 | </child> | ||
4296 | 752 | </object> | ||
4297 | 753 | </child> | ||
4298 | 754 | </object> | ||
4299 | 755 | </child> | ||
4300 | 756 | <child type="label"> | ||
4301 | 757 | <object class="GtkLabel" id="virtualWinLabel"> | ||
4302 | 758 | <property name="visible">True</property> | ||
4303 | 759 | <property name="label" translatable="yes"><b>Virtual Window</b></property> | ||
4304 | 760 | <property name="use_markup">True</property> | ||
4305 | 761 | </object> | ||
4306 | 762 | </child> | ||
4307 | 763 | </object> | ||
4308 | 764 | <packing> | ||
4309 | 765 | <property name="x">308</property> | ||
4310 | 766 | <property name="y">269</property> | ||
4311 | 767 | </packing> | ||
4312 | 768 | </child> | ||
4313 | 769 | <child> | ||
4314 | 770 | <object class="GtkLabel" id="socketTimeLabel"> | ||
4315 | 771 | <property name="width_request">107</property> | ||
4316 | 772 | <property name="height_request">40</property> | ||
4317 | 773 | <property name="visible">True</property> | ||
4318 | 774 | <property name="label" translatable="yes">Socket Timeout (seconds)</property> | ||
4319 | 775 | <property name="wrap">True</property> | ||
4320 | 776 | </object> | ||
4321 | 777 | <packing> | ||
4322 | 778 | <property name="x">16</property> | ||
4323 | 779 | <property name="y">183</property> | ||
4324 | 780 | </packing> | ||
4325 | 781 | </child> | ||
4326 | 782 | <child> | ||
4327 | 783 | <object class="GtkLabel" id="checksumLabel"> | ||
4328 | 784 | <property name="width_request">100</property> | ||
4329 | 785 | <property name="height_request">57</property> | ||
4330 | 786 | <property name="visible">True</property> | ||
4331 | 787 | <property name="label" translatable="yes">Checksum Downloaded Media</property> | ||
4332 | 788 | <property name="wrap">True</property> | ||
4333 | 789 | </object> | ||
4334 | 790 | <packing> | ||
4335 | 791 | <property name="x">15</property> | ||
4336 | 792 | <property name="y">232</property> | ||
4337 | 793 | </packing> | ||
4338 | 794 | </child> | ||
4339 | 795 | <child> | ||
4340 | 796 | <object class="GtkLabel" id="lowTextureLabel"> | ||
4341 | 797 | <property name="width_request">85</property> | ||
4342 | 798 | <property name="height_request">42</property> | ||
4343 | 799 | <property name="visible">True</property> | ||
4344 | 800 | <property name="label" translatable="yes">Low Texture Memory</property> | ||
4345 | 801 | <property name="wrap">True</property> | ||
4346 | 802 | </object> | ||
4347 | 803 | <packing> | ||
4348 | 804 | <property name="x">14</property> | ||
4349 | 805 | <property name="y">299</property> | ||
4350 | 806 | </packing> | ||
4351 | 807 | </child> | ||
4352 | 808 | <child> | ||
4353 | 809 | <object class="GtkLabel" id="framesLabel"> | ||
4354 | 810 | <property name="width_request">80</property> | ||
4355 | 811 | <property name="height_request">42</property> | ||
4356 | 812 | <property name="visible">True</property> | ||
4357 | 813 | <property name="label" translatable="yes">Frames per Second</property> | ||
4358 | 814 | <property name="wrap">True</property> | ||
4359 | 815 | </object> | ||
4360 | 816 | <packing> | ||
4361 | 817 | <property name="x">14</property> | ||
4362 | 818 | <property name="y">351</property> | ||
4363 | 819 | </packing> | ||
4364 | 820 | </child> | ||
4365 | 821 | <child> | ||
4366 | 822 | <object class="GtkLabel" id="dateFormatLabel"> | ||
4367 | 823 | <property name="width_request">100</property> | ||
4368 | 824 | <property name="height_request">27</property> | ||
4369 | 825 | <property name="visible">True</property> | ||
4370 | 826 | <property name="label" translatable="yes">Date Format</property> | ||
4371 | 827 | </object> | ||
4372 | 828 | <packing> | ||
4373 | 829 | <property name="x">307</property> | ||
4374 | 830 | <property name="y">14</property> | ||
4375 | 831 | </packing> | ||
4376 | 832 | </child> | ||
4377 | 833 | <child> | ||
4378 | 834 | <object class="GtkComboBox" id="schedulerCombo"> | ||
4379 | 835 | <property name="width_request">170</property> | ||
4380 | 836 | <property name="height_request">27</property> | ||
4381 | 837 | <property name="visible">True</property> | ||
4382 | 838 | </object> | ||
4383 | 839 | <packing> | ||
4384 | 840 | <property name="x">127</property> | ||
4385 | 841 | <property name="y">15</property> | ||
4386 | 842 | </packing> | ||
4387 | 843 | </child> | ||
4388 | 844 | <child> | ||
4389 | 845 | <object class="GtkComboBox" id="downloaderCombo"> | ||
4390 | 846 | <property name="width_request">170</property> | ||
4391 | 847 | <property name="height_request">27</property> | ||
4392 | 848 | <property name="visible">True</property> | ||
4393 | 849 | </object> | ||
4394 | 850 | <packing> | ||
4395 | 851 | <property name="x">127</property> | ||
4396 | 852 | <property name="y">48</property> | ||
4397 | 853 | </packing> | ||
4398 | 854 | </child> | ||
4399 | 855 | <child> | ||
4400 | 856 | <object class="GtkEntry" id="libraryEntry"> | ||
4401 | 857 | <property name="width_request">170</property> | ||
4402 | 858 | <property name="height_request">27</property> | ||
4403 | 859 | <property name="visible">True</property> | ||
4404 | 860 | <property name="can_focus">True</property> | ||
4405 | 861 | <property name="invisible_char">●</property> | ||
4406 | 862 | </object> | ||
4407 | 863 | <packing> | ||
4408 | 864 | <property name="x">127</property> | ||
4409 | 865 | <property name="y">85</property> | ||
4410 | 866 | </packing> | ||
4411 | 867 | </child> | ||
4412 | 868 | <child> | ||
4413 | 869 | <object class="GtkComboBox" id="colourDepthCombo"> | ||
4414 | 870 | <property name="width_request">100</property> | ||
4415 | 871 | <property name="height_request">27</property> | ||
4416 | 872 | <property name="visible">True</property> | ||
4417 | 873 | </object> | ||
4418 | 874 | <packing> | ||
4419 | 875 | <property name="x">127</property> | ||
4420 | 876 | <property name="y">133</property> | ||
4421 | 877 | </packing> | ||
4422 | 878 | </child> | ||
4423 | 879 | <child> | ||
4424 | 880 | <object class="GtkSpinButton" id="socketTimeSpin"> | ||
4425 | 881 | <property name="width_request">100</property> | ||
4426 | 882 | <property name="height_request">27</property> | ||
4427 | 883 | <property name="visible">True</property> | ||
4428 | 884 | <property name="can_focus">True</property> | ||
4429 | 885 | <property name="invisible_char">●</property> | ||
4430 | 886 | </object> | ||
4431 | 887 | <packing> | ||
4432 | 888 | <property name="x">127</property> | ||
4433 | 889 | <property name="y">188</property> | ||
4434 | 890 | </packing> | ||
4435 | 891 | </child> | ||
4436 | 892 | <child> | ||
4437 | 893 | <object class="GtkCheckButton" id="checksumCheckButton"> | ||
4438 | 894 | <property name="width_request">18</property> | ||
4439 | 895 | <property name="height_request">27</property> | ||
4440 | 896 | <property name="visible">True</property> | ||
4441 | 897 | <property name="can_focus">True</property> | ||
4442 | 898 | <property name="receives_default">False</property> | ||
4443 | 899 | <property name="draw_indicator">True</property> | ||
4444 | 900 | </object> | ||
4445 | 901 | <packing> | ||
4446 | 902 | <property name="x">127</property> | ||
4447 | 903 | <property name="y">240</property> | ||
4448 | 904 | </packing> | ||
4449 | 905 | </child> | ||
4450 | 906 | <child> | ||
4451 | 907 | <object class="GtkCheckButton" id="lowTextureCheckButton"> | ||
4452 | 908 | <property name="width_request">20</property> | ||
4453 | 909 | <property name="height_request">20</property> | ||
4454 | 910 | <property name="visible">True</property> | ||
4455 | 911 | <property name="can_focus">True</property> | ||
4456 | 912 | <property name="receives_default">False</property> | ||
4457 | 913 | <property name="draw_indicator">True</property> | ||
4458 | 914 | </object> | ||
4459 | 915 | <packing> | ||
4460 | 916 | <property name="x">127</property> | ||
4461 | 917 | <property name="y">308</property> | ||
4462 | 918 | </packing> | ||
4463 | 919 | </child> | ||
4464 | 920 | <child> | ||
4465 | 921 | <object class="GtkSpinButton" id="framesSpin"> | ||
4466 | 922 | <property name="width_request">100</property> | ||
4467 | 923 | <property name="height_request">27</property> | ||
4468 | 924 | <property name="visible">True</property> | ||
4469 | 925 | <property name="can_focus">True</property> | ||
4470 | 926 | <property name="invisible_char">●</property> | ||
4471 | 927 | </object> | ||
4472 | 928 | <packing> | ||
4473 | 929 | <property name="x">127</property> | ||
4474 | 930 | <property name="y">356</property> | ||
4475 | 931 | </packing> | ||
4476 | 932 | </child> | ||
4477 | 933 | <child> | ||
4478 | 934 | <object class="GtkEntry" id="dateFormatEntry"> | ||
4479 | 935 | <property name="width_request">150</property> | ||
4480 | 936 | <property name="height_request">27</property> | ||
4481 | 937 | <property name="visible">True</property> | ||
4482 | 938 | <property name="can_focus">True</property> | ||
4483 | 939 | <property name="invisible_char">●</property> | ||
4484 | 940 | </object> | ||
4485 | 941 | <packing> | ||
4486 | 942 | <property name="x">432</property> | ||
4487 | 943 | <property name="y">15</property> | ||
4488 | 944 | </packing> | ||
4489 | 945 | </child> | ||
4490 | 946 | </object> | ||
4491 | 947 | <packing> | ||
4492 | 948 | <property name="position">3</property> | ||
4493 | 949 | </packing> | ||
4494 | 950 | </child> | ||
4495 | 951 | <child type="tab"> | ||
4496 | 952 | <object class="GtkLabel" id="advancedOptionsLabel"> | ||
4497 | 953 | <property name="visible">True</property> | ||
4498 | 954 | <property name="label" translatable="yes">Advanced Options</property> | ||
4499 | 955 | </object> | ||
4500 | 956 | <packing> | ||
4501 | 957 | <property name="position">3</property> | ||
4502 | 958 | <property name="tab_fill">False</property> | ||
4503 | 959 | </packing> | ||
4504 | 960 | </child> | ||
4505 | 961 | <child> | ||
4506 | 962 | <object class="GtkFixed" id="fixed7"> | ||
4507 | 963 | <property name="visible">True</property> | ||
4508 | 964 | <child> | ||
4509 | 965 | <object class="GtkFrame" id="frame3"> | ||
4510 | 966 | <property name="width_request">290</property> | ||
4511 | 967 | <property name="height_request">390</property> | ||
4512 | 968 | <property name="visible">True</property> | ||
4513 | 969 | <property name="label_xalign">0</property> | ||
4514 | 970 | <property name="shadow_type">out</property> | ||
4515 | 971 | <child> | ||
4516 | 972 | <object class="GtkAlignment" id="alignment3"> | ||
4517 | 973 | <property name="visible">True</property> | ||
4518 | 974 | <property name="left_padding">12</property> | ||
4519 | 975 | <child> | ||
4520 | 976 | <object class="GtkFixed" id="fixed8"> | ||
4521 | 977 | <property name="visible">True</property> | ||
4522 | 978 | <child> | ||
4523 | 979 | <object class="GtkLabel" id="firstSerialLabel"> | ||
4524 | 980 | <property name="width_request">100</property> | ||
4525 | 981 | <property name="height_request">22</property> | ||
4526 | 982 | <property name="visible">True</property> | ||
4527 | 983 | <property name="label" translatable="yes">1st Serial Port</property> | ||
4528 | 984 | </object> | ||
4529 | 985 | <packing> | ||
4530 | 986 | <property name="y">11</property> | ||
4531 | 987 | </packing> | ||
4532 | 988 | </child> | ||
4533 | 989 | <child> | ||
4534 | 990 | <object class="GtkLabel" id="secondSerialLabel"> | ||
4535 | 991 | <property name="width_request">100</property> | ||
4536 | 992 | <property name="height_request">22</property> | ||
4537 | 993 | <property name="visible">True</property> | ||
4538 | 994 | <property name="label" translatable="yes">2nd Serial Port</property> | ||
4539 | 995 | </object> | ||
4540 | 996 | <packing> | ||
4541 | 997 | <property name="x">1</property> | ||
4542 | 998 | <property name="y">50</property> | ||
4543 | 999 | </packing> | ||
4544 | 1000 | </child> | ||
4545 | 1001 | <child> | ||
4546 | 1002 | <object class="GtkLabel" id="liftTriggerLabel"> | ||
4547 | 1003 | <property name="width_request">87</property> | ||
4548 | 1004 | <property name="height_request">22</property> | ||
4549 | 1005 | <property name="visible">True</property> | ||
4550 | 1006 | <property name="label" translatable="yes">Trigger Value</property> | ||
4551 | 1007 | </object> | ||
4552 | 1008 | <packing> | ||
4553 | 1009 | <property name="x">2</property> | ||
4554 | 1010 | <property name="y">97</property> | ||
4555 | 1011 | </packing> | ||
4556 | 1012 | </child> | ||
4557 | 1013 | <child> | ||
4558 | 1014 | <object class="GtkLabel" id="liftEnableLabel"> | ||
4559 | 1015 | <property name="width_request">75</property> | ||
4560 | 1016 | <property name="height_request">23</property> | ||
4561 | 1017 | <property name="visible">True</property> | ||
4562 | 1018 | <property name="label" translatable="yes">Enable Lift</property> | ||
4563 | 1019 | </object> | ||
4564 | 1020 | <packing> | ||
4565 | 1021 | <property name="y">136</property> | ||
4566 | 1022 | </packing> | ||
4567 | 1023 | </child> | ||
4568 | 1024 | <child> | ||
4569 | 1025 | <object class="GtkEntry" id="firstSerialText"> | ||
4570 | 1026 | <property name="width_request">140</property> | ||
4571 | 1027 | <property name="height_request">27</property> | ||
4572 | 1028 | <property name="visible">True</property> | ||
4573 | 1029 | <property name="can_focus">True</property> | ||
4574 | 1030 | <property name="invisible_char">●</property> | ||
4575 | 1031 | </object> | ||
4576 | 1032 | <packing> | ||
4577 | 1033 | <property name="x">118</property> | ||
4578 | 1034 | <property name="y">5</property> | ||
4579 | 1035 | </packing> | ||
4580 | 1036 | </child> | ||
4581 | 1037 | <child> | ||
4582 | 1038 | <object class="GtkEntry" id="secondSerialText"> | ||
4583 | 1039 | <property name="width_request">140</property> | ||
4584 | 1040 | <property name="height_request">27</property> | ||
4585 | 1041 | <property name="visible">True</property> | ||
4586 | 1042 | <property name="can_focus">True</property> | ||
4587 | 1043 | <property name="invisible_char">●</property> | ||
4588 | 1044 | </object> | ||
4589 | 1045 | <packing> | ||
4590 | 1046 | <property name="x">118</property> | ||
4591 | 1047 | <property name="y">45</property> | ||
4592 | 1048 | </packing> | ||
4593 | 1049 | </child> | ||
4594 | 1050 | <child> | ||
4595 | 1051 | <object class="GtkSpinButton" id="liftTriggerValue"> | ||
4596 | 1052 | <property name="width_request">100</property> | ||
4597 | 1053 | <property name="height_request">27</property> | ||
4598 | 1054 | <property name="visible">True</property> | ||
4599 | 1055 | <property name="can_focus">True</property> | ||
4600 | 1056 | <property name="invisible_char">●</property> | ||
4601 | 1057 | </object> | ||
4602 | 1058 | <packing> | ||
4603 | 1059 | <property name="x">117</property> | ||
4604 | 1060 | <property name="y">93</property> | ||
4605 | 1061 | </packing> | ||
4606 | 1062 | </child> | ||
4607 | 1063 | <child> | ||
4608 | 1064 | <object class="GtkComboBox" id="liftEnableCombo"> | ||
4609 | 1065 | <property name="width_request">100</property> | ||
4610 | 1066 | <property name="height_request">27</property> | ||
4611 | 1067 | <property name="visible">True</property> | ||
4612 | 1068 | </object> | ||
4613 | 1069 | <packing> | ||
4614 | 1070 | <property name="x">117</property> | ||
4615 | 1071 | <property name="y">138</property> | ||
4616 | 1072 | </packing> | ||
4617 | 1073 | </child> | ||
4618 | 1074 | </object> | ||
4619 | 1075 | </child> | ||
4620 | 1076 | </object> | ||
4621 | 1077 | </child> | ||
4622 | 1078 | <child type="label"> | ||
4623 | 1079 | <object class="GtkLabel" id="genLiftOptions"> | ||
4624 | 1080 | <property name="visible">True</property> | ||
4625 | 1081 | <property name="label" translatable="yes"><b>General Lift Options</b></property> | ||
4626 | 1082 | <property name="use_markup">True</property> | ||
4627 | 1083 | </object> | ||
4628 | 1084 | </child> | ||
4629 | 1085 | </object> | ||
4630 | 1086 | <packing> | ||
4631 | 1087 | <property name="x">5</property> | ||
4632 | 1088 | <property name="y">6</property> | ||
4633 | 1089 | </packing> | ||
4634 | 1090 | </child> | ||
4635 | 1091 | <child> | ||
4636 | 1092 | <object class="GtkFrame" id="frame4"> | ||
4637 | 1093 | <property name="width_request">290</property> | ||
4638 | 1094 | <property name="height_request">390</property> | ||
4639 | 1095 | <property name="visible">True</property> | ||
4640 | 1096 | <property name="label_xalign">0</property> | ||
4641 | 1097 | <property name="shadow_type">out</property> | ||
4642 | 1098 | <child> | ||
4643 | 1099 | <object class="GtkAlignment" id="alignment4"> | ||
4644 | 1100 | <property name="visible">True</property> | ||
4645 | 1101 | <property name="left_padding">12</property> | ||
4646 | 1102 | <child> | ||
4647 | 1103 | <object class="GtkFixed" id="fixed9"> | ||
4648 | 1104 | <property name="visible">True</property> | ||
4649 | 1105 | <child> | ||
4650 | 1106 | <object class="GtkLabel" id="lift0Label"> | ||
4651 | 1107 | <property name="width_request">40</property> | ||
4652 | 1108 | <property name="height_request">27</property> | ||
4653 | 1109 | <property name="visible">True</property> | ||
4654 | 1110 | <property name="label" translatable="yes">lift0</property> | ||
4655 | 1111 | </object> | ||
4656 | 1112 | <packing> | ||
4657 | 1113 | <property name="y">10</property> | ||
4658 | 1114 | </packing> | ||
4659 | 1115 | </child> | ||
4660 | 1116 | <child> | ||
4661 | 1117 | <object class="GtkLabel" id="lift1Label"> | ||
4662 | 1118 | <property name="width_request">40</property> | ||
4663 | 1119 | <property name="height_request">27</property> | ||
4664 | 1120 | <property name="visible">True</property> | ||
4665 | 1121 | <property name="label" translatable="yes">lift1</property> | ||
4666 | 1122 | </object> | ||
4667 | 1123 | <packing> | ||
4668 | 1124 | <property name="y">40</property> | ||
4669 | 1125 | </packing> | ||
4670 | 1126 | </child> | ||
4671 | 1127 | <child> | ||
4672 | 1128 | <object class="GtkLabel" id="lift2Label"> | ||
4673 | 1129 | <property name="width_request">40</property> | ||
4674 | 1130 | <property name="height_request">27</property> | ||
4675 | 1131 | <property name="visible">True</property> | ||
4676 | 1132 | <property name="label" translatable="yes">lift2</property> | ||
4677 | 1133 | </object> | ||
4678 | 1134 | <packing> | ||
4679 | 1135 | <property name="y">72</property> | ||
4680 | 1136 | </packing> | ||
4681 | 1137 | </child> | ||
4682 | 1138 | <child> | ||
4683 | 1139 | <object class="GtkLabel" id="lift3Label"> | ||
4684 | 1140 | <property name="width_request">40</property> | ||
4685 | 1141 | <property name="height_request">27</property> | ||
4686 | 1142 | <property name="visible">True</property> | ||
4687 | 1143 | <property name="label" translatable="yes">lift3</property> | ||
4688 | 1144 | </object> | ||
4689 | 1145 | <packing> | ||
4690 | 1146 | <property name="y">104</property> | ||
4691 | 1147 | </packing> | ||
4692 | 1148 | </child> | ||
4693 | 1149 | <child> | ||
4694 | 1150 | <object class="GtkLabel" id="lift4Label"> | ||
4695 | 1151 | <property name="width_request">40</property> | ||
4696 | 1152 | <property name="height_request">27</property> | ||
4697 | 1153 | <property name="visible">True</property> | ||
4698 | 1154 | <property name="label" translatable="yes">lift4</property> | ||
4699 | 1155 | </object> | ||
4700 | 1156 | <packing> | ||
4701 | 1157 | <property name="y">136</property> | ||
4702 | 1158 | </packing> | ||
4703 | 1159 | </child> | ||
4704 | 1160 | <child> | ||
4705 | 1161 | <object class="GtkLabel" id="lift5Label"> | ||
4706 | 1162 | <property name="width_request">40</property> | ||
4707 | 1163 | <property name="height_request">27</property> | ||
4708 | 1164 | <property name="visible">True</property> | ||
4709 | 1165 | <property name="label" translatable="yes">lift5</property> | ||
4710 | 1166 | </object> | ||
4711 | 1167 | <packing> | ||
4712 | 1168 | <property name="y">169</property> | ||
4713 | 1169 | </packing> | ||
4714 | 1170 | </child> | ||
4715 | 1171 | <child> | ||
4716 | 1172 | <object class="GtkLabel" id="lift6Label"> | ||
4717 | 1173 | <property name="width_request">40</property> | ||
4718 | 1174 | <property name="height_request">27</property> | ||
4719 | 1175 | <property name="visible">True</property> | ||
4720 | 1176 | <property name="label" translatable="yes">lift6</property> | ||
4721 | 1177 | </object> | ||
4722 | 1178 | <packing> | ||
4723 | 1179 | <property name="y">200</property> | ||
4724 | 1180 | </packing> | ||
4725 | 1181 | </child> | ||
4726 | 1182 | <child> | ||
4727 | 1183 | <object class="GtkLabel" id="lift7Label"> | ||
4728 | 1184 | <property name="width_request">40</property> | ||
4729 | 1185 | <property name="height_request">27</property> | ||
4730 | 1186 | <property name="visible">True</property> | ||
4731 | 1187 | <property name="label" translatable="yes">lift7</property> | ||
4732 | 1188 | </object> | ||
4733 | 1189 | <packing> | ||
4734 | 1190 | <property name="y">233</property> | ||
4735 | 1191 | </packing> | ||
4736 | 1192 | </child> | ||
4737 | 1193 | <child> | ||
4738 | 1194 | <object class="GtkLabel" id="liftDefaultLabel"> | ||
4739 | 1195 | <property name="width_request">50</property> | ||
4740 | 1196 | <property name="height_request">27</property> | ||
4741 | 1197 | <property name="visible">True</property> | ||
4742 | 1198 | <property name="label" translatable="yes">default</property> | ||
4743 | 1199 | </object> | ||
4744 | 1200 | <packing> | ||
4745 | 1201 | <property name="x">5</property> | ||
4746 | 1202 | <property name="y">264</property> | ||
4747 | 1203 | </packing> | ||
4748 | 1204 | </child> | ||
4749 | 1205 | <child> | ||
4750 | 1206 | <object class="GtkEntry" id="lift0TagText"> | ||
4751 | 1207 | <property name="width_request">140</property> | ||
4752 | 1208 | <property name="height_request">27</property> | ||
4753 | 1209 | <property name="visible">True</property> | ||
4754 | 1210 | <property name="can_focus">True</property> | ||
4755 | 1211 | <property name="invisible_char">●</property> | ||
4756 | 1212 | </object> | ||
4757 | 1213 | <packing> | ||
4758 | 1214 | <property name="x">77</property> | ||
4759 | 1215 | <property name="y">8</property> | ||
4760 | 1216 | </packing> | ||
4761 | 1217 | </child> | ||
4762 | 1218 | <child> | ||
4763 | 1219 | <object class="GtkEntry" id="lift1TagText"> | ||
4764 | 1220 | <property name="width_request">140</property> | ||
4765 | 1221 | <property name="height_request">27</property> | ||
4766 | 1222 | <property name="visible">True</property> | ||
4767 | 1223 | <property name="can_focus">True</property> | ||
4768 | 1224 | <property name="invisible_char">●</property> | ||
4769 | 1225 | </object> | ||
4770 | 1226 | <packing> | ||
4771 | 1227 | <property name="x">77</property> | ||
4772 | 1228 | <property name="y">39</property> | ||
4773 | 1229 | </packing> | ||
4774 | 1230 | </child> | ||
4775 | 1231 | <child> | ||
4776 | 1232 | <object class="GtkEntry" id="lift2TagText"> | ||
4777 | 1233 | <property name="width_request">140</property> | ||
4778 | 1234 | <property name="height_request">27</property> | ||
4779 | 1235 | <property name="visible">True</property> | ||
4780 | 1236 | <property name="can_focus">True</property> | ||
4781 | 1237 | <property name="invisible_char">●</property> | ||
4782 | 1238 | </object> | ||
4783 | 1239 | <packing> | ||
4784 | 1240 | <property name="x">77</property> | ||
4785 | 1241 | <property name="y">71</property> | ||
4786 | 1242 | </packing> | ||
4787 | 1243 | </child> | ||
4788 | 1244 | <child> | ||
4789 | 1245 | <object class="GtkEntry" id="lift3TagText"> | ||
4790 | 1246 | <property name="width_request">140</property> | ||
4791 | 1247 | <property name="height_request">27</property> | ||
4792 | 1248 | <property name="visible">True</property> | ||
4793 | 1249 | <property name="can_focus">True</property> | ||
4794 | 1250 | <property name="invisible_char">●</property> | ||
4795 | 1251 | </object> | ||
4796 | 1252 | <packing> | ||
4797 | 1253 | <property name="x">77</property> | ||
4798 | 1254 | <property name="y">103</property> | ||
4799 | 1255 | </packing> | ||
4800 | 1256 | </child> | ||
4801 | 1257 | <child> | ||
4802 | 1258 | <object class="GtkEntry" id="lift4TagText"> | ||
4803 | 1259 | <property name="width_request">140</property> | ||
4804 | 1260 | <property name="height_request">27</property> | ||
4805 | 1261 | <property name="visible">True</property> | ||
4806 | 1262 | <property name="can_focus">True</property> | ||
4807 | 1263 | <property name="invisible_char">●</property> | ||
4808 | 1264 | </object> | ||
4809 | 1265 | <packing> | ||
4810 | 1266 | <property name="x">77</property> | ||
4811 | 1267 | <property name="y">135</property> | ||
4812 | 1268 | </packing> | ||
4813 | 1269 | </child> | ||
4814 | 1270 | <child> | ||
4815 | 1271 | <object class="GtkEntry" id="lift5TagText"> | ||
4816 | 1272 | <property name="width_request">140</property> | ||
4817 | 1273 | <property name="height_request">27</property> | ||
4818 | 1274 | <property name="visible">True</property> | ||
4819 | 1275 | <property name="can_focus">True</property> | ||
4820 | 1276 | <property name="invisible_char">●</property> | ||
4821 | 1277 | </object> | ||
4822 | 1278 | <packing> | ||
4823 | 1279 | <property name="x">77</property> | ||
4824 | 1280 | <property name="y">167</property> | ||
4825 | 1281 | </packing> | ||
4826 | 1282 | </child> | ||
4827 | 1283 | <child> | ||
4828 | 1284 | <object class="GtkEntry" id="lift6TagText"> | ||
4829 | 1285 | <property name="width_request">140</property> | ||
4830 | 1286 | <property name="height_request">27</property> | ||
4831 | 1287 | <property name="visible">True</property> | ||
4832 | 1288 | <property name="can_focus">True</property> | ||
4833 | 1289 | <property name="invisible_char">●</property> | ||
4834 | 1290 | </object> | ||
4835 | 1291 | <packing> | ||
4836 | 1292 | <property name="x">77</property> | ||
4837 | 1293 | <property name="y">199</property> | ||
4838 | 1294 | </packing> | ||
4839 | 1295 | </child> | ||
4840 | 1296 | <child> | ||
4841 | 1297 | <object class="GtkEntry" id="lift7TagText"> | ||
4842 | 1298 | <property name="width_request">140</property> | ||
4843 | 1299 | <property name="height_request">27</property> | ||
4844 | 1300 | <property name="visible">True</property> | ||
4845 | 1301 | <property name="can_focus">True</property> | ||
4846 | 1302 | <property name="invisible_char">●</property> | ||
4847 | 1303 | </object> | ||
4848 | 1304 | <packing> | ||
4849 | 1305 | <property name="x">77</property> | ||
4850 | 1306 | <property name="y">231</property> | ||
4851 | 1307 | </packing> | ||
4852 | 1308 | </child> | ||
4853 | 1309 | <child> | ||
4854 | 1310 | <object class="GtkEntry" id="liftDefaultTagText"> | ||
4855 | 1311 | <property name="width_request">140</property> | ||
4856 | 1312 | <property name="height_request">27</property> | ||
4857 | 1313 | <property name="visible">True</property> | ||
4858 | 1314 | <property name="can_focus">True</property> | ||
4859 | 1315 | <property name="invisible_char">●</property> | ||
4860 | 1316 | </object> | ||
4861 | 1317 | <packing> | ||
4862 | 1318 | <property name="x">77</property> | ||
4863 | 1319 | <property name="y">265</property> | ||
4864 | 1320 | </packing> | ||
4865 | 1321 | </child> | ||
4866 | 1322 | </object> | ||
4867 | 1323 | </child> | ||
4868 | 1324 | </object> | ||
4869 | 1325 | </child> | ||
4870 | 1326 | <child type="label"> | ||
4871 | 1327 | <object class="GtkLabel" id="tagLiftLabel"> | ||
4872 | 1328 | <property name="visible">True</property> | ||
4873 | 1329 | <property name="label" translatable="yes"><b>Tagging Lift Options</b></property> | ||
4874 | 1330 | <property name="use_markup">True</property> | ||
4875 | 1331 | </object> | ||
4876 | 1332 | </child> | ||
4877 | 1333 | </object> | ||
4878 | 1334 | <packing> | ||
4879 | 1335 | <property name="x">299</property> | ||
4880 | 1336 | <property name="y">5</property> | ||
4881 | 1337 | </packing> | ||
4882 | 1338 | </child> | ||
4883 | 1339 | </object> | ||
4884 | 1340 | <packing> | ||
4885 | 1341 | <property name="position">4</property> | ||
4886 | 1342 | </packing> | ||
4887 | 1343 | </child> | ||
4888 | 1344 | <child type="tab"> | ||
4889 | 1345 | <object class="GtkLabel" id="liftOptionsLabel"> | ||
4890 | 1346 | <property name="visible">True</property> | ||
4891 | 1347 | <property name="label" translatable="yes">Lift Options</property> | ||
4892 | 1348 | </object> | ||
4893 | 1349 | <packing> | ||
4894 | 1350 | <property name="position">4</property> | ||
4895 | 1351 | <property name="tab_fill">False</property> | ||
4896 | 1352 | </packing> | ||
4897 | 1353 | </child> | ||
4898 | 1354 | </object> | ||
4899 | 1355 | <packing> | ||
4900 | 1356 | <property name="y">1</property> | ||
4901 | 1357 | </packing> | ||
4902 | 1358 | </child> | ||
4903 | 1359 | </object> | ||
4904 | 1360 | </child> | ||
4905 | 1361 | </object> | ||
4906 | 1362 | <object class="GtkMessageDialog" id="errorDialog"> | ||
4907 | 1363 | <property name="border_width">5</property> | ||
4908 | 1364 | <property name="modal">True</property> | ||
4909 | 1365 | <property name="type_hint">normal</property> | ||
4910 | 1366 | <property name="skip_taskbar_hint">True</property> | ||
4911 | 1367 | <property name="message_type">error</property> | ||
4912 | 1368 | <property name="use_markup">True</property> | ||
4913 | 1369 | <property name="secondary_use_markup">True</property> | ||
4914 | 1370 | <child internal-child="vbox"> | ||
4915 | 1371 | <object class="GtkVBox" id="dialog-vbox1"> | ||
4916 | 1372 | <property name="visible">True</property> | ||
4917 | 1373 | <property name="spacing">2</property> | ||
4918 | 1374 | <child internal-child="action_area"> | ||
4919 | 1375 | <object class="GtkHButtonBox" id="dialog-action_area1"> | ||
4920 | 1376 | <property name="visible">True</property> | ||
4921 | 1377 | <property name="layout_style">end</property> | ||
4922 | 1378 | <child> | ||
4923 | 1379 | <placeholder/> | ||
4924 | 1380 | </child> | ||
4925 | 1381 | <child> | ||
4926 | 1382 | <object class="GtkButton" id="errorExitButton"> | ||
4927 | 1383 | <property name="label" translatable="yes">Exit</property> | ||
4928 | 1384 | <property name="visible">True</property> | ||
4929 | 1385 | <property name="can_focus">True</property> | ||
4930 | 1386 | <property name="receives_default">True</property> | ||
4931 | 1387 | <signal name="clicked" handler="messageDialogExit"/> | ||
4932 | 1388 | </object> | ||
4933 | 1389 | <packing> | ||
4934 | 1390 | <property name="expand">False</property> | ||
4935 | 1391 | <property name="fill">False</property> | ||
4936 | 1392 | <property name="position">1</property> | ||
4937 | 1393 | </packing> | ||
4938 | 1394 | </child> | ||
4939 | 1395 | </object> | ||
4940 | 1396 | <packing> | ||
4941 | 1397 | <property name="expand">False</property> | ||
4942 | 1398 | <property name="pack_type">end</property> | ||
4943 | 1399 | <property name="position">0</property> | ||
4944 | 1400 | </packing> | ||
4945 | 1401 | </child> | ||
4946 | 1402 | </object> | ||
4947 | 1403 | </child> | ||
4948 | 1404 | <action-widgets> | ||
4949 | 1405 | <action-widget response="0">errorExitButton</action-widget> | ||
4950 | 1406 | </action-widgets> | ||
4951 | 1407 | </object> | ||
4952 | 1408 | <object class="GtkMessageDialog" id="infoDialog"> | ||
4953 | 1409 | <property name="border_width">5</property> | ||
4954 | 1410 | <property name="modal">True</property> | ||
4955 | 1411 | <property name="type_hint">normal</property> | ||
4956 | 1412 | <property name="skip_taskbar_hint">True</property> | ||
4957 | 1413 | <child internal-child="vbox"> | ||
4958 | 1414 | <object class="GtkVBox" id="dialog-vbox3"> | ||
4959 | 1415 | <property name="visible">True</property> | ||
4960 | 1416 | <property name="spacing">2</property> | ||
4961 | 1417 | <child internal-child="action_area"> | ||
4962 | 1418 | <object class="GtkHButtonBox" id="dialog-action_area3"> | ||
4963 | 1419 | <property name="visible">True</property> | ||
4964 | 1420 | <property name="layout_style">end</property> | ||
4965 | 1421 | <child> | ||
4966 | 1422 | <object class="GtkButton" id="infoDialogOK"> | ||
4967 | 1423 | <property name="label" translatable="yes">OK</property> | ||
4968 | 1424 | <property name="visible">True</property> | ||
4969 | 1425 | <property name="can_focus">True</property> | ||
4970 | 1426 | <property name="receives_default">True</property> | ||
4971 | 1427 | <signal name="clicked" handler="infoDialogOKSignal"/> | ||
4972 | 1428 | </object> | ||
4973 | 1429 | <packing> | ||
4974 | 1430 | <property name="expand">False</property> | ||
4975 | 1431 | <property name="fill">False</property> | ||
4976 | 1432 | <property name="position">0</property> | ||
4977 | 1433 | </packing> | ||
4978 | 1434 | </child> | ||
4979 | 1435 | <child> | ||
4980 | 1436 | <placeholder/> | ||
4981 | 1437 | </child> | ||
4982 | 1438 | </object> | ||
4983 | 1439 | <packing> | ||
4984 | 1440 | <property name="expand">False</property> | ||
4985 | 1441 | <property name="pack_type">end</property> | ||
4986 | 1442 | <property name="position">0</property> | ||
4987 | 1443 | </packing> | ||
4988 | 1444 | </child> | ||
4989 | 1445 | </object> | ||
4990 | 1446 | </child> | ||
4991 | 1447 | <action-widgets> | ||
4992 | 1448 | <action-widget response="0">infoDialogOK</action-widget> | ||
4993 | 1449 | </action-widgets> | ||
4994 | 1450 | </object> | ||
4995 | 1451 | </interface> | ||
4996 | 0 | 1452 | ||
4997 | === renamed file 'client/python/gui.glade' => 'client/python/gui.glade.moved' | |||
4998 | === added file 'client/python/xibo.ico' | |||
4999 | 1 | Binary files client/python/xibo.ico 1970-01-01 00:00:00 +0000 and client/python/xibo.ico 2011-02-28 15:09:00 +0000 differ | 1453 | Binary files client/python/xibo.ico 1970-01-01 00:00:00 +0000 and client/python/xibo.ico 2011-02-28 15:09:00 +0000 differ |
5000 | === renamed file 'client/python/xibo.ico' => 'client/python/xibo.ico.moved' |
The diff has been truncated for viewing.