← All releases

26.36 — Grumpy Waffle

Added

dispositivo da Impostazioni account. Una coppia VAPID per istanza e le

subscription cifrate alimentano un'outbox dedicata; il poller la sopprime

quando l'utente e' attivo, altrimenti openbook:cron consegna dopo 75

secondi con testo localizzato e icona dell'istanza. Consegna best effort

senza retry, pulizia automatica degli endpoint scaduti e click sulla

notifica verso /notifiche tramite service worker.

(GET /posts/{post}/condividi-a-utente). Apre i messaggi privati con il

post gia' citato: scegli il destinatario e invia (commento opzionale).

La citazione riusa posts.quoted_post_id come le quote pubbliche, senza

incrementare il contatore di condivisione ne' notificare l'autore originale.

privato): GET /@{user}/condividi-a-utente e

GET /attori/{actor}/condividi-a-utente. Il messaggio cita il profilo

(posts.quoted_actor_id) con link alla pagina Openbook locale

(/@username o /attori/{id}), non all'URI ActivityPub originale, cosi'

il destinatario puo' seguire da questa istanza.

del sito. Da un'unica immagine (consigliato quadrato 512×512) vengono

generate la favicon 32×32, l'Apple Touch Icon 180×180 (iOS) e le icone

Android 192/512 (anche maskable) per «Aggiungi alla schermata Home»,

piu' un web app manifest in GET /manifest.webmanifest.

conteggi totalItems delle collection ActivityPub del server di origine,

con cache di 24 ore (OPENBOOK_COLLECTIONS_CACHE_TTL_HOURS). La data di

iscrizione arriva dal campo published del documento Person (o equivalenti

JSON-LD / createdAt). Visitando il profilo si rilegge l'Actor se la data

non e' ancora in cache. Si conserva anche un campione della prima pagina

della lista (non l'intero grafo, e non nel grafo locale follows).

personalizzato che sovrascrive il template sul sito pubblico (non sul

pannello). Anteprima live in iframe su una pagina di esempio

(GET /admin/aspetto/anteprima); il sito reale cambia solo al salvataggio.

(sidebar e GET /tendenze, default 7). I conteggi oltre 999 si mostrano

in forma compatta (19,6k in italiano, 19.6k in inglese).

un dropdown con chi ha reagito (GET /posts/{post}/piace-a e

GET /posts/{post}/condiviso-da). L'icona continua a mettere mi piace o

ad aprire il menu condividi. Senza JavaScript le stesse URL mostrano una

pagina con l'elenco. Massimo 40 nomi, poi "e altri N". La visibilita'

e' la stessa del post.

usano i totalItems delle collection likes/shares del server di

origine (stesso GET della Note usato per i commenti, TTL

OPENBOOK_REPLIES_CACHE_TTL_HOURS). Se il totale non e' inline, al

massimo un GET in piu' per collection, senza scaricare l'elenco

completo. Il conteggio locale resta un pavimento. I totali arrivano

anche dall'outbox quando si importa il post.

GET /attori/{actor}/attivita): stream cronologico di **commenti

(risposte) e condivisioni visibili a questa istanza, solo per

utenti autenticati**. I visitatori anonimi non vedono il tab e

/attivita reindirizza al login. I mi piace, i post propri e i follow

non compaiono: i post restano nel tab dedicato. Scorrimento infinito

(OPENBOOK_ACTIVITY_PER_PAGE, default 20). Sui profili remoti la

cronologia e' solo cio' che l'istanza gia' conosce (non l'outbox

completo). Community e feed RSS non hanno il tab.

(non i messaggi privati). Apre lo stesso composer della pubblicazione,

in un dialog se JavaScript e' disponibile (GET /posts/{post}/modifica

come fallback senza JS). Il salvataggio (PUT /posts/{post}) aggiorna

testo, titolo, avviso e visibilita', consente di aggiungere allegati,

e ritrasmette un'attivita' ActivityPub Update alla stessa audience.

Changed

giorni impostata dall'istanza, es. In tendenza (7d).

GET /attori/{actor}/foto): scorrimento infinito come gli altri feed,

al posto della paginazione a numeri di pagina. Senza JavaScript resta

un link "Foto successive".

testo del corpo, solo in grassetto. Prima ereditavano l'h2 del browser

e risultavano sproporzionati.

Le risposte piu' profonde restano visibili nello stesso elenco, con il

collegamento "in risposta a" verso il padre. Cliccando l'orario si apre

la pagina del commento (GET /comments/{comment}): il post e i padri

sopra, i figli sotto. I client ActivityPub continuano a ricevere la Note.

(reply e citazione restano distinte, una sola notifica in-app). La Note

federata antepone pero' la menzione dell'autore a cui si risponde

(tag Mention, HTML, audience to/cc), cosi' Mastodon e gli altri

client remoti inviano la notifica che si aspettano.

Fixed

post/commento padre: una sola notifica in-app. Commento/risposta e

menzione condividono l'id del commento (notifiable); se il thread e'

gia' stato notificato, la menzione non viene creata. Una menzione a

un'altra persona nello stesso commento continua ad arrivare.

in cache. Visitando il profilo si rilegge il documento Person e si

accettano anche published in JSON-LD e createdAt.

piu' appiattiti in un unico paragrafo. Si usa lo stesso HTML dei post

(<br> per i singoli a-capo, <p> distinti per i paragrafi), cosi'

Mastodon e gli altri client remoti mostrano la formattazione.

piu' che l'utente «ha iniziato a seguirti». Distingue iscrizione

(:name si e' iscritto a :community) e richiesta su community privata.

rel="tag" e class="mention hashtag", come Mastodon. Senza, Mastodon

trattava il primo hashtag come URL normale e mostrava la preview della

pagina tag di questa istanza (/tag/…).

<p><b>…</b></p> nel content per Mastodon). Un'altra istanza Openbook

che apre il profilo remoto mostra il titolo come titolo, senza

duplicarlo nel corpo. Le Note vecchie, con solo il <b> iniziale,

vengono riconosciute allo stesso modo.

delle statistiche InnoDB passa da 20 a 100 pagine

(STATS_SAMPLE_PAGES). Con il default l'optimizer a volte partiva da

un full scan di hashtags invece che dai post recenti. SQLite non e'

toccato.

aggiunge in coda una menzione visibile in @community@dominio (stesso

href del tag Mention, class="u-url mention"). Mastodon mostra cosi'

l'appartenenza nel testo; audience e tag da soli non bastano. In locale

il corpo del post resta pulito: la community resta il badge della card.

← All releases · Download .zip