205 lines
5.8 KiB
JavaScript
Executable file
205 lines
5.8 KiB
JavaScript
Executable file
const Manifest = chrome.runtime.getManifest();
|
|
const SettingsURL = chrome.runtime.getURL('settings.html');
|
|
|
|
/*
|
|
ON INSTALL:
|
|
|
|
chrome.runtime.onInstalled.addListener(() => {
|
|
chrome.tabs.create({url: 'https://polyplus.vercel.app/app/welcome.html'})
|
|
});
|
|
*/
|
|
|
|
// WHEN CLICKING ON EXTENSION ICON OPEN THE SETTINGS PAGE
|
|
chrome.action.onClicked.addListener((tab) => {
|
|
chrome.tabs.create({active: true, url: SettingsURL});
|
|
});
|
|
|
|
// REGISTER AN ALARM FOR DAILY UPDATE CHECK
|
|
chrome.alarms.create('PolyPlus-UpdateCheck', {
|
|
when: Date.now() + GetNext12PM()
|
|
});
|
|
|
|
function GetNext12PM() {
|
|
const Now = new Date();
|
|
const Next = new Date();
|
|
Next.setHours(12, 0, 0, 0);
|
|
if (Now.getHours() >= 12) {
|
|
Next.setDate(Next.getDate() + 1);
|
|
}
|
|
return Next - Now;
|
|
}
|
|
|
|
// HANDLE ALARMS FIRING
|
|
chrome.alarms.onAlarm.addListener(function (alarm) {
|
|
if (alarm.name === 'PolyPlus-UpdateCheck') {
|
|
RunUpdateNotifier();
|
|
}
|
|
});
|
|
function RunUpdateNotifier() {
|
|
chrome.storage.local.get(['PolyPlus_LiveVersion', 'PolyPlus_OutOfDate', 'PolyPlus_SkipUpdate'], function (result) {
|
|
const OutOfDate = result.PolyPlus_OutOfDate || false;
|
|
const SkipUpdate = result.PolyPlus_SkipUpdate || null;
|
|
const LiveVersion = result.PolyPlus_LiveVersion || Manifest.version;
|
|
if (OutOfDate !== true && SkipUpdate !== LiveVersion) {
|
|
fetch('https://polyplus.vercel.app/data/version.json')
|
|
.then((response) => {
|
|
if (!response.ok) {
|
|
throw new Error('Network not ok');
|
|
}
|
|
return response.json();
|
|
})
|
|
.then((data) => {
|
|
chrome.storage.local.set({PolyPlus_LiveVersion: data.version}, function () {
|
|
console.log('Cached live version');
|
|
});
|
|
if (data.version > Manifest.version) {
|
|
chrome.storage.local.set({PolyPlus_OutOfDate: true, PolyPlus_ReleaseNotes: data.releaseNotes}, function () {
|
|
console.log('Cached update notifier result');
|
|
});
|
|
chrome.notifications.create(
|
|
'',
|
|
{
|
|
type: 'basic',
|
|
iconUrl: chrome.runtime.getURL('icon.png'),
|
|
title: 'New Update Available',
|
|
message: 'A new update is available for Poly+! (v' + data.version + ')'
|
|
},
|
|
function (notificationID) {
|
|
chrome.notifications.onClicked.addListener(function (id) {
|
|
if (id === notificationID) {
|
|
chrome.tabs.create({url: 'https://github.com/IndexingGitHub/PolyPlus/releases', active: true});
|
|
chrome.notifications.clear(notificationID);
|
|
}
|
|
});
|
|
}
|
|
);
|
|
/*
|
|
chrome.action.setBadgeBackgroundColor(
|
|
{color: 'red'},
|
|
() => { },
|
|
);
|
|
*/
|
|
}
|
|
})
|
|
.catch((error) => {
|
|
console.log(error);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
chrome.contextMenus.removeAll(function () {
|
|
chrome.contextMenus.create({
|
|
title: 'Run Update Notifier',
|
|
id: 'PolyPlus-RunUpdateNotifier',
|
|
contexts: ['all'],
|
|
documentUrlPatterns: ['https://polytoria.com/my/settings/polyplus#dev']
|
|
});
|
|
|
|
// COPY ASSET ID CONTEXT MENU ITEM REGISTRATION
|
|
chrome.contextMenus.create({
|
|
title: 'Copy Asset ID',
|
|
id: 'PolyPlus-CopyID',
|
|
contexts: ['link'],
|
|
documentUrlPatterns: ['https://polytoria.com/*', SettingsURL],
|
|
targetUrlPatterns: ['https://polytoria.com/places/**', 'https://polytoria.com/users/**', 'https://polytoria.com/u/**', 'https://polytoria.com/store/**', 'https://polytoria.com/guilds/**']
|
|
});
|
|
|
|
// COPY AVATAR HASH CONTEXT MENU ITEM REGISTRATION
|
|
chrome.contextMenus.create({
|
|
title: 'Copy Avatar Hash',
|
|
id: 'PolyPlus-CopyAvatarHash',
|
|
contexts: ['image'],
|
|
documentUrlPatterns: ['https://polytoria.com/*', SettingsURL],
|
|
targetUrlPatterns: ['https://c0.ptacdn.com/thumbnails/avatars/**', 'https://c0.ptacdn.com/thumbnails/avatars/**']
|
|
});
|
|
});
|
|
|
|
// HANDLE CONTEXT MENU ITEMS
|
|
chrome.contextMenus.onClicked.addListener(async function (info, tab) {
|
|
if (info.menuItemId === 'PolyPlus-CopyID') {
|
|
console.log(info.linkUrl.split('/')[3]);
|
|
let ID = info.linkUrl.split('/')[4];
|
|
if (info.linkUrl.split('/')[3] === 'u') {
|
|
ID = (await (await fetch('https://api.polytoria.com/v1/users/find?username=' + info.linkUrl.split('/')[4])).json()).id;
|
|
}
|
|
console.log(ID);
|
|
chrome.scripting
|
|
.executeScript({
|
|
target: {tabId: tab.id},
|
|
func: CopyAssetID,
|
|
args: [ID]
|
|
})
|
|
.then(() => console.log('Copied ID!'));
|
|
}
|
|
|
|
if (info.menuItemId === 'PolyPlus-CopyAvatarHash') {
|
|
let Hash = new URL(info.srcUrl).pathname.split('/')[3].replace('-icon', '').replace('.png', '');
|
|
chrome.scripting
|
|
.executeScript({
|
|
target: {tabId: tab.id},
|
|
func: CopyAvatarHash,
|
|
args: [Hash]
|
|
})
|
|
.then(() => console.log('Copied ID!'));
|
|
}
|
|
|
|
if (info.menuItemId === 'PolyPlus-RunUpdateNotifier') {
|
|
RunUpdateNotifier();
|
|
}
|
|
});
|
|
|
|
/*
|
|
GREEN LOGO WHEN EXTENSION APPLIES TO CURRENT TAB PAGE, RED WHEN IT DOESN'T
|
|
COMING SOON
|
|
|
|
chrome.tabs.onActivated.addListener(function (info){
|
|
chrome.tabs.get(info.tabId, function(tab){
|
|
const Any = CheckIfScriptApplies(tab.url)
|
|
console.log(Any)
|
|
});
|
|
});
|
|
|
|
function CheckIfScriptApplies(url) {
|
|
return Manifest.content_scripts.forEach(script => {
|
|
COMMENT
|
|
if (matchesUrl(script.matches, url)) {
|
|
return true
|
|
}
|
|
|
|
script.matches.forEach(match => {
|
|
if (url.startsWith(match.replaceAll('*', ''))) {
|
|
return true
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
function matchesUrl(patterns, url) {
|
|
return patterns.some(pattern => {
|
|
return new RegExp(pattern).test(url);
|
|
});
|
|
}
|
|
*/
|
|
|
|
function CopyAssetID(id) {
|
|
navigator.clipboard
|
|
.writeText(id)
|
|
.then(() => {
|
|
alert('Successfully copied ID!');
|
|
})
|
|
.catch(() => {
|
|
alert('Failure to copy ID.');
|
|
});
|
|
}
|
|
|
|
function CopyAvatarHash(hash) {
|
|
navigator.clipboard
|
|
.writeText(hash)
|
|
.then(() => {
|
|
alert('Successfully copied avatar hash!');
|
|
})
|
|
.catch(() => {
|
|
alert('Failure to copy avatar hash.');
|
|
});
|
|
}
|