public void AddFilter(ChanArchiver.Filters.IFilter filter) { if (filter != null) { my_filters.Add(filter); if (FiltersUpdated != null) { FiltersUpdated(); } } }
private ChanArchiver.Filters.IFilter get_filter(string type, string ext) { Type t = Type.GetType(type); if (t != null) { System.Reflection.ConstructorInfo ci = t.GetConstructor(new Type[] { typeof(string) }); ChanArchiver.Filters.IFilter fil = (ChanArchiver.Filters.IFilter)ci.Invoke(new object[] { ext }); return(fil); } else { return(null); } }
protected string GetThreadFiltersTableHtml() { StringBuilder sb = new StringBuilder(); for (int i = 0; i < Program.active_dumpers.Count; i++) { try { BoardWatcher bw = Program.active_dumpers.ElementAt(i).Value; ChanArchiver.Filters.IFilter[] Filters = GetFilterType() == ChanArchiver.Filters.FilterType.WhiteList ? bw.WhitelistFilters : bw.BlacklistFilters; for (int index = 0; index < Filters.Length; index++) { ChanArchiver.Filters.IFilter f = Filters[index]; sb.Append("<tr>"); sb.AppendFormat("<td>/{0}/</td>", bw.Board); sb.AppendFormat("<td>{0}</td>", f.GetType().FullName.Split('.').Last()); sb.AppendFormat("<td><code>{0}</code></td>", HttpUtility.HtmlEncode(f.FilterText)); { StringBuilder notes_form = new StringBuilder(); notes_form.Append("<div class=\"input-group\">"); notes_form.Append("<form action='/filters/'>"); notes_form.AppendFormat("<input type='hidden' name='{0}' value='{1}' />", "mode", "editnotes"); notes_form.AppendFormat("<input type='hidden' name='{0}' value='{1}' />", "b", bw.Board); notes_form.AppendFormat("<input type='hidden' name='{0}' value='{1}' />", "filterindex", index); notes_form.Append("<textarea class='form-control' cols='6' rows='3' name='notestext'>"); notes_form.Append(HttpUtility.HtmlEncode(f.Notes)); notes_form.Append("</textarea>"); //notes_form.Append("<br/>"); notes_form.Append("<span class=\"input-group-btn\"><button type='submit' class='btn btn-default'>Save</button></span>"); notes_form.Append("</form></div>"); sb.AppendFormat("<td>{0}</td>", notes_form.ToString()); } //sb.AppendFormat("<td><a class='label label-warning' href='/filters/?mode=edit&b={0}&i={1}'>Edit</a></td>", bw.Board, index); sb.AppendFormat("<td><a class=\"btn btn-default\" title='Delete' href='/filters/?mode=delete&b={0}&i={1}'><i class=\"fa fa-trash-o\"></i></a></td>", bw.Board, index); sb.Append("</tr>"); } } catch (Exception) { if (i >= Program.active_dumpers.Count) { break; } } } return(sb.ToString()); }
public sealed override bool Process(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session) { if (request.UriPath == GetPageUrl()) { StringBuilder sb = new StringBuilder(HtmlTemplates.ThreadFiltersPageTemplate); IncludeCommonHtml(sb); sb.Replace("{{inline-title}}", GetPageTitle()); sb.Replace("{{boards-list-html}}", ThreadServerModule.get_board_list(UrlParameters.Board)); sb.Replace("{{available-filters-list}}", get_available_filters()); sb.Replace("{{filters-list}}", GetThreadFiltersTableHtml()); WriteFinalHtmlResponse(response, sb.ToString()); return(true); } if (request.UriPath.StartsWith(GetPageUrl() + "/")) { string mode = request.QueryString["mode"].Value; string board = request.QueryString[UrlParameters.Board].Value; BoardWatcher bw; switch (mode) { case "add": { if (Program.active_dumpers.ContainsKey(board)) { bw = Program.active_dumpers[board]; } else { bw = new BoardWatcher(board); Program.active_dumpers.Add(board, bw); } string filter_type = request.QueryString["type"].Value; string filter_exp = request.QueryString["exp"].Value; if (string.IsNullOrEmpty(filter_exp) || string.IsNullOrEmpty(filter_type)) { return(false); } else { ChanArchiver.Filters.IFilter f = get_filter(filter_type, filter_exp); if (f != null) { bw.AddFilter(f); bw.SaveFilters(); response.Redirect(GetPageUrl()); return(true); } else { return(false); } } } case "edit": return(false); case "delete": { if (Program.active_dumpers.ContainsKey(board)) { string index = request.QueryString["i"].Value; bw = Program.active_dumpers[board]; int inde = -1; Int32.TryParse(index, out inde); if (inde >= 0 && inde <= bw.WhitelistFilters.Length - 1) { bw.RemoveFilter(inde); bw.SaveFilters(); response.Redirect(GetPageUrl()); return(true); } else { return(false); } } else { return(false); } } case "editnotes": { string fID = request.QueryString["filterindex"].Value; string notes_text = request.QueryString["notestext"].Value; if (string.IsNullOrEmpty(fID) || string.IsNullOrEmpty(board)) { response.Redirect(GetPageUrl()); return(true); } else { if (Program.active_dumpers.ContainsKey(board)) { bw = Program.active_dumpers[board]; int index = -1; Int32.TryParse(fID, out index); if (index >= 0 && index < bw.WhitelistFilters.Length) { Filters.IFilter fil = bw.WhitelistFilters[index]; fil.Notes = notes_text; bw.SaveFilters(); response.Redirect(GetPageUrl()); return(true); } } } } return(false); default: return(false); } } return(false); }
public void LoadFilters() { if (File.Exists(this.LegacyFilterSaveFilePath)) { // Load legacy v1.12 filter file, and then delete the file JsonArray s = JsonConvert.Import <JsonArray>(File.ReadAllText(this.LegacyFilterSaveFilePath)); File.Delete(this.LegacyFilterSaveFilePath); foreach (object filter in s) { JsonArray FilterData = (JsonArray)filter; Type t = Type.GetType(Convert.ToString(FilterData[0])); if (t != null) { System.Reflection.ConstructorInfo ci = t.GetConstructor(new Type[] { typeof(string) }); ChanArchiver.Filters.IFilter fil = (ChanArchiver.Filters.IFilter) ci.Invoke(new object[] { Convert.ToString(FilterData[1]) }); if (FilterData.Count > 2) { fil.Notes = Convert.ToString(FilterData[2]); } // Prior to v1.13, all filters were whitelist filters fil.Type = Filters.FilterType.WhiteList; this.my_filters.Add(fil); } } } if (File.Exists(this.FilterDictionarySaveFilePath)) { string jsonString = File.ReadAllText(this.FilterDictionarySaveFilePath); JsonArray jsonArray = JsonConvert.Import <JsonArray>(jsonString); foreach (object jsonObject in jsonArray) { JsonObject filterJsonObject = jsonObject as JsonObject; if (filterJsonObject == null) { continue; } string className = Convert.ToString(filterJsonObject["class_name"]); string filter_data = Convert.ToString(filterJsonObject["data"]); string filter_notes = Convert.ToString(filterJsonObject["notes"]); string filter_type = Convert.ToString(filterJsonObject["type"]); Type t = Type.GetType(className); if (t == null) { continue; } System.Reflection.ConstructorInfo ci = t.GetConstructor(new Type[] { typeof(string) }); ChanArchiver.Filters.IFilter fil = (ChanArchiver.Filters.IFilter) ci.Invoke(new object[] { filter_data }); fil.Notes = filter_notes; if (filter_type == Filters.FilterType.BlackList.ToString()) { fil.Type = Filters.FilterType.BlackList; } else { // default filter type is whitelist fil.Type = Filters.FilterType.WhiteList; } this.my_filters.Add(fil); } } }