kurodenimu / personalnewssitesupporttool Goto Github PK
View Code? Open in Web Editor NEWPersonalNewsSiteSupportTool
License: Apache License 2.0
PersonalNewsSiteSupportTool
License: Apache License 2.0
ファイル結合機能を追加したため操作ミスの可能性がある。
確認機能が必要。
カテゴリごとにテキストファイルを吐いているので公開前の結合機能
・インストーラー?アーカイブ?
・どっちの形式でもそれを作る方法は?
・ダウンロードページはどこにする?
(Githubのリリースタブを直接見て、は不親切だと思う)
例外発生時の出力内容が不足しており何が起きたか調査不能のため出力内容を見直す。
起動しなおして改めてやってみたが再現しない
いつ起きるかの調査が必要
間違えてウィンドウを閉じたときように現在のクリップボードの内容でウィンドウを開く機能
現在はすべての例外をcatchして一律のメッセージを出力している。
リファクタリング前にテストコードを追加する
動くものを作るのを優先したのできれいにする
*ビューとロジックの分離
*変数、コメント等の整備
etc
カテゴリが1件も存在しない場合、または1件しか存在しない場合における挙動を修正。
現在:未選択が初期値、選択しないと完了時にチェックエラー
変更後:1件も存在しない場合、カテゴリの選択チェックを迂回、1件しか存在しない場合はそれを初期値とする。
クリップボードの内容を監視してウィンドウを立ち上げるが、その際に監視文言を削除するかどうかのオプションを追加する。
クリップボードに格納する内容が毎回ニュース用のリンクとは限らない際に、リンク生成ツール側で先頭に別の文言を付与してそれを監視して削除するケースを想定。
(ニュース対象URLの場合とニュースコメントに記載するURLの場合とでリンクの書式が同じ場合など。)
アプリを使用するにあたり、設定を行わないと動作できないので初回起動時(設定ファイルがなければ)設定を行うように促す。
書き込まれたテキストファイルを定義から解析して並び替えとかできる機能が欲しい。
難易度が高いかつ想定される使用頻度が高くないので優先度は低め……。
現在、すべての例外をCatchして握りつぶしている。発生例外毎に処理を変えるべき。
masterへの直接プッシュを禁止する。
V1.0リリース後に実施予定。
Setter及び保存時の処理に直接チェック処理を入れているが他にいい方法がないか検討する。
現状の問題点
参考
関連Issue
実現方法から考える
現状、URLが上書きされるのでよくない。
ビルド後のイベントで作成しているファイルはクリーンで削除できないのでビルド前のイベントで削除する。
設定変更ダイアログで入力する内容についてチェックを追加する。
カテゴリと情報元はキーと値セットで登録されているか。
ファイル名に使用する項目はファイル名に使える文字かをチェック(別の方法で制限できる場合はそれでもよい)
参考
設定ファイルの内容を変更できるダイアログを作成する。
実行ファイルが見つけにくいのでDLLフォルダをサブフォルダに移す。
タスクトレイアイコンから設定を選択を2回行うと設定ウィンドウが2つ開く。
今は仮でプロフィールと同じものを使用している。
専用のものを作って差し替える。
アプリ内で発生した例外をまとめて処理する。
WPF:例外をまとめてトラップするには?[C#/VB]:.NET TIPS - @IT https://www.atmarkit.co.jp/ait/articles/1512/16/news026.html
間が空いてしまった場合に既存の内容を一括で特定のファイルに退避したい。
IT、その他、古い記事のカテゴリがあったとして、IT、その他に入っていたものを一括で古い記事に移す機能。
設定周りのデータ構造から考え直した方がいいかも。
MainWindowがActiveじゃない場合に、メッセージボックスが表示されない時がある。
そのために、ViewModelBaseのメッセージボックス出力処理内にてMainWindowをActiveにしているが、一律この処理を行うと別のウィンドウに紐づくViewModelからメッセージボックスが表示できない。
Activeなウィンドウがない場合のみにActiveにするように変更する。
(この対応が正しいかどうかはあまり自信がない。他のウィンドウが表示状態でMainWindow側のViewModelからメッセージボックスを表示しようとしたら上と同様に表示できないのではと考えたが、正常に表示出来た。)
ファイル結合時に前回のファイルが残っていたら警告する。
上書きまたはキャンセルを選択。
まずはどう整備するかを決める。
ファイルが用済みになったときに削除する機能。
結合した時に消してもいいんだけど、更新前に消しちゃうのが怖いので別機能とする予定。
各ライブラリ・フレームワークのライセンスファイルを追加する
原因不明。ログの情報が足りず何が起きたか不明確のため、例外発生時の出力内容を見直す。
2021-07-21 18:13:25.6639|ERROR|PersonalNewsSiteSupportTool.Models.LogService|Exception occurred:App_FirstChanceException. ErrorMessage:オブジェクト参照がオブジェクト インスタンスに設定されていません。
最低限の設定しかしていないため、ローテート周りを中心に設定を見直す。
設定ファイルの形式が変わった際に変換等が出来るようにバージョン番号を入れておく。
ファイルパス等の設定を外部ファイルから読み込む形に変える。
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配下にファイルを読書きするためには管理者権限で実行する必要がある。
ツールを管理者権限で実行するのは面倒なので設定ファイルとログパスをユーザ用のディレクトリで読書きするように変更する。
現状、一番下の行で↓キーを押下してもカーソルが末尾にいかない。
テキストボックスの挙動に関して全体的に再確認する。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.