PageRenderTime 66ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 0ms

/other/LuaAdmin/LuaManagerLib/WigetBrowserAdmin.cs

http://zero-k.googlecode.com/
C# | 290 lines | 217 code | 53 blank | 20 comment | 8 complexity | 18a9423060995a8791cda07ecd58ae7c MD5 | raw file
Possible License(s): GPL-2.0, MIT, BSD-3-Clause, GPL-3.0, LGPL-2.1
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Collections;
  5. using LuaManagerLib;
  6. using System.Xml;
  7. using System.Net;
  8. using System.Globalization;
  9. namespace LuaManagerLib
  10. {
  11. public class WidgetBrowserAdmin : LuaManagerLib.WidgetBrowser
  12. {
  13. protected readonly String m_baseAdminUrl;//"http://widgetdb.springrts.de/";
  14. protected String m_baseAdminUrlPoint;
  15. protected string login;
  16. protected string passwordMd5;
  17. public WidgetBrowserAdmin(string serverUrl) : base(serverUrl)
  18. {
  19. this.m_baseAdminUrl = serverUrl;
  20. this.m_baseAdminUrlPoint = m_baseAdminUrl + "/admin.php?";
  21. }
  22. public void setLoginData( string username, string password )
  23. {
  24. this.login = username;
  25. this.passwordMd5 = Tools.Md5Cached.string2Md5Uncached(password);
  26. m_baseAdminUrlPoint = m_baseAdminUrl + "/admin.php?" + "lname=" + username + "&pwstr=" + this.passwordMd5 + "&";
  27. }
  28. /*
  29. * There should be a file "version.txt" on the webserver
  30. * It should only contain one line which gives info about latest version:
  31. * "0.45:LuaAdmin045.zip"
  32. */
  33. public void getLatestVersionInfo(out Decimal version, out string url, out string filename)
  34. {
  35. string res = this.doRequest(m_baseAdminUrl + "/admin/version.txt");
  36. string[] split = res.Split(':');
  37. CultureInfo culture = new CultureInfo("en-US"); //force dotted decimal fraction
  38. version = Decimal.Parse(split[0], culture);
  39. filename = split[1];
  40. url = m_baseAdminUrl + "/admin/" + filename;
  41. }
  42. public int getUserId()
  43. {
  44. return int.Parse( this.doRequest(m_baseAdminUrlPoint + "m=8" ) ) ;
  45. }
  46. /// <summary>
  47. /// Deleters
  48. /// </summary>
  49. /// <returns></returns>
  50. public void deleteName(int nameId)
  51. {
  52. string result = this.doRequest(m_baseAdminUrlPoint + "m=13&id=" + nameId.ToString());
  53. return;
  54. }
  55. public void deleteImage(int imageId)
  56. {
  57. string result = this.doRequest(m_baseAdminUrlPoint + "m=12&id=" + imageId.ToString());
  58. return;
  59. }
  60. public void deleteLua(int luaId)
  61. {
  62. string result = this.doRequest(m_baseAdminUrlPoint + "m=11&id=" + luaId.ToString());
  63. return;
  64. }
  65. public void deleteFile(int fileId)
  66. {
  67. string result = this.doRequest(m_baseAdminUrlPoint + "m=10&id=" + fileId.ToString());
  68. return;
  69. }
  70. public void deleteMod(int modId)
  71. {
  72. string result = this.doRequest(m_baseAdminUrlPoint + "m=17&id=" + modId.ToString());
  73. return;
  74. }
  75. public void deleteModWidget(int modWidgetId)
  76. {
  77. string result = this.doRequest(m_baseAdminUrlPoint + "m=18&id=" + modWidgetId.ToString());
  78. return;
  79. }
  80. /// END OF DELETE
  81. ///
  82. public SortedList<string, WidgetName> getNames()
  83. {
  84. XmlDocument xml = this.doRequestXml(m_baseAdminUrlPoint + "m=0");
  85. return WidgetBrowserAdmin.xml2NamesList(xml);
  86. }
  87. /*
  88. * there is no command for this (yet), so do manually
  89. */
  90. public WidgetName getNameByWidgetName(string name)
  91. {
  92. SortedList<string, WidgetName> names = this.getNames();
  93. return names[name];
  94. }
  95. public void addCategory(string name)
  96. {
  97. #pragma warning disable 612,618
  98. this.doRequest(m_baseAdminUrlPoint + "m=22&n=" + Utils.encodeUrl(name));
  99. return;
  100. }
  101. public void removeCategory(int id)
  102. {
  103. this.doRequest(m_baseAdminUrlPoint + "m=21&id=" + id);
  104. return;
  105. }
  106. public void addMod(string name)
  107. {
  108. this.doRequest(m_baseAdminUrlPoint + "m=15&name=" + Utils.encodeUrl(name));
  109. return;
  110. }
  111. public void addModWidget(string name, int modId )
  112. {
  113. this.doRequest(m_baseAdminUrlPoint + "m=16&n=" + Utils.encodeUrl(name) + "&id=" + modId.ToString() );
  114. return;
  115. }
  116. public void updateMod(int modId, string name, string orderFilename)
  117. {
  118. this.doRequest(m_baseAdminUrlPoint + "m=20&n=" + Utils.encodeUrl(name) + "&o=" + orderFilename + "&id=" + modId.ToString());
  119. return;
  120. }
  121. /*
  122. * This is the only a case (ATM) where a POST is used to send data (description text), i think there is a limit for parameters in URLs
  123. */
  124. public void updateName(int id, string name, string author, string mods, string description, bool hidden, int categoryId)
  125. {
  126. string result = this.doRequest(m_baseAdminUrlPoint + "m=2&n=" + Utils.encodeUrl(name) +
  127. "&a=" + Utils.encodeUrl(author) + "&mo=" + Utils.encodeUrl(mods) + "&c=" + categoryId + "&id=" + id.ToString()+ "&h=" + Convert.ToString(Convert.ToInt32(hidden)),
  128. "d=" + Utils.encodeUrl(description) );
  129. return;
  130. }
  131. public void updateModWidget(int id, string name, string description )
  132. {
  133. string result = this.doRequest(m_baseAdminUrlPoint + "m=19&n=" + Utils.encodeUrl(name) +
  134. "&d=" + Utils.encodeUrl(description) + "&id=" + id.ToString() );
  135. return;
  136. }
  137. public void updateLuaVersion(int id, string changelog, int active )
  138. {
  139. string result = this.doRequest(m_baseAdminUrlPoint + "m=4&c=" + Utils.encodeUrl(changelog) +
  140. "&a=" + active.ToString() + "&id=" + id.ToString() );
  141. return;
  142. }
  143. public void addName(string name)
  144. {
  145. this.doRequest(m_baseAdminUrlPoint + "m=1&name=" + Utils.encodeUrl(name));
  146. return;
  147. }
  148. #pragma warning restore 612,618
  149. public void addLuaFile(string localpath, string filename, int luaId )
  150. {
  151. WebClient wc = new WebClient() {Proxy = null};
  152. byte[] resp = wc.UploadFile(m_baseAdminUrlPoint + "m=5&l=" + localpath + "&lid=" + luaId.ToString(), "POST", Utils.normalizePathname( filename ) );
  153. return;
  154. }
  155. public void addImage(int nameId, string filename )
  156. {
  157. WebClient wc = new WebClient() {Proxy = null};
  158. byte[] resp = wc.UploadFile(m_baseAdminUrlPoint + "m=6&nid=" + nameId.ToString(), "POST", filename);
  159. return;
  160. }
  161. public void addThumb(int luaId, string filename)
  162. {
  163. WebClient wc = new WebClient() {Proxy = null};
  164. byte[] resp = wc.UploadFile(m_baseAdminUrlPoint + "m=7&lid=" + luaId.ToString(), "POST", filename);
  165. return;
  166. }
  167. public WidgetList getAllLuas()
  168. {
  169. XmlDocument xml = this.doRequestXml(m_baseAdminUrlPoint + "m=9");
  170. return WidgetBrowser.xml2WidgetList(xml);
  171. }
  172. public WidgetList getOverviewListWithInactive()
  173. {
  174. XmlDocument xml = this.doRequestXml(m_baseAdminUrlPoint + "m=14");
  175. return WidgetBrowser.xml2WidgetList(xml);
  176. }
  177. /*
  178. * returns id of added lua
  179. */
  180. public int addLuaVersion(decimal version, int nameId)
  181. {
  182. string resp = this.doRequest(m_baseAdminUrlPoint + "m=3&v=" + Utils.commaToDot(version.ToString()) + "&nId=" + nameId);
  183. return int.Parse( resp );
  184. }
  185. static protected SortedList<string, WidgetName> xml2NamesList(XmlDocument doc)
  186. {
  187. XmlNode root = doc.DocumentElement;
  188. IEnumerator ienum = root.GetEnumerator();
  189. XmlNode fileXml;
  190. SortedList<string, WidgetName> table = new SortedList<string, WidgetName>();
  191. while (ienum.MoveNext())
  192. {
  193. fileXml = (XmlNode)ienum.Current;
  194. WidgetName info = WidgetBrowserAdmin.xml2NameInfo(fileXml);
  195. table.Add( info.Name, info );
  196. }
  197. return table;
  198. }
  199. static protected WidgetName xml2NameInfo(XmlNode xml)
  200. {
  201. WidgetName winfo = new WidgetName();
  202. winfo.Id = int.Parse(xml.Attributes.GetNamedItem("ID").InnerText);
  203. winfo.Name = xml.SelectSingleNode("Name").InnerText;
  204. winfo.SupportedMods = xml.SelectSingleNode("Mods").InnerText;
  205. winfo.ownerId = int.Parse(xml.SelectSingleNode("OwnerId").InnerText);
  206. winfo.Hidden = ( int.Parse(xml.SelectSingleNode("Hidden").InnerText) == 1 );
  207. winfo.VoteCount = int.Parse(xml.SelectSingleNode("VoteCount").InnerText);
  208. winfo.CommentCount = int.Parse(xml.SelectSingleNode("CommentCount").InnerText);
  209. try
  210. {
  211. winfo.CategoryId = int.Parse(xml.SelectSingleNode("CategoryId").InnerText);
  212. }
  213. catch
  214. {
  215. winfo.CategoryId = 0;
  216. }
  217. if (xml.SelectSingleNode("Rating").InnerText.Length == 0)
  218. {
  219. winfo.Rating = 0.0f;
  220. }
  221. else
  222. {
  223. string t = xml.SelectSingleNode("Rating").InnerText;
  224. winfo.Rating = float.Parse(xml.SelectSingleNode("Rating").InnerText, CultureInfo.CreateSpecificCulture("en-US").NumberFormat);
  225. }
  226. if (xml.SelectSingleNode("Author") != null)
  227. {
  228. winfo.Author = xml.SelectSingleNode("Author").InnerText;
  229. }
  230. if (xml.SelectSingleNode("Description") != null)
  231. {
  232. winfo.Description = xml.SelectSingleNode("Description").InnerText;
  233. }
  234. return winfo;
  235. }
  236. }
  237. }