diff --git a/db/integrations/hammerhead/hammerhead.go b/db/integrations/hammerhead/hammerhead.go index 59f9e98c..34b8a9d3 100644 --- a/db/integrations/hammerhead/hammerhead.go +++ b/db/integrations/hammerhead/hammerhead.go @@ -543,6 +543,7 @@ func createTrailFromActivity(app core.App, detailedTour *HammerheadActivity, gpx "id": trailid, "name": detailedTour.ActivityData.Name, "public": false, + "completed": true, "distance": detailedTour.ActivityData.ActivityInfo[idDistance].Value.Value, "elevation_gain": detailedTour.ActivityData.ActivityInfo[idElevationGain].Value.Value, "elevation_loss": detailedTour.ActivityData.ActivityInfo[idElevationLoss].Value.Value, diff --git a/db/integrations/komoot/komoot.go b/db/integrations/komoot/komoot.go index 65f8bebd..db86f63e 100644 --- a/db/integrations/komoot/komoot.go +++ b/db/integrations/komoot/komoot.go @@ -292,6 +292,7 @@ func createTrailFromTour(app core.App, k *KomootApi, detailedTour *DetailedKomoo "id": trailid, "name": detailedTour.Name, "public": public, + "completed": detailedTour.Type == "tour_recorded", "distance": detailedTour.Distance, "elevation_gain": detailedTour.ElevationUp, "elevation_loss": detailedTour.ElevationDown, diff --git a/db/migrations/1776246553_updated_trails.go b/db/migrations/1776246553_updated_trails.go new file mode 100644 index 00000000..2c5f1304 --- /dev/null +++ b/db/migrations/1776246553_updated_trails.go @@ -0,0 +1,62 @@ +package migrations + +import ( + "github.com/pocketbase/pocketbase/core" + m "github.com/pocketbase/pocketbase/migrations" +) + +func init() { + m.Register(func(app core.App) error { + collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4") + if err != nil { + return err + } + + // add field + if err := collection.Fields.AddMarshaledJSONAt(5, []byte(`{ + "hidden": false, + "id": "bool989355118", + "name": "completed", + "presentable": false, + "required": false, + "system": false, + "type": "bool" + }`)); err != nil { + return err + } + + err = app.Save(collection) + if err != nil { + return err + } + + logs, err := app.FindAllRecords("summit_logs") + if err != nil { + return err + } + + for _, l := range logs { + trail, err := app.FindRecordById("trails", l.GetString("trail")) + if err != nil { + continue + } + trail.Set("completed", true) + err = app.Save(trail) + if err != nil { + return err + } + } + + return nil + }, func(app core.App) error { + collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4") + if err != nil { + return err + } + + // remove field + collection.Fields.RemoveById("bool989355118") + + return app.Save(collection) + }) +} diff --git a/db/util/meilisearch.go b/db/util/meilisearch.go index 2fee69e8..f57a0750 100644 --- a/db/util/meilisearch.go +++ b/db/util/meilisearch.go @@ -12,7 +12,6 @@ import ( "time" "github.com/meilisearch/meilisearch-go" - "github.com/pocketbase/dbx" "github.com/pocketbase/pocketbase/core" "github.com/tkrajina/gpxgo/gpx" "github.com/twpayne/go-polyline" @@ -52,11 +51,6 @@ func documentFromTrailRecord(app core.App, r *core.Record, author *core.Record, domain = author.GetString("domain") } - logCount, err := app.CountRecords("summit_logs", dbx.NewExp("trail={:id}", dbx.Params{"id": r.Id})) - if err != nil { - return nil, err - } - document := map[string]any{ "id": r.Id, "author": author.Id, @@ -71,7 +65,7 @@ func documentFromTrailRecord(app core.App, r *core.Record, author *core.Record, "duration": r.GetFloat("duration"), "difficulty": difficultyToNumber(r.GetString("difficulty")), "category": category, - "completed": logCount > 0, + "completed": r.GetBool("completed"), "date": r.GetDateTime("date").Time().Unix(), "created": r.GetDateTime("created").Time().Unix(), "public": r.GetBool("public"), diff --git a/web/src/lib/components/trail/trail_card.svelte b/web/src/lib/components/trail/trail_card.svelte index b6052487..698ef6da 100644 --- a/web/src/lib/components/trail/trail_card.svelte +++ b/web/src/lib/components/trail/trail_card.svelte @@ -150,7 +150,9 @@ {/if}
{new Date(trail.date).toLocaleDateString(undefined, { @@ -200,7 +202,11 @@
- {$_(trail.expand?.category?.name ?? trail.category ?? "-")} + {$_( + trail.expand?.category?.name ?? + trail.category ?? + "-", + )}
{/if} {#if trail.location} diff --git a/web/src/lib/components/trail/trail_info_panel.svelte b/web/src/lib/components/trail/trail_info_panel.svelte index 19a076e7..98eb5086 100644 --- a/web/src/lib/components/trail/trail_info_panel.svelte +++ b/web/src/lib/components/trail/trail_info_panel.svelte @@ -56,6 +56,7 @@ import { handleFromRecordWithIRI } from "$lib/util/activitypub_util"; import LikeButton from "./like_button.svelte"; import Editor from "../base/editor.svelte"; + import { trails_update } from "$lib/stores/trail_store"; interface Props { initTrail: Trail; @@ -75,6 +76,7 @@ let summitLogModal: SummitLogModal; let confirmModal: ConfirmModal; + let markTrailAsCompletedModal: ConfirmModal; let trail = $state(untrack(() => initTrail)); @@ -243,6 +245,13 @@ log.trail = trail.id; const newLog = await summit_logs_create(log); summitLogs.set([...$summitLogs, newLog]); + if ( + $summitLogs.length == 1 && + trail.author == $currentUser?.actor && + !trail.completed + ) { + markTrailAsCompletedModal.openModal(); + } } summitLogCreateLoading = false; } @@ -259,6 +268,12 @@ ); summitLogs.set(newSummitLogList); } + + async function markTrailAsCompleted() { + trail.completed = true; + const updatedTrail: Trail = { ...trail }; + await trails_update(trail, updatedTrail); + }- {$_(trail.expand?.category?.name ?? trail.category ?? "-")} + {$_( + trail.expand?.category?.name ?? trail.category ?? "-", + )}
{/if} {#if trail.location} @@ -165,6 +168,14 @@{$_(trail.difficulty ?? "?")}
++ + {$_(trail.completed ? "completed" : "not-completed")} +