diff --git a/tests/trails_tests/test_gpx_importer.py b/tests/trails_tests/test_gpx_importer.py index 78b23e6..7ede397 100644 --- a/tests/trails_tests/test_gpx_importer.py +++ b/tests/trails_tests/test_gpx_importer.py @@ -129,6 +129,12 @@ class TestImportTrailGPX: scrobble = Scrobble.objects.filter(source="GPX Import").first() assert scrobble.playback_position_seconds == pytest.approx(3770, abs=5) + def test_scrobble_has_timezone(self, user, sample_gpx_path): + import_trail_gpx(sample_gpx_path, user.id) + scrobble = Scrobble.objects.filter(source="GPX Import").first() + assert scrobble.timezone is not None + assert isinstance(scrobble.timezone, str) + def test_scrobble_log_extra_metadata(self, user, sample_gpx_path): import_trail_gpx(sample_gpx_path, user.id) scrobble = Scrobble.objects.filter(source="GPX Import").first() diff --git a/vrobbler/apps/scrobbles/importers/trail_gpx.py b/vrobbler/apps/scrobbles/importers/trail_gpx.py index c62fbf4..13d2087 100644 --- a/vrobbler/apps/scrobbles/importers/trail_gpx.py +++ b/vrobbler/apps/scrobbles/importers/trail_gpx.py @@ -6,6 +6,7 @@ from datetime import timezone as dt_timezone from math import asin, cos, radians, sin, sqrt from typing import Optional +from django.conf import settings from django.contrib.auth import get_user_model from django.core.files import File @@ -268,6 +269,7 @@ def import_trail_gpx(file_path, user_id, original_filename=None): source="GPX Import", trail=trail, log=logdata.asdict, + timezone=user.profile.timezone or settings.TIME_ZONE, played_to_completion=True, in_progress=False, media_type=Scrobble.MediaType.TRAIL, diff --git a/vrobbler/apps/scrobbles/importers/webdav.py b/vrobbler/apps/scrobbles/importers/webdav.py index fa71bc6..e8e2a07 100644 --- a/vrobbler/apps/scrobbles/importers/webdav.py +++ b/vrobbler/apps/scrobbles/importers/webdav.py @@ -11,10 +11,16 @@ from webdav.client import get_webdav_client logger = logging.getLogger(__name__) +DEFAULT_GPX_PATH = "var/gpx/" +DEFAULT_KOREADER_PATH = "var/koreader/" + def import_from_webdav_for_all_users(restart=False): """Grab a list of all users with WebDAV enabled and kickoff imports for them""" + koreader_path = ( + DEFAULT_KOREADER_PATH + "statistics.sqlite3" + ) # TODO Allow configuring this in user settings webdav_enabled_user_ids = UserProfile.objects.filter( webdav_url__isnull=False, webdav_user__isnull=False, @@ -30,7 +36,7 @@ def import_from_webdav_for_all_users(restart=False): webdav_client = get_webdav_client(user_id) try: - webdav_client.info("var/koreader/statistics.sqlite3") + webdav_client.info(koreader_path) koreader_found = True except: koreader_found = False @@ -39,6 +45,8 @@ def import_from_webdav_for_all_users(restart=False): extra={"user_id": user_id}, ) + trail_gpx_import_count += scan_webdav_for_gpx(webdav_client, user_id) + if koreader_found: last_import = ( KoReaderImport.objects.filter( @@ -48,8 +56,7 @@ def import_from_webdav_for_all_users(restart=False): .last() ) - koreader_file_path = fetch_file_from_webdav(1) - new_hash = get_file_md5_hash(koreader_file_path) + new_hash = get_file_md5_hash(fetch_file_from_webdav(1)) old_hash = None if last_import: old_hash = last_import.file_md5_hash() @@ -81,29 +88,31 @@ def import_from_webdav_for_all_users(restart=False): process_koreader_import.delay(koreader_import.id) koreader_import_count += 1 - trail_gpx_import_count += scan_webdav_for_gpx(webdav_client, user_id) - return koreader_import_count, trail_gpx_import_count def scan_webdav_for_gpx(webdav_client, user_id): + gpx_path = DEFAULT_GPX_PATH # TODO allow this to be configured in user settings try: - webdav_client.info("gpx/") + webdav_client.info(DEFAULT_GPX_PATH) except: - logger.info("No gpx/ directory on webdav", extra={"user_id": user_id}) + logger.info("No var/gpx/ directory on webdav", extra={"user_id": user_id}) return 0 try: - files = webdav_client.list("gpx/") + files = webdav_client.list(gpx_path) except Exception as e: - logger.warning("Could not list gpx/", extra={"user_id": user_id, "error": str(e)}) + logger.warning( + "Could not list var/gpx/", extra={"user_id": user_id, "error": str(e)} + ) return 0 gpx_extensions = (".gpx", ".fit") new_imports = 0 already_imported = set( - TrailGPXImport.objects.filter(user_id=user_id) - .values_list("original_filename", flat=True) + TrailGPXImport.objects.filter(user_id=user_id).values_list( + "original_filename", flat=True + ) ) for fname in files: @@ -116,7 +125,9 @@ def scan_webdav_for_gpx(webdav_client, user_id): tmp = tempfile.NamedTemporaryFile(delete=False, suffix=fname) try: - webdav_client.download_sync(remote_path=f"gpx/{fname}", local_path=tmp.name) + webdav_client.download_sync( + remote_path=f"{gpx_path}/{fname}", local_path=tmp.name + ) imp = TrailGPXImport.objects.create( user_id=user_id, original_filename=fname, diff --git a/vrobbler/templates/scrobbles/_last_scrobbles.html b/vrobbler/templates/scrobbles/_last_scrobbles.html index 067b7f1..e35a889 100644 --- a/vrobbler/templates/scrobbles/_last_scrobbles.html +++ b/vrobbler/templates/scrobbles/_last_scrobbles.html @@ -72,6 +72,15 @@
No moods felt today
{% endif %} +No trails hiked today
+ {% endif %} +