boosting and liking are good for Mastodon. Bluesky doesn't allow for undoing it yet
This commit is contained in:
parent
4f069b929a
commit
d6902f4762
3 changed files with 144 additions and 3 deletions
|
@ -141,6 +141,72 @@ export async function CreateReplyPost(DID, Text, ReplyID, RootID) {
|
||||||
return body;
|
return body;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function SendLike(DID, RefURI, RefCID) {
|
||||||
|
if (localStorage.getItem(Variables.BlueskyAccessToken) == null) {
|
||||||
|
console.log("No access token!");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
let StrongRef = {
|
||||||
|
"$type": "com.atproto.repo.strongRef",
|
||||||
|
"uri": RefURI,
|
||||||
|
"cid": RefCID
|
||||||
|
}
|
||||||
|
let PDS = localStorage.getItem(Variables.BlueskyPDS);
|
||||||
|
let Json = {
|
||||||
|
"$type": "app.bsky.feed.like",
|
||||||
|
"subject": StrongRef,
|
||||||
|
"createdAt": new Date(Date.now()).toISOString()
|
||||||
|
}
|
||||||
|
let RequestBody = {
|
||||||
|
"repo": DID,
|
||||||
|
"collection": "app.bsky.feed.like",
|
||||||
|
"record": Json
|
||||||
|
}
|
||||||
|
let DPoP = await ClientDPoPPDS("POST", PDS + "/xrpc/com.atproto.repo.createRecord");
|
||||||
|
let request = fetch(PDS + "/xrpc/com.atproto.repo.createRecord", { body: JSON.stringify(RequestBody), method: "POST", headers: {"Content-Type": "application/json", "Authorization": "DPoP " + localStorage.getItem(Variables.BlueskyAccessToken), "DPoP": DPoP}});
|
||||||
|
let body = await request.then((response) => response.json());
|
||||||
|
let status = await request.then((response) => response.status);
|
||||||
|
let header = await request.then((response) => response.headers.get("dpop-nonce"));
|
||||||
|
if (status == 401) {
|
||||||
|
await HandleError(body, header);
|
||||||
|
body = await CreatePost(DID, Text);
|
||||||
|
}
|
||||||
|
return body;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function SendRepost(DID, RefURI, RefCID) {
|
||||||
|
if (localStorage.getItem(Variables.BlueskyAccessToken) == null) {
|
||||||
|
console.log("No access token!");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
let StrongRef = {
|
||||||
|
"$type": "com.atproto.repo.strongRef",
|
||||||
|
"uri": RefURI,
|
||||||
|
"cid": RefCID
|
||||||
|
}
|
||||||
|
let PDS = localStorage.getItem(Variables.BlueskyPDS);
|
||||||
|
let Json = {
|
||||||
|
"$type": "app.bsky.feed.repost",
|
||||||
|
"subject": StrongRef,
|
||||||
|
"createdAt": new Date(Date.now()).toISOString()
|
||||||
|
}
|
||||||
|
let RequestBody = {
|
||||||
|
"repo": DID,
|
||||||
|
"collection": "app.bsky.feed.repost",
|
||||||
|
"record": Json
|
||||||
|
}
|
||||||
|
let DPoP = await ClientDPoPPDS("POST", PDS + "/xrpc/com.atproto.repo.createRecord");
|
||||||
|
let request = fetch(PDS + "/xrpc/com.atproto.repo.createRecord", { body: JSON.stringify(RequestBody), method: "POST", headers: {"Content-Type": "application/json", "Authorization": "DPoP " + localStorage.getItem(Variables.BlueskyAccessToken), "DPoP": DPoP}});
|
||||||
|
let body = await request.then((response) => response.json());
|
||||||
|
let status = await request.then((response) => response.status);
|
||||||
|
let header = await request.then((response) => response.headers.get("dpop-nonce"));
|
||||||
|
if (status == 401) {
|
||||||
|
await HandleError(body, header);
|
||||||
|
body = await CreatePost(DID, Text);
|
||||||
|
}
|
||||||
|
return body;
|
||||||
|
}
|
||||||
|
|
||||||
export async function SetThreadGate(DID, Post, VisibilitySettings) {
|
export async function SetThreadGate(DID, Post, VisibilitySettings) {
|
||||||
if (localStorage.getItem(Variables.BlueskyAccessToken) == null) {
|
if (localStorage.getItem(Variables.BlueskyAccessToken) == null) {
|
||||||
console.log("No access token!");
|
console.log("No access token!");
|
||||||
|
|
|
@ -134,6 +134,36 @@ export async function CreateReplyStatus(Text, Visibility = "public", ReplyID) {
|
||||||
return body;
|
return body;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function SendFavorite(ID, IsFavorited) {
|
||||||
|
if (localStorage.getItem(Variables.MastodonAccessToken) == null) {
|
||||||
|
console.log("No access token!");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
let Website = localStorage.getItem(Variables.MastodonWebsite);
|
||||||
|
if (IsFavorited == false) {
|
||||||
|
return await fetch(Website + "/api/v1/statuses/" + ID + "/favourite", {method: "POST", headers: {"Authorization": localStorage.getItem(Variables.MastodonTokenType) + " " + localStorage.getItem(Variables.MastodonAccessToken)}})
|
||||||
|
.then((response) => response.json());
|
||||||
|
} else {
|
||||||
|
return await fetch(Website + "/api/v1/statuses/" + ID + "/unfavourite", {method: "POST", headers: {"Authorization": localStorage.getItem(Variables.MastodonTokenType) + " " + localStorage.getItem(Variables.MastodonAccessToken)}})
|
||||||
|
.then((response) => response.json());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function SendReblog(ID, IsReblogged) {
|
||||||
|
if (localStorage.getItem(Variables.MastodonAccessToken) == null) {
|
||||||
|
console.log("No access token!");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
let Website = localStorage.getItem(Variables.MastodonWebsite);
|
||||||
|
if (IsReblogged == false) {
|
||||||
|
return await fetch(Website + "/api/v1/statuses/" + ID + "/reblog", {method: "POST", headers: {"Authorization": localStorage.getItem(Variables.MastodonTokenType) + " " + localStorage.getItem(Variables.MastodonAccessToken)}})
|
||||||
|
.then((response) => response.json());
|
||||||
|
} else {
|
||||||
|
return await fetch(Website + "/api/v1/statuses/" + ID + "/unreblog", {method: "POST", headers: {"Authorization": localStorage.getItem(Variables.MastodonTokenType) + " " + localStorage.getItem(Variables.MastodonAccessToken)}})
|
||||||
|
.then((response) => response.json());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// The first step to using the app.
|
// The first step to using the app.
|
||||||
export async function HandleAuthentication(Website) {
|
export async function HandleAuthentication(Website) {
|
||||||
// See if the user is smart enough to put https.
|
// See if the user is smart enough to put https.
|
||||||
|
|
|
@ -8,6 +8,9 @@ let Favorite = document.getElementsByClassName("Favorite")[0];
|
||||||
let Boost = document.getElementsByClassName("Boost")[0];
|
let Boost = document.getElementsByClassName("Boost")[0];
|
||||||
let Reply = document.getElementsByClassName("Reply")[0];
|
let Reply = document.getElementsByClassName("Reply")[0];
|
||||||
|
|
||||||
|
let FavoriteFlipper = false;
|
||||||
|
let BoostFlipper = false;
|
||||||
|
|
||||||
// Variables
|
// Variables
|
||||||
let website = document.location.href.split("website=")[1];
|
let website = document.location.href.split("website=")[1];
|
||||||
let post = JSON.parse(localStorage.getItem("post"));
|
let post = JSON.parse(localStorage.getItem("post"));
|
||||||
|
@ -17,11 +20,21 @@ GetPost();
|
||||||
|
|
||||||
// Button stuff
|
// Button stuff
|
||||||
Favorite.onclick = (event) => {
|
Favorite.onclick = (event) => {
|
||||||
|
if (website == "Mastodon") {
|
||||||
|
MastodonAPI.SendFavorite(post.id, post.favourited);
|
||||||
|
} else if (website == "Bluesky") {
|
||||||
|
BlueskyAPI.SendLike(localStorage.getItem(Variables.BlueskyDID), post.post.uri, post.post.cid);
|
||||||
|
}
|
||||||
|
SetFavorite();
|
||||||
}
|
}
|
||||||
|
|
||||||
Boost.onclick = (event) => {
|
Boost.onclick = (event) => {
|
||||||
|
if (website == "Mastodon") {
|
||||||
|
MastodonAPI.SendReblog(post.id, post.reblogged);
|
||||||
|
} else if (website == "Bluesky") {
|
||||||
|
BlueskyAPI.SendRepost(localStorage.getItem(Variables.BlueskyDID), post.post.uri, post.post.cid);
|
||||||
|
}
|
||||||
|
SetBoost();
|
||||||
}
|
}
|
||||||
|
|
||||||
Reply.onclick = (event) => {
|
Reply.onclick = (event) => {
|
||||||
|
@ -30,7 +43,6 @@ Reply.onclick = (event) => {
|
||||||
|
|
||||||
// Functions and things.
|
// Functions and things.
|
||||||
async function GetPost() {
|
async function GetPost() {
|
||||||
console.log(post);
|
|
||||||
if (website == "Mastodon") {
|
if (website == "Mastodon") {
|
||||||
// Check for a reblog.
|
// Check for a reblog.
|
||||||
if (post.reblog != null) {
|
if (post.reblog != null) {
|
||||||
|
@ -46,6 +58,13 @@ async function GetPost() {
|
||||||
document.getElementsByClassName("Images")[0].innerHTML = document.getElementsByClassName("Images")[0].innerHTML + "<img src=" + i.remote_url + " alt='" + i.description + "'/>";
|
document.getElementsByClassName("Images")[0].innerHTML = document.getElementsByClassName("Images")[0].innerHTML + "<img src=" + i.remote_url + " alt='" + i.description + "'/>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Update the post to see if there is new information.
|
||||||
|
post = await MastodonAPI.GetStatus(post.id);
|
||||||
|
// Set the texts.
|
||||||
|
FavoriteFlipper = !(post.favourite);
|
||||||
|
BoostFlipper = !(post.reblogged);
|
||||||
|
SetFavorite();
|
||||||
|
SetBoost();
|
||||||
} else if (website == "Bluesky") {
|
} else if (website == "Bluesky") {
|
||||||
// Check for a reblog.
|
// Check for a reblog.
|
||||||
if (post.hasOwnProperty("reason") && post.reason.$type == "app.bsky.feed.defs#reasonRepost") {
|
if (post.hasOwnProperty("reason") && post.reason.$type == "app.bsky.feed.defs#reasonRepost") {
|
||||||
|
@ -61,7 +80,33 @@ async function GetPost() {
|
||||||
document.getElementsByClassName("Images")[0].innerHTML = document.getElementsByClassName("Images")[0].innerHTML + "<img src=" + i.fullsize + " alt='" + i.alt + "'/>";
|
document.getElementsByClassName("Images")[0].innerHTML = document.getElementsByClassName("Images")[0].innerHTML + "<img src=" + i.fullsize + " alt='" + i.alt + "'/>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Update the post to see if there is new information.
|
||||||
|
post = await BlueskyAPI.GetPosts(post.post.uri);
|
||||||
|
post = {
|
||||||
|
"post": post.posts[0]
|
||||||
|
}
|
||||||
|
console.log(post);
|
||||||
|
// Set the texts.
|
||||||
|
// TODO!
|
||||||
} else {
|
} else {
|
||||||
document.getElementsByClassName("PostText")[0].innerHTML = "Nothing to load.";
|
document.getElementsByClassName("PostText")[0].innerHTML = "Nothing to load.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function SetFavorite() {
|
||||||
|
if (FavoriteFlipper == false) {
|
||||||
|
Favorite.innerHTML = "Favorite!";
|
||||||
|
} else {
|
||||||
|
Favorite.innerHTML = "Unfavorite...";
|
||||||
|
}
|
||||||
|
FavoriteFlipper = !(FavoriteFlipper);
|
||||||
|
}
|
||||||
|
|
||||||
|
function SetBoost() {
|
||||||
|
if (BoostFlipper == false) {
|
||||||
|
Boost.innerHTML = "Boost!";
|
||||||
|
} else {
|
||||||
|
Boost.innerHTML = "Unboost...";
|
||||||
|
}
|
||||||
|
BoostFlipper = !(BoostFlipper);
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue