後編 maxnoteスキャナー(全体メモをtxtに保存・文字数をカウント)


さて、前回話させていただいたmaxnote

最後の評価ポイントですが、

肝となるのは、インテントやテキストidが

どれだけ参照できるかです。


要するに、アプリの中のどれだけ

トリガーにしたり検知できたりする

情報があるかという話です。


本アプリにはメモ表示時のテキストidと

ウィジェットを開く際に検出されるlogcat

どちらも偶然備わっていたので

上手い具合にタスクを組む事ができました。


(7.0.2までしか動かないと勘違いしてましたが

最新版の7.1.3でも普通に動作の確認ができたので

問題なく動いてくれると思います)


さて、ということでタスク公開。

https://taskernet.com/shares/?user=AS35m8lAutcM2pg1C5CWy9o%2BqnbpUk9wP4lEsfFlAhEt2tmVqmQpId2zWmtOGl%2FgzXdzw%2FqYJRUE3GRH&id=Project%3AMaxnote


apkにもしてありますのでご活用ください。

https://www.dropbox.com/scl/fi/0m435hgk51z3ezl3gz65s


────────以下タスク─────────

Profiles

プロファイル: 無名

イベント: アプリが変更された [ 出力変数:* パッケージ:com.maxciv.maxnote ]




開始 タスク: 自動セーブ

設定: 既存タスクを破棄する


A1: 変数の消去 / Variable Clear [

名前: %Count ]


A2: 待機 / Wait [

ミリ秒: 80

秒: 0

分: 0

時間: 0

日: 0 ]


<restart>

A3: Get Screen Info (Assistant) [ ]


A4: 変数を設定 / Variable Set [

名前: %Text

これに: %ai_texts

構造を出力 (JSONなど): オン ]


A5: 変数を分割 / Variable Split [

名前: %Text

区切り文字: , ]


A6: 変数に足す / Variable Add [

名前: %Count

値: 1

巻き戻る: 0 ]


A7: 転移 / Goto [

種類: アクション番号

電話番号: 13

ラベル: restart ]

If 条件開始 [ %Count > 10 ]


A8: If 条件開始 [ %Text1 !~R \Q"text":"…"\E & %Text2 !~R \Q"text":"…"\E & %Text3 !~R \Q"text":"…"\E & %Text5 !~R \Q"text":"…"\E & %Text6 !~R \Q"text":"…"\E & %Text1 !~R \Q"text":"アイテムを追加"\E & %Text2 !~R \Q"text":"アイテムを追加"\E & %Text1 !~R \%ai_texts ]


A9: 転移 / Goto [

種類: アクション番号

電話番号: 13

ラベル: restart ]


A10: Else


A11: 転移 / Goto [

種類: アクションラベル

ラベル: restart ]


A12: End If 条件終了


A13: 変数内を検索や置換 / Variable Search Replace [

変数: %Text

検索 / Search: \{

一致を置換する: オン ]


A14: 変数内を検索や置換 / Variable Search Replace [

変数: %Text

検索 / Search: \}

一致を置換する: オン ]


A15: 変数内を検索や置換 / Variable Search Replace [

変数: %Text

検索 / Search: \[

一致を置換する: オン ]


A16: 変数内を検索や置換 / Variable Search Replace [

変数: %Text

検索 / Search: \]

一致を置換する: オン ]


A17: 変数を設定 / Variable Set [

名前: %Kaigyou

これに:


構造を出力 (JSONなど): オン ]


A18: 変数内を検索や置換 / Variable Search Replace [

変数: %Text

検索 / Search: \Q\n\E

一致を置換する: オン

置換先: %Kaigyou ]


A19: 変数を設定 / Variable Set [

名前: %Saved

これに: %TIME

ーーーーーーー

%Text

構造を出力 (JSONなど): オン ]


A20: 変数を分割 / Variable Split [

名前: %TIME

区切り文字: . ]


A21: 変数の調査 / Test Variable [

種類: 長さ

データ: %Text

結果の保存先: %Mojisuu ]


A22: If 条件開始 [ %Text1 !~R \Q"text":"…"\E & %Text2 !~R \Q"text":"…"\E & %Text3 !~R \Q"text":"…"\E & %Text5 !~R \Q"text":"…"\E & %Text6 !~R \Q"text":"…"\E & %Text1 !~R \Q"text":"アイテムを追加"\E & %Text2 !~R \Q"text":"アイテムを追加"\E & %Text1 !~R \%ai_texts & %Mojisuu > 100 ]


A23: フラッシュ表示 / Flash [

文字: 保存文字数…%Mojisuu

すぐに次のタスクに進む: オン

Dismiss On Click: オン ]


