From b1e247bfaf0fb0eaae6fb3408bcb8cb755da8c95 Mon Sep 17 00:00:00 2001 From: BryanSlavinBryter Date: Thu, 7 Nov 2024 16:20:21 -0500 Subject: [PATCH] Quick update for 2024. Will update again before the holiday starts with additional enhancements --- apps/hanukkah/hanukkah.gif | Bin 3889 -> 4056 bytes apps/hanukkah/hanukkah.star | 148 +++++++----------------------------- 2 files changed, 29 insertions(+), 119 deletions(-) diff --git a/apps/hanukkah/hanukkah.gif b/apps/hanukkah/hanukkah.gif index b06669d517973db05302b3a2548127f35122d117..c0ae52f5729216f691658073b0491b8368cf509b 100644 GIT binary patch delta 3850 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 AG5`Po diff --git a/apps/hanukkah/hanukkah.star b/apps/hanukkah/hanukkah.star index dd6f5287d..78b09a1ec 100644 --- a/apps/hanukkah/hanukkah.star +++ b/apps/hanukkah/hanukkah.star @@ -1,166 +1,76 @@ -""" -Applet: Hanukkah -Summary: A Tidbyt Hanukkah Menorah -Description: Displays a Hanukkah Menorah during the holiday with the correct number of candles. Also displays a countdown to Hanukkah before the holiday! -Author: Bryan Slavin -""" - load("encoding/base64.star", "base64") -load("encoding/json.star", "json") load("render.star", "render") -load("schema.star", "schema") -load("sunrise.star", "sunrise") load("time.star", "time") -# Defaults -DEFAULT_LOCATION = { - "lat": 40.758896, - "lng": -73.985130, - "locality": "New York, New York USA", - "timezone": "US/Eastern", -} - -DEFAULT_FONT = "CG-pixel-4x5-mono" - -ALT_FLAME_IMAGE = base64.decode(""" -iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAx0lEQVRoBe3RoQrCUBSA4XO36ZIKYrEMwxCjYDCbfQAfwCdQfIRFX8RqswzEsigGkQkigsFgUhiCu3OLewXvf+GEc9r/XREeAgggYLCAKtpfUTVSVvbY7GT8zXR3skgvppg466nftCvXoU5V0nHraR7uizyNAZDsLMHnYGsdi85u/dDzvIEpv190OsewNW/33iq+K9nuT6MkqbkmAZRag5k0SgcWBGS1tK18kEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBP5C4AeI8S0Wa9XInwAAAABJRU5ErkJggg== -""") - -FLAME_IMAGE = base64.decode(""" -iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAkklEQVRoBe3QIRKCQBSA4bcuK90xb/IAzhDInIUbEM1eSA5AZogGgxSHajAA88bg4kHe/9/g/0QIAQQQsC4w9/t+GcLNokPW1qeDD68y/ZxaBJBtlOv37lN6StqmcxdjLCxB7B7dsVk/wc3v3Km/VKqaWwLgFQEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABQwJ/E1ggSHCAkpcAAAAASUVORK5CYII= -""") - CANDLE_IMAGE = base64.decode(""" -iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAeklEQVRoBe3UsQ2AIBRFUULopHACNnAS53QrOxoqncDoIwGXeJfkh9/eE0IIHAQQQAABBBCwFrjuWjS7I0Ia0YfuTbO6IcQR/Ope3OJ77wTI2h93AMf+/wVYxvfo+Qme2putAuEIIIAAAggggAACCCCAAAIIIICAk8AHfoQKv0cwj+IAAAAASUVORK5CYII= +iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAwElEQVRoBe3TMQrCMBTG8ZemsYNO4pzJAwgOnT2LN3B09kJ6gC4uxdHBQR2kLoJghSrBoYlPCR7C9wXCl/X/gxDhQAACEJAu0JSd8rExS4kO6Wo67Gtzyn2rnEQACgdavLba+z35UI0Ka+1YEkSyKwazZ21Uc82U0/OJcy6TBPBtvdXnNd+7uHAOTmJ04O1KBuhxfCsdQGL/7wuIjP9Ep7H8yHuJbwwEIAABCEAAAhCAAAQgAAEIQAACEIDAPwu8AYNcK2rAdvQuAAAAAElFTkSuQmCC """) MAIN_MENORAH_IMAGE = base64.decode(""" iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAACXBIWXMAAC4jAAAuIwF4pT92AAACTUlEQVRoBe1ZvUoDQRDeeMZAjGhiEKsDxcLCQhQJgo1gpY02voCNtaWNCHkAX8AXsDH6AGlEjBYWChb+IUZUNCZiNEdEL34T70I8EW4lmwlcBiZ7l539Zua73dn7EaIpfAzkU22p1wP/Fl8EQrRyOd9eGIho/quY+ekzuGJg9Vs6E/HikWaap8IsXQ8ndV0f5QiohcMp+TxJRpfecn5f/jHgM7TlScMwAlyxsPnN5tI70Ge2AOCYbQZYSZfQtnuZgBCS//Q0AZeZgs/LBIj+aJCWAZuw3QdYGZ+jvWfLHo5ZCZha26O9/5KTAO5doA3Jj3mZgCckb3qZAM7cy77LS2BkZSNB+lc0qvudflX7q8a3i+CQMwjHuep+hzuh2l8Fn7sIOhOv+3mTgLpT3mAOmzOgwS5I3cOxdwF6Igsr9N4riS1rLwkvIhiQo0H2EkjiOIz9cZP+VCBZYJK6FVl7t7jCypEuNuUsKs/iVscs/stDH6izSuieneT9u/n1+9/+fiBRDBcOxP/i2TB/je+BQQc0cbg6P0fGFQLoxCIhhsMCnddB+uCDZqGTAFWugwDet5NX5cQ1LgjPQlkfhuwi6DroGhumgVcuRjXGdQ1nF0HXA2psGALeS40xpeB+1ACpkRLGmObTMJ+BjkP1qqFdOKZ3gmdQKrz0fiADpRp0C13HepXZPTBETpQSgMQXEU4c2m2FRR9B7qD2i9BB6/gGLc0G+jpEFZxmpgalXecYJCh7a6SaAFrfndAPqB8qI0UY04dTmiUTIGFXZrBb2y9APpyWjITdDwAAAABJRU5ErkJggg== """) -MAIN_MENORAH_IMAGE_26 = base64.decode(""" -iVBORw0KGgoAAAANSUhEUgAAAEAAAAAaCAYAAAAHfFpPAAAACXBIWXMAAC4jAAAuIwF4pT92AAACd0lEQVRYCeVYS0tbQRS+1zxErYqVKhKJZieujI9FN120brq0QhfSFqG/om5ExL3+A90Ktv4B1xGpqYsiuCpRS6HQhESbh9VrvxPnhHH0olecnEUOfMzrzHl8mXPn5jqOoJxsR1OnO5FNwRCcJinn35Z7ekMRL+m6zovLw5H2eDwekohFjIDEeH4JyTdHWy+6PDex5XlesqEIOP7e/qFUCDvFXMSpNL2bqFQqUQkCRH1mc0dfgUvJIMRKQCVNyZ81MgEdmWxJMn+5W0BlXR542lKQZCAs6Ry+j4CcZAyiBEwup54jeVeSAOmH4CmS7xAnYHR+vZvgF4jFdboBPNOvRX9VV7p9LoF1FcQrMxg1trXud/xt+eP0avaZgASv+LS21023tv3V7DMBN46hEZHtdcPdzbIwFB4tHumHoJFX/YcNTwCXAFEfsch/c0DbQfUDmq/m+o828Qn4g34M18ProJbuqd8KPYIpfrXsp2/uDzxWOcawkXK+egvD5Cj6q8AAsAHkAV2m1OCLPqn171p/o3Q/a3uo+xF4AqzQQBM/fVa5y5/feicMTAMZYDa98DbtskWQQKysAUnghOdVy3/ZWox5Hj50PQ4DFMMvNqTah9pjM3776a1zF5hB8j9JuUYADUACfZWh50K9PlJk4KsTwdiuebi5XfSHoINA6NW0bh8oQPhv+KvW4u3h2Z+9dgJsuUOifbA9BAwCXQDLHDp0XBcBKrsi8BegH6GAH2QPrVWxSgASf4no3wPDQD/QBlByXGLP0Cehk0BCt8KFQhntPnAAIj6htSK2CfiBqAe1yClxvcS49s8xHwLMeOiupveTMZCQRvvo8h+2raqd8MEEUAAAAABJRU5ErkJggg== -""") - def main(config): - timezone = config.get("timezone") or "US/Eastern" - if (not time.is_valid_timezone(timezone)): - timezone = "US/Eastern" + timezone = config.get("timezone") or "America/New_York" + if not time.is_valid_timezone(timezone): + timezone = "America/New_York" current_time = time.now().in_location(timezone) + # Used for testing - # current_time = time.time(year = 2023, month = 12, day = 15, hour = 23, minute =0, second = 0, location = timezone) + # current_time = time.parse_time("2024-12-24T10:00:00Z") + # TODO: Current time to midnight or 11:59:59? # First Day of Hanukkah - # TODO: Look up for future years - hardcoded for 2023 - hanukkah_first_day = time.time(year = 2023, month = 12, day = 7, hour = 0, minute = 0, second = 0, location = timezone) + # TODO: Look up for future years + # 20241107 - bas - hardcoded for 2024 + hanukkah_first_day = time.parse_time("2024-12-25T00:00:00Z") hanukkah_last_day = hanukkah_first_day + time.parse_duration("192h") # Is it currently Hanukkah? # Check if it is after Hanukkah - if (current_time > hanukkah_last_day): - msg = render.Text( - content = "Hanukkah is over for 2023. See you on December 24, 2024!", + if current_time > hanukkah_last_day: + # TODO: Make work with Marquee + msg = render.WrappedText( + content = "Hanukkah is over for 2024.\nSee you on December 14, 2025!", color = "#0000ff", - font = "tb-8", - ) - - row = render.Row( - children = [ - render.Image(src = MAIN_MENORAH_IMAGE), - render.Box(width = 15), - msg, - render.Box(width = 15), - render.Image(src = MAIN_MENORAH_IMAGE), - ], - main_align = "center", - cross_align = "center", - ) - - main_child = render.Marquee( - width = 64, - child = row, + font = "CG-pixel-4x5-mono", ) + # TODO: Animation with menorah? + main_child = msg # Check if it is before Hanukkah - elif (current_time < hanukkah_first_day): + + elif current_time < hanukkah_first_day: # How many days before Hanukkah begins? countdown_days = int((hanukkah_first_day - current_time).hours / 24) + 1 - if (countdown_days == 1): - msg = render.Text("Hanukkah 2023 starts tomorrow!", font = "tb-8", color = "#0000ff") + if countdown_days == 1: + msg = render.WrappedText("Hanukkah 2024 starts tomorrow!", font = "tb-8", color = "#0000ff") else: - msg = render.WrappedText("Hanukkah 2023 starts in %d days!" % countdown_days, font = "tb-8", color = "#0000ff") - - row = render.Row( - children = [ - render.Image(src = MAIN_MENORAH_IMAGE), - render.Box(width = 15), - msg, - render.Box(width = 15), - render.Image(src = MAIN_MENORAH_IMAGE), - ], - main_align = "center", - cross_align = "center", - ) - - main_child = render.Marquee( - width = 256, - child = row, - ) + msg = render.WrappedText("Hanukkah 2024 starts in %d days!" % countdown_days, font = "tb-8", color = "#0000ff") + # TODO: Animation with menorah? + main_child = msg # It's Hanukkah! - else: - location = config.get("location") - loc = json.decode(location) if location else DEFAULT_LOCATION - - now = time.now().in_location(loc.get("timezone")) - - lat = float(loc.get("lat")) - lng = float(loc.get("lng")) - sunsetTime = sunrise.sunset(lat, lng, now).in_location(loc.get("timezone")) - - candles = [] - if sunsetTime == None: - sunsetText = "" - else: - sunsetText = "%s" % sunsetTime.format("3:04 PM") - #candles.append(render.Text(sunsetText)) + else: + # TODO: Figure out whether to show the candles being lit # Figure out how many candles to show num_candles = int((current_time - hanukkah_first_day).hours / 24) + 1 + candles = [] # Magical Offsets for the candle images - offset_widths = [184, 168, 152, 136, 112, 96, 80, 0] + offset_widths = [0, 80, 96, 112, 136, 152, 168, 184] # Lay out the candles for i in range(0, num_candles): - candles.append(render.Box(width = offset_widths[i], child = render.Image(src = FLAME_IMAGE))) candles.append(render.Box(width = offset_widths[i], child = render.Image(src = CANDLE_IMAGE))) # Insert the base menorah - candles.append(render.Image(src = MAIN_MENORAH_IMAGE_26)) + candles.append(render.Image(src = MAIN_MENORAH_IMAGE)) # Render as a flat stack main_child = render.Stack(children = candles) - if (sunsetTime != ""): - sunset_row = render.Marquee(width = 64, child = render.Text(font = DEFAULT_FONT, color = "#0000ff", content = "Sunset tonight: " + sunsetText)) - main_child = render.Column(main_align = "start", cross_align = "start", children = [sunset_row, main_child]) - return render.Root( - show_full_animation = True, - delay = int(config.get("scroll", 64)), child = main_child, ) - -def get_schema(): - return schema.Schema( - version = "1", - fields = [ - schema.Location( - id = "location", - name = "Location", - desc = "Location for which to display the sun rise and set times.", - icon = "locationDot", - ), - ], - )