예제 #1
0
 private void AddMenu(JaneScript js, string name, Action<MenuItem, PopupTargetInfo> handler)
 {
     MenuItem menu1 = js.InsertMenu(MenuNames.MainWnd_ThreadPopupMenu, "", 1000);
     menu1.Caption = name;
     menu1.OnClick = handler;
     base.PersistMenuItem(menu1);
 }
예제 #2
0
 private List<IdMatchInfo> GetIdMatches(JaneScript js, Board board, string id)
 {
     List<IdMatchInfo> matches = new List<IdMatchInfo>();
     using (DisposableList<ThreadItem> threads = Util.CreateThreadItemList(board)) {
         foreach (ThreadItem t in threads) {
             if (!t.DatExist) continue;
             int lines = t.Lines;
             // HACK 全取得スレッドをなめなくてもいいようにすべき
             // sinse や LastGot で事前に日付チェックを行ったり
             // バイナリサーチで日付の一致する範囲を事前に調べたり
             for (int i = 1; i <= lines; i++) {
                 using (ResItem res = t.GetRes(i)) {
                     if (res.Id == id) {
                         matches.Add(new IdMatchInfo() {
                             datName = t.DatName,
                             resNumber = i,
                             datetime = res.DateValue,
                         });
                     }
                 }
             }
             js.ProcessMessages();
         }
     }
     return matches;
 }
예제 #3
0
 private void DoFindId(JaneScript js, ThreadItem thread, string id)
 {
     using (Board board = thread.Board) {
         board.Load();
         List<IdMatchInfo> matches = this.GetIdMatches(js, board, id);
         this.OutputMatches(js, board, id, matches);
     }
 }
 private void AddMenus(JaneScript js, bool? ascending)
 {
     MenuItem menu1 = js.InsertMenu(MenuNames.MainWnd_MainMenu, "MenuThre",
         js.MenuIndex(MenuNames.MainWnd_MainMenu, "N28"));
     MenuItem menu2 = js.InsertMenu(MenuNames.MainWnd_ThreadPopupMenu, "",
         js.MenuIndex(MenuNames.MainWnd_ThreadPopupMenu, "N9"));
     this.RegisterMenu(js, menu1, ascending);
     this.RegisterMenu(js, menu2, ascending);
 }
 private void RegisterMenu(JaneScript js, MenuItem menu, bool? ascending)
 {
     if (!ascending.HasValue) {
         menu.Caption = "-";
     } else {
         menu.Caption = Util.GetPrefixedMenuCaption(string.Format("開いているスレを{0}ソート", ascending.Value ? "昇順" : "降順"));
         base.PersistMenuItems(FunctionMenuUtil.AppendSubmenuItems(menu, new SortHandlerClass(js, ascending.Value).MenuHandler));
     }
     base.PersistMenuItem(menu);
 }
예제 #6
0
 private void DoTop10(JaneScript js, ThreadItem thread)
 {
     // レス数で降順ソートしてトップ10
     var top = (
         from rr in this.GetResRefInfos(thread)
         orderby rr.RefCount descending
         select rr)
         .Take(10).ToArray();
     string shortTitle = "レス数トップ10";
     string longTitle = "レス数トップ10: " + thread.Title;
     Util.WriteToNewView(js, shortTitle, longTitle, longTitle, false, false, (DatOut datout) => {
         for (int i = 0; i < top.Length; i++) {
             var rr = top[i];
             datout.WriteText(string.Format("{0}位 {1}レス", i + 1, rr.RefCount));
             datout.WriteBR();
             datout.WriteThread(thread, rr.ResNumber, rr.ResNumber, AboneLevel.Futsuu);
         }
     });
 }
