diff --git a/docker-compose.yml b/docker-compose.yml index f912b9e..cc2e57f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,7 +20,7 @@ services: context: . dockerfile: Dockerfile args: - CACHEBUST: "10" + CACHEBUST: "11" VITE_USE_MOCK_DATA: "false" VITE_CONTENT_ORIGIN: ${FRONTEND_URL} VITE_INDEEHUB_API_URL: /api diff --git a/src/components/ContentDetailModal.vue b/src/components/ContentDetailModal.vue index bf87d9e..bfc14a5 100644 --- a/src/components/ContentDetailModal.vue +++ b/src/components/ContentDetailModal.vue @@ -43,6 +43,9 @@ Rented · {{ rentalTimeRemaining }} + + Your project + {{ content.rentalPrice.toLocaleString() }} sats @@ -274,6 +277,9 @@ const relayConnected = ref(true) const hasActiveRental = ref(false) const rentalExpiresAt = ref(null) +/** True if the logged-in user is the project owner */ +const isOwner = computed(() => !!props.content?.isOwnProject) + /** Human-readable time remaining on the rental (e.g. "23h 15m") */ const rentalTimeRemaining = computed(() => { if (!rentalExpiresAt.value) return '' @@ -285,9 +291,9 @@ const rentalTimeRemaining = computed(() => { return `${minutes}m remaining` }) -/** True when the user can play without paying (subscription or active rental) */ +/** True when the user can play without paying (subscription, active rental, or project owner) */ const canPlay = computed(() => - hasActiveSubscription.value || hasActiveRental.value, + hasActiveSubscription.value || hasActiveRental.value || isOwner.value, ) async function checkRentalAccess() { @@ -304,9 +310,10 @@ async function checkRentalAccess() { rentalExpiresAt.value = result.expiresAt ? new Date(result.expiresAt) : null } catch (err) { console.warn('Rental check failed:', err) - // If the rental check fails (e.g. auth issue) but the user owns the - // content, treat it as "can play" so the owner isn't blocked. - hasActiveRental.value = !!props.content.isOwnProject + // Owner playback is handled by the isOwner computed property, + // so we don't fake a rental here. This keeps the "Rented" badge + // accurate and still shows the rental price for non-owners. + hasActiveRental.value = false rentalExpiresAt.value = null } }