A24: 変数を設定 / Variable Set [

名前: %Min0

これに: %Saved

構造を出力 (JSONなど): オン ]

If 条件開始 [ %TIME2 < 11 ]


A25: 変数を設定 / Variable Set [

名前: %Min10

これに: %Saved

構造を出力 (JSONなど): オン ]

If 条件開始 [ %TIME2 > 10 & %TIME2 < 21 ]


A26: 変数を設定 / Variable Set [

名前: %Min20

これに: %Saved

構造を出力 (JSONなど): オン ]

If 条件開始 [ %TIME2 > 20 & %TIME2 < 31 ]


A27: 変数を設定 / Variable Set [

名前: %Min30

これに: %Saved

構造を出力 (JSONなど): オン ]

If 条件開始 [ %TIME2 > 30 & %TIME2 < 41 ]


A28: 変数を設定 / Variable Set [

名前: %Min40

これに: %Saved

構造を出力 (JSONなど): オン ]

If 条件開始 [ %TIME2 > 40 & %TIME2 < 51 ]


A29: 変数を設定 / Variable Set [

名前: %Min50

これに: %Saved

構造を出力 (JSONなど): オン ]

If 条件開始 [ %TIME2 > 50 ]


A30: ファイル書き込み / Write File [

ファイル: Maxnote/%DATE

文字: %Min0

%Min10

%Min20

%Min30

%Min40

%Min50

改行を付加する: オン ]


A31: Else


A32: フラッシュ表示 / Flash [

文字: Error

すぐに次のタスクに進む: オン

Dismiss On Click: オン ]


A33: End If 条件終了



タスク: 設定画面


A1: シーンの表示 / Show Scene [

名前: 設定

表示方法: ダイアログ

横方向の位置: 100

縦方向の位置: 100

アニメーション: システム

終了ボタンを表示する: オン

キーガードの上に表示する: オン

Allow Outside Boundaries: オン

Blocking Overlay +: オン

Overlay +: オン ]



───────────────────



…といっても、ただ並べただけでは

ちんぷんかんぷんなので、順番に説明していきますね。


(あ、ちなみに表記がおかしくなってますが

「\」は全部「バックスラッシュ(半角)」です。)



プロファイルは簡単。maxnote起動をトリガーにして、

タスク「自動セーブ」を起動させてます。



で、中身の「自動セーブ」タスクですが

maxnoteウィジェットを開く際、一瞬だけ

全体のメモが表示されることを利用して

最初に100ミリ秒待ったあと

変数「%Count」の数値が10になるまで

画面のテキストIDを読み直してるわけですね。


で、このウィジェットを開いた際ですが

少々癖がありまして

前回アプリで開いた際にホームボタンで戻ったか、

もしくは戻るボタンで戻ったかで

ウィジェットの開き方が違います。


(前回「ホーム」ボタンで戻っていると、起動時に

アプリ画面→メモ編集の順に表示がありますが

前回「戻る」ボタンで戻っていると、起動時に

アプリ画面に向かわず直でメモ編集表示が作動します)


要するに、「戻る」ボタンで戻った際は

次の起動でメモのデータが取れません。


なので、その際に拾得するテキストid(1~6)の

値のどれかが「"text":"…"」になっていること、


またメモウィジェットから開いた際、

内部データが読み込めていない時には

text1もしくはtext2が「"text":"アイテムを追加"」

text1が「\%ai_texts」になることを利用して、

if条件文で動作を仕分けております。


(text1~6の値がどれも条件を満たさないとき、変数「%Saved」を転記。

そうでないとき(どれかが条件に合致している)ときは

再度読み込み、となっているはずです)


※テキストidに関しては

touchtaskの方で解説していますので

詳しい話は省略します※


で、条件を満たしている(ホームボタンで戻ってからの起動である)と

めでたく変数「%Saved」が

「%min10」「%min20」「%min30」「%min40」「%min50」に

転記されるわけですが


この際、「%Saved」を設定するときに使用した「%Time」を

「%Time2」に分割することによって

「%Time2」(現在時刻は何分なのか)によって

%min10~%min50までの仕分けをしているわけです。


で、最後にこれをまとめて

「ファイル書き込み」タスクで

ファイル名に日時指定して

ぶちこむだけです。




こうすることにより

一つのファイルで10分帯~50分帯の5つの変数を持つ

バックアップ,txtが完成するわけです。


一つのファイルを毎回上書き、なんてことしてると

うっかり間違えたデータを残しちゃった場合

目も当てられないですし、

十分ごとにファイルを作っていくとなると

それはそれでファイル数が多くなりすぎますからね。


※追伸 スキャン成功時に現在の文字数を表示するタスクを追加しました。

…何故か300文字ほど誤差が出ますが、ママエアロ。

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る