PageRenderTime 27ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/pako/mono/src/Core/DataBase/VCensor.cs

http://pako.googlecode.com/
C# | 229 lines | 205 code | 6 blank | 18 comment | 0 complexity | 7b0dacbf26abfdbebe5590f5af4b2662 MD5 | raw file
  1. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2. * Pako Jabber-bot. *
  3. * Copyright. All rights reserved Š 2007-2008 by Klichuk Bogdan (Bbodio's Lab) *
  4. * Copyright. All rights reserved Š 2009-2012 by Alexey Bryohov *
  5. * Contact information is here: http://code.google.com/p/pako *
  6. * *
  7. * Pako is under GNU GPL v3 license: *
  8. * YOU CAN SHARE THIS SOFTWARE WITH YOUR FRIEND, MAKE CHANGES, REDISTRIBUTE, *
  9. * CHANGE THE SOFTWARE TO SUIT YOUR NEEDS, THE GNU GENERAL PUBLIC LICENSE IS *
  10. * FREE, COPYLEFT LICENSE FOR SOFTWARE AND OTHER KINDS OF WORKS. *
  11. * *
  12. * Visit http://www.gnu.org/licenses/gpl.html for more information about *
  13. * GNU General Public License v3 license *
  14. * *
  15. * Download source code: http://pako.googlecode.com/svn/trunk *
  16. * See the general information here: *
  17. * http://code.google.com/p/pako. *
  18. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  19. using System;
  20. using System.Collections.Generic;
  21. using System.Text;
  22. using System.IO;
  23. using agsXMPP;
  24. using agsXMPP.protocol.client;
  25. using agsXMPP.Xml.Dom;
  26. using agsXMPP.protocol.x.muc;
  27. using Core.Kernel;
  28. using System.Text.RegularExpressions;
  29. using Mono.Data.SqliteClient;
  30. using System.Threading;
  31. namespace Core.DataBase
  32. {
  33. public class VCensor
  34. {
  35. object[] sobjs = new object[10];
  36. SqliteConnection sqlite_conn;
  37. string db_file;
  38. int ver;
  39. public SqliteConnection SQLiteConnection
  40. {
  41. get { lock (sobjs[4]) { return sqlite_conn; } }
  42. set { lock (sobjs[4]) { sqlite_conn = value; } }
  43. }
  44. public void LoadBase()
  45. {
  46. bool to_create = !File.Exists(db_file);
  47. sqlite_conn = new SqliteConnection("URI=file:" + db_file.Replace("\\", "/")+",version="+ver.ToString());
  48. sqlite_conn.Open();
  49. if (to_create)
  50. {
  51. SqliteCommand cmd = new SqliteCommand(@"
  52. CREATE
  53. TABLE censor (muc varchar, censor_data varchar, reason varchar);
  54. ", sqlite_conn);
  55. cmd.ExecuteNonQuery();
  56. }
  57. }
  58. public VCensor(string DBfile, int version)
  59. {
  60. for (int i = 0; i < 10; i++)
  61. {
  62. sobjs[i] = new object();
  63. }
  64. ver = version;
  65. db_file = DBfile;
  66. LoadBase();
  67. }
  68. public void ClearCensor()
  69. {
  70. lock (sqlite_conn)
  71. {
  72. SqliteCommand cmd = new SqliteCommand(String.Format(@"
  73. DELETE
  74. FROM censor
  75. WHERE (muc = '*')
  76. "),
  77. sqlite_conn);
  78. cmd.ExecuteNonQuery();
  79. }
  80. }
  81. public bool DelRoomCensor(string source)
  82. {
  83. lock (sqlite_conn)
  84. {
  85. try
  86. {
  87. int num = Convert.ToInt32(source);
  88. source = source.Replace("'", "''");
  89. SqliteCommand cmd = new SqliteCommand(@"
  90. SELECT *
  91. FROM censor
  92. WHERE (muc = '*')",
  93. sqlite_conn);
  94. cmd.ExecuteNonQuery();
  95. SqliteDataReader sqlite_datareader = cmd.ExecuteReader();
  96. int i = 0;
  97. while (sqlite_datareader.Read())
  98. {
  99. i++;
  100. @out.exe("gggggg");
  101. if (num == i)
  102. {
  103. string caught = sqlite_datareader.GetString(1).Replace("'", "''");
  104. cmd = new SqliteCommand(String.Format(@"
  105. DELETE
  106. FROM censor
  107. WHERE (censor_data = '{0}' and muc = '*')
  108. ",
  109. caught),
  110. sqlite_conn);
  111. cmd.ExecuteNonQuery();
  112. return true;
  113. }
  114. @out.exe("aaaaaa");
  115. }
  116. return false;
  117. }
  118. catch
  119. {
  120. source = source.Replace("'", "''");
  121. SqliteCommand cmd = new SqliteCommand(String.Format(@"
  122. SELECT *
  123. FROM censor
  124. WHERE (censor_data = '{0}' and muc = '*')
  125. ",
  126. source),
  127. sqlite_conn);
  128. cmd.ExecuteNonQuery();
  129. SqliteDataReader sqlite_datareader = cmd.ExecuteReader();
  130. if (!sqlite_datareader.Read())
  131. return false;
  132. //(muc = '{0}') &&
  133. cmd = new SqliteCommand(String.Format(@"
  134. DELETE
  135. FROM censor
  136. WHERE (censor_data = '{0}' and muc = '*')
  137. ",
  138. source),
  139. sqlite_conn);
  140. cmd.ExecuteNonQuery();
  141. return true;
  142. }
  143. }
  144. }
  145. public string GetRoomCensorList(string pattern)
  146. {
  147. lock (sqlite_conn)
  148. {//(muc = '{0}') &&
  149. SqliteCommand cmd = new SqliteCommand(@"
  150. SELECT *
  151. FROM censor
  152. WHERE (muc = '*')
  153. ",
  154. sqlite_conn);
  155. cmd.ExecuteNonQuery();
  156. SqliteDataReader sqlite_datareader = cmd.ExecuteReader();
  157. string data = "";
  158. int i = 0;
  159. while (sqlite_datareader.Read())
  160. {
  161. i++;
  162. data += "\n" + pattern.Replace("{1}", i.ToString()).Replace("{2}", sqlite_datareader.GetString(1)).Replace("{3}", sqlite_datareader.GetString(2));
  163. }
  164. return data != "" ? data : null;
  165. }
  166. }
  167. public void AddCensor(string source, string reason)
  168. {
  169. lock (sqlite_conn)
  170. {
  171. source = source.Replace("'", "''");
  172. reason = reason.Replace("'", "''");
  173. SqliteCommand cmd = new SqliteCommand(String.Format(@"
  174. INSERT
  175. INTO censor (muc, censor_data, reason)
  176. VALUES ('*', '{0}', '{1}');
  177. ",
  178. source,
  179. reason),
  180. sqlite_conn);
  181. cmd.ExecuteNonQuery();
  182. }
  183. }
  184. // public bool DelRoomCensor(Jid Room, int
  185. }
  186. }