今回はこちらの2記事の続き。
thom.hateblo.jp
thom.hateblo.jp
Pythonリマインダーを実際に運用し始めてからすこぶる便利に使っているんだけど、そのうちやる案件だけじゃなくて、単純に時間になったら取り組まないといけない案件もコレで管理を始めた。
どんどん増えてくる。。
そのうちやる案件は多少無視しても大丈夫だけど時間が決まっている案件は正確に知らせて欲しい。
ということでアイコンをもう一つ用意した。
そんでファイル名の日付の後ろにエクスクラメーョンマークが入ってた場合は赤いアイコンが使われる仕組み。
こんな感じ。
例では2個と表示されているけどこれは期限到来ファイルの総数で、うち1個でも!付きのものがあるとアイコンが赤になる。
変更後のコードは次のとおり。
import os import glob from datetime import datetime as dt from plyer import notification base_path = os.path.dirname(os.path.abspath(__file__)) files = glob.glob(os.path.join(base_path,"tasks\*.txt")) cnt = 0 punctual_cnt = 0 err = 0 for file in files: str_task_time = os.path.basename(file)[0:16] try: task_time = dt.strptime(str_task_time, "%Y_%m_%d_%H_%M") if dt.now() > task_time: cnt += 1 if (os.path.basename(file)[16:17]) == "!": punctual_cnt += 1 except: err += 1 notify_title = "ERROR" notify_message = "不明なエラー" if not os.path.exists(os.path.join(base_path,"tasks")): err += 1 notify_message = "tasksフォルダが存在しません。\n"+base_path+"を確認してください。" else: if err > 0: notify_message = "タスクファイル名の日付書式を確認してください。\n"+base_path+r"\tasks" else: if cnt > 0: notify_message = str(cnt)+" 個の期限切れタスクを処理してください。\n"+base_path+r"\tasks" icon_path = os.path.join(base_path, "notify.ico") if punctual_cnt > 0: icon_path = os.path.join(base_path, "notify!.ico") if not os.path.exists(icon_path): err += 1 icon_path = None notify_message = "アイコンが見つかりません。\n"+base_path if err == 0: notify_title = "Reminder" if err+cnt > 0: notification.notify( title=notify_title, message=notify_message, app_name="Py Notify", app_icon=icon_path, timeout=10 )
ついでに1日リスケするスクリプトも書いたのでご紹介。later.pywという名前で保存し、そこにドラッグ&ドロップすると引数扱いになってファイル名の日付が1日後ろ倒しになる。
コードは次のとおり。
import os import tkinter as tk from tkinter import messagebox import datetime from datetime import datetime as dt import sys fp = sys.argv[1] root = tk.Tk() root.withdraw() str_task_time = os.path.basename(fp)[0:16] task_time = dt.strptime(str_task_time, "%Y_%m_%d_%H_%M") new_time = (task_time + datetime.timedelta(days=1)).strftime("%Y_%m_%d_%H_%M") messagebox.showinfo("Postpond", "[Old]\t" + os.path.basename(fp) + "\n\n" + "[New]\t" + new_time + os.path.basename(fp)[16:]) os.rename(fp, new_time + os.path.basename(fp)[16:])
以上