mirror of
				https://github.com/house-of-abbey/GarminHomeAssistant.git
				synced 2025-10-31 07:48:13 +00:00 
			
		
		
		
	Added a background service to send the watch battery level to Home Assistant. Changed the Glance View as requested by a user. Updated to new HA icon using SVG in stead of PNG.
		
			
				
	
	
		
			71 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| ####################################################################################
 | |
| #
 | |
| # Distributed under MIT Licence
 | |
| #   See https://github.com/house-of-abbey/GarminHomeAssistant/blob/main/LICENSE.
 | |
| #
 | |
| ####################################################################################
 | |
| #
 | |
| # GarminHomeAssistant is a Garmin IQ application written in Monkey C and routinely
 | |
| # tested on a Venu 2 device. The source code is provided at:
 | |
| #            https://github.com/house-of-abbey/GarminHomeAssistant.
 | |
| #
 | |
| # J D Abbey & P A Abbey, 29 December 2023
 | |
| #
 | |
| #
 | |
| # Description:
 | |
| #
 | |
| # Python script to automatically resize the application launcher icon from the
 | |
| # original 70x70 pixel width to something more appropriate for different screen
 | |
| # sizes.
 | |
| #
 | |
| # Python installation:
 | |
| #   pip install BeautifulSoup
 | |
| # NB. For XML formatting:
 | |
| #   pip install lxml
 | |
| #
 | |
| # References:
 | |
| #  * https://www.crummy.com/software/BeautifulSoup/bs4/doc/
 | |
| #  * https://realpython.com/beautiful-soup-web-scraper-python/
 | |
| #  * https://www.crummy.com/software/BeautifulSoup/bs4/doc/#parsing-xml
 | |
| #  * https://www.crummy.com/software/BeautifulSoup/bs4/doc/#xml
 | |
| #
 | |
| ####################################################################################
 | |
| 
 | |
| from bs4 import BeautifulSoup, Comment
 | |
| import os
 | |
| import shutil
 | |
| 
 | |
| output_dir_prefix = 'resources-launcher-'
 | |
| # Original icons for 416x416 screen size with 70x70 icons
 | |
| input_dir         = output_dir_prefix + '70-70'
 | |
| 
 | |
| # Convert icons to different screen sizes by these parameters
 | |
| lookup = [26, 30, 33, 35, 36, 40, 54, 60, 61, 62, 65, 80]
 | |
| 
 | |
| # Delete all but the original 48x48 icon directories
 | |
| for entry in os.listdir("."):
 | |
|   if entry.startswith(output_dir_prefix) and entry != input_dir:
 | |
|     shutil.rmtree(entry)
 | |
| 
 | |
| # (Re-)Create the resized icon directories
 | |
| for icon_size in lookup:
 | |
|   output_dir = output_dir_prefix + str(icon_size) + "-" + str(icon_size)
 | |
|   print("\nCreate directory:", output_dir)
 | |
|   if os.path.exists(output_dir) and os.path.isdir(output_dir):
 | |
|     shutil.rmtree(output_dir)
 | |
|   os.makedirs(output_dir)
 | |
|   for entry in os.listdir(input_dir):
 | |
|     if entry.endswith(".svg"):
 | |
|       print("Create file:       ", entry.ljust(40) + " SVG - Change file")
 | |
|       with open(input_dir + "/" + entry, "r") as f:
 | |
|         soup = BeautifulSoup(f.read(), features="xml")
 | |
|         svg: BeautifulSoup = list(soup.children)[0]
 | |
|         h = int(svg.attrs["height"])
 | |
|         svg.attrs["width"]  = icon_size
 | |
|         svg.attrs["height"] = icon_size
 | |
|         with open(output_dir + "/" + entry, "wb") as o:
 | |
|           o.write(svg.encode("utf-8"))
 | |
|     elif entry.endswith(".xml"):
 | |
|       print("Create file:       ", entry.ljust(40) + " XML - Copy file")
 | |
|       shutil.copyfile(input_dir + "/" + entry, output_dir + "/" + entry)
 |