X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=gkeep_renderer.py;h=3846efb6664ee73c452b327e159cc51b2455e9d7;hb=138f8de1ece8b876693d7b8dfc6a139e76aa58b9;hp=79ea4c7f602111d076ca5e872250fbc4ec419b18;hpb=6195654b2405928398dd981233115504162d1020;p=kiosk.git diff --git a/gkeep_renderer.py b/gkeep_renderer.py index 79ea4c7..3846efb 100644 --- a/gkeep_renderer.py +++ b/gkeep_renderer.py @@ -1,19 +1,24 @@ #!/usr/bin/env python3 -import gkeepapi +import logging import os import re -from typing import List, Dict +from typing import Dict -import constants +import gkeepapi # type: ignore + +import kiosk_constants import file_writer import renderer -import secrets +import kiosk_secrets as secrets + +logger = logging.getLogger(__file__) -class gkeep_renderer(renderer.debuggable_abstaining_renderer): + +class gkeep_renderer(renderer.abstaining_renderer): def __init__(self, name_to_timeout_dict: Dict[str, int]) -> None: - super(gkeep_renderer, self).__init__(name_to_timeout_dict, True) + super().__init__(name_to_timeout_dict) self.colors_by_name = { "white": "#002222", "green": "#345920", @@ -29,20 +34,31 @@ class gkeep_renderer(renderer.debuggable_abstaining_renderer): "teal": "#16504B", } self.keep = gkeepapi.Keep() - success = self.keep.login( - secrets.google_keep_username, secrets.google_keep_password - ) - if success: - self.debug_print("Connected with gkeep.") - else: - self.debug_print("Error connecting with gkeep.") + self.token_file = "./.google_keep_token" + if os.path.exists(self.token_file): + logger.debug("Attempting to reuse persisted Google Keep login token...") + try: + with open(self.token_file, "r") as rf: + token = "".join(rf.readlines()).strip() + self.keep.resume(secrets.google_keep_username, token) + logger.debug("Successfully reused existing login token.") + except gkeepapi.exception.LoginException: + logger.warning("Invalid token, attempting to re-login.") + + if not self.keep.login( + secrets.google_keep_username, + secrets.google_keep_password, + secrets.google_keep_mac, + ): + raise Exception("Error connecting with Google Keep?!") + logger.debug("Successfully logged in with Google Keep") def debug_prefix(self) -> str: return "gkeep" - def periodic_render(self: str, key) -> bool: + def periodic_render(self, key: str) -> bool: strikethrough = re.compile("(\u2611[^\n]*)\n", re.UNICODE) - linkify = re.compile(r".*(https?:\/\/\S+).*") + # linkify = re.compile(r".*(https?:\/\/\S+).*") self.keep.sync() result_list = self.keep.find(labels=[self.keep.findLabel("kiosk")]) @@ -53,28 +69,24 @@ class gkeep_renderer(renderer.debuggable_abstaining_renderer): filename = f"{title}_2_3600.html" contents = note.text + "\n" - self.debug_print(f"Note title '{title}'") + logger.debug(f"Note title '{title}'") if contents != "" and not contents.isspace(): contents = strikethrough.sub("", contents) - self.debug_print(f"Note contents:\n{contents}") + logger.debug(f"Note contents:\n{contents}") contents = contents.replace( "\u2610 ", '
  •  ' ) - contents = linkify.sub(r'\1', contents) + # contents = linkify.sub(r'\1', contents) individual_lines = contents.split("\n") num_lines = len(individual_lines) - max_length = 0 contents = "" for x in individual_lines: - length = len(x) - if length > max_length: - max_length = length leading_spaces = len(x) - len(x.lstrip(" ")) - leading_spaces /= 2 + leading_spaces //= 2 leading_spaces = int(leading_spaces) x = x.lstrip(" ") - # self.debug_print(" * (%d) '%s'" % (leading_spaces, x)) + # logger.debug(" * (%d) '%s'" % (leading_spaces, x)) for y in range(0, leading_spaces): x = "") else: - self.debug_print( - f"{num_lines} lines (max={max_length} chars): one column" - ) + logger.debug(f"{num_lines} lines: one column mode") f.write(f"") f.write("") else: - self.debug_print(f"Note is empty, deleting {filename}.") - _ = os.path.join(constants.pages_dir, filename) + logger.debug(f"Note is empty, deleting {filename}.") + _ = os.path.join(kiosk_constants.pages_dir, filename) try: os.remove(_) except: pass + + if self.token_file: + token = self.keep.getMasterToken() + os.umask(0) + descriptor = os.open( + path=self.token_file, + flags=(os.O_WRONLY | os.O_CREAT | os.O_TRUNC), + mode=0o600, + ) + with open(descriptor, "w") as wf: + print(token, file=wf) + logger.debug("Saved Google Keep token successfully.") return True # Test -#x = gkeep_renderer({"Test", 1234}) -#x.periodic_render("Test") +# logger.setLevel(logging.DEBUG) +# ch = logging.StreamHandler() +# ch.setLevel(logging.DEBUG) +# formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') +# ch.setFormatter(formatter) +# logger.addHandler(ch) +# x = gkeep_renderer({"Test", 1234}) +# x.periodic_render("Test")