Skip to content

Commit

Permalink
Add "Open In" for a few Mastodon clients (#7)
Browse files Browse the repository at this point in the history
Co-authored-by: Markus Unterwaditzer <markus-tarpit+git@unterwaditzer.net>
  • Loading branch information
ZackBoe and untitaker committed May 4, 2024
1 parent f1d0ea0 commit a340576
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 5 deletions.
54 changes: 53 additions & 1 deletion src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,57 @@ async fn show_feed(Query(params): Query<ShowFeed>, Host(host): Host) -> Result<R
body.push_str("<content:encoded><![CDATA[");
body.push_str("<p><a href=\"");
body.push_str(&bookmark.url);
body.push_str("\">Original Mastodon Post</a></p>");
body.push_str("\">Original Mastodon Post</a>");

let client = &params.client;
if !client.is_empty() {
body.push_str(" - <a href=\"");
match client.as_str() {
"host" => {
body.push_str("https://");
body.push_str(&params.host);
body.push_str("/authorize_interaction?uri=");
body.push_str(&bookmark.url);
body.push_str("\">Open in your Mastodon host</a>");
}
"elk" => {
body.push_str("https://elk.zone/");
body.push_str(&bookmark.url);
body.push_str("\">Open in Elk</a>");
}
"elkcanary" => {
body.push_str("https://main.elk.zone/");
body.push_str(&bookmark.url);
body.push_str("\">Open in Elk</a>");
}
"phanpy" => {
body.push_str("https://phanpy.social/#/");
body.push_str(&bookmark.url);
body.push_str("\">Open in Phanpy</a>");
}
"phanpydev" => {
body.push_str("https://dev.phanpy.social/#/");
body.push_str(&bookmark.url);
body.push_str("\">Open in Phanpy</a>");
}
"trunks" => {
body.push_str("https://trunks.social/resolve?url=");
body.push_str(&bookmark.url);
body.push_str("\">Open in Trunks</a>");
}
"ivory" => {
body.push_str("ivory://acct/openURL?url=");
body.push_str(&bookmark.url);
body.push_str("\">Open in Ivory</a>");
}
_ => {
body.push_str(&bookmark.url);
body.push_str("\">Open original post - unknown client :(</a>");
}
}
}

body.push_str("</p>");
body.push_str(&escape_for_cdata(&bookmark.content));
body.push_str("]]></content:encoded>");
body.push_str("</item>\n");
Expand All @@ -235,6 +285,8 @@ fn escape_for_cdata(input: &str) -> String {
struct ShowFeed {
host: String,
token: String,
#[serde(default)]
client: String,
}

#[derive(Deserialize)]
Expand Down
28 changes: 24 additions & 4 deletions src/svelte/App.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,19 @@
export let launchLogin;
export let feedUrlPromise;
let baseFeedUrl;
function submitLoginForm(e) {
launchLogin(e.target.host.value);
e.preventDefault();
}
function changeClient(e) {
const client = e.target.value;
const result = document.querySelector('input');
if(!baseFeedUrl) baseFeedUrl = result.value;
result.value = `${client === 'none' ? baseFeedUrl : `${baseFeedUrl}&client=${client}`}`;
}
</script>

{#await feedUrlPromise}
Expand Down Expand Up @@ -34,12 +43,23 @@
/>
</form>
{:else}
<div class="green">
Subscribe to the following URL in your feed reader. Anybody who knows this
URL can read your bookmarks!
<form class="pure-form">
<div>
<p class="green">Subscribe to the following URL in your feed reader. Anybody who knows this
URL can read your bookmarks!</p>
<form class="pure-form pure-form-stacked">
<fieldset>
<input type="text" class="pure-input-1" readOnly value={feedUrl} />
<label for="form-client-link">Optional: Add an "Open In" link to bookmarks</label>
<select on:change={changeClient}>
<option value="none" selected>None</option>
<option value="host">Your Mastodon Host</option>
<option value="elk">Elk</option>
<option value="elkcanary">Elk Canary</option>
<option value="phanpy">Phanpy</option>
<option value="phanpydev">Phanpy Dev</option>
<option value="trunks">Trunks</option>
<option value="ivory">Ivory</option>
</select>
</fieldset>
</form>
</div>
Expand Down

0 comments on commit a340576

Please sign in to comment.