Skip to content

Commit 32be719

Browse files
authored
Merge pull request #237 from csfloat/feature/ping-service-worker-startup
Ensures Ping on Server Worker Startup
2 parents 4bd5d98 + 5114c51 commit 32be719

3 files changed

Lines changed: 20 additions & 0 deletions

File tree

src/background.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ import {Handle} from './lib/bridge/server';
22
import {InternalResponseBundle} from './lib/bridge/types';
33
import MessageSender = chrome.runtime.MessageSender;
44
import {alarmListener, registerTradeAlarmIfPossible} from './lib/alarms/setup';
5+
import {pingTradeStatus} from './lib/alarms/csfloat_trade_pings';
6+
import {gStore} from './lib/storage/store';
7+
import {StorageKey} from './lib/storage/keys';
58

69
function unifiedHandler(request: any, sender: MessageSender, sendResponse: (response?: any) => void) {
710
Handle(request, sender)
@@ -51,3 +54,15 @@ async function checkAlarmState() {
5154
}
5255

5356
checkAlarmState();
57+
58+
// Ping trade status upon service worker wake-up
59+
// Why do this even though there's an alarm? Well, some people turn on their device briefly to send a trade offer
60+
// then close it quickly, it's hard to rely on Chrome's scheduling in that case
61+
async function checkTradeStatus() {
62+
const lastPing = await gStore.getWithStorage<number>(chrome.storage.local, StorageKey.LAST_TRADE_PING_ATTEMPT);
63+
if (!lastPing || lastPing < Date.now() - 3 * 60 * 1000) {
64+
// Last ping was over 3 minutes ago
65+
pingTradeStatus();
66+
}
67+
}
68+
checkTradeStatus();

src/lib/alarms/csfloat_trade_pings.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@ import {pingCancelTrades, pingSentTradeOffers} from './trade_offer';
55
import {HasPermissions} from '../bridge/handlers/has_permissions';
66
import {PingExtensionStatus} from '../bridge/handlers/ping_extension_status';
77
import {AccessToken, getAccessToken} from './access_token';
8+
import {gStore} from '../storage/store';
9+
import {StorageKey} from '../storage/keys';
810

911
export const PING_CSFLOAT_TRADE_STATUS_ALARM_NAME = 'ping_csfloat_trade_status_alarm';
1012

1113
export async function pingTradeStatus() {
14+
await gStore.setWithStorage(chrome.storage.local, StorageKey.LAST_TRADE_PING_ATTEMPT, Date.now());
15+
1216
const hasPermissions = await HasPermissions.handleRequest(
1317
{
1418
permissions: [],

src/lib/storage/keys.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export enum StorageKey {
99
ITEM_FILTERS = 'expressions',
1010
GLOBAL_FILTERS = 'global',
1111
ACCESS_TOKEN = 'access_token',
12+
LAST_TRADE_PING_ATTEMPT = 'last_trade_ping_attempt',
1213
}
1314

1415
export type DynamicStorageKey = string;

0 commit comments

Comments
 (0)