Skip to content

Commit

Permalink
refactor: use messenger
Browse files Browse the repository at this point in the history
  • Loading branch information
oeyoews committed Oct 24, 2024
1 parent a98af1f commit 8c821e3
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 65 deletions.
13 changes: 4 additions & 9 deletions packages/react/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ import {
AccordionTrigger,
} from '@/components/ui/accordion';
import { sound } from './sound';
// import { WebviewMessenger } from './utils/WebViewMessenger';
import { WebviewMessenger } from './utils/WebViewMessenger';

// @ts-expect-error
const vscode = acquireVsCodeApi();
const messenger = new WebviewMessenger({ vscode });
function App() {
const [inputValue, setInputValue] = useState('');
const inputRef = useRef<HTMLTextAreaElement>(null);
// const messenger = new WebviewMessenger({ vscode });

const cards = [
{
Expand Down Expand Up @@ -78,12 +78,7 @@ function App() {

function openLink(link: string) {
if (vscode) {
vscode.postMessage({
type: 'openLink',
data: {
link: link.toString(),
},
});
messenger.send('openLink', { link });
} else {
window.open(link.toString(), '_blank');
}
Expand All @@ -104,7 +99,7 @@ function App() {

function submitInput() {
if (!inputValue) return;
vscode.postMessage({ type: 'sendWiki', data: { text: inputValue } });
messenger.send('sendWiki', { text: inputValue });
// NOTE: 如果需要确保发送成功后触发声音需要使用双向通信, vscode 本身不支持播放声音???
// TODO: 添加配置, 同样需要借助双向通信拿到vscode 配置
// messenger.send('playSound', {});
Expand Down
18 changes: 1 addition & 17 deletions src/commands/usewikiCmd.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
// import fetchData from '../featchData';
import * as vscode from 'vscode';
import sendTiddler from '../sendTiddler';
import { defaultTag, getType, defaultUsername } from '../config';
import { notify } from '../notify';

export const name = 'usewiki2.tiddlywiki';
export async function cli() {
// const newdata = await fetchData();
const random = Math.random().toString(36).slice(2);
let title = new Date().toLocaleString().split(' ').shift() + '-' + random;
const time = new Date().toISOString().split('.').shift()!.replace(/\D/g, '');

const text = await vscode.window.showInputBox({
title: '书写太微之书',
placeHolder: '输入你的内容',
Expand All @@ -22,15 +16,5 @@ export async function cli() {
return;
}

const tiddler: ITiddler = {
created: time,
modified: time,
tags: [defaultTag()],
creator: defaultUsername(),
type: getType(),
text,
title,
};

sendTiddler(tiddler);
sendTiddler(text);
}
21 changes: 17 additions & 4 deletions src/sendTiddler.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,24 @@
import { notify } from './notify';
import { getPort, getIp } from './config';

export default async function sendTiddler(tiddler: ITiddler) {
import { defaultTag, getPort, getIp, defaultUsername, getType } from './config';
export default async function sendTiddler(text: string) {
const port = getPort();
const ip = getIp();

const url = `http://${ip}:${port}/recipes/default/tiddlers/${tiddler.title}`;
const random = Math.random().toString(36).slice(2);
let title =
new Date().toISOString().split('T')[0].replace('-', '/') + '-' + random;
const time = new Date().toISOString().split('.').shift()!.replace(/\D/g, '');
const tiddler: ITiddler = {
created: time,
modified: time,
tags: [defaultTag()],
creator: defaultUsername(),
type: getType(),
text,
title,
};

const url = `http://${ip}:${port}/recipes/default/tiddlers/${title}`;

try {
const response = await fetch(url, {
Expand Down
43 changes: 8 additions & 35 deletions src/webviews/index.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import * as vscode from 'vscode';
// import fetchData from '../featchData';
import sendTiddler from '../sendTiddler';
import * as openWikiCmd from '../commands/openWikiCmd';
import { defaultTag, defaultUsername, getType } from '../config';
import { WebviewMessenger } from '../utils/extensionMessenger';

export class usewikiViewProvider implements vscode.WebviewViewProvider {
private _view?: vscode.WebviewView;
// private _twdata = {} as ITiddlyWikiStatus;
constructor(
private context: vscode.ExtensionContext,
private _extensionUri = context.extensionUri
Expand All @@ -19,7 +16,6 @@ export class usewikiViewProvider implements vscode.WebviewViewProvider {
_token: vscode.CancellationToken
) {
this._view = webviewView;
// this._twdata = await fetchData();

webviewView.webview.options = {
enableScripts: true,
Expand All @@ -37,37 +33,14 @@ export class usewikiViewProvider implements vscode.WebviewViewProvider {

// messenger.send('startup', { text: 'Startup from VSCode!' });

webviewView.webview.onDidReceiveMessage(async (message) => {
switch (message.type) {
case 'openLink':
vscode.env.openExternal(vscode.Uri.parse(message.data.link));
break;
case 'openWiki':
openWikiCmd.cli();
break;
case 'sendWiki':
const random = Math.random().toString(36).slice(2);
let title =
new Date().toISOString().split('T')[0].replace('-', '/') +
'-' +
random;
const time = new Date()
.toISOString()
.split('.')
.shift()!
.replace(/\D/g, '');
const tiddler: ITiddler = {
created: time,
modified: time,
tags: [defaultTag()],
creator: defaultUsername(),
type: getType(),
text: message.data.text,
title,
};
sendTiddler(tiddler);
break;
}
messenger.on('openLink', (data) => {
vscode.env.openExternal(vscode.Uri.parse(data.link));
});
messenger.on('openWiki', (data) => {
openWikiCmd.cli();
});
messenger.on('sendWiki', (data) => {
sendTiddler(data.text);
});
}
private getWebviewContent(webview: vscode.Webview) {
Expand Down

0 comments on commit 8c821e3

Please sign in to comment.