Add Share to L2 button for effects
- Add /effects/{cid}/publish endpoint to publish effects to L2
- Add Share to L2 button to effects detail page
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -316,6 +316,47 @@ async def list_effects(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@router.post("/{cid}/publish")
|
||||||
|
async def publish_effect(
|
||||||
|
cid: str,
|
||||||
|
request: Request,
|
||||||
|
ctx: UserContext = Depends(require_auth),
|
||||||
|
):
|
||||||
|
"""Publish effect to L2 ActivityPub server."""
|
||||||
|
from ..services.cache_service import CacheService
|
||||||
|
import database
|
||||||
|
|
||||||
|
# Verify effect exists
|
||||||
|
effects_dir = get_effects_dir()
|
||||||
|
effect_dir = effects_dir / cid
|
||||||
|
if not effect_dir.exists():
|
||||||
|
error = "Effect not found"
|
||||||
|
if wants_html(request):
|
||||||
|
return HTMLResponse(f'<span class="text-red-400">{error}</span>')
|
||||||
|
raise HTTPException(404, error)
|
||||||
|
|
||||||
|
# Use cache service to publish
|
||||||
|
cache_service = CacheService(database, get_cache_manager())
|
||||||
|
ipfs_cid, error = await cache_service.publish_to_l2(
|
||||||
|
cid=cid,
|
||||||
|
actor_id=ctx.actor_id,
|
||||||
|
l2_server=ctx.l2_server,
|
||||||
|
auth_token=request.cookies.get("auth_token"),
|
||||||
|
)
|
||||||
|
|
||||||
|
if error:
|
||||||
|
if wants_html(request):
|
||||||
|
return HTMLResponse(f'<span class="text-red-400">{error}</span>')
|
||||||
|
raise HTTPException(400, error)
|
||||||
|
|
||||||
|
logger.info(f"Published effect {cid[:16]}... to L2 by {ctx.actor_id}")
|
||||||
|
|
||||||
|
if wants_html(request):
|
||||||
|
return HTMLResponse(f'<span class="text-green-400">Shared: {ipfs_cid[:16]}...</span>')
|
||||||
|
|
||||||
|
return {"ipfs_cid": ipfs_cid, "cid": cid, "published": True}
|
||||||
|
|
||||||
|
|
||||||
@router.delete("/{cid}")
|
@router.delete("/{cid}")
|
||||||
async def delete_effect(
|
async def delete_effect(
|
||||||
cid: str,
|
cid: str,
|
||||||
|
|||||||
@@ -141,6 +141,12 @@
|
|||||||
|
|
||||||
<!-- Actions -->
|
<!-- Actions -->
|
||||||
<div class="flex items-center space-x-4 mt-8">
|
<div class="flex items-center space-x-4 mt-8">
|
||||||
|
<button hx-post="/effects/{{ effect.cid }}/publish"
|
||||||
|
hx-target="#share-result"
|
||||||
|
class="bg-blue-600 hover:bg-blue-700 px-4 py-2 rounded font-medium">
|
||||||
|
Share to L2
|
||||||
|
</button>
|
||||||
|
<span id="share-result"></span>
|
||||||
<button onclick="deleteEffect('{{ effect.cid }}')"
|
<button onclick="deleteEffect('{{ effect.cid }}')"
|
||||||
class="bg-red-600 hover:bg-red-700 px-4 py-2 rounded font-medium">
|
class="bg-red-600 hover:bg-red-700 px-4 py-2 rounded font-medium">
|
||||||
Delete
|
Delete
|
||||||
|
|||||||
Reference in New Issue
Block a user