feat: new "time played" feature (a bit buggy right now)

This commit is contained in:
Index 2024-07-14 16:35:29 -05:00
parent 80d223e4d1
commit 9f49fc848d
4 changed files with 82 additions and 3 deletions

View file

@ -95,7 +95,8 @@ const DefaultSettings = {
ProgressBarOn: true, ProgressBarOn: true,
PercentageOn: true, PercentageOn: true,
OpacityOn: true OpacityOn: true
} },
TimePlayedOn: true
} }
// ON EXTENSION INSTALL / RELOAD // ON EXTENSION INSTALL / RELOAD
@ -108,9 +109,47 @@ chrome.runtime.onInstalled.addListener(() => {
}) })
}); });
let RecordingTimePlayed = false
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
if (request.action === 'reload') { if (request.action === 'reload') {
chrome.runtime.reload(); chrome.runtime.reload();
} else if (request.action === 'start_time_played') {
if (RecordingTimePlayed === true) {
console.log('Time Played: Already Started Interval')
return
}
RecordingTimePlayed = true
chrome.storage.sync.get(['PolyPlus_TimePlayed'], function(result){
console.log('Time Played: Start Interval')
const Playtime = result.PolyPlus_TimePlayed || {
[request.placeID]: 0
};
let LoadedIn = false
const TimePlayedInterval = setInterval(async () => {
console.log('Time Played: Run Check')
const PlaceStatus = (await (await fetch('https://api.polytoria.com/v1/users/' + request.userID)).json()).playing
if (PlaceStatus === null) {
console.log('Time Played: Not Playing Anything')
if (LoadedIn === true) {
console.log('Time Played: End Interval')
clearInterval(TimePlayedInterval)
}
} else {
LoadedIn = true
if (!Playtime[PlaceStatus.placeID]) {
Playtime[PlaceStatus.placeID] = 0
}
Playtime[PlaceStatus.placeID] += 5
console.log('Time Played: Time Increase: ', new Date(Playtime[PlaceStatus.placeID] * 1000).toISOString().slice(11, 19), PlaceStatus)
chrome.storage.sync.set({'PolyPlus_TimePlayed': Playtime}, function(){
console.log('Time Played: Saved Playtime')
})
}
}, 5000);
})
} else if (request.action === 'greatdivide_stats') { } else if (request.action === 'greatdivide_stats') {
chrome.storage.local.get(['PolyPlus_GreatDivideStats_' + request.userID], async function(result){ chrome.storage.local.get(['PolyPlus_GreatDivideStats_' + request.userID], async function(result){
let Statistics = result['PolyPlus_GreatDivideStats_' + request.userID] let Statistics = result['PolyPlus_GreatDivideStats_' + request.userID]

View file

@ -6,6 +6,7 @@ let Utilities;
let PlaceDetails = null; let PlaceDetails = null;
var Settings; var Settings;
let TimePlayed;
var PinnedGamesData = []; var PinnedGamesData = [];
let GamePinned; let GamePinned;
@ -45,8 +46,9 @@ const Gamepasses = Array.from(GamepassesTab.getElementsByClassName('card')) || [
RatingsContainer.children[0].appendChild(PercentageLabel); RatingsContainer.children[0].appendChild(PercentageLabel);
chrome.storage.sync.get(['PolyPlus_Settings'], async function (result) { chrome.storage.sync.get(['PolyPlus_Settings', 'PolyPlus_TimePlayed'], async function (result) {
Settings = result.PolyPlus_Settings || {}; Settings = result.PolyPlus_Settings || {};
TimePlayed = result.PolyPlus_TimePlayed || {};
Utilities = await import(chrome.runtime.getURL('resources/utils.js')); Utilities = await import(chrome.runtime.getURL('resources/utils.js'));
Utilities = Utilities.default; Utilities = Utilities.default;
@ -72,6 +74,25 @@ const Gamepasses = Array.from(GamepassesTab.getElementsByClassName('card')) || [
IRLPrice(); IRLPrice();
} }
if (Settings.TimePlayedOn === true) {
const TimePlayedNameRow = document.createElement('li');
TimePlayedNameRow.innerText = 'Time Played:';
const TimePlayedValueRow = document.createElement('li')
if (TimePlayed[PlaceID]) {
TimePlayedValueRow.innerText = new Date(TimePlayed[PlaceID] * 1000).toISOString().slice(11, 19)
} else {
TimePlayedValueRow.innerText = '-'
}
InfoColumns[0].appendChild(TimePlayedNameRow);
InfoColumns[1].appendChild(TimePlayedValueRow);
document.getElementById('btn-play').addEventListener('click', function(){
chrome.runtime.sendMessage({ action: "start_time_played", placeID: PlaceID, userID: UserID })
})
}
if (Settings.ShowPlaceRevenueOn === true) { if (Settings.ShowPlaceRevenueOn === true) {
const NameRow = document.createElement('li'); const NameRow = document.createElement('li');
NameRow.innerText = 'Revenue:'; NameRow.innerText = 'Revenue:';

View file

@ -115,7 +115,8 @@ export default {
ProgressBarOn: true, ProgressBarOn: true,
PercentageOn: true, PercentageOn: true,
OpacityOn: true OpacityOn: true
} },
TimePlayedOn: true
}, },
Limits: { Limits: {
PinnedGames: 10, PinnedGames: 10,

View file

@ -777,6 +777,24 @@
* This feature does not make it possible to set your place(s) as "copyable" * This feature does not make it possible to set your place(s) as "copyable"
</span> </span>
</div> </div>
<div class="setting-container" id="time-played">
<span class="badge bg-primary mb-1">New in v1.3!</span>
<br>
<span class="indicator">&nbsp;</span>
<span class="title">
Time Played
</span>
<div class="setting-buttons">
<button class="btn btn-sm toggle-btn" data-setting="TimePlayedOn">Toggle</button>
</div>
<br />
<span class="desc">
Track your playtime in places around Polytoria!
</span>
<span class="warning">
* Past playtime data (prior to extension install/prior to setting enable) is, understandably, not able to be tracked
</span>
</div>
<!--- <!---
<div class="setting-container" id="auto-ad-bidding"> <div class="setting-container" id="auto-ad-bidding">
<span class="indicator">&nbsp;</span> <span class="indicator">&nbsp;</span>