Code Monkey home page Code Monkey logo

personalnewssitesupporttool's Introduction

Hi there 👋

GitHub Stats

kurodenimu's GitHub stats Top Langs

personalnewssitesupporttool's People

Contributors

kurodenimu avatar

Watchers

 avatar

personalnewssitesupporttool's Issues

ファイル結合機能

カテゴリごとにテキストファイルを吐いているので公開前の結合機能

頒布方法を決める

・インストーラー?アーカイブ?
 ・どっちの形式でもそれを作る方法は?
・ダウンロードページはどこにする?
(Githubのリリースタブを直接見て、は不親切だと思う)

一般向けヘルプ作成

  • アプリ概要
  • タスクトレイアイコンの説明
  • 設定画面の説明
  • 入力画面の説明
  • 設定例

開発用ドキュメント整備

  • ルール的なもの→Wikiに記載する
  • 各クラスの注意事項など→ドキュメンテーションコメントを書く
    特に共通クラス的なものはメソッド等の説明を詳細にする

テストコード追加する

リファクタリング前にテストコードを追加する

  • App.xaml.cs
  • WindowClosingAction.cs
  • ClipboardWrapper.cs
  • CommonUtil.cs
  • ConfigManager.cs
  • ExceptionHandling.cs
  • LogService.cs
  • PathManager.cs 他のコードテストで確認できたので割愛
  • Category.cs
  • ClipBoardWatcher.cs
  • MainWindowModel.cs
  • OutTextPreviewViewModel.cs
  • SettingsWindowViewModel.cs
  • Via.cs
  • ViewModelBase.cs
  • MainWindow.xaml.cs
  • OutTextPreview.xaml.cs
  • SettingsWindow.xaml.cs

リファクタリング

動くものを作るのを優先したのできれいにする

*ビューとロジックの分離
*変数、コメント等の整備
etc

カテゴリなしまたは1個の際の挙動

カテゴリが1件も存在しない場合、または1件しか存在しない場合における挙動を修正。
現在:未選択が初期値、選択しないと完了時にチェックエラー
変更後:1件も存在しない場合、カテゴリの選択チェックを迂回、1件しか存在しない場合はそれを初期値とする。

監視文言の削除オプション追加

クリップボードの内容を監視してウィンドウを立ち上げるが、その際に監視文言を削除するかどうかのオプションを追加する。
クリップボードに格納する内容が毎回ニュース用のリンクとは限らない際に、リンク生成ツール側で先頭に別の文言を付与してそれを監視して削除するケースを想定。
(ニュース対象URLの場合とニュースコメントに記載するURLの場合とでリンクの書式が同じ場合など。)

ファイル編集機能

書き込まれたテキストファイルを定義から解析して並び替えとかできる機能が欲しい。

難易度が高いかつ想定される使用頻度が高くないので優先度は低め……。

設定変更時のチェック・制限について別の方式を検討する

Setter及び保存時の処理に直接チェック処理を入れているが他にいい方法がないか検討する。

現状の問題点

  • いちいちメッセージボックスが開くのは鬱陶しい。
  • 現状、チェック処理の記載箇所が2か所に分かれている。
  • 複数の問題があっても一つづつしかエラー表示されない。

参考

関連Issue

  • 設定変更時のチェック・制限 #39

設定変更時のチェック・制限

設定変更ダイアログで入力する内容についてチェックを追加する。
カテゴリと情報元はキーと値セットで登録されているか。
ファイル名に使用する項目はファイル名に使える文字かをチェック(別の方法で制限できる場合はそれでもよい)

DLLをサブフォルダに移す

実行ファイルが見つけにくいのでDLLフォルダをサブフォルダに移す。

  • DLLの検索場所としてサブフォルダを追加
  • ビルドアクションでDLLをサブフォルダに入れる処理を追加

ファイル内容の一括退避

間が空いてしまった場合に既存の内容を一括で特定のファイルに退避したい。

IT、その他、古い記事のカテゴリがあったとして、IT、その他に入っていたものを一括で古い記事に移す機能。
設定周りのデータ構造から考え直した方がいいかも。

メッセージボックスを出す際のウィンドウ制御

