Skip to content
This repository was archived by the owner on May 13, 2024. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
Maintaining my own version, due to the author archiving the project.
Will update as the extensions I am using break.

# spicetify-extensions

## [Song-Stats:](./songstats/README.md)
Expand Down
92 changes: 68 additions & 24 deletions wikify/wikify.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,40 +37,84 @@
});
}

function extractPageText(wikiInfo) {
const wikiInfoArr = wikiInfo.query.pages
const page = Object.values(wikiInfoArr)[0];
if (page != null || page != undefined) {
return page.extract.replace(/<!--[\s\S]*?-->/g, '');
}
}

async function getWikiText(uris) {

const rawUri = uris[0];
const uri = rawUri.split(":")[2]
const artistName = await CosmosAsync.get(`https://api.spotify.com/v1/artists/${uri}`)
const artistNameTrimmed = (artistName.name).replace(/\s/g, "%20");
const uriSplit = rawUri.split(":");
const uriType = uriSplit[1];
const uri = uriSplit[2];
let artistName = undefined;
let trackName = undefined;

if (artistName != null) {
try {
const wikiInfo = await CosmosAsync.get(`https://${lang}.wikipedia.org/w/api.php?action=query&format=json&prop=extracts%7Cdescription&titles=${artistNameTrimmed}`)
try {
//This assumes that the `View Wiki` option is only available for artists and tracks
if (uriType === "artist") {
const artistObject = await CosmosAsync.get(`https://api.spotify.com/v1/artists/${uri}`);
artistName = artistObject.name;
} else if (uriType === "track") {
const trackObject = await CosmosAsync.get(`https://api.spotify.com/v1/tracks/${uri}`);
artistName = trackObject.artists[0].name;
trackName = trackObject.name;
}

if (trackName != null) {
const trackNameTrimmed = (trackName).replace(/\s/g, "%20");

const wikiTrackInfo = await CosmosAsync.get(`https://${lang}.wikipedia.org/w/api.php?action=query&format=json&prop=extracts%7Cdescription&titles=${trackNameTrimmed}`);
const wikiTrackSongInfo = await CosmosAsync.get(`https://${lang}.wikipedia.org/w/api.php?action=query&format=json&prop=extracts%7Cdescription&titles=${trackNameTrimmed}%20(song)`);
//TODO: option to choose local language or english / english fallback? / subcontextmenu to choose?
//https://en.wikipedia.org/w/api.php?action=query&format=json&uselang=en&list=search&srsearch=${trackNameTrimmed}

const trackSongPageText = extractPageText(wikiTrackSongInfo);
const trackPageText = extractPageText(wikiTrackInfo);

if (trackSongPageText != "\n") {
Spicetify.PopupModal.display({
title: "WikiFy for Track",
content: trackSongPageText
});
return;
} else if (trackPageText != "\n") {
Spicetify.PopupModal.display({
title: "WikiFy for Track",
content: trackPageText
});
return;
}
}

if (artistName != null) {
const artistNameTrimmed = (artistName).replace(/\s/g, "%20");

const wikiArtistInfo = await CosmosAsync.get(`https://${lang}.wikipedia.org/w/api.php?action=query&format=json&prop=extracts%7Cdescription&titles=${artistNameTrimmed}`);
//TODO: option to choose local language or english / english fallback? / subcontextmenu to choose?
//https://en.wikipedia.org/w/api.php?action=query&format=json&uselang=en&list=search&srsearch=${artistNameTrimmed}

const wikiInfoArr = wikiInfo.query.pages
const page = Object.values(wikiInfoArr)[0];
if (page != null || page != undefined) {
const pageText = page.extract.replace(/<!--[\s\S]*?-->/g, '');
if (pageText != "\n") {
Spicetify.PopupModal.display({
title: "WikiFy",
content: page.extract
});
} else {
error();
}

const artistPageText = extractPageText(wikiArtistInfo);

if (artistPageText != "/n") {
Spicetify.PopupModal.display({
title: "WikiFy for Artist",
content: artistPageText
});
return;
} else {
error();
}
} catch {
Spicetify.PopupModal.display({
title: "Error",
content: "Request failed",
})
}
} catch {
Spicetify.PopupModal.display({
title: "Requests Failed",
content: "Error while fetching infromation from Wikipedia and Spotify"
});
}
}

Expand Down