diff --git a/package.json b/package.json index 2bd0c34b9e6..b72d6fee56d 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "license": "MIT", "private": true, "scripts": { - "data:clean": "rm scripts/data.db GPX_OUT/* activities/* src/static/activities.json", + "data:clean": "rm scripts/data.db {GPX,TCX,FIT}_OUT/* activities/* src/static/activities.json", "data:download:garmin": "python3 scripts/garmin_sync.py", "data:analysis": "python3 scripts/gen_svg.py --from-db --type github --output assets/github.svg", "build": "gatsby clean && gatsby build", diff --git a/scripts/codoon_sync.py b/scripts/codoon_sync.py index c88be7ae197..c24d679de5d 100755 --- a/scripts/codoon_sync.py +++ b/scripts/codoon_sync.py @@ -57,7 +57,7 @@ # for multi sports TYPE_DICT = { 0: "Hike", - 1: "Run", + 1: "Running", 2: "Ride", } diff --git a/scripts/config.py b/scripts/config.py index 83a7a012e24..7c5f43921c2 100644 --- a/scripts/config.py +++ b/scripts/config.py @@ -18,6 +18,7 @@ } SQL_FILE = os.path.join(parent, "scripts", "data.db") JSON_FILE = os.path.join(parent, "src", "static", "activities.json") +SYNCED_FILE = os.path.join(parent, "imported.json") # TODO: Move into nike_sync BASE_URL = "https://api.nike.com/sport/v3/me" diff --git a/scripts/generator/__init__.py b/scripts/generator/__init__.py index 8661f416a7c..72e76366ff9 100644 --- a/scripts/generator/__init__.py +++ b/scripts/generator/__init__.py @@ -12,6 +12,8 @@ from .db import Activity, init_db, update_or_create_activity +from synced_data_file_logger import save_synced_data_file_list + IGNORE_BEFORE_SAVING = os.getenv("IGNORE_BEFORE_SAVING", False) @@ -80,14 +82,20 @@ def sync_from_data_dir(self, data_dir, file_suffix="gpx"): if not tracks: print("No tracks found.") return + + synced_files = [] + for t in tracks: created = update_or_create_activity(self.session, t.to_namedtuple()) if created: sys.stdout.write("+") else: sys.stdout.write(".") + synced_files.extend(t.file_names) sys.stdout.flush() + save_synced_data_file_list(synced_files) + self.session.commit() def sync_from_kml_track(self, track): @@ -105,12 +113,14 @@ def sync_from_app(self, app_tracks): print("No tracks found.") return print("Syncing tracks '+' means new track '.' means update tracks") + synced_files = [] for t in app_tracks: created = update_or_create_activity(self.session, t) if created: sys.stdout.write("+") else: sys.stdout.write(".") + synced_files.extend(t.file_names) sys.stdout.flush() self.session.commit() diff --git a/scripts/gpxtrackposter/track_loader.py b/scripts/gpxtrackposter/track_loader.py index 007c3b2f24e..b63cb9ba969 100644 --- a/scripts/gpxtrackposter/track_loader.py +++ b/scripts/gpxtrackposter/track_loader.py @@ -20,6 +20,8 @@ from .track import Track from .year_range import YearRange +from synced_data_file_logger import load_synced_file_list + log = logging.getLogger(__name__) @@ -167,12 +169,15 @@ def _load_data_tracks(file_names, load_func=load_gpx_file): @staticmethod def _list_data_files(data_dir, file_suffix): + synced_files = load_synced_file_list() data_dir = os.path.abspath(data_dir) if not os.path.isdir(data_dir): raise ParameterError(f"Not a directory: {data_dir}") for name in os.listdir(data_dir): if name.startswith("."): continue + if name in synced_files: + continue path_name = os.path.join(data_dir, name) if name.endswith(f".{file_suffix}") and os.path.isfile(path_name): yield path_name diff --git a/scripts/synced_data_file_logger.py b/scripts/synced_data_file_logger.py new file mode 100644 index 00000000000..de9583b59d5 --- /dev/null +++ b/scripts/synced_data_file_logger.py @@ -0,0 +1,24 @@ +import os +from config import SYNCED_FILE +import json + + +def save_synced_data_file_list(file_list: list): + old_list = load_synced_file_list() + + with open(SYNCED_FILE, "w") as f: + file_list.extend(old_list) + + json.dump(file_list, f) + + +def load_synced_file_list(): + if os.path.exists(SYNCED_FILE): + with open(SYNCED_FILE, "r") as f: + try: + return json.load(f) + except Exception as e: + print(f"json load {SYNCED_FILE} \nerror {e}") + pass + + return []