MainWindowがActiveじゃない場合に、メッセージボックスが表示されない時がある。
そのために、ViewModelBaseのメッセージボックス出力処理内にてMainWindowをActiveにしているが、一律この処理を行うと別のウィンドウに紐づくViewModelからメッセージボックスが表示できない。
Activeなウィンドウがない場合のみにActiveにするように変更する。
(この対応が正しいかどうかはあまり自信がない。他のウィンドウが表示状態でMainWindow側のViewModelからメッセージボックスを表示しようとしたら上と同様に表示できないのではと考えたが、正常に表示出来た。)

ドキュメント整備の方針

まずはどう整備するかを決める。

  • プロジェクトページのREADME.mdに何を書くか
  • Githubページに何を書くか
  • TOOL等は使うのか
    • 今のところGitbookを使うつもり(ファイルが大きくなるとOverviewが欲しくなる)
  • Wikiは使うのか

ファイル削除機能

ファイルが用済みになったときに削除する機能。
結合した時に消してもいいんだけど、更新前に消しちゃうのが怖いので別機能とする予定。

長時間起動時に異常終了した

原因不明。ログの情報が足りず何が起きたか不明確のため、例外発生時の出力内容を見直す。

2021-07-21 18:13:25.6639|ERROR|PersonalNewsSiteSupportTool.Models.LogService|Exception occurred:App_FirstChanceException. ErrorMessage:オブジェクト参照がオブジェクト インスタンスに設定されていません。

NLog設定見直し

最低限の設定しかしていないため、ローテート周りを中心に設定を見直す。

各種設定の定義ファイル化

ファイルパス等の設定を外部ファイルから読み込む形に変える。

  • クリップボード監視の文字列
  • ファイルパス
  • カテゴリ

クリップボード操作時に異常終了

