Add support for remote interact (#519)

Add support for remote interaction ([this thing](https://eldritch.cafe/users/Barmaid/remote_follow) in mastodon)

- [x] create the endpoint dispatching remote interactions to local pages
- [x] add this endpoint to web-finger
- [x] propose remote interaction when following and not connected
- [x] propose remote interaction when liking/sharing and not connected
- [x] propose remote interaction when commenting and not connected
- [x] fetch posts/comments we don't know but remote interaction was requested for ?
pull/479/head
fdb-hiroshima 5 years ago committed by Baptiste Gelez
parent 12efe721cc
commit 0d708e1639

@ -147,10 +147,10 @@ aliases:
- *restore_cache_plume_dead_code
- run:
name: install server
command: cargo install --debug --no-default-features --features="${FEATURES}",test --path . || cargo install --debug --no-default-features --features="${FEATURES}",test --path .
command: cargo install --debug --no-default-features --features="${FEATURES}",test --path . -f || cargo install --debug --no-default-features --features="${FEATURES}",test --path . -f
- run:
name: install plm
command: cargo install --debug --no-default-features --features="${FEATURES}" --path plume-cli || cargo install --debug --no-default-features --features="${FEATURES}" --path plume-cli
command: cargo install --debug --no-default-features --features="${FEATURES}" --path plume-cli -f || cargo install --debug --no-default-features --features="${FEATURES}" --path plume-cli -f
- run:
name: run test
command: ./script/run_browser_test.sh

7
Cargo.lock generated

@ -1807,6 +1807,7 @@ dependencies = [
"rpassword 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rsass 0.9.8 (registry+https://github.com/rust-lang/crates.io-index)",
"ructe 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)",
"runtime-fmt 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"scheduled-thread-pool 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2373,6 +2374,11 @@ dependencies = [
"nom 4.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "runtime-fmt"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "rust-stemmers"
version = "1.1.0"
@ -3502,6 +3508,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
"checksum rpassword 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d37473170aedbe66ffa3ad3726939ba677d83c646ad4fd99e5b4bc38712f45ec"
"checksum rsass 0.9.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4534cc03040beacd2668621815f26fe57e5b7cfe085790f98e5e87c1612316"
"checksum ructe 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "159f449df09bdd1c92080d0fc1d1c5e11abe81301496370dfee546d985a46dec"
"checksum runtime-fmt 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "647a821d66049faccc993fc3c379d1181b81a484097495cda79ffdb17b55b87f"
"checksum rust-stemmers 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05928c187b85b38f6b98db43057a24f0245163635a5ce6325a4f77a833d646aa"
"checksum rustc-demangle 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "adacaae16d02b6ec37fdc7acfcddf365978de76d1983d3ee22afc260e1ca9619"
"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"

@ -23,6 +23,7 @@ rocket = "0.4.0"
rocket_contrib = { version = "0.4.0", features = ["json"] }
rocket_i18n = "0.4.0"
rpassword = "2.0"
runtime-fmt = "0.3.0"
scheduled-thread-pool = "0.2.0"
serde = "1.0"
serde_json = "1.0"

@ -253,6 +253,15 @@ impl User {
User::from_id(c, link.href.as_ref()?, None).map_err(|(_, e)| e)
}
pub fn fetch_remote_interact_uri(acct: &str) -> Result<String> {
resolve(acct.to_owned(), true)?
.links
.into_iter()
.find(|l| l.rel == "http://ostatus.org/schema/1.0/subscribe")
.and_then(|l| l.template)
.ok_or(Error::Webfinger)
}
fn fetch(url: &str) -> Result<CustomPerson> {
let mut res = Client::new()
.get(url)
@ -640,7 +649,7 @@ impl User {
links: vec![
Link {
rel: String::from("http://webfinger.net/rel/profile-page"),
mime_type: None,
mime_type: Some(String::from("text/html")),
href: Some(self.ap_url.clone()),
template: None,
},
@ -660,6 +669,15 @@ impl User {
href: Some(self.ap_url.clone()),
template: None,
},
Link {
rel: String::from("http://ostatus.org/schema/1.0/subscribe"),
mime_type: None,
href: None,
template: Some(format!(
"{}/remote_interact?{{uri}}",
self.get_instance(conn)?.public_domain
)),
},
],
})
}

@ -86,6 +86,12 @@ msgstr "منشور جديد"
msgid "Edit {0}"
msgstr "تعديل {0}"
# src/routes/user.rs:222
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
# src/routes/reshares.rs:47
msgid "To reshare a post, you need to be logged in"
msgstr ""
@ -254,6 +260,17 @@ msgstr "يديره"
msgid "Runs Plume {0}"
msgstr "مدعوم بـ Plume {0}"
#, fuzzy
msgid "Follow {}"
msgstr "اتبع"
#, fuzzy
msgid "Login to follow"
msgstr "قم بتسجيل الدخول قصد مشاركته"
msgid "Enter your full username to follow"
msgstr ""
msgid "Edit your account"
msgstr "تعديل حسابك"
@ -565,6 +582,16 @@ msgstr "تسجيل الدخول"
msgid "Username, or email"
msgstr "اسم المستخدم أو عنوان البريد الالكتروني"
msgid "Interact with {}"
msgstr ""
#, fuzzy
msgid "Log in to interact"
msgstr "قم بتسجيل الدخول قصد الإعجاب به"
msgid "Enter your full username to interact"
msgstr ""
msgid "Publish"
msgstr "انشر"
@ -663,7 +690,9 @@ msgid "Boost"
msgstr "رقّي"
#, fuzzy
msgid "Log in, or use your Fediverse account to interact with this article"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
"قم بتسجيل الدخول أو استخدم حسابك على الفديفرس إن كنت ترغب في التفاعل مع هذا "
"المقال"
@ -789,6 +818,21 @@ msgstr "المقالات الموسومة بـ \"{0}\""
msgid "There are currently no articles with such a tag"
msgstr "حاليا لا يوجد هناك مقال يحتوي على هذا الوسم"
#, fuzzy
msgid "I'm from this instance"
msgstr "عن مثيل الخادوم هذا"
msgid "I'm from another instance"
msgstr ""
# src/template_utils.rs:225
msgid "Example: user@plu.me"
msgstr ""
#, fuzzy
msgid "Continue to your instance"
msgstr "إعداد مثيل الخادم"
msgid "Upload"
msgstr "إرسال"
@ -904,15 +948,9 @@ msgstr "استخدمها كصورة رمزية"
#~ msgid "Unfollow"
#~ msgstr "الغاء المتابعة"
#~ msgid "Follow"
#~ msgstr "اتبع"
#~ msgid "Comment \"{0}\""
#~ msgstr "تعليق \"{0}\""
#~ msgid "Configure your instance"
#~ msgstr "إعداد مثيل الخادم"
#~ msgid "Let&#x27;s go!"
#~ msgstr "هيا بنا!"
@ -981,9 +1019,3 @@ msgstr "استخدمها كصورة رمزية"
#~ msgid "Next page"
#~ msgstr "الصفحة التالية"
#~ msgid "Login to like"
#~ msgstr "قم بتسجيل الدخول قصد الإعجاب به"
#~ msgid "Login to boost"
#~ msgstr "قم بتسجيل الدخول قصد مشاركته"

@ -85,6 +85,12 @@ msgstr "Neuer Beitrag"
msgid "Edit {0}"
msgstr "Bearbeiten"
# src/routes/user.rs:222
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
# src/routes/reshares.rs:47
msgid "To reshare a post, you need to be logged in"
msgstr ""
@ -256,6 +262,17 @@ msgstr "Administriert von"
msgid "Runs Plume {0}"
msgstr "Verwendet Plume {0}"
#, fuzzy
msgid "Follow {}"
msgstr "Folgen"
#, fuzzy
msgid "Login to follow"
msgstr "Um zu boosten, musst du eingeloggt sein"
msgid "Enter your full username to follow"
msgstr ""
msgid "Edit your account"
msgstr "Ändere deinen Account"
@ -568,6 +585,16 @@ msgstr "Einloggen"
msgid "Username, or email"
msgstr "Nutzername oder E-Mail"
msgid "Interact with {}"
msgstr ""
#, fuzzy
msgid "Log in to interact"
msgstr "Um zu liken, musst du eingeloggt sein"
msgid "Enter your full username to interact"
msgstr ""
msgid "Publish"
msgstr "Veröffentlichen"
@ -664,7 +691,9 @@ msgid "Boost"
msgstr "Boosten"
#, fuzzy
msgid "Log in, or use your Fediverse account to interact with this article"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
"Log dich ein oder nutze deinen Fediverse-Account um mit diesem Artikel zu "
"interagieren"
@ -796,6 +825,21 @@ msgstr "Mit \"{0}\" markierte Artikel"
msgid "There are currently no articles with such a tag"
msgstr ""
#, fuzzy
msgid "I'm from this instance"
msgstr "Über diese Instanz"
msgid "I'm from another instance"
msgstr ""
# src/template_utils.rs:225
msgid "Example: user@plu.me"
msgstr ""
#, fuzzy
msgid "Continue to your instance"
msgstr "Konfiguriere deine Instanz"
msgid "Upload"
msgstr "Hochladen"
@ -909,9 +953,6 @@ msgstr "Als Avatar verwenden"
#~ msgid "Unfollow"
#~ msgstr "Folgen"
#~ msgid "Follow"
#~ msgstr "Folgen"
#, fuzzy
#~ msgid "No articles to see here yet."
#~ msgstr "Bisher keine Artikel vorhanden."
@ -985,9 +1026,6 @@ msgstr "Als Avatar verwenden"
#~ msgid "Comment \"{0}\""
#~ msgstr "Kommentar \"{0}\""
#~ msgid "Configure your instance"
#~ msgstr "Konfiguriere deine Instanz"
#~ msgid "Let&#x27;s go!"
#~ msgstr "Los geht's!"
@ -1047,12 +1085,6 @@ msgstr "Als Avatar verwenden"
#~ msgid "The password should be at least 8 characters long"
#~ msgstr "Passwort sollte mindestens 8 Zeichen lang sein"
#~ msgid "Login to like"
#~ msgstr "Um zu liken, musst du eingeloggt sein"
#~ msgid "Login to boost"
#~ msgstr "Um zu boosten, musst du eingeloggt sein"
#~ msgid "Create a post"
#~ msgstr "Beitrag erstellen"

@ -90,6 +90,12 @@ msgstr ""
msgid "Edit {0}"
msgstr ""
# src/routes/user.rs:222
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
# src/routes/reshares.rs:47
msgid "To reshare a post, you need to be logged in"
msgstr ""
@ -251,6 +257,15 @@ msgstr ""
msgid "Runs Plume {0}"
msgstr ""
msgid "Follow {}"
msgstr ""
msgid "Login to follow"
msgstr ""
msgid "Enter your full username to follow"
msgstr ""
msgid "Edit your account"
msgstr ""
@ -540,6 +555,15 @@ msgstr ""
msgid "Username, or email"
msgstr ""
msgid "Interact with {}"
msgstr ""
msgid "Log in to interact"
msgstr ""
msgid "Enter your full username to interact"
msgstr ""
msgid "Publish"
msgstr ""
@ -625,7 +649,9 @@ msgstr ""
msgid "Boost"
msgstr ""
msgid "Log in, or use your Fediverse account to interact with this article"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
msgid "Comments"
@ -737,6 +763,19 @@ msgstr ""
msgid "There are currently no articles with such a tag"
msgstr ""
msgid "I'm from this instance"
msgstr ""
msgid "I'm from another instance"
msgstr ""
# src/template_utils.rs:225
msgid "Example: user@plu.me"
msgstr ""
msgid "Continue to your instance"
msgstr ""
msgid "Upload"
msgstr ""

@ -86,6 +86,12 @@ msgstr "Nueva publicación"
msgid "Edit {0}"
msgstr ""
# src/routes/user.rs:222
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
# src/routes/reshares.rs:47
msgid "To reshare a post, you need to be logged in"
msgstr ""
@ -246,6 +252,17 @@ msgstr ""
msgid "Runs Plume {0}"
msgstr ""
#, fuzzy
msgid "Follow {}"
msgstr "Seguir"
#, fuzzy
msgid "Login to follow"
msgstr "Dejar de seguir"
msgid "Enter your full username to follow"
msgstr ""
msgid "Edit your account"
msgstr "Edita tu cuenta"
@ -537,6 +554,15 @@ msgstr "Iniciar Sesión"
msgid "Username, or email"
msgstr "Nombre de usuario o correo electrónico"
msgid "Interact with {}"
msgstr ""
msgid "Log in to interact"
msgstr ""
msgid "Enter your full username to interact"
msgstr ""
msgid "Publish"
msgstr "Publicar"
@ -623,7 +649,9 @@ msgstr "Ya no me gusta"
msgid "Boost"
msgstr ""
msgid "Log in, or use your Fediverse account to interact with this article"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
msgid "Comments"
@ -738,6 +766,20 @@ msgstr ""
msgid "There are currently no articles with such a tag"
msgstr ""
msgid "I'm from this instance"
msgstr ""
msgid "I'm from another instance"
msgstr ""
# src/template_utils.rs:225
msgid "Example: user@plu.me"
msgstr ""
#, fuzzy
msgid "Continue to your instance"
msgstr "Configure su instancia"
msgid "Upload"
msgstr ""
@ -812,9 +854,6 @@ msgstr ""
#~ msgid "Comment \"{0}\""
#~ msgstr "Comentario \"{0}\""
#~ msgid "Configure your instance"
#~ msgstr "Configure su instancia"
#~ msgid "Let&#x27;s go!"
#~ msgstr "Vamos!"
@ -824,12 +863,6 @@ msgstr ""
#~ msgid "Create a post"
#~ msgstr "Crear una publicación"
#~ msgid "Follow"
#~ msgstr "Seguir"
#~ msgid "Unfollow"
#~ msgstr "Dejar de seguir"
#~ msgid "One follower"
#~ msgid_plural "{0} followers"
#~ msgstr[0] "Un seguidor"

@ -88,6 +88,12 @@ msgstr "Nouvel article"
msgid "Edit {0}"
msgstr "Modifier {0}"
# src/routes/user.rs:222
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
# src/routes/reshares.rs:47
msgid "To reshare a post, you need to be logged in"
msgstr ""
@ -257,6 +263,17 @@ msgstr "Administré par"
msgid "Runs Plume {0}"
msgstr "Propulsé par Plume {0}"
#, fuzzy
msgid "Follow {}"
msgstr "Sabonner"
#, fuzzy
msgid "Login to follow"
msgstr "Connectez-vous pour partager"
msgid "Enter your full username to follow"
msgstr ""
msgid "Edit your account"
msgstr "Modifier votre compte"
@ -565,6 +582,16 @@ msgstr "Se connecter"
msgid "Username, or email"
msgstr "Nom dutilisateur ou adresse électronique"
msgid "Interact with {}"
msgstr ""
#, fuzzy
msgid "Log in to interact"
msgstr "Connectez-vous pour aimer"
msgid "Enter your full username to interact"
msgstr ""
msgid "Publish"
msgstr "Publier"
@ -659,7 +686,9 @@ msgid "Boost"
msgstr "Partager"
#, fuzzy
msgid "Log in, or use your Fediverse account to interact with this article"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
"Connectez-vous ou utilisez votre compte sur le Fediverse pour interagir avec "
"cet article"
@ -793,6 +822,21 @@ msgstr "Articles taggués « {0} »"
msgid "There are currently no articles with such a tag"
msgstr "Il n'y a pas encore d'article avec ce tag"
#, fuzzy
msgid "I'm from this instance"
msgstr "À propos de cette instance"
msgid "I'm from another instance"
msgstr ""
# src/template_utils.rs:225
msgid "Example: user@plu.me"
msgstr ""
#, fuzzy
msgid "Continue to your instance"
msgstr "Configurer votre instance"
msgid "Upload"
msgstr "Téléverser"
@ -907,9 +951,6 @@ msgstr "Utiliser comme avatar"
#~ msgid "Unfollow"
#~ msgstr "Sabonner"
#~ msgid "Follow"
#~ msgstr "Sabonner"
#, fuzzy
#~ msgid "No articles to see here yet."
#~ msgstr "Aucun article pour le moment."
@ -972,14 +1013,6 @@ msgstr "Utiliser comme avatar"
#~ "Plume is a decentralized blogging engine and a member of the Fediverse."
#~ msgstr "Plume est un moteur de blog décentralisé."
#, fuzzy
#~ msgid "Log In to like"
#~ msgstr "Connectez-vous pour aimer"
#, fuzzy
#~ msgid "Log In to boost"
#~ msgstr "Connectez-vous pour partager"
#, fuzzy
#~ msgid "Create a new post"
#~ msgstr "Créer un article"
@ -987,9 +1020,6 @@ msgstr "Utiliser comme avatar"
#~ msgid "Comment \"{0}\""
#~ msgstr "Commenter « {0} »"
#~ msgid "Configure your instance"
#~ msgstr "Configurer votre instance"
#~ msgid "Let&#x27;s go!"
#~ msgstr "Cest parti !"

@ -84,6 +84,12 @@ msgstr "Nova entrada"
msgid "Edit {0}"
msgstr "Editar"
# src/routes/user.rs:222
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
# src/routes/reshares.rs:47
msgid "To reshare a post, you need to be logged in"
msgstr ""
@ -255,6 +261,17 @@ msgstr "Administrada por"
msgid "Runs Plume {0}"
msgstr "Versión Plume {0}"
#, fuzzy
msgid "Follow {}"
msgstr "Seguir"
#, fuzzy
msgid "Login to follow"
msgstr "Conéctese para promover"
msgid "Enter your full username to follow"
msgstr ""
msgid "Edit your account"
msgstr "Edite a súa conta"
@ -564,6 +581,16 @@ msgstr "Conectar"
msgid "Username, or email"
msgstr "Usuaria ou correo-e"
msgid "Interact with {}"
msgstr ""
#, fuzzy
msgid "Log in to interact"
msgstr "Conéctese para gostar"
msgid "Enter your full username to interact"
msgstr ""
msgid "Publish"
msgstr "Publicar"
@ -658,7 +685,9 @@ msgid "Boost"
msgstr "Promover"
#, fuzzy
msgid "Log in, or use your Fediverse account to interact with this article"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
"Conéctese ou utilice a súa conta no fediverso para interactuar con este "
"artigo"
@ -787,6 +816,21 @@ msgstr "Artigos etiquetados con {0}"
msgid "There are currently no articles with such a tag"
msgstr ""
#, fuzzy
msgid "I'm from this instance"
msgstr "Sobre esta instancia"
msgid "I'm from another instance"
msgstr ""
# src/template_utils.rs:225
msgid "Example: user@plu.me"
msgstr ""
#, fuzzy
msgid "Continue to your instance"
msgstr "Configure a súa instancia"
msgid "Upload"
msgstr "Subir"
@ -901,9 +945,6 @@ msgstr "Utilizar como avatar"
#~ msgid "Unfollow"
#~ msgstr "Seguir"
#~ msgid "Follow"
#~ msgstr "Seguir"
#, fuzzy
#~ msgid "No articles to see here yet."
#~ msgstr "Aínda non hai entradas publicadas"
@ -985,9 +1026,6 @@ msgstr "Utilizar como avatar"
#~ msgid "Comment \"{0}\""
#~ msgstr "Comentar \"{0}\""
#~ msgid "Configure your instance"
#~ msgstr "Configure a súa instancia"
#~ msgid "Let&#x27;s go!"
#~ msgstr "Imos!"
@ -1038,12 +1076,6 @@ msgstr "Utilizar como avatar"
#~ msgid "The password should be at least 8 characters long"
#~ msgstr "O contrasinal debe ter ao menos 8 caracteres"
#~ msgid "Login to like"
#~ msgstr "Conéctese para gostar"
#~ msgid "Login to boost"
#~ msgstr "Conéctese para promover"
#~ msgid "Create a post"
#~ msgstr "Crear unha entrada"

@ -84,6 +84,12 @@ msgstr "Nuovo post"
msgid "Edit {0}"
msgstr "Modifica"
# src/routes/user.rs:222
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
# src/routes/reshares.rs:47
msgid "To reshare a post, you need to be logged in"
msgstr ""
@ -255,6 +261,17 @@ msgstr "Amministrata da"
msgid "Runs Plume {0}"
msgstr "Utilizza Plume {0}"
#, fuzzy
msgid "Follow {}"
msgstr "Segui"
#, fuzzy
msgid "Login to follow"
msgstr "Accedi per boostare"
msgid "Enter your full username to follow"
msgstr ""
msgid "Edit your account"
msgstr "Modifica il tuo account"
@ -567,6 +584,16 @@ msgstr "Accedi"
msgid "Username, or email"
msgstr "Nome utente o email"
msgid "Interact with {}"
msgstr ""
#, fuzzy
msgid "Log in to interact"
msgstr "Accedi per mettere mi piace"
msgid "Enter your full username to interact"
msgstr ""
msgid "Publish"
msgstr "Pubblica"
@ -663,7 +690,9 @@ msgid "Boost"
msgstr "Boost"
#, fuzzy
msgid "Log in, or use your Fediverse account to interact with this article"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
"Accedi o utilizza un tuo account del Fediverso per interagire con questo "
"articolo"
@ -794,6 +823,21 @@ msgstr "Articoli etichettati \"{0}\""
msgid "There are currently no articles with such a tag"
msgstr "Attualmente non è ancora presente nessun articolo con quell'etichetta"
#, fuzzy
msgid "I'm from this instance"
msgstr "A proposito di questa istanza"
msgid "I'm from another instance"
msgstr ""
# src/template_utils.rs:225
msgid "Example: user@plu.me"
msgstr ""
#, fuzzy
msgid "Continue to your instance"
msgstr "Configura la tua istanza"
msgid "Upload"
msgstr "Carica"
@ -908,9 +952,6 @@ msgstr "Usa come avatar"
#~ msgid "Unfollow"
#~ msgstr "Segui"
#~ msgid "Follow"
#~ msgstr "Segui"
#, fuzzy
#~ msgid "No articles to see here yet."
#~ msgstr "Nessun post da mostrare qui."
@ -988,9 +1029,6 @@ msgstr "Usa come avatar"
#~ msgid "Comment \"{0}\""
#~ msgstr "Commenta \"{0}\""
#~ msgid "Configure your instance"
#~ msgstr "Configura la tua istanza"
#~ msgid "Let&#x27;s go!"
#~ msgstr "Andiamo!"
@ -1041,12 +1079,6 @@ msgstr "Usa come avatar"
#~ msgid "The password should be at least 8 characters long"
#~ msgstr "Le password devono essere lunghe almeno 8 caratteri"
#~ msgid "Login to like"
#~ msgstr "Accedi per mettere mi piace"
#~ msgid "Login to boost"
#~ msgstr "Accedi per boostare"
#~ msgid "Create a post"
#~ msgstr "Crea un post"

@ -87,6 +87,12 @@ msgstr "新しい記事"
msgid "Edit {0}"
msgstr "編集"
# src/routes/user.rs:222
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
# src/routes/reshares.rs:47
msgid "To reshare a post, you need to be logged in"
msgstr ""
@ -256,6 +262,17 @@ msgstr "管理者"
msgid "Runs Plume {0}"
msgstr "Plume {{ version }} を実行中"
#, fuzzy
msgid "Follow {}"
msgstr "フォロー"
#, fuzzy
msgid "Login to follow"
msgstr "ブーストするにはログインしてください"
msgid "Enter your full username to follow"
msgstr ""
msgid "Edit your account"
msgstr "自分のアカウントを編集"
@ -571,6 +588,16 @@ msgstr "ログイン"
msgid "Username, or email"
msgstr "ユーザー名またはメールアドレス"
msgid "Interact with {}"
msgstr ""
#, fuzzy
msgid "Log in to interact"
msgstr "いいねするにはログインしてください"
msgid "Enter your full username to interact"
msgstr ""
msgid "Publish"
msgstr "公開"
@ -660,7 +687,9 @@ msgid "Boost"
msgstr "ブースト"
#, fuzzy
msgid "Log in, or use your Fediverse account to interact with this article"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
"この記事と関わるにはログインするか Fediverse アカウントを使用してください"
@ -785,6 +814,22 @@ msgstr "\"{{ tag }}\" タグの記事"
msgid "There are currently no articles with such a tag"
msgstr "そのタグのある記事は現在ありません"
#, fuzzy
msgid "I'm from this instance"
msgstr "このインスタンスについて"
#, fuzzy
msgid "I'm from another instance"
msgstr "件"
# src/template_utils.rs:225
msgid "Example: user@plu.me"
msgstr ""
#, fuzzy
msgid "Continue to your instance"
msgstr "インスタンスを設定"
msgid "Upload"
msgstr "アップロード"
@ -896,16 +941,10 @@ msgstr "アバターとして使う"
#~ msgid "Unfollow"
#~ msgstr "フォロー解除"
#~ msgid "Follow"
#~ msgstr "フォロー"
#, fuzzy
#~ msgid "Comment \"{0}\""
#~ msgstr "\"{{ post }}\" にコメント"
#~ msgid "Configure your instance"
#~ msgstr "インスタンスを設定"
#~ msgid "Let&#x27;s go!"
#~ msgstr "開始しましょう!"
@ -974,12 +1013,6 @@ msgstr "アバターとして使う"
#~ msgid "Next page"
#~ msgstr "次のページ"
#~ msgid "Login to like"
#~ msgstr "いいねするにはログインしてください"
#~ msgid "Login to boost"
#~ msgstr "ブーストするにはログインしてください"
#~ msgid "Welcome to {{ instance_name | escape }}"
#~ msgstr "{{ instance_name | escape }} へようこそ"
@ -1031,9 +1064,6 @@ msgstr "アバターとして使う"
#~ msgid "And connected to"
#~ msgstr "他のインスタンスからの接続数"
#~ msgid "other instances"
#~ msgstr "件"
#~ msgid "Edit {{ post }}"
#~ msgstr "{{ post }} を編集"

@ -89,6 +89,12 @@ msgstr "Nytt innlegg"
msgid "Edit {0}"
msgstr "Kommentér \"{0}\""
# src/routes/user.rs:222
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
# src/routes/reshares.rs:47
msgid "To reshare a post, you need to be logged in"
msgstr ""
@ -263,6 +269,17 @@ msgstr "Administrasjon"
msgid "Runs Plume {0}"
msgstr ""
#, fuzzy
msgid "Follow {}"
msgstr "Følg"
#, fuzzy
msgid "Login to follow"
msgstr "Logg inn"
msgid "Enter your full username to follow"
msgstr ""
msgid "Edit your account"
msgstr "Rediger kontoen din"
@ -592,6 +609,15 @@ msgstr "Logg inn"
msgid "Username, or email"
msgstr "Brukernavn eller epost"
msgid "Interact with {}"
msgstr ""
msgid "Log in to interact"
msgstr ""
msgid "Enter your full username to interact"
msgstr ""
msgid "Publish"
msgstr ""
@ -686,7 +712,9 @@ msgid "Boost"
msgstr ""
#, fuzzy
msgid "Log in, or use your Fediverse account to interact with this article"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
"Logg inn eller bruk din Fediverse-konto for å gjøre noe med denne artikkelen"
@ -811,6 +839,20 @@ msgstr "Om {0}"
msgid "There are currently no articles with such a tag"
msgstr ""
#, fuzzy
msgid "I'm from this instance"
msgstr "Om denne instansen"
msgid "I'm from another instance"
msgstr ""
# src/template_utils.rs:225
msgid "Example: user@plu.me"
msgstr ""
msgid "Continue to your instance"
msgstr ""
msgid "Upload"
msgstr ""
@ -924,9 +966,6 @@ msgstr ""
#~ msgid "Unfollow"
#~ msgstr "Slutt å følge"
#~ msgid "Follow"
#~ msgstr "Følg"
#, fuzzy
#~ msgid "No articles to see here yet."
#~ msgstr "Ingen innlegg å vise enda."
@ -993,10 +1032,6 @@ msgstr ""
#~ msgid "Invalid email"
#~ msgstr "Ugyldig epost"
#, fuzzy
#~ msgid "Log In to like"
#~ msgstr "Logg inn"
#, fuzzy
#~ msgid "Your drafts"
#~ msgstr "Din oversikt"

@ -81,6 +81,12 @@ msgstr "Nowy wpis"
msgid "Edit {0}"
msgstr "Edytuj {0}"
# src/routes/user.rs:222
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
# src/routes/reshares.rs:47
msgid "To reshare a post, you need to be logged in"
msgstr ""
@ -242,6 +248,17 @@ msgstr "Administrowany przez"
msgid "Runs Plume {0}"
msgstr "Działa na Plume {0}"
#, fuzzy
msgid "Follow {}"
msgstr "Obserwuj"
#, fuzzy
msgid "Login to follow"
msgstr "Zaloguj się aby podbić"
msgid "Enter your full username to follow"
msgstr ""
msgid "Edit your account"
msgstr "Edytuj swoje konto"
@ -547,6 +564,16 @@ msgstr "Zaloguj się"
msgid "Username, or email"
msgstr "Nazwa użytkownika lub adres e-mail"
msgid "Interact with {}"
msgstr ""
#, fuzzy
msgid "Log in to interact"
msgstr "Zaloguj się aby polubić"
msgid "Enter your full username to interact"
msgstr ""
msgid "Publish"
msgstr "Opublikuj"
@ -635,7 +662,9 @@ msgid "Boost"
msgstr "Podbij"
#, fuzzy
msgid "Log in, or use your Fediverse account to interact with this article"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
"Zaloguj się lub użyj konta w Fediwersum, aby wejść w interakcje z tym "
"artykułem"
@ -757,6 +786,22 @@ msgstr "Artykuły oznaczone „{0}”"
msgid "There are currently no articles with such a tag"
msgstr "Obecnie nie istnieją artykuły z tym tagiem"
#, fuzzy
msgid "I'm from this instance"
msgstr "O tej instancji"
#, fuzzy
msgid "I'm from another instance"
msgstr "innych instancji"
# src/template_utils.rs:225
msgid "Example: user@plu.me"
msgstr ""
#, fuzzy
msgid "Continue to your instance"
msgstr "Skonfiguruj swoją instancję"
msgid "Upload"
msgstr "Wyślij"
@ -868,9 +913,6 @@ msgstr "Użyj jako awataru"
#~ msgid "Unfollow"
#~ msgstr "Przestań obserwować"
#~ msgid "Follow"
#~ msgstr "Obserwuj"
#, fuzzy
#~ msgid "No articles to see here yet."
#~ msgstr "Brak wpisów do wyświetlenia."
@ -947,9 +989,6 @@ msgstr "Użyj jako awataru"
#~ msgid "Comment \"{0}\""
#~ msgstr "Komentarz „{0}”"
#~ msgid "Configure your instance"
#~ msgstr "Skonfiguruj swoją instancję"
#~ msgid "Let&#x27;s go!"
#~ msgstr "Przejdźmy dalej!"
@ -1020,12 +1059,6 @@ msgstr "Użyj jako awataru"
#~ msgid "Instance settings"
#~ msgstr "Ustawienia instancji"
#~ msgid "Login to like"
#~ msgstr "Zaloguj się aby polubić"
#~ msgid "Login to boost"
#~ msgstr "Zaloguj się aby podbić"
#~ msgid "Create a post"
#~ msgstr "Utwórz wpis"
@ -1049,6 +1082,3 @@ msgstr "Użyj jako awataru"
#~ msgid "And connected to"
#~ msgstr "Połączony z"
#~ msgid "other instances"
#~ msgstr "innych instancji"

@ -88,6 +88,10 @@ msgstr ""
msgid "Edit {0}"
msgstr ""
# src/routes/posts.rs:630
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
msgstr ""
# src/routes/reshares.rs:51
msgid "To reshare a post, you need to be logged in"
msgstr ""
@ -112,104 +116,124 @@ msgstr ""
msgid "To access your dashboard, you need to be logged in"
msgstr ""
# src/routes/user.rs:180
# src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in"
msgstr ""
# src/routes/user.rs:280
# src/routes/user.rs:344
msgid "To edit your profile, you need to be logged in"
msgstr ""
msgid "Plume"
msgid "Reset your password"
msgstr ""
msgid "Menu"
# src/template_utils.rs:217
msgid "E-mail"
msgstr ""
msgid "Search"
# src/template_utils.rs:220
msgid "Optional"
msgstr ""
msgid "Dashboard"
msgid "Send password reset link"
msgstr ""
msgid "Notifications"
msgid "Check your inbox!"
msgstr ""
msgid "Log Out"
msgid "We sent a mail to the address you gave us, with a link to reset your password."
msgstr ""
msgid "My account"
msgid "Log in"
msgstr ""
msgid "Log In"
# src/template_utils.rs:217
msgid "Username, or email"
msgstr ""
msgid "Register"
# src/template_utils.rs:217
msgid "Password"
msgstr ""
msgid "About this instance"
# src/template_utils.rs:217
msgid "New password"
msgstr ""
msgid "Source code"
# src/template_utils.rs:217
msgid "Confirmation"
msgstr ""
msgid "Matrix room"
msgid "Update password"
msgstr ""
msgid "Administration"
msgid "Administration of {0}"
msgstr ""
msgid "Welcome to {}"
msgid "Instances"
msgstr ""
msgid "Latest articles"
msgid "Configuration"
msgstr ""
msgid "Your feed"
msgid "Users"
msgstr ""
msgid "Federated feed"
msgid "Unblock"
msgstr ""
msgid "Local feed"
msgid "Block"
msgstr ""
msgid "Administration of {0}"
msgid "About {0}"
msgstr ""
msgid "Instances"
msgid "Home to <em>{0}</em> people"
msgstr ""
msgid "Configuration"
msgid "Who wrote <em>{0}</em> articles"
msgstr ""
msgid "Users"
msgid "And are connected to <em>{0}</em> other instances"
msgstr ""
msgid "Unblock"
msgid "Administred by"
msgstr ""
msgid "Block"
msgid "Runs Plume {0}"
msgstr ""
msgid "Ban"
msgid "All the articles of the Fediverse"
msgstr ""
msgid "All the articles of the Fediverse"
msgid "Latest articles"
msgstr ""
msgid "Your feed"
msgstr ""
msgid "Federated feed"
msgstr ""
msgid "Local feed"
msgstr ""
msgid "Welcome to {}"
msgstr ""
msgid "Articles from {}"
msgstr ""
msgid "Ban"
msgstr ""
msgid "Nothing to see here yet. Try subscribing to more people."
msgstr ""
# src/template_utils.rs:217
msgid "Name"
msgid "Administration"
msgstr ""
# src/template_utils.rs:220
msgid "Optional"
# src/template_utils.rs:217
msgid "Name"
msgstr ""
msgid "Allow anyone to register here"
@ -231,540 +255,545 @@ msgstr ""
msgid "Save these settings"
msgstr ""
msgid "About {0}"
msgid "Search"
msgstr ""
msgid "Home to <em>{0}</em> people"
msgid "Your query"
msgstr ""
msgid "Who wrote <em>{0}</em> articles"
msgid "Advanced search"
msgstr ""
msgid "And are connected to <em>{0}</em> other instances"
# src/template_utils.rs:305
msgid "Article title matching these words"
msgstr ""
msgid "Administred by"
msgid "Title"
msgstr ""
msgid "Runs Plume {0}"
# src/template_utils.rs:305
msgid "Subtitle matching these words"
msgstr ""
msgid "Edit your account"
msgid "Subtitle - byline"
msgstr ""
msgid "Your Profile"
# src/template_utils.rs:305
msgid "Content matching these words"
msgstr ""
msgid "To change your avatar, upload it to your gallery and then select from there."
msgid "Body content"
msgstr ""
msgid "Upload an avatar"
# src/template_utils.rs:305
msgid "From this date"
msgstr ""
# src/template_utils.rs:217
msgid "Display name"
# src/template_utils.rs:305
msgid "To this date"
msgstr ""
# src/template_utils.rs:217
msgid "Email"
# src/template_utils.rs:305
msgid "Containing these tags"
msgstr ""
msgid "Summary"
msgid "Tags"
msgstr ""
msgid "Update account"
# src/template_utils.rs:305
msgid "Posted on one of these instances"
msgstr ""
msgid "Danger zone"
msgid "Instance domain"
msgstr ""
msgid "Be very careful, any action taken here can't be cancelled."
# src/template_utils.rs:305
msgid "Posted by one of these authors"
msgstr ""
msgid "Delete your account"
msgid "Authors"
msgstr ""
msgid "Sorry, but as an admin, you can't leave your own instance."
# src/template_utils.rs:305
msgid "Posted on one of these blogs"
msgstr ""
msgid "Your Dashboard"
msgid "Blog title"
msgstr ""
msgid "Your Blogs"
# src/template_utils.rs:305
msgid "Written in this language"
msgstr ""
msgid "You don't have any blog yet. Create your own, or ask to join one."
msgid "Language"
msgstr ""
msgid "Start a new blog"
# src/template_utils.rs:305
msgid "Published under this license"
msgstr ""
msgid "Your Drafts"
msgid "Article license"
msgstr ""
msgid "Your media"
msgid "Search result for \"{0}\""
msgstr ""
msgid "Go to your gallery"
msgid "Search result"
msgstr ""
msgid "Create your account"
msgid "No result for your query"
msgstr ""
msgid "Create an account"
msgid "No more results for your query"
msgstr ""
# src/template_utils.rs:217
msgid "Username"
msgid "Edit \"{}\""
msgstr ""
# src/template_utils.rs:217
msgid "Password"
msgid "Description"
msgstr ""
# src/template_utils.rs:217
msgid "Password confirmation"
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
msgstr ""
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
msgid "Upload images"
msgstr ""
msgid "Articles"
msgid "Blog icon"
msgstr ""
msgid "Subscribers"
msgid "Blog banner"
msgstr ""
msgid "Subscriptions"
msgid "Update blog"
msgstr ""
msgid "Atom feed"
msgid "Danger zone"
msgstr ""
msgid "Recently boosted"
msgid "Be very careful, any action taken here can't be reversed."
msgstr ""
msgid "Admin"
msgid "Permanently delete this blog"
msgstr ""
msgid "It is you"
msgid "{}'s icon"
msgstr ""
msgid "Edit your profile"
msgid "New article"
msgstr ""
msgid "Open on {0}"
msgid "Edit"
msgstr ""
msgid "Unsubscribe"
msgstr ""
msgid "There's one author on this blog: "
msgid_plural "There are {0} authors on this blog: "
msgstr[0] ""
msgid "Subscribe"
msgid "No posts to see here yet."
msgstr ""
msgid "{0}'s subscriptions"
msgid "New Blog"
msgstr ""
msgid "{0}'s subscribers"
msgid "Create a blog"
msgstr ""
msgid "Respond"
msgid "Create blog"
msgstr ""
msgid "Are you sure?"
msgid "Articles tagged \"{0}\""
msgstr ""
msgid "Delete this comment"
msgid "There are currently no articles with such a tag"
msgstr ""
msgid "What is Plume?"
msgid "Written by {0}"
msgstr ""
msgid "Plume is a decentralized blogging engine."
msgid "Are you sure?"
msgstr ""
msgid "Authors can manage multiple blogs, each as its own website."
msgid "Delete this article"
msgstr ""
msgid "Articles are also visible on other Plume instances, and you can interact with them directly from other platforms like Mastodon."
msgid "Draft"
msgstr ""
msgid "Read the detailed rules"
msgid "All rights reserved."
msgstr ""
msgid "None"
msgid "This article is under the {0} license."
msgstr ""
msgid "No description"
msgid "Unsubscribe"
msgstr ""
msgid "View all"
msgid "Subscribe"
msgstr ""
msgid "By {0}"
msgid "One like"
msgid_plural "{0} likes"
msgstr[0] ""
msgid "I don't like this anymore"
msgstr ""
msgid "Draft"
msgid "Add yours"
msgstr ""
msgid "Your query"
msgid "One boost"
msgid_plural "{0} boosts"
msgstr[0] ""
msgid "I don't want to boost this anymore"
msgstr ""
msgid "Advanced search"
msgid "Boost"
msgstr ""
# src/template_utils.rs:305
msgid "Article title matching these words"
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
msgstr ""
msgid "Title"
msgid "Comments"
msgstr ""
# src/template_utils.rs:305
msgid "Subtitle matching these words"
# src/template_utils.rs:217
msgid "Content warning"
msgstr ""
msgid "Subtitle - byline"
msgid "Your comment"
msgstr ""
# src/template_utils.rs:305
msgid "Content matching these words"
msgid "Submit comment"
msgstr ""
msgid "Body content"
msgid "No comments yet. Be the first to react!"
msgstr ""
# src/template_utils.rs:305
msgid "From this date"
msgid "Interact with {}"
msgstr ""
# src/template_utils.rs:305
msgid "To this date"
msgid "Log in to interact"
msgstr ""
# src/template_utils.rs:305
msgid "Containing these tags"
msgid "Enter your full username to interact"
msgstr ""
msgid "Tags"
msgid "Publish"
msgstr ""
# src/template_utils.rs:305
msgid "Posted on one of these instances"
msgid "Classic editor (any changes will be lost)"
msgstr ""
msgid "Instance domain"
# src/template_utils.rs:217
msgid "Subtitle"
msgstr ""
# src/template_utils.rs:305
msgid "Posted by one of these authors"
msgid "Content"
msgstr ""
msgid "Authors"
msgid "You can upload media to your gallery, and then copy their Markdown code into your articles to insert them."
msgstr ""
# src/template_utils.rs:305
msgid "Posted on one of these blogs"
msgid "Upload media"
msgstr ""
msgid "Blog title"
# src/template_utils.rs:217
msgid "Tags, separated by commas"
msgstr ""
# src/template_utils.rs:305
msgid "Written in this language"
# src/template_utils.rs:217
msgid "License"
msgstr ""
msgid "Language"
# src/template_utils.rs:225
msgid "Leave it empty to reserve all rights"
msgstr ""
# src/template_utils.rs:305
msgid "Published under this license"
msgid "Illustration"
msgstr ""
msgid "Article license"
msgid "This is a draft, don't publish it yet."
msgstr ""
msgid "Search result for \"{0}\""
msgid "Update"
msgstr ""
msgid "Search result"
msgid "Update, or publish"
msgstr ""
msgid "No result for your query"
msgid "Publish your post"
msgstr ""
msgid "No more results for your query"
msgid "I'm from this instance"
msgstr ""
msgid "Reset your password"
msgid "I'm from another instance"
msgstr ""
# src/template_utils.rs:217
msgid "New password"
msgid "Username"
msgstr ""
# src/template_utils.rs:217
msgid "Confirmation"
# src/template_utils.rs:225
msgid "Example: user@plu.me"
msgstr ""
msgid "Update password"
msgid "Continue to your instance"
msgstr ""
msgid "Check your inbox!"
msgid "View all"
msgstr ""
msgid "We sent a mail to the address you gave us, with a link to reset your password."
msgid "By {0}"
msgstr ""
# src/template_utils.rs:217
msgid "E-mail"
msgid "What is Plume?"
msgstr ""
msgid "Send password reset link"
msgid "Plume is a decentralized blogging engine."
msgstr ""
msgid "Log in"
msgid "Authors can manage multiple blogs, each as its own website."
msgstr ""
# src/template_utils.rs:217
msgid "Username, or email"
msgid "Articles are also visible on other Plume instances, and you can interact with them directly from other platforms like Mastodon."
msgstr ""
msgid "Publish"
msgid "Create your account"
msgstr ""
msgid "Classic editor (any changes will be lost)"
msgid "Read the detailed rules"
msgstr ""
# src/template_utils.rs:217
msgid "Subtitle"
msgid "Respond"
msgstr ""
msgid "Content"
msgid "Delete this comment"
msgstr ""
msgid "You can upload media to your gallery, and then copy their Markdown code into your articles to insert them."
msgid "None"
msgstr ""
msgid "Upload media"
msgid "No description"
msgstr ""
# src/template_utils.rs:217
msgid "Tags, separated by commas"
msgid "Notifications"
msgstr ""
# src/template_utils.rs:217
msgid "License"
msgid "Plume"
msgstr ""
# src/template_utils.rs:225
msgid "Leave it empty to reserve all rights"
msgid "Menu"
msgstr ""
msgid "Illustration"
msgid "Dashboard"
msgstr ""
msgid "This is a draft, don't publish it yet."
msgid "Log Out"
msgstr ""
msgid "Update"
msgid "My account"
msgstr ""
msgid "Update, or publish"
msgid "Log In"
msgstr ""
msgid "Publish your post"
msgid "Register"
msgstr ""
msgid "Written by {0}"
msgid "About this instance"
msgstr ""
msgid "Edit"
msgid "Source code"
msgstr ""
msgid "Delete this article"
msgid "Matrix room"
msgstr ""
msgid "All rights reserved."
msgid "Your media"
msgstr ""
msgid "This article is under the {0} license."
msgid "Upload"
msgstr ""
msgid "One like"
msgid_plural "{0} likes"
msgstr[0] ""
msgid "You don't have any media yet."
msgstr ""
msgid "I don't like this anymore"
msgid "Content warning: {0}"
msgstr ""
msgid "Add yours"
msgid "Delete"
msgstr ""
msgid "One boost"
msgid_plural "{0} boosts"
msgstr[0] ""
msgid "Details"
msgstr ""
msgid "I don't want to boost this anymore"
msgid "Media details"
msgstr ""
msgid "Boost"
msgid "Go back to the gallery"
msgstr ""
msgid "Log in, or use your Fediverse account to interact with this article"
msgid "Markdown syntax"
msgstr ""
msgid "Comments"
msgid "Copy it into your articles, to insert this media:"
msgstr ""
# src/template_utils.rs:217
msgid "Content warning"
msgid "Use as an avatar"
msgstr ""
msgid "Your comment"
msgid "Media upload"
msgstr ""
msgid "Submit comment"
msgid "Useful for visually impaired people, as well as licensing information"
msgstr ""
msgid "No comments yet. Be the first to react!"
msgid "Leave it empty, if none is needed"
msgstr ""
msgid "Invalid CSRF token"
msgid "File"
msgstr ""
msgid "Something is wrong with your CSRF token. Make sure cookies are enabled in you browser, and try reloading this page. If you continue to see this error message, please report it."
msgid "Send"
msgstr ""
msgid "Page not found"
msgid "{0}'s subscriptions"
msgstr ""
msgid "We couldn't find this page."
msgid "Articles"
msgstr ""
msgid "The link that led you here may be broken."
msgid "Subscribers"
msgstr ""
msgid "The content you sent can't be processed."
msgid "Subscriptions"
msgstr ""
msgid "Maybe it was too long."
msgid "Your Dashboard"
msgstr ""
msgid "You are not authorized."
msgid "Your Blogs"
msgstr ""
msgid "Internal server error"
msgid "You don't have any blog yet. Create your own, or ask to join one."
msgstr ""
msgid "Something broke on our side."
msgid "Start a new blog"
msgstr ""
msgid "Sorry about that. If you think this is a bug, please report it."
msgid "Your Drafts"
msgstr ""
msgid "Edit \"{}\""
msgid "Go to your gallery"
msgstr ""
msgid "Description"
msgid "Admin"
msgstr ""
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
msgid "It is you"
msgstr ""
msgid "Upload images"
msgid "Edit your profile"
msgstr ""
msgid "Blog icon"
msgid "Open on {0}"
msgstr ""
msgid "Blog banner"
msgid "{0}'s subscribers"
msgstr ""
msgid "Update blog"
msgid "Edit your account"
msgstr ""
msgid "Be very careful, any action taken here can't be reversed."
msgid "Your Profile"
msgstr ""
msgid "Permanently delete this blog"
msgid "To change your avatar, upload it to your gallery and then select from there."
msgstr ""
msgid "New Blog"
msgid "Upload an avatar"
msgstr ""
msgid "Create a blog"
# src/template_utils.rs:217
msgid "Display name"
msgstr ""
msgid "Create blog"
# src/template_utils.rs:217
msgid "Email"
msgstr ""
msgid "{}'s icon"
msgid "Summary"
msgstr ""
msgid "New article"
msgid "Update account"
msgstr ""
msgid "There's one author on this blog: "
msgid_plural "There are {0} authors on this blog: "
msgstr[0] ""
msgid "Be very careful, any action taken here can't be cancelled."
msgstr ""
msgid "No posts to see here yet."
msgid "Delete your account"
msgstr ""
msgid "Articles tagged \"{0}\""
msgid "Sorry, but as an admin, you can't leave your own instance."
msgstr ""
msgid "There are currently no articles with such a tag"
msgid "Atom feed"
msgstr ""
msgid "Upload"
msgid "Recently boosted"
msgstr ""
msgid "You don't have any media yet."
msgid "Create an account"
msgstr ""
msgid "Content warning: {0}"
# src/template_utils.rs:217
msgid "Password confirmation"
msgstr ""
msgid "Delete"
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
msgstr ""
msgid "Details"
msgid "Follow {}"
msgstr ""
msgid "Media upload"
msgid "Login to follow"
msgstr ""
msgid "Useful for visually impaired people, as well as licensing information"
msgid "Enter your full username to follow"
msgstr ""
msgid "Leave it empty, if none is needed"
msgid "Internal server error"
msgstr ""
msgid "File"
msgid "Something broke on our side."
msgstr ""
msgid "Send"
msgid "Sorry about that. If you think this is a bug, please report it."
msgstr ""
msgid "Media details"
msgid "Page not found"
msgstr ""
msgid "Go back to the gallery"
msgid "We couldn't find this page."
msgstr ""
msgid "Markdown syntax"
msgid "The link that led you here may be broken."
msgstr ""
msgid "Copy it into your articles, to insert this media:"
msgid "Invalid CSRF token"
msgstr ""
msgid "Use as an avatar"
msgid "Something is wrong with your CSRF token. Make sure cookies are enabled in you browser, and try reloading this page. If you continue to see this error message, please report it."
msgstr ""
msgid "Log in to boost"
msgid "You are not authorized."
msgstr ""
msgid "Log in to like"
msgid "The content you sent can't be processed."
msgstr ""
msgid "Maybe it was too long."
msgstr ""

@ -85,6 +85,12 @@ msgstr "Novo artigo"
msgid "Edit {0}"
msgstr "Mudar {0}"
# src/routes/user.rs:222
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
# src/routes/reshares.rs:47
msgid "To reshare a post, you need to be logged in"
msgstr ""
@ -253,6 +259,17 @@ msgstr "Administrado por"
msgid "Runs Plume {0}"
msgstr ""
#, fuzzy
msgid "Follow {}"
msgstr "Seguir"
#, fuzzy
msgid "Login to follow"
msgstr "Entrar para gostar"
msgid "Enter your full username to follow"
msgstr ""
msgid "Edit your account"
msgstr "Editar sua conta"
@ -565,6 +582,15 @@ msgstr "Entrar"
msgid "Username, or email"
msgstr "Nome de usuário ou e-mail"
msgid "Interact with {}"
msgstr ""
msgid "Log in to interact"
msgstr ""
msgid "Enter your full username to interact"
msgstr ""
msgid "Publish"
msgstr "Publicar"
@ -654,7 +680,9 @@ msgid "Boost"
msgstr ""
#, fuzzy
msgid "Log in, or use your Fediverse account to interact with this article"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr "Faça login ou use sua conta Fediverse para interagir com este artigo"
msgid "Comments"
@ -775,6 +803,21 @@ msgstr "Artigos marcados com \"{0}\""
msgid "There are currently no articles with such a tag"
msgstr "Não há atualmente nenhum artigo com essa etiqueta"
#, fuzzy
msgid "I'm from this instance"
msgstr "Sobre esta instância"
msgid "I'm from another instance"
msgstr ""
# src/template_utils.rs:225
msgid "Example: user@plu.me"
msgstr ""
#, fuzzy
msgid "Continue to your instance"
msgstr "Configure sua instância"
msgid "Upload"
msgstr "Carregar"
@ -885,15 +928,9 @@ msgstr "Utilizar como avatar"
#~ msgid "Unfollow"
#~ msgstr "Não Seguir"
#~ msgid "Follow"
#~ msgstr "Seguir"
#~ msgid "Comment \"{0}\""
#~ msgstr "Comentário \"{0}\""
#~ msgid "Configure your instance"
#~ msgstr "Configure sua instância"
#~ msgid "Let&#x27;s go!"
#~ msgstr "Vamos lá!"
@ -956,6 +993,3 @@ msgstr "Utilizar como avatar"
#~ msgid "Next page"
#~ msgstr "Próxima página"
#~ msgid "Login to like"
#~ msgstr "Entrar para gostar"

@ -86,6 +86,12 @@ msgstr "Новый пост"
msgid "Edit {0}"
msgstr "Редактировать"
# src/routes/user.rs:222
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
# src/routes/reshares.rs:47
msgid "To reshare a post, you need to be logged in"
msgstr ""
@ -260,6 +266,17 @@ msgstr "Администрируется"
msgid "Runs Plume {0}"
msgstr "Работает на Plume {0}"
#, fuzzy
msgid "Follow {}"
msgstr "Подписаться"
#, fuzzy
msgid "Login to follow"
msgstr "Войдите, чтобы продвигать посты"
msgid "Enter your full username to follow"
msgstr ""
msgid "Edit your account"
msgstr "Редактировать ваш аккаунт"
@ -571,6 +588,16 @@ msgstr "Войти"
msgid "Username, or email"
msgstr "Имя пользователя или адрес электронной почты"
msgid "Interact with {}"
msgstr ""
#, fuzzy
msgid "Log in to interact"
msgstr "Войдите, чтобы отмечать понравившиеся посты"
msgid "Enter your full username to interact"
msgstr ""
msgid "Publish"
msgstr "Опубликовать"
@ -665,7 +692,9 @@ msgid "Boost"
msgstr "Продвинуть"
#, fuzzy
msgid "Log in, or use your Fediverse account to interact with this article"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
"Войдите или используйте свой Fediverse-аккаунт, чтобы взаимодействовать с "
"этой статьёй"
@ -800,6 +829,21 @@ msgstr "Статьи, отмеченные тегом «{0}»"
msgid "There are currently no articles with such a tag"
msgstr "Сейчас нет статей с таким тегом"
#, fuzzy
msgid "I'm from this instance"
msgstr "Об этом узле"
msgid "I'm from another instance"
msgstr ""
# src/template_utils.rs:225
msgid "Example: user@plu.me"
msgstr ""
#, fuzzy
msgid "Continue to your instance"
msgstr "Настроить ваш узел"
msgid "Upload"
msgstr "Загрузить"
@ -914,9 +958,6 @@ msgstr "Использовать как аватар"
#~ msgid "Unfollow"
#~ msgstr "Подписаться"
#~ msgid "Follow"
#~ msgstr "Подписаться"
#, fuzzy
#~ msgid "No articles to see here yet."
#~ msgstr "Здесь пока нет постов."
@ -998,9 +1039,6 @@ msgstr "Использовать как аватар"
#~ msgid "Comment \"{0}\""
#~ msgstr "Комментарий \"{0}\""
#~ msgid "Configure your instance"
#~ msgstr "Настроить ваш узел"
#~ msgid "Let&#x27;s go!"
#~ msgstr "Поехали!"
@ -1059,14 +1097,6 @@ msgstr "Использовать как аватар"
#~ msgid "Invalid email"
#~ msgstr "Неправильный адрес электронной почты"
#, fuzzy
#~ msgid "Login to like"
#~ msgstr "Войдите, чтобы отмечать понравившиеся посты"
#, fuzzy
#~ msgid "Login to boost"
#~ msgstr "Войдите, чтобы продвигать посты"
#, fuzzy
#~ msgid "Personal feed"
#~ msgstr "Локальная лента"

@ -27,6 +27,8 @@ extern crate rocket;
extern crate rocket_contrib;
extern crate rocket_csrf;
extern crate rocket_i18n;
#[macro_use]
extern crate runtime_fmt;
extern crate scheduled_thread_pool;
extern crate serde;
#[macro_use]
@ -162,6 +164,7 @@ Then try to restart Plume
routes::instance::toggle_block,
routes::instance::update_settings,
routes::instance::shared_inbox,
routes::instance::interact,
routes::instance::nodeinfo,
routes::instance::about,
routes::instance::web_manifest,
@ -183,6 +186,8 @@ Then try to restart Plume
routes::posts::new_auth,
routes::posts::create,
routes::posts::delete,
routes::posts::remote_interact,
routes::posts::remote_interact_post,
routes::reshares::create,
routes::reshares::create_auth,
routes::search::search,
@ -207,6 +212,7 @@ Then try to restart Plume
routes::user::update,
routes::user::delete,
routes::user::follow,
routes::user::follow_not_connected,
routes::user::follow_auth,
routes::user::activity_details,
routes::user::outbox,

@ -8,6 +8,7 @@ use serde_json;
use validator::{Validate, ValidationErrors};
use inbox;
use plume_common::activity_pub::inbox::FromId;
use plume_models::{
admin::Admin, comments::Comment, db_conn::DbConn, headers::Headers, instance::*, posts::Post,
safe_string::SafeString, users::User, Error, PlumeRocket, CONFIG,
@ -217,6 +218,36 @@ pub fn shared_inbox(
inbox::handle_incoming(rockets, data, headers)
}
#[get("/remote_interact?<target>")]
pub fn interact(rockets: PlumeRocket, user: Option<User>, target: String) -> Option<Redirect> {
if User::find_by_fqn(&rockets, &target).is_ok() {
return Some(Redirect::to(uri!(super::user::details: name = target)));
}
if let Ok(post) = Post::from_id(&rockets, &target, None) {
return Some(Redirect::to(
uri!(super::posts::details: blog = post.get_blog(&rockets.conn).expect("Can't retrieve blog").fqn, slug = &post.slug, responding_to = _),
));
}
if let Ok(comment) = Comment::from_id(&rockets, &target, None) {
if comment.can_see(&rockets.conn, user.as_ref()) {
let post = comment
.get_post(&rockets.conn)
.expect("Can't retrieve post");
return Some(Redirect::to(uri!(
super::posts::details: blog = post
.get_blog(&rockets.conn)
.expect("Can't retrieve blog")
.fqn,
slug = &post.slug,
responding_to = comment.id
)));
}
}
None
}
#[get("/nodeinfo/<version>")]
pub fn nodeinfo(conn: DbConn, version: String) -> Result<Json<serde_json::Value>, ErrorPage> {
if version != "2.0" && version != "2.1" {

@ -71,6 +71,12 @@ impl Default for Page {
}
}
/// A form for remote interaction, used by multiple routes
#[derive(Clone, Default, FromForm)]
pub struct RemoteForm {
pub remote: String,
}
pub fn post_to_atom(post: Post, conn: &Connection) -> Entry {
EntryBuilder::default()
.title(format!("<![CDATA[{}]]>", post.title))

@ -26,7 +26,7 @@ use plume_models::{
users::User,
Error, PlumeRocket,
};
use routes::{comments::NewCommentForm, errors::ErrorPage, ContentLen};
use routes::{comments::NewCommentForm, errors::ErrorPage, ContentLen, RemoteForm};
use template_utils::Ructe;
#[get("/~/<blog>/<slug>?<responding_to>", rank = 4)]
@ -588,3 +588,56 @@ pub fn delete(
))
}
}
#[get("/~/<blog_name>/<slug>/remote_interact")]
pub fn remote_interact(
rockets: PlumeRocket,
blog_name: String,
slug: String,
i18n: I18n,
) -> Result<Ructe, ErrorPage> {
let target = Blog::find_by_fqn(&rockets, &blog_name)
.and_then(|blog| Post::find_by_slug(&rockets.conn, &slug, blog.id))?;
Ok(render!(posts::remote_interact(
&(&rockets.conn, &i18n.catalog, None),
target,
super::session::LoginForm::default(),
ValidationErrors::default(),
RemoteForm::default(),
ValidationErrors::default()
)))
}
#[post("/~/<blog_name>/<slug>/remote_interact", data = "<remote>")]
pub fn remote_interact_post(
rockets: PlumeRocket,
blog_name: String,
slug: String,
remote: LenientForm<RemoteForm>,
i18n: I18n,
) -> Result<Result<Ructe, Redirect>, ErrorPage> {
let target = Blog::find_by_fqn(&rockets, &blog_name)
.and_then(|blog| Post::find_by_slug(&rockets.conn, &slug, blog.id))?;
if let Some(uri) = User::fetch_remote_interact_uri(&remote.remote)
.ok()
.and_then(|uri| rt_format!(uri, uri = target.ap_url).ok())
{
Ok(Err(Redirect::to(uri)))
} else {
let mut errs = ValidationErrors::new();
errs.add("remote", ValidationError {
code: Cow::from("invalid_remote"),
message: Some(Cow::from(i18n!(&i18n.catalog, "Couldn't obtain enough information about your account. Please make sure your username is correct."))),
params: HashMap::new(),
});
//could not get your remote url?
Ok(Ok(render!(posts::remote_interact(
&(&rockets.conn, &i18n.catalog, None),
target,
super::session::LoginForm::default(),
ValidationErrors::default(),
remote.clone(),
errs
))))
}
}

@ -25,7 +25,7 @@ use plume_models::{
users::*,
Error, PlumeRocket,
};
use routes::{errors::ErrorPage, Page};
use routes::{errors::ErrorPage, Page, RemoteForm};
use template_utils::Ructe;
#[get("/me")]
@ -173,7 +173,71 @@ pub fn follow(name: String, user: User, rockets: PlumeRocket) -> Result<Redirect
Ok(Redirect::to(uri!(details: name = name)))
}
#[post("/@/<name>/follow", rank = 2)]
#[post("/@/<name>/follow", data = "<remote_form>", rank = 2)]
pub fn follow_not_connected(
rockets: PlumeRocket,
name: String,
remote_form: Option<LenientForm<RemoteForm>>,
i18n: I18n,
) -> Result<Result<Flash<Ructe>, Redirect>, ErrorPage> {
let target = User::find_by_fqn(&rockets, &name)?;
if let Some(remote_form) = remote_form {
let remote = &remote_form.remote;
if let Some(uri) = User::fetch_remote_interact_uri(remote)
.ok()
.and_then(|uri| {
rt_format!(
uri,
uri = format!(
"{}@{}",
target.fqn,
target.get_instance(&rockets.conn).ok()?.public_domain
)
)
.ok()
})
{
Ok(Err(Redirect::to(uri)))
} else {
let mut err = ValidationErrors::default();
err.add("remote",
ValidationError {
code: Cow::from("invalid_remote"),
message: Some(Cow::from(i18n!(&i18n.catalog, "Couldn't obtain enough information about your account. Please make sure your username is correct."))),
params: HashMap::new(),
},
);
Ok(Ok(Flash::new(
render!(users::follow_remote(
&(&rockets.conn, &i18n.catalog, None),
target,
super::session::LoginForm::default(),
ValidationErrors::default(),
remote_form.clone(),
err
)),
"callback",
uri!(follow: name = name).to_string(),
)))
}
} else {
Ok(Ok(Flash::new(
render!(users::follow_remote(
&(&rockets.conn, &i18n.catalog, None),
target,
super::session::LoginForm::default(),
ValidationErrors::default(),
#[allow(clippy::map_clone)]
remote_form.map(|x| x.clone()).unwrap_or_default(),
ValidationErrors::default()
)),
"callback",
uri!(follow: name = name).to_string(),
)))
}
}
#[get("/@/<name>/follow?local", rank = 2)]
pub fn follow_auth(name: String, i18n: I18n) -> Flash<Redirect> {
utils::requires_login(
&i18n!(

@ -132,4 +132,29 @@ form.new-post {
.button + .button {
margin-left: 1em;
}
.split {
display: flex;
justify-content: space-between;
& > * {
flex-grow: 1;
max-width: 40%;
}
}
header.center {
display: flex;
flex-direction: column;
align-items: center;
background: transparent;
opacity: 1;
font-weight: normal;
text-align: left;
> * {
margin-left: 0;
margin-right: 0;
}
}

@ -110,20 +110,23 @@
</form>
</div>
} else {
<p class="center">@i18n!(ctx.1, "Log in, or use your Fediverse account to interact with this article")</p>
<p class="center">@Html(i18n!(ctx.1, "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article";
format!("<a href='{}'>", uri!(session::new: m = _)), "</a>",
format!("<a href='{}'>", uri!(posts::remote_interact: blog_name = &blog.fqn, slug = &article.slug)), "</a>"
))</p>
<div class="actions">
<div class="likes">
<p aria-label="@i18n!(ctx.1, "One like", "{0} likes"; n_likes)" title="@i18n!(ctx.1, "One like", "{0} likes"; n_likes)">
@n_likes
</p>
<a href="@uri!(session::new: m = i18n!(ctx.1, "Log in to like"))" class="action">@icon!("heart") @i18n!(ctx.1, "Add yours")</a>
<a href="@uri!(posts::remote_interact: blog_name = &blog.fqn, slug = &article.slug)" class="action">@icon!("heart") @i18n!(ctx.1, "Add yours")</a>
</div>
<div class="reshares">
<p aria-label="@i18n!(ctx.1, "One boost", "{0} boost"; n_reshares)" title="@i18n!(ctx.1, "One boost", "{0} boosts"; n_reshares)">
@n_reshares
</p>
<a href="@uri!(session::new: m = i18n!(ctx.1, "Log in to boost"))" class="action">@icon!("repeat") @i18n!(ctx.1, "Boost")</a>
<a href="@uri!(posts::remote_interact: blog_name = &blog.fqn, slug = &article.slug)" class="action">@icon!("repeat") @i18n!(ctx.1, "Boost")</a>
</div>
</div>
}

@ -0,0 +1,14 @@
@use templates::remote_interact_base;
@use templates::partials::post_card;
@use plume_models::posts::Post;
@use routes::RemoteForm;
@use routes::session::LoginForm;
@use template_utils::*;
@use validator::ValidationErrors;
@(ctx: BaseContext, post: Post, login_form: LoginForm, login_errs: ValidationErrors, remote_form: RemoteForm, remote_errs: ValidationErrors)
@:remote_interact_base(ctx, i18n!(ctx.1, "Interact with {}"; post.title.clone()), i18n!(ctx.1, "Log in to interact"), i18n!(ctx.1, "Enter your full username to interact"), {
<h1>@i18n!(ctx.1, "Interact with {}"; post.title.clone())</h1>
@:post_card(ctx, post)
}, login_form, login_errs, remote_form, remote_errs)

@ -0,0 +1,32 @@
@use templates::base;
@use routes::session::LoginForm;
@use routes::RemoteForm;
@use template_utils::*;
@use validator::ValidationErrors;
@(ctx: BaseContext, title: String, login_msg: String, remote_msg: String, header: Content, login_form: LoginForm, login_errs: ValidationErrors, remote_form: RemoteForm, remote_errs: ValidationErrors)
@:base(ctx, title, {}, {}, {
<div>
<header class="center">
@:header()
</header>
<div class="split">
<form method="post" action="/login">
<h2>@i18n!(ctx.1, "I'm from this instance")</h2>
<p>@login_msg</p>
@input!(ctx.1, email_or_name (text), "Username, or email", login_form, login_errs.clone(), "minlenght=\"1\"")
@input!(ctx.1, password (password), "Password", login_form, login_errs, "minlenght=\"1\"")
<input type="submit" value="@i18n!(ctx.1, "Log in")" />
</form>
<form method="post">
<h2>@i18n!(ctx.1, "I'm from another instance")</h2>
<p>@remote_msg</p>
@input!(ctx.1, remote (text), "Username", "Example: user@plu.me", remote_form, remote_errs.clone(), "minlenght=\"1\"")
<input type="submit" value="@i18n!(ctx.1, "Continue to your instance")"/>
</form>
</div>
</div>
})

@ -0,0 +1,14 @@
@use templates::remote_interact_base;
@use plume_models::users::User;
@use routes::RemoteForm;
@use routes::session::LoginForm;
@use template_utils::*;
@use validator::ValidationErrors;
@(ctx: BaseContext, user: User, login_form: LoginForm, login_errs: ValidationErrors, remote_form: RemoteForm, remote_errs: ValidationErrors)
@:remote_interact_base(ctx, i18n!(ctx.1, "Follow {}"; user.name()), i18n!(ctx.1, "Login to follow"), i18n!(ctx.1, "Enter your full username to follow"), {
<h1>@i18n!(ctx.1, "Follow {}"; user.name())</h1>
@avatar(ctx.0, &user, Size::Medium, false, ctx.1)
<small>@@@user.fqn</small>
}, login_form, login_errs, remote_form, remote_errs)

@ -32,7 +32,7 @@
<a class="u-url" href="@user.ap_url"></a>
}
@if ctx.2.clone().map(|u| u.id != user.id).unwrap_or(false) {
@if ctx.2.clone().map(|u| u.id != user.id).unwrap_or(true) {
<form class="inline" method="post" action="@uri!(user::follow: name = &user.fqn)">
@if follows {
<input type="submit" value="@i18n!(ctx.1, "Unsubscribe")">

Loading…
Cancel
Save