feat: implement buttons

Co-authored-by: Jack C <30955604+jacany@users.noreply.github.com>
This commit is contained in:
iCrawl 2021-04-10 14:42:28 +02:00
parent 03c988ba47
commit fbd799f371
No known key found for this signature in database
GPG key ID: 1AB888B16355FBB2
4 changed files with 46 additions and 16 deletions

View file

@ -144,6 +144,11 @@
"type": "boolean", "type": "boolean",
"default": false, "default": false,
"description": "Removes the timestamp" "description": "Removes the timestamp"
},
"discord.removeRemoteRepository": {
"type": "boolean",
"default": false,
"description": "Removes the View Repository button"
} }
} }
} }

View file

@ -1,5 +1,5 @@
import { basename, parse, sep } from 'path'; import { basename, parse, sep } from 'path';
import { debug, env, extensions, Selection, TextDocument, window, workspace } from 'vscode'; import { debug, env, Selection, TextDocument, window, workspace } from 'vscode';
import { import {
CONFIG_KEYS, CONFIG_KEYS,
@ -14,9 +14,8 @@ import {
VSCODE_IMAGE_KEY, VSCODE_IMAGE_KEY,
VSCODE_INSIDERS_IMAGE_KEY, VSCODE_INSIDERS_IMAGE_KEY,
} from './constants'; } from './constants';
import { API, GitExtension } from './git';
import { log, LogLevel } from './logger'; import { log, LogLevel } from './logger';
import { getConfig, resolveFileIcon, toLower, toTitle, toUpper } from './util'; import { getConfig, getGit, resolveFileIcon, toLower, toTitle, toUpper } from './util';
interface ActivityPayload { interface ActivityPayload {
details?: string; details?: string;
@ -50,6 +49,9 @@ export async function activity(previous: ActivityPayload = {}) {
const defaultLargeImageText = config[CONFIG_KEYS.LargeImageIdling]; const defaultLargeImageText = config[CONFIG_KEYS.LargeImageIdling];
const removeDetails = config[CONFIG_KEYS.RemoveDetails]; const removeDetails = config[CONFIG_KEYS.RemoveDetails];
const removeLowerDetails = config[CONFIG_KEYS.RemoveLowerDetails]; const removeLowerDetails = config[CONFIG_KEYS.RemoveLowerDetails];
const removeRemotRepository = config[CONFIG_KEYS.removeRemotRepository];
const git = await getGit();
let state: ActivityPayload = { let state: ActivityPayload = {
details: removeDetails details: removeDetails
@ -72,6 +74,19 @@ export async function activity(previous: ActivityPayload = {}) {
}; };
} }
if (!removeRemotRepository && git?.repositories.length) {
let repo = git.repositories.find((repo) => repo.ui.selected)?.state.remotes[0].fetchUrl;
if (repo) {
repo = repo.replace(':', '/').replace('git@', 'https://').replace('.git', '');
state = {
...state,
buttons: [{ label: 'View Repository', url: repo }],
};
}
}
if (window.activeTextEditor) { if (window.activeTextEditor) {
const largeImageKey = resolveFileIcon(window.activeTextEditor.document); const largeImageKey = resolveFileIcon(window.activeTextEditor.document);
const largeImageText = config[CONFIG_KEYS.LargeImage] const largeImageText = config[CONFIG_KEYS.LargeImage]
@ -207,18 +222,7 @@ async function fileDetails(_raw: string, document: TextDocument, selection: Sele
); );
} }
let git: API | undefined; const git = await getGit();
try {
log(LogLevel.Debug, 'Loading git extension');
const gitExtension = extensions.getExtension<GitExtension>('vscode.git');
if (!gitExtension?.isActive) {
log(LogLevel.Trace, 'Git extension not activated, activating...');
await gitExtension?.activate();
}
git = gitExtension?.exports.getAPI(1);
} catch (error) {
log(LogLevel.Error, `Failed to load git extension, is git installed?; ${error as string}`);
}
if (raw.includes(REPLACE_KEYS.GitBranch)) { if (raw.includes(REPLACE_KEYS.GitBranch)) {
if (git?.repositories.length) { if (git?.repositories.length) {

View file

@ -56,4 +56,5 @@ export const enum CONFIG_KEYS {
RemoveDetails = 'removeDetails', RemoveDetails = 'removeDetails',
RemoveLowerDetails = 'removeLowerDetails', RemoveLowerDetails = 'removeLowerDetails',
RemoveTimestamp = 'removeTimestamp', RemoveTimestamp = 'removeTimestamp',
removeRemotRepository = 'removeRemoteRepository',
} }

View file

@ -1,7 +1,9 @@
import { basename } from 'path'; import { basename } from 'path';
import { TextDocument, workspace, WorkspaceConfiguration } from 'vscode'; import { TextDocument, workspace, extensions, WorkspaceConfiguration } from 'vscode';
import { KNOWN_EXTENSIONS, KNOWN_LANGUAGES } from './constants'; import { KNOWN_EXTENSIONS, KNOWN_LANGUAGES } from './constants';
import { API, GitExtension } from './git';
import { log, LogLevel } from './logger';
type WorkspaceExtensionConfiguration = WorkspaceConfiguration & { type WorkspaceExtensionConfiguration = WorkspaceConfiguration & {
enabled: boolean; enabled: boolean;
@ -21,6 +23,7 @@ type WorkspaceExtensionConfiguration = WorkspaceConfiguration & {
removeDetails: boolean; removeDetails: boolean;
removeLowerDetails: boolean; removeLowerDetails: boolean;
removeTimestamp: boolean; removeTimestamp: boolean;
removeRemoteRepository: boolean;
}; };
export function getConfig() { export function getConfig() {
@ -57,3 +60,20 @@ export function resolveFileIcon(document: TextDocument) {
return typeof fileIcon === 'string' ? fileIcon : fileIcon?.image ?? 'text'; return typeof fileIcon === 'string' ? fileIcon : fileIcon?.image ?? 'text';
} }
export async function getGit() {
let git: API | undefined;
try {
log(LogLevel.Debug, 'Loading git extension');
const gitExtension = extensions.getExtension<GitExtension>('vscode.git');
if (!gitExtension?.isActive) {
log(LogLevel.Trace, 'Git extension not activated, activating...');
await gitExtension?.activate();
}
git = gitExtension?.exports.getAPI(1);
} catch (error) {
log(LogLevel.Error, `Failed to load git extension, is git installed?; ${error as string}`);
}
return git;
}