From ebacc1371c0b0892c1fa84c1a76c8ec6abff2ad6 Mon Sep 17 00:00:00 2001 From: iganeshk Date: Mon, 20 Jan 2020 16:14:59 -0500 Subject: [PATCH] added no-distraction-dynamic theme --- README.md | 2 +- build_repo.py | 89 ++++++++++++++++++-------- extensions/no-distraction-dynamic.yaml | 19 ++++++ 3 files changed, 82 insertions(+), 28 deletions(-) create mode 100644 extensions/no-distraction-dynamic.yaml diff --git a/README.md b/README.md index 195a81c..17490c8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -LaMetric-System-Monitor +Standard Notes Extension ## Standard Notes Extensions - Self-Hosted Repository Host Standard Notes extensions on your own server. This utility parses most of the open-source extensions available from original repository as well as from other authors and builds an extensions repository which then can be plugged directly into Standard Notes Web/Desktop Clients. (https://standardnotes.org/) diff --git a/build_repo.py b/build_repo.py index c2e7c51..a4f0a1e 100644 --- a/build_repo.py +++ b/build_repo.py @@ -20,6 +20,7 @@ from zipfile import ZipFile import requests import yaml + def get_environment(base_dir): """ Parse the environment variables from .env @@ -29,18 +30,21 @@ def get_environment(base_dir): github: username: token: - """, Loader=yaml.FullLoader) + """, + Loader=yaml.FullLoader) if os.path.isfile(os.path.join(base_dir, ".env")): with open(os.path.join(base_dir, ".env")) as temp_env_file: temp_envvar = yaml.load(temp_env_file, Loader=yaml.FullLoader) return temp_envvar + def process_zipball(repo_dir, release_version): """ Grab the release zipball and extract it without the root/parent/top directory """ - with ZipFile(os.path.join(repo_dir, release_version) + ".zip", 'r') as zipball: + with ZipFile(os.path.join(repo_dir, release_version) + ".zip", + 'r') as zipball: for member in zipball.namelist(): # Parse files list excluding the top/parent/root directory filename = '/'.join(member.split('/')[1:]) @@ -50,13 +54,18 @@ def process_zipball(repo_dir, release_version): if filename.startswith('.'): continue source = zipball.open(member) try: - target = open(os.path.join(repo_dir, release_version, filename), "wb") + target = open( + os.path.join(repo_dir, release_version, filename), "wb") with source, target: - target = open(os.path.join(repo_dir, release_version, filename), "wb") + target = open( + os.path.join(repo_dir, release_version, filename), + "wb") shutil.copyfileobj(source, target) except FileNotFoundError: # Create the directory - os.makedirs(os.path.dirname(os.path.join(repo_dir, release_version, filename))) + os.makedirs( + os.path.dirname( + os.path.join(repo_dir, release_version, filename))) continue # Delete the archive zip os.remove(os.path.join(repo_dir, release_version) + ".zip") @@ -76,24 +85,29 @@ def git_clone_method(ext_yaml, public_dir, ext_has_update): ext_last_commit = (run([ 'git', '--git-dir=' + os.path.join(public_dir, '{}_tmp'.format(repo_name), '.git'), - 'rev-list', '--tags', '--max-count=1'], stdout=PIPE, check=True).stdout.decode('utf-8').replace("\n", "")) + 'rev-list', '--tags', '--max-count=1' + ], + stdout=PIPE, + check=True).stdout.decode('utf-8').replace( + "\n", "")) ext_version = run([ 'git', '--git-dir', os.path.join(public_dir, '{}_tmp'.format(repo_name), '.git'), - 'describe', '--tags', ext_last_commit], stdout=PIPE, check=True).stdout.decode('utf-8').replace("\n", "") + 'describe', '--tags', ext_last_commit + ], + stdout=PIPE, + check=True).stdout.decode('utf-8').replace("\n", "") # check if the latest version already exist - if not os.path.exists( - os.path.join(repo_dir, ext_version)): + if not os.path.exists(os.path.join(repo_dir, ext_version)): ext_has_update = True shutil.move( os.path.join(public_dir, '{}_tmp'.format(repo_name)), - os.path.join(public_dir, repo_name, - '{}'.format(ext_version))) + os.path.join(public_dir, repo_name, '{}'.format(ext_version))) # Delete .git resource from the directory shutil.rmtree( - os.path.join(public_dir, repo_name, - '{}'.format(ext_version), '.git')) + os.path.join(public_dir, repo_name, '{}'.format(ext_version), + '.git')) else: # ext already up-to-date # print('Extension: {} - {} (already up-to-date)'.format(ext_yaml['name'], ext_version)) @@ -121,7 +135,6 @@ def parse_extensions(base_dir, base_url, ghub_session): with open(os.path.join(extension_dir, extfiles)) as extyaml: ext_yaml = yaml.load(extyaml, Loader=yaml.FullLoader) - ext_has_update = False repo_name = ext_yaml['github'].split('/')[-1] repo_dir = os.path.join(public_dir, repo_name) @@ -130,8 +143,17 @@ def parse_extensions(base_dir, base_url, ghub_session): if ghub_session is not None: # Github API Method # Get extension Github meta-data - ext_git_info = json.loads(ghub_session.get('https://api.github.com/repos/{github}/releases/latest'.format(**ext_yaml)).text) - ext_version = ext_git_info['tag_name'] + ext_git_info = json.loads( + ghub_session.get( + 'https://api.github.com/repos/{github}/releases/latest'. + format(**ext_yaml)).text) + try: + ext_version = ext_git_info['tag_name'] + except KeyError: + print( + "Error: Unable to update %s (%s) does it have a release at Github?" + % (ext_yaml['name'], extfiles)) + continue # Check if extension directory alredy exists if not os.path.exists(repo_dir): os.makedirs(repo_dir) @@ -140,13 +162,17 @@ def parse_extensions(base_dir, base_url, ghub_session): ext_has_update = True os.makedirs(os.path.join(repo_dir, ext_version)) # Grab the release and then unpack it - with requests.get(ext_git_info['zipball_url'], stream=True) as zipball_stream: - with open(os.path.join(repo_dir, ext_version) + ".zip", 'wb') as zipball_file: + with requests.get(ext_git_info['zipball_url'], + stream=True) as zipball_stream: + with open( + os.path.join(repo_dir, ext_version) + ".zip", + 'wb') as zipball_file: shutil.copyfileobj(zipball_stream.raw, zipball_file) # unpack the zipball process_zipball(repo_dir, ext_version) else: - ext_version, ext_has_update = git_clone_method(ext_yaml, public_dir, ext_has_update) + ext_version, ext_has_update = git_clone_method( + ext_yaml, public_dir, ext_has_update) # Build extension info (stateless) # https://domain.com/sub-domain/my-extension/index.json @@ -161,8 +187,8 @@ def parse_extensions(base_dir, base_url, ghub_session): thumbnail_url=ext_yaml.get('thumbnail_url', None), valid_until='2030-05-16T18:35:33.000Z', url='/'.join([base_url, repo_name, ext_version, ext_yaml['main']]), - download_url='https://github.com/{}/archive/{}.zip'. - format(ext_yaml['github'], ext_version), + download_url='https://github.com/{}/archive/{}.zip'.format( + ext_yaml['github'], ext_version), latest_url='/'.join([base_url, repo_name, 'index.json']), flags=ext_yaml.get('flags', []), dock_icon=ext_yaml.get('dock_icon', {}), @@ -179,10 +205,12 @@ def parse_extensions(base_dir, base_url, ghub_session): with open(os.path.join(public_dir, repo_name, 'index.json'), 'w') as ext_json: json.dump(extension, ext_json, indent=4) - print('Extension: {:30s} {:6s}\t(updated)'.format(ext_yaml['name'], ext_version)) + print('Extension: {:30s} {:6s}\t(updated)'.format( + ext_yaml['name'], ext_version)) else: # ext already up-to-date - print('Extension: {:30s} {:6s}\t(already up-to-date)'.format(ext_yaml['name'], ext_version)) + print('Extension: {:30s} {:6s}\t(already up-to-date)'.format( + ext_yaml['name'], ext_version)) extensions.append(extension) os.chdir('..') @@ -214,12 +242,15 @@ def main(): if (env_var['github']['username'] and env_var['github']['token']): # Get a re-usable session object using user credentials ghub_session = requests.Session() - ghub_session.auth = (env_var['github']['username'], env_var['github']['token']) + ghub_session.auth = (env_var['github']['username'], + env_var['github']['token']) try: ghub_verify = ghub_session.get("https://api.github.com/") if not ghub_verify.headers['status'] == "200 OK": print("Error: %s " % ghub_verify.headers['status']) - print("Bad Github credentials in the .env file, check and try again.") + print( + "Bad Github credentials in the .env file, check and try again." + ) sys.exit(1) except Exception as e: print("Unknown error occured: %s" % e) @@ -229,10 +260,14 @@ def main(): ghub_session.close() else: # Environment file missing - print("Environment not set (read env.sample)") - input("⚠️ This method is set to be deprecated soon, Press any key to continue:\n") + print( + "Environment variables not set (read env.sample). Using Git Clone method instead" + ) + input( + "⚠️ This method in't that efficient, Press any key to continue:\n") parse_extensions(base_dir, base_url, None) sys.exit(0) + if __name__ == '__main__': main() diff --git a/extensions/no-distraction-dynamic.yaml b/extensions/no-distraction-dynamic.yaml new file mode 100644 index 0000000..9c7502a --- /dev/null +++ b/extensions/no-distraction-dynamic.yaml @@ -0,0 +1,19 @@ +--- +id: com.iganesh.theme-no-distraction-dynamic +github: iganeshk/sn-theme-no-distraction-dynamic +main: dist/dist.css + +name: No Distraction (Dynamic) +layerable: true +content_type: SN|Theme +area: themes +version: 1.0.0 +marketing_url: https://standardnotes.org/extensions/dynamic +description: A smart theme that minimizes the tags and notes panels when they are not in use. + +dock_icon: + type: svg + source: |- + + # Shuffle Icon from Entypo by Daniel Bruce +...