async def download_new_activities(): client = Garmin(email, password, auth_domain) await client.login() # because I don't find a para for after time, so I use garmin-id as filename # to find new run to generage downloaded_ids = [ i.split(".")[0] for i in os.listdir(GPX_FOLDER) if not i.startswith(".") ] activity_ids = await get_activity_id_list(client) to_generate_garmin_ids = list(set(activity_ids) - set(downloaded_ids)) print(f"{len(to_generate_garmin_ids)} new activities to be downloaded") start_time = time.time() await gather_with_concurrency( 10, [download_garmin_gpx(client, id) for id in to_generate_garmin_ids] ) print(f"Download finished. Elapsed {time.time()-start_time} seconds") make_activities_file(SQL_FILE, GPX_FOLDER, JSON_FILE)
old_garmin_ids = [i.split(".")[0] for i in old_garmin_ids] api_garmin_ids = [] while True: activities = client.get_activities(start, limit) for a in activities: if a.get("activityId") is None: print("Skipping activity without id") continue api_garmin_ids.append(str(a.get("activityId"))) activities_count = len(activities) count += activities_count print(f"parsing from {start} to {count}") start += 100 # tricky break if activities_count != limit: break to_generate_garmin_ids = list(set(api_garmin_ids) - set(old_garmin_ids)) print(f"{len(to_generate_garmin_ids)} new runs to generate") start_time = time.time() threads = [] for i in to_generate_garmin_ids: t = Thread(target=download_garmin_gpx, args=(client, i)) threads.append(t) t.start() for thread in threads: thread.join() print(f"cost {time.time()-start_time} s for gpx") time.sleep(60) # waiting make_activities_file(SQL_FILE, GPX_FOLDER, JSON_FILE)