예제 #7
0
 private void FindAndWriteDrafts(JaneScript js, DatOut datout, bool readDraftContents)
 {
     datout.WriteText("草稿を検索しています。");
     datout.WriteBR();
     datout.WriteHTML("<hr>");
     using (CategoryList cl = js.CategoryList())
     using (DisposableList<Category> categories = new DisposableList<Category>(cl)) {
         foreach (Category category in categories) {
             DirectoryInfo diCate = new DirectoryInfo(category.LogDir);
             if (!diCate.Exists) continue;
             using (DisposableList<Board> boards = new DisposableList<Board>(category)) {
                 foreach(Board board in boards){
                     board.Load();
                     // カテゴリディレクトリの草稿を探す
                     FileInfo fi = new FileInfo(Path.Combine(category.LogDir, board.Name + "NewThread.mns"));
                     if (fi.Exists) this.OutDraft(datout, category, board, fi, readDraftContents);
                     // 板ディレクトリ内を探す
                     DirectoryInfo di = new DirectoryInfo(board.LogDir);
                     if (!di.Exists) continue;
                     foreach (FileInfo fi2 in di.GetFiles("*.mns")) {
                         if (fi2.Name == "NewThread.mns") {
                             this.OutDraft(datout, category, board, fi2, readDraftContents);
                         } else {
                             using (ThreadItem thread = board.FindThread(Path.GetFileNameWithoutExtension(fi2.Name))) {
                                 this.OutDraft(datout, category, board, thread, fi2, readDraftContents);
                             }
                         }
                     }
                     js.ProcessMessages();
                 }
             }
             js.ProcessMessages();
         }
     }
     datout.WriteBR();
     datout.WriteHTML("<hr>");
     datout.WriteText("検索が終了しました。");
 }
예제 #8
0
 private void DoGroupBy(JaneScript js, ThreadItem thread)
 {
     // レス数でグループ化して降順ソート
     var groups =
         from rr in this.GetResRefInfos(thread)
         group rr.ResNumber by rr.RefCount into g
         orderby g.Key descending
         select g;
     Uri threadUri = thread.URL;
     string shortTitle = "レス数でグループ化";
     string longTitle = "レス数でグループ化: " + thread.Title;
     Util.WriteToNewView(js, shortTitle,longTitle, longTitle, false, false, (DatOut datout) => {
         foreach (var g in groups) {
             datout.WriteHTML(string.Format("<dt>{0} ({1})</dt>", g.Key, g.Count()));
             StringBuilder sb = new StringBuilder("<dd>");
             foreach (var resNumber in g) {
                 sb.AppendFormat("<a href=\"{0}{1}\">{1}</a> ", threadUri, resNumber);
             }
             sb.AppendLine("<br></dd>");//ddを閉じる前にbrを入れるとインデントする
             datout.WriteHTML(sb.ToString());
             datout.Flush();
         }
     });
 }
예제 #9
0
 private void OutputMatches(JaneScript js, Board board, string id, List<IdMatchInfo> matches)
 {
     string shortTitle = "ID検索";
     string longTitle = string.Format("ID検索: ID:{0} {1}", id, board.Name);
     Util.WriteToNewView(js, shortTitle, longTitle, longTitle, false, false, (DatOut datout) => {
         var q =
             from m in matches
             orderby m.datetime
             select m;
         foreach (var m in q) {
             using (ThreadItem t = board.FindThread(m.datName)) {
                 datout.WriteHTML(string.Format("<a href=\"{0}\">{1}</a><br>", t.URL, HttpUtility.HtmlEncode(t.Title)));
                 datout.WriteThread(t, m.resNumber, m.resNumber, AboneLevel.Futsuu);
             }
         }
         datout.WriteHTML("<br><hr><br>");
         datout.WriteText("スレごとのレス数は以下のとおりです。");
         datout.WriteBR();
         var boardGroups =
             from m in matches
             group m by m.datName into boardg
             orderby boardg.Count() descending
             select boardg;
         foreach (var bg in boardGroups) {
             using (ThreadItem t = board.FindThread(bg.Key)) {
                 datout.WriteHTML(string.Format("{0}レス: <a href=\"{1}\">{2}</a><br>", bg.Count(), t.URL, HttpUtility.HtmlEncode(t.Title)));
             }
         }
     });
 }
예제 #10
0
 private void RegisterMenu(JaneScript js, MenuItem menu)
 {
     menu.Caption = Util.GetPrefixedMenuCaption("条件で閉じる");
     base.PersistMenuItem(menu);
     base.PersistMenuItems(FunctionMenuUtil.AppendSubmenuItems(menu, this.MenuHandler, true));
 }
예제 #11
0
 public SortHandlerClass(JaneScript js, bool ascending)
 {
     this.js = js;
     this.ascending = ascending;
 }
예제 #12
0
 public void OnInitialize(object comProxy)
 {
     WrapperManager.InitializeWrapper(comProxy);
     this.js = WrapperManager.GetJaneScript();
 }