|  |  | @ -7,8 +7,37 @@ import json | 
			
		
	
		
			
				
					|  |  |  | from datetime import date | 
			
		
	
		
			
				
					|  |  |  | from pathlib import Path | 
			
		
	
		
			
				
					|  |  |  | import subprocess | 
			
		
	
		
			
				
					|  |  |  | import configparser | 
			
		
	
		
			
				
					|  |  |  | Import("env") | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | import htmlPreprocessorDefines as prepro | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | def get_build_flags(): | 
			
		
	
		
			
				
					|  |  |  |     config = configparser.ConfigParser() | 
			
		
	
		
			
				
					|  |  |  |     config.read('platformio.ini') | 
			
		
	
		
			
				
					|  |  |  |     global build_flags | 
			
		
	
		
			
				
					|  |  |  |     build_flags = config["env:" + env['PIOENV']]['build_flags'].split('\n') | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     for i in range(len(build_flags)): | 
			
		
	
		
			
				
					|  |  |  |         build_flags[i] = build_flags[i][2:] | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     # translate board | 
			
		
	
		
			
				
					|  |  |  |     board = config["env:" + env['PIOENV']]['board'] | 
			
		
	
		
			
				
					|  |  |  |     if board == "esp12e" or board == "esp8285": | 
			
		
	
		
			
				
					|  |  |  |         build_flags.append("ESP8266") | 
			
		
	
		
			
				
					|  |  |  |     elif board == "lolin_d32": | 
			
		
	
		
			
				
					|  |  |  |         build_flags.append("ESP32") | 
			
		
	
		
			
				
					|  |  |  |     elif board == "lolin_s2_mini": | 
			
		
	
		
			
				
					|  |  |  |         build_flags.append("ESP32") | 
			
		
	
		
			
				
					|  |  |  |         build_flags.append("ESP32-S2") | 
			
		
	
		
			
				
					|  |  |  |     elif board == "lolin_c3_mini": | 
			
		
	
		
			
				
					|  |  |  |         build_flags.append("ESP32") | 
			
		
	
		
			
				
					|  |  |  |         build_flags.append("ESP32-C3") | 
			
		
	
		
			
				
					|  |  |  |     elif board == "esp32-s3-devkitc-1": | 
			
		
	
		
			
				
					|  |  |  |         build_flags.append("ESP32") | 
			
		
	
		
			
				
					|  |  |  |         build_flags.append("ESP32-S3") | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | def get_git_sha(): | 
			
		
	
		
			
				
					|  |  |  |     try: | 
			
		
	
	
		
			
				
					|  |  | @ -50,38 +79,46 @@ def readVersionFull(path): | 
			
		
	
		
			
				
					|  |  |  |     return version | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | def htmlParts(file, header, nav, footer, versionPath, lang): | 
			
		
	
		
			
				
					|  |  |  |     p = ""; | 
			
		
	
		
			
				
					|  |  |  |     f = open(file, "r") | 
			
		
	
		
			
				
					|  |  |  |     lines = f.readlines() | 
			
		
	
		
			
				
					|  |  |  |     f.close(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     f = open(header, "r") | 
			
		
	
		
			
				
					|  |  |  |     h = f.read().strip() | 
			
		
	
		
			
				
					|  |  |  |     h = f.readlines() | 
			
		
	
		
			
				
					|  |  |  |     f.close() | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     f = open(nav, "r") | 
			
		
	
		
			
				
					|  |  |  |     n = f.read().strip() | 
			
		
	
		
			
				
					|  |  |  |     n = f.readlines() | 
			
		
	
		
			
				
					|  |  |  |     f.close() | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     f = open(footer, "r") | 
			
		
	
		
			
				
					|  |  |  |     fo = f.read().strip() | 
			
		
	
		
			
				
					|  |  |  |     fo = f.readlines() | 
			
		
	
		
			
				
					|  |  |  |     f.close() | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     linesExt = [] | 
			
		
	
		
			
				
					|  |  |  |     for line in lines: | 
			
		
	
		
			
				
					|  |  |  |         line = line.replace("{#HTML_HEADER}", h) | 
			
		
	
		
			
				
					|  |  |  |         line = line.replace("{#HTML_NAV}", n) | 
			
		
	
		
			
				
					|  |  |  |         line = line.replace("{#HTML_FOOTER}", fo) | 
			
		
	
		
			
				
					|  |  |  |         p += line | 
			
		
	
		
			
				
					|  |  |  |         if line.find("{#HTML_HEADER}") != -1: | 
			
		
	
		
			
				
					|  |  |  |             linesExt.extend(h) | 
			
		
	
		
			
				
					|  |  |  |         elif line.find("{#HTML_NAV}") != -1: | 
			
		
	
		
			
				
					|  |  |  |             linesExt.extend(n) | 
			
		
	
		
			
				
					|  |  |  |         elif line.find("{#HTML_FOOTER}") != -1: | 
			
		
	
		
			
				
					|  |  |  |             linesExt.extend(fo) | 
			
		
	
		
			
				
					|  |  |  |         else: | 
			
		
	
		
			
				
					|  |  |  |             linesExt.append(line) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     linesMod = prepro.conv(linesExt, build_flags) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     #placeholders | 
			
		
	
		
			
				
					|  |  |  |     version = readVersion(versionPath); | 
			
		
	
		
			
				
					|  |  |  |     link = '<a target="_blank" href="https://github.com/lumapu/ahoy/commits/' + get_git_sha() + '">GIT SHA: ' + get_git_sha() + ' :: ' + version + '</a>' | 
			
		
	
		
			
				
					|  |  |  |     p = "" | 
			
		
	
		
			
				
					|  |  |  |     for line in linesMod: | 
			
		
	
		
			
				
					|  |  |  |         p += line | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     p = p.replace("{#VERSION}", version) | 
			
		
	
		
			
				
					|  |  |  |     p = p.replace("{#VERSION_FULL}", readVersionFull(versionPath)) | 
			
		
	
		
			
				
					|  |  |  |     p = p.replace("{#VERSION_GIT}", link) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     # remove if - endif ESP32 | 
			
		
	
		
			
				
					|  |  |  |     p = checkIf(p) | 
			
		
	
		
			
				
					|  |  |  |     p = translate(file, p, lang) | 
			
		
	
		
			
				
					|  |  |  |     p = translate("general", p, lang) # menu / header / footer | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -90,30 +127,6 @@ def htmlParts(file, header, nav, footer, versionPath, lang): | 
			
		
	
		
			
				
					|  |  |  |     f.close(); | 
			
		
	
		
			
				
					|  |  |  |     return p | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | def checkIf(data): | 
			
		
	
		
			
				
					|  |  |  |     if (env['PIOENV'][0:5] == "esp32") or env['PIOENV'][0:4] == "open": | 
			
		
	
		
			
				
					|  |  |  |         data = data.replace("<!--IF_ESP32-->", "") | 
			
		
	
		
			
				
					|  |  |  |         data = data.replace("<!--ENDIF_ESP32-->", "") | 
			
		
	
		
			
				
					|  |  |  |         data = data.replace("/*IF_ESP32*/", "") | 
			
		
	
		
			
				
					|  |  |  |         data = data.replace("/*ENDIF_ESP32*/", "") | 
			
		
	
		
			
				
					|  |  |  |     else: | 
			
		
	
		
			
				
					|  |  |  |         while 1: | 
			
		
	
		
			
				
					|  |  |  |             start = data.find("<!--IF_ESP32-->") | 
			
		
	
		
			
				
					|  |  |  |             end = data.find("<!--ENDIF_ESP32-->")+18 | 
			
		
	
		
			
				
					|  |  |  |             if -1 == start: | 
			
		
	
		
			
				
					|  |  |  |                 break | 
			
		
	
		
			
				
					|  |  |  |             else: | 
			
		
	
		
			
				
					|  |  |  |                 data = data[0:start] + data[end:] | 
			
		
	
		
			
				
					|  |  |  |         while 1: | 
			
		
	
		
			
				
					|  |  |  |             start = data.find("/*IF_ESP32*/") | 
			
		
	
		
			
				
					|  |  |  |             end = data.find("/*ENDIF_ESP32*/")+15 | 
			
		
	
		
			
				
					|  |  |  |             if -1 == start: | 
			
		
	
		
			
				
					|  |  |  |                 break | 
			
		
	
		
			
				
					|  |  |  |             else: | 
			
		
	
		
			
				
					|  |  |  |                 data = data[0:start] + data[end:] | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     return data | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | def findLang(file): | 
			
		
	
		
			
				
					|  |  |  |     with open('../lang.json') as j: | 
			
		
	
		
			
				
					|  |  |  |         lang = json.load(j) | 
			
		
	
	
		
			
				
					|  |  | @ -189,33 +202,41 @@ def convert2Header(inFile, versionPath, lang): | 
			
		
	
		
			
				
					|  |  |  |     f.write("#endif /*__{}_{}_H__*/\n".format(define, define2)) | 
			
		
	
		
			
				
					|  |  |  |     f.close() | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | # delete all files in the 'h' dir | 
			
		
	
		
			
				
					|  |  |  | wd = 'web/html/h' | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | if os.path.exists(wd): | 
			
		
	
		
			
				
					|  |  |  |     for f in os.listdir(wd): | 
			
		
	
		
			
				
					|  |  |  |         os.remove(os.path.join(wd, f)) | 
			
		
	
		
			
				
					|  |  |  | wd += "/tmp" | 
			
		
	
		
			
				
					|  |  |  | if os.path.exists(wd): | 
			
		
	
		
			
				
					|  |  |  |     for f in os.listdir(wd): | 
			
		
	
		
			
				
					|  |  |  |         os.remove(os.path.join(wd, f)) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | # grab all files with following extensions | 
			
		
	
		
			
				
					|  |  |  | os.chdir('./web/html') | 
			
		
	
		
			
				
					|  |  |  | types = ('*.html', '*.css', '*.js', '*.ico', '*.json') # the tuple of file types | 
			
		
	
		
			
				
					|  |  |  | files_grabbed = [] | 
			
		
	
		
			
				
					|  |  |  | for files in types: | 
			
		
	
		
			
				
					|  |  |  |     files_grabbed.extend(glob.glob(files)) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | Path("h").mkdir(exist_ok=True) | 
			
		
	
		
			
				
					|  |  |  | Path("tmp").mkdir(exist_ok=True) # created to check if webpages are valid with all replacements | 
			
		
	
		
			
				
					|  |  |  | shutil.copyfile("style.css", "tmp/style.css") | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | # get language from environment | 
			
		
	
		
			
				
					|  |  |  | lang = "en" | 
			
		
	
		
			
				
					|  |  |  | if env['PIOENV'][-3:] == "-de": | 
			
		
	
		
			
				
					|  |  |  |     lang = "de" | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | # go throw the array | 
			
		
	
		
			
				
					|  |  |  | for val in files_grabbed: | 
			
		
	
		
			
				
					|  |  |  |     convert2Header(val, "../../defines.h", lang) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | def main(): | 
			
		
	
		
			
				
					|  |  |  |     get_build_flags() | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     # delete all files in the 'h' dir | 
			
		
	
		
			
				
					|  |  |  |     wd = 'web/html/h' | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     if os.path.exists(wd): | 
			
		
	
		
			
				
					|  |  |  |         for f in os.listdir(wd): | 
			
		
	
		
			
				
					|  |  |  |             os.remove(os.path.join(wd, f)) | 
			
		
	
		
			
				
					|  |  |  |     wd += "/tmp" | 
			
		
	
		
			
				
					|  |  |  |     if os.path.exists(wd): | 
			
		
	
		
			
				
					|  |  |  |         for f in os.listdir(wd): | 
			
		
	
		
			
				
					|  |  |  |             os.remove(os.path.join(wd, f)) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     # grab all files with following extensions | 
			
		
	
		
			
				
					|  |  |  |     os.chdir('./web/html') | 
			
		
	
		
			
				
					|  |  |  |     types = ('*.html', '*.css', '*.js', '*.ico', '*.json') # the tuple of file types | 
			
		
	
		
			
				
					|  |  |  |     files_grabbed = [] | 
			
		
	
		
			
				
					|  |  |  |     for files in types: | 
			
		
	
		
			
				
					|  |  |  |         files_grabbed.extend(glob.glob(files)) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     Path("h").mkdir(exist_ok=True) | 
			
		
	
		
			
				
					|  |  |  |     Path("tmp").mkdir(exist_ok=True) # created to check if webpages are valid with all replacements | 
			
		
	
		
			
				
					|  |  |  |     shutil.copyfile("style.css", "tmp/style.css") | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     # get language from environment | 
			
		
	
		
			
				
					|  |  |  |     lang = "en" | 
			
		
	
		
			
				
					|  |  |  |     if env['PIOENV'][-3:] == "-de": | 
			
		
	
		
			
				
					|  |  |  |         lang = "de" | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     # go throw the array | 
			
		
	
		
			
				
					|  |  |  |     for val in files_grabbed: | 
			
		
	
		
			
				
					|  |  |  |         convert2Header(val, "../../defines.h", lang) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | main() | 
			
		
	
	
		
			
				
					|  |  | 
 |