Skip to content

Commit 1afa128

Browse files
authored
convert key value storage to global storage (#455)
* convert key value storage to global storage * remove session file initialize * remove unused imports * fetch disableGitData from user preferences
1 parent 87b26e3 commit 1afa128

12 files changed

+83
-50
lines changed

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "swdc-vscode",
33
"displayName": "Code Time",
4-
"version": "2.6.50",
4+
"version": "2.6.51",
55
"publisher": "softwaredotcom",
66
"description": "Code Time is an open source plugin that provides programming metrics right in Visual Studio Code.",
77
"author": {
@@ -27,6 +27,9 @@
2727
"time",
2828
"productivity"
2929
],
30+
"capabilities": {
31+
"supported": true
32+
},
3033
"activationEvents": [
3134
"onStartupFinished"
3235
],

src/DataController.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,6 @@ function hasIntegrationConnection(type_id: number, connections = []):boolean {
8686
return !!(connections?.find((integration: any) => integration.status === 'ACTIVE' && (integration.integration_type_id === type_id)));
8787
}
8888

89-
export function setPreference(preference: string, value: any) {
90-
return setItem(preference, value);
91-
}
92-
93-
export function getPreference(preference: string) {
94-
return getItem(preference);
95-
}
96-
9789
export async function authenticationCompleteHandler(user: any) {
9890
let updatedUserInfo = false;
9991
// clear the auth callback state

src/Util.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { v4 as uuidv4 } from 'uuid';
1212

1313
import {showModalSignupPrompt} from './managers/SlackManager';
1414
import {execCmd} from './managers/ExecManager';
15-
import {getJsonItem, setJsonItem, storeJsonData} from './managers/FileManager';
15+
import {getBooleanJsonItem, getJsonItem, setJsonItem, storeJsonData} from './managers/FileManager';
1616
import { formatISO } from 'date-fns';
1717
import { initializeWebsockets, websocketAlive } from './websockets';
1818

@@ -118,7 +118,7 @@ export function updateFlowChange(in_flow: boolean) {
118118

119119
export function isFlowModeEnabled() {
120120
// nullish coalesce the "in_flow" flag if it doesn't exist
121-
return getJsonItem(getFlowChangeFile(), "in_flow") ?? false;
121+
return getBooleanJsonItem(getFlowChangeFile(), "in_flow") ?? false;
122122
}
123123

124124
export function setItem(key: string, value: any) {
@@ -129,6 +129,10 @@ export function getItem(key: string) {
129129
return getJsonItem(getSoftwareSessionFile(), key);
130130
}
131131

132+
export function getBooleanItem(key: string) {
133+
return getBooleanJsonItem(getSoftwareSessionFile(), key);
134+
}
135+
132136
export function isActiveIntegration(type: string, integration: any) {
133137
if (integration && integration.status.toLowerCase() === "active") {
134138
// handle integration_connection attribute
@@ -402,3 +406,8 @@ export function musicTimeExtInstalled() {
402406
export function editorOpsExtInstalled() {
403407
return !!extensions.getExtension(EDITOR_OPS_EXT_ID)
404408
}
409+
410+
export function getFileNameFromPath(filePath: string) {
411+
const parts = isWindows() ? filePath.split('\\') : filePath.split('/');
412+
return parts[parts.length - 1].split('.')[0];
413+
}

src/extension.ts

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
// The module 'vscode' contains the VS Code extensibility API
44
// Import the module and reference it with the alias vscode in your code below
5-
import {window, ExtensionContext, commands, extensions} from 'vscode';
5+
import {window, ExtensionContext, commands} from 'vscode';
66
import {getUser} from './DataController';
77
import {onboardInit} from './user/OnboardManager';
88
import {
@@ -15,7 +15,7 @@ import {
1515
isPrimaryWindow,
1616
displayReadme,
1717
getRandomNumberWithinRange,
18-
getSoftwareSessionFile,
18+
getBooleanItem
1919
} from './Util';
2020
import {createCommands} from './command-helper';
2121
import {KpmManager} from './managers/KpmManager';
@@ -32,7 +32,7 @@ import {ChangeStateManager} from './managers/ChangeStateManager';
3232
import {initializeFlowModeState} from './managers/FlowManager';
3333
import { ExtensionManager } from './managers/ExtensionManager';
3434
import { LocalStorageManager } from './managers/LocalStorageManager';
35-
import { getFileDataAsJson, storeJsonData } from './managers/FileManager';
35+
import { setSessionStorageManager } from './managers/FileManager';
3636

3737
let TELEMETRY_ON = true;
3838
let currentColorKind: number | undefined = undefined;
@@ -62,7 +62,7 @@ export function deactivate(ctx: ExtensionContext) {
6262
kpmController.dispose();
6363

6464
if (isPrimaryWindow()) {
65-
if (storageManager) storageManager.clearStorage();
65+
if (storageManager) storageManager.clearDupStorageKeys();
6666
}
6767

6868
disposeWebsocketTimeouts();
@@ -76,7 +76,6 @@ export async function activate(ctx: ExtensionContext) {
7676
ctx.subscriptions.push(createCommands(ctx, kpmController));
7777
TrackerManager.storageMgr = storageManager;
7878

79-
8079
if (getItem("jwt")) {
8180
intializePlugin();
8281
} else if (window.state.focused) {
@@ -107,8 +106,7 @@ export async function intializePlugin() {
107106
await getUser();
108107

109108
// show the sidebar if this is the 1st
110-
const initializedVscodePlugin = getItem('vscode_CtInit');
111-
if (!initializedVscodePlugin) {
109+
if (!getBooleanItem('vscode_CtInit')) {
112110
setItem('vscode_CtInit', true);
113111

114112
setTimeout(() => {
@@ -153,12 +151,8 @@ export function getCurrentColorKind() {
153151

154152
function initializeSession(storageManager: LocalStorageManager) {
155153
if (window.state.focused) {
156-
// validate the session.json file
157-
const sessionFile = getSoftwareSessionFile();
158-
if (!getFileDataAsJson(sessionFile)) {
159-
storeJsonData(sessionFile, {});
160-
}
154+
setSessionStorageManager(storageManager);
161155
setItem('vscode_primary_window', getWorkspaceName());
162-
if (storageManager) storageManager.clearStorage();
156+
if (storageManager) storageManager.clearDupStorageKeys();
163157
}
164158
}

src/managers/FileManager.ts

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,43 @@
1-
import { logIt } from '../Util';
1+
import { getFileNameFromPath, getSoftwareSessionFile, logIt } from '../Util';
2+
import { LocalStorageManager } from './LocalStorageManager';
23

34
const fs = require('fs');
45
const path = require('path');
56

7+
let storageMgr: LocalStorageManager | undefined = undefined;
8+
9+
export function setSessionStorageManager(storageManager: LocalStorageManager) {
10+
storageMgr = storageManager;
11+
12+
// convert old storage to new storage if needed
13+
if (!storageMgr?.getValue('session_jwt')) {
14+
const sessionJson = getFileDataAsJson(getSoftwareSessionFile());
15+
// set a closure storage var
16+
const storage = storageMgr;
17+
if (sessionJson) {
18+
Object.keys(sessionJson).forEach((key: string) => {
19+
storage?.setValue(`session_${key}`, sessionJson[key]);
20+
});
21+
}
22+
}
23+
}
24+
25+
export function getBooleanJsonItem(file: string, key: string) {
26+
const value = getJsonItem(file, key);
27+
try {
28+
return !!JSON.parse(value);
29+
} catch (e) {
30+
return false;
31+
}
32+
}
33+
634
export function getJsonItem(file: string, key: string) {
7-
const data: any = getFileDataAsJson(file);
8-
return data ? data[key] : null;
35+
return storageMgr?.getValue(`${getFileNameFromPath(file)}_${key}`) || '';
936
}
1037

1138
export function setJsonItem(file: string, key: string, value: any) {
12-
let json: any = getFileDataAsJson(file);
13-
if (!json) {
14-
json = {};
15-
}
16-
json[key] = value;
17-
storeJsonData(file, json);
39+
const new_key = `${getFileNameFromPath(file)}_${key}`;
40+
storageMgr?.setValue(new_key, value);
1841
}
1942

2043
export function getFileDataAsJson(filePath: string): any {

src/managers/FlowManager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {commands, ProgressLocation, window} from 'vscode';
22
import {appPost, appDelete, appGet} from '../http/HttpClient';
3-
import {getItem, isFlowModeEnabled, isPrimaryWindow, logIt, updateFlowChange} from '../Util';
3+
import {getBooleanItem, getItem, isFlowModeEnabled, isPrimaryWindow, logIt, updateFlowChange} from '../Util';
44

55
import {showModalSignupPrompt, checkSlackConnectionForFlowMode} from './SlackManager';
66
import {
@@ -55,7 +55,7 @@ export async function initiateFlow({automated = false}) {
5555
return;
5656
}
5757

58-
const skipSlackCheck = !!getItem('vscode_CtskipSlackConnect');
58+
const skipSlackCheck = !!getBooleanItem('vscode_CtskipSlackConnect');
5959

6060
if (!skipSlackCheck && !automated) {
6161
const connectInfo = await checkSlackConnectionForFlowMode();

src/managers/KpmManager.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {workspace, Disposable, RelativePattern, Uri} from 'vscode';
2-
import {getFirstWorkspaceFolder, logIt} from '../Util';
3-
import {getPreference} from '../DataController';
4-
import {TrackerManager} from './TrackerManager';
2+
import { getUserPreferences } from '../DataController';
3+
import { getFirstWorkspaceFolder, logIt } from '../Util';
4+
import { TrackerManager } from './TrackerManager';
55

66
const fs = require('fs');
77
export class KpmManager {
@@ -45,7 +45,8 @@ export class KpmManager {
4545
}
4646

4747
private async _onCommitHandler(event: Uri) {
48-
if (getPreference('disableGitData') === true) return;
48+
const preferences: any = await getUserPreferences();
49+
if (preferences?.disableGitData) return;
4950

5051
// Branches with naming style of "feature/fix_the_thing" will fire an
5152
// event when the /feature directory is created. Check if file.

src/managers/LocalStorageManager.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,14 @@ export class LocalStorageManager {
2828
this.storage.update(key, undefined);
2929
}
3030

31-
public clearStorage() {
31+
public clearDupStorageKeys() {
3232
const keys = this.storage.keys();
3333
if (keys?.length) {
34-
keys.forEach(key => this.deleteValue(key));
34+
keys.forEach(key => {
35+
if (key?.includes('$ct_event_')) {
36+
this.deleteValue(key)
37+
}
38+
});
3539
}
3640
}
3741
}

src/managers/ScreenManager.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { commands } from "vscode";
2-
import { getPreference, getUserPreferences } from "../DataController";
2+
import { getUserPreferences } from "../DataController";
33

44
export const NORMAL_SCREEN_MODE = 0;
55
export const ZEN_MODE_ID = 1;
@@ -12,7 +12,6 @@ export async function getConfiguredScreenMode() {
1212
const preferences: any = await getUserPreferences();
1313

1414
const flowModeSettings = preferences?.flowMode || {};
15-
// const flowModeSettings = getPreference("flowMode");
1615
const screenMode = flowModeSettings?.editor?.vscode?.screenMode;
1716
if (screenMode?.includes("Full Screen")) {
1817
preferredScreenMode = FULL_SCREEN_MODE_ID;

src/managers/TrackerManager.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
getWorkspaceFolders,
1010
getGitEventFile,
1111
isGitProject,
12-
getEditorName,
12+
getEditorName
1313
} from '../Util';
1414
import {KpmItem} from '../model/models';
1515
import {getResourceInfo} from '../repo/KpmRepoManager';
@@ -25,10 +25,10 @@ import {
2525
commitAlreadyOnRemote,
2626
isMergeCommit,
2727
} from '../repo/GitUtil';
28-
import {getPreference} from '../DataController';
2928
import {getFileDataAsJson, getJsonItem, setJsonItem, storeJsonData} from './FileManager';
3029
import {DocChangeInfo, ProjectChangeInfo} from '@swdotcom/editor-flow';
3130
import { LocalStorageManager } from './LocalStorageManager';
31+
import { getUserPreferences } from '../DataController';
3232

3333
export class TrackerManager {
3434
private static instance: TrackerManager;
@@ -241,7 +241,8 @@ export class TrackerManager {
241241
}
242242

243243
private async sendGitEvent(gitEventName: string, projectParams: any, eventData?: any) {
244-
if (getPreference('disableGitData') === true) return;
244+
const preferences: any = await getUserPreferences();
245+
if (preferences?.disableGitData) return;
245246

246247
const repoParams = await this.getRepoParams(projectParams.project_directory);
247248
const gitEvent = {
@@ -412,8 +413,15 @@ export class TrackerManager {
412413
getLatestTrackedCommit(dotGitFilePath: string): string {
413414
// dotGitFilePath: /Users/somebody/code/repo_name/.git/refs/remotes/origin/main
414415
const data = getJsonItem(getGitEventFile(), dotGitFilePath);
415-
416-
return data?.latestTrackedCommit || '';
416+
if (data) {
417+
try {
418+
const jsonData = JSON.parse(data)
419+
return jsonData.latestTrackedCommit || '';
420+
} catch (e) {
421+
// ignore
422+
}
423+
}
424+
return '';
417425
}
418426

419427
removeBranchFromTrackingHistory(dotGitFilePath: string) {

0 commit comments

Comments
 (0)