2021-08-04 07:18:57.1375|ERROR|PersonalNewsSiteSupportTool.Models.LogService|Exception occurred:. ErrorMessage:OpenClipboard に失敗しました (HRESULT からの例外:0x800401D0 (CLIPBRD_E_CANT_OPEN)), StackTrace:
2021-08-04 07:18:57.1752|ERROR|PersonalNewsSiteSupportTool.Models.LogService|UnhandledException occurred:GetData. ErrorMessage:OpenClipboard に失敗しました (HRESULT からの例外:0x800401D0 (CLIPBRD_E_CANT_OPEN)), StackTrace: 場所 System.Runtime.InteropServices.ComTypes.IDataObject.GetData(FORMATETC& format, STGMEDIUM& medium)
場所 System.Windows.DataObject.OleConverter.GetDataInner(FORMATETC& formatetc, STGMEDIUM& medium)
場所 System.Windows.DataObject.OleConverter.GetDataFromOleHGLOBAL(String format, DVASPECT aspect, Int32 index)
場所 System.Windows.DataObject.OleConverter.GetDataFromBoundOleDataObject(String format, DVASPECT aspect, Int32 index)
場所 System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert, DVASPECT aspect, Int32 index)
場所 System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert)
場所 System.Windows.DataObject.GetData(String format, Boolean autoConvert)
場所 System.Windows.Clipboard.GetDataInternal(String format)
場所 System.Windows.Clipboard.GetText(TextDataFormat format)
場所 PersonalNewsSiteSupportTool.ViewModels.MainWindowModel.ClipboardWatcher_DrawClipboard(Object sender, EventArgs e) 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\MainWindowModel.cs:行 160
場所 PersonalNewsSiteSupportTool.ViewModels.ClipboardWatcher.RaiseUpdateClipboard() 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\ClipBoardWatcher.cs:行 21
場所 PersonalNewsSiteSupportTool.ViewModels.ClipboardWatcher.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\ClipBoardWatcher.cs:行 36
場所 System.Windows.Interop.HwndSource.PublicHooksFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
場所 MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
場所 MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
場所 System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
場所 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
2021-08-04 07:18:57.1752|ERROR|PersonalNewsSiteSupportTool.Models.LogService|Exception occurred:GetData. ErrorMessage:OpenClipboard に失敗しました (HRESULT からの例外:0x800401D0 (CLIPBRD_E_CANT_OPEN)), StackTrace: 場所 System.Runtime.InteropServices.ComTypes.IDataObject.GetData(FORMATETC& format, STGMEDIUM& medium)
場所 System.Windows.DataObject.OleConverter.GetDataInner(FORMATETC& formatetc, STGMEDIUM& medium)
場所 System.Windows.DataObject.OleConverter.GetDataFromOleHGLOBAL(String format, DVASPECT aspect, Int32 index)
場所 System.Windows.DataObject.OleConverter.GetDataFromBoundOleDataObject(String format, DVASPECT aspect, Int32 index)
場所 System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert, DVASPECT aspect, Int32 index)
場所 System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert)
場所 System.Windows.DataObject.GetData(String format, Boolean autoConvert)
場所 System.Windows.Clipboard.GetDataInternal(String format)
場所 System.Windows.Clipboard.GetText(TextDataFormat format)
場所 PersonalNewsSiteSupportTool.ViewModels.MainWindowModel.ClipboardWatcher_DrawClipboard(Object sender, EventArgs e) 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\MainWindowModel.cs:行 160
場所 PersonalNewsSiteSupportTool.ViewModels.ClipboardWatcher.RaiseUpdateClipboard() 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\ClipBoardWatcher.cs:行 21
場所 PersonalNewsSiteSupportTool.ViewModels.ClipboardWatcher.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\ClipBoardWatcher.cs:行 36
場所 System.Windows.Interop.HwndSource.PublicHooksFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
場所 MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
場所 MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
場所 System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
場所 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
2021-08-04 07:18:57.1821|ERROR|PersonalNewsSiteSupportTool.Models.LogService|Unhandled Exception occurred:GetData. ErrorMessage:OpenClipboard に失敗しました (HRESULT からの例外:0x800401D0 (CLIPBRD_E_CANT_OPEN)), StackTrace: 場所 System.Runtime.InteropServices.ComTypes.IDataObject.GetData(FORMATETC& format, STGMEDIUM& medium)
場所 System.Windows.DataObject.OleConverter.GetDataInner(FORMATETC& formatetc, STGMEDIUM& medium)
場所 System.Windows.DataObject.OleConverter.GetDataFromOleHGLOBAL(String format, DVASPECT aspect, Int32 index)
場所 System.Windows.DataObject.OleConverter.GetDataFromBoundOleDataObject(String format, DVASPECT aspect, Int32 index)
場所 System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert, DVASPECT aspect, Int32 index)
場所 System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert)
場所 System.Windows.DataObject.GetData(String format, Boolean autoConvert)
場所 System.Windows.Clipboard.GetDataInternal(String format)
場所 System.Windows.Clipboard.GetText(TextDataFormat format)
場所 PersonalNewsSiteSupportTool.ViewModels.MainWindowModel.ClipboardWatcher_DrawClipboard(Object sender, EventArgs e) 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\MainWindowModel.cs:行 160
場所 PersonalNewsSiteSupportTool.ViewModels.ClipboardWatcher.RaiseUpdateClipboard() 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\ClipBoardWatcher.cs:行 21
場所 PersonalNewsSiteSupportTool.ViewModels.ClipboardWatcher.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\ClipBoardWatcher.cs:行 36
場所 System.Windows.Interop.HwndSource.PublicHooksFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
場所 MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
場所 MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
場所 System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
場所 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
場所 System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
場所 MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
場所 MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
場所 System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
場所 System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
場所 System.Windows.Application.RunDispatcher(Object ignore)
場所 System.Windows.Application.RunInternal(Window window)
場所 System.Windows.Application.Run(Window window)
場所 PersonalNewsSiteSupportTool.App.Main()

設定ファイルとログパスの場所変更

Program Files配下にファイルを読書きするためには管理者権限で実行する必要がある。
ツールを管理者権限で実行するのは面倒なので設定ファイルとログパスをユーザ用のディレクトリで読書きするように変更する。

README.mdの整備

  • 使い方のイメージをつける
  • ヘルプへのリンクをつける
  • ライセンスを記載する

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.