From 768f37d9e84b01bdfa96b9785ab5f6df8afb2ce2 Mon Sep 17 00:00:00 2001 From: Juha Ristolainen Date: Fri, 17 Mar 2017 14:30:17 +0000 Subject: [PATCH] Added API integration. --- logo.png | Bin 0 -> 26028 bytes package.json | 21 +++++++++++-- src/code-stats-api.ts | 68 ++++++++++++++++++++++++++++++++++++++++++ src/code-stats.ts | 5 ---- src/pulse.ts | 9 ++++-- src/xp-counter.ts | 52 +++++++++++++++++++++++++------- 6 files changed, 136 insertions(+), 19 deletions(-) create mode 100644 logo.png create mode 100644 src/code-stats-api.ts diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..683ecc46ba076339d7446898eac184c31654f986 GIT binary patch literal 26028 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
  • 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 QU#Xlxsc0iBl&quv1MLIIF8}}l literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 6eea977..4b711dd 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "code-stats-vscode", - "displayName": "code-stats-vscode", + "displayName": "Code::Stats", "description": "Code::Stats package for Visual Studio Code", - "version": "0.0.1", + "version": "0.1.0", "publisher": "juha-ristolainen", "engines": { "vscode": "^1.10.0" @@ -10,11 +10,25 @@ "categories": [ "Other" ], + "maintainers": [ + "Juha Ristolainen" + ], "activationEvents": [ "*" ], "main": "./out/src/code-stats", "contributes": { + "configuration": { + "type": "object", + "title": "code-stats-vscode", + "properties": { + "codestats.apikey": { + "type": "string", + "default": "", + "description": "Code::Stats API key for this machine." + } + } + }, "commands": [] }, "scripts": { @@ -29,5 +43,8 @@ "mocha": "^2.3.3", "@types/node": "^6.0.40", "@types/mocha": "^2.2.32" + }, + "dependencies": { + "axios": "0.15.3" } } \ No newline at end of file diff --git a/src/code-stats-api.ts b/src/code-stats-api.ts new file mode 100644 index 0000000..51c1bac --- /dev/null +++ b/src/code-stats-api.ts @@ -0,0 +1,68 @@ + +import { Pulse } from "./pulse"; +import { getISOTimestamp } from "./utils"; +import * as axios from "axios"; + +export class CodeStatsAPI { + private API_KEY = null; + private UPDATE_URL = "https://codestats.net/api/my/pulses"; + private axios; + + constructor(apiKey: string) { + this.API_KEY = apiKey; + if (this.API_KEY === null || this.API_KEY === undefined) { + return; + } + + this.axios = axios.default.create({ + baseURL: this.UPDATE_URL, + timeout: 1000, + headers: { + "X-API-Token": this.API_KEY, + "Content-Type": "application/json" + } + }); + + } + + public sendUpdate(pulse: Pulse): void { + // tslint:disable-next-line:typedef + const data = new ApiJSON(new Date()); + + for (let lang of pulse.xps.keys()) { + let xp: number = pulse.getXP(lang); + data.xps.push(new ApiXP(lang, xp)); + } + + let json: string = JSON.stringify(data); + console.log(`JSON: ${json}`); + + this.axios.post(this.UPDATE_URL, json) + .then( (response) => { + console.log(response); + }) + .catch((error) => { + console.log(error); + }); + } +} + +class ApiJSON { + constructor(date: Date) { + this.coded_at = getISOTimestamp(new Date()); + this.xps = new Array(); + } + + coded_at: string; + xps: Array; +} + +class ApiXP { + constructor(language: string, xp: number) { + this.language = language; + this.xp = xp; + } + + language: string; + xp: number; +} diff --git a/src/code-stats.ts b/src/code-stats.ts index 27c6e11..d3577fd 100644 --- a/src/code-stats.ts +++ b/src/code-stats.ts @@ -3,15 +3,10 @@ import { ExtensionContext } from "vscode"; import { XpCounter } from "./xp-counter"; export function activate(context: ExtensionContext): void { - console.log("Activating code-stats-vscode"); - let controller: XpCounter = new XpCounter(); - - // add to a list of disposables which are disposed when this extension is deactivated. context.subscriptions.push(controller); } // this method is called when your extension is deactivated export function deactivate(): void { - console.log("Deactivating code-stats-vscode"); } diff --git a/src/pulse.ts b/src/pulse.ts index 837bc23..da52393 100644 --- a/src/pulse.ts +++ b/src/pulse.ts @@ -2,7 +2,6 @@ export class Pulse { xps: Map < string, number > ; constructor() { - console.log("Creating Pulse"); this.xps = new Map < string, number > (); } @@ -22,7 +21,13 @@ export class Pulse { xp += amount; this.xps.set(language, xp); + } - // console.log(`Added ${amount} of XP to ${language}, total is now ${xp}`); + public get getXPs(): Map < string, number > { + return this.xps; + } + + public reset(): void { + this.xps = new Map < string, number > (); } } \ No newline at end of file diff --git a/src/xp-counter.ts b/src/xp-counter.ts index 60b6377..b21f979 100644 --- a/src/xp-counter.ts +++ b/src/xp-counter.ts @@ -1,17 +1,32 @@ -import { Disposable, workspace, window, StatusBarItem, TextDocument, StatusBarAlignment, TextDocumentChangeEvent, Range } from "vscode"; +// tslint:disable-next-line:max-line-length +import { Disposable, workspace, window, StatusBarItem, TextDocument, StatusBarAlignment, TextDocumentChangeEvent, Range, WorkspaceConfiguration } from "vscode"; import { Pulse } from "./pulse"; +import { CodeStatsAPI } from "./code-stats-api"; export class XpCounter { private combinedDisposable: Disposable; private statusBarItem: StatusBarItem; private pulse: Pulse; - private languages: Array = ["typescript", "javascript"]; - private changeCount: number = 0; + private api: CodeStatsAPI; + private updateTimeout: any; + + // private languages: Array = ["typescript", "javascript"]; + + // wait 10s after each change in the document before sending an update + private UPDATE_DELAY = 10000; constructor() { - console.log(`Supported languages for Code::Stats are ${this.languages}`); this.pulse = new Pulse(); + let config: WorkspaceConfiguration = workspace.getConfiguration("codestats"); + if (!config) { + return; + } + + // tslint:disable-next-line:typedef + let apiKey = config.get("apikey"); + this.api = new CodeStatsAPI(`${apiKey}`); + if (!this.statusBarItem) { this.statusBarItem = window.createStatusBarItem(StatusBarAlignment.Left); } @@ -43,7 +58,6 @@ export class XpCounter { if (range.start.character === range.end.character) { return 1; } else { - console.log(`L${range.start.line}C${range.start.character} to L${range.end.line}C${range.end.character}`); return range.end.character - range.start.character; } } @@ -52,20 +66,38 @@ export class XpCounter { } public updateXpCount(document: TextDocument, changeCount: number): void { - // only update xp if one of supported languages + let show: boolean; if (this.isSupportedLanguage(document.languageId)) { this.pulse.addXP(document.languageId, changeCount); - // this.statusBarItem.text = this.changeCount !== 1 ? - // ` C::S ${this.changeCount} Words` : "$(pencil) C::S 1 Word"; - this.statusBarItem.text = `C::S $(pencil) ${this.pulse.getXP(document.languageId)}`; - this.statusBarItem.show(); + show = true; } else { + show = false; + } + this.updateStatusBar(show, `${this.pulse.getXP(document.languageId)}`); + + // each change resets the timeout so we only send updates when there is a 10s delay in updates to the document + if (this.updateTimeout !== null) { + clearTimeout(this.updateTimeout); + } + + this.updateTimeout = setTimeout(() => { + this.api.sendUpdate(this.pulse); + }, this.UPDATE_DELAY); + + } + + private updateStatusBar(show: boolean, changeCount: string): void { + if (!show) { this.statusBarItem.hide(); + } else { + this.statusBarItem.text = `$(pencil) C::S ${changeCount}`; + this.statusBarItem.show(); } } private isSupportedLanguage(language: string): boolean { // todo: check supported languages + // only update xp if one of supported languages return true; }