From 51e7501121f3919aeb3db9f9dc1a1281a89b8c65 Mon Sep 17 00:00:00 2001 From: qianlifeng Date: Thu, 21 Dec 2023 23:53:37 +0800 Subject: [PATCH] Optimize chatgpt plugin and result refresh implementation --- .../launcher/wox_launcher_controller.dart | 58 +++++++------ .../wox/lib/utils/wox_websocket_msg_util.dart | 31 ++++++- Wox/plugin/system/chatgpt.go | 83 +++++++++++++++---- Wox/plugin/system/url.go | 22 +++++ 4 files changed, 147 insertions(+), 47 deletions(-) diff --git a/Wox.UI.Flutter/wox/lib/modules/launcher/wox_launcher_controller.dart b/Wox.UI.Flutter/wox/lib/modules/launcher/wox_launcher_controller.dart index 36e2c1e1d..04ecd1966 100644 --- a/Wox.UI.Flutter/wox/lib/modules/launcher/wox_launcher_controller.dart +++ b/Wox.UI.Flutter/wox/lib/modules/launcher/wox_launcher_controller.dart @@ -1,5 +1,4 @@ import 'dart:async'; -import 'dart:convert'; import 'dart:io'; import 'dart:ui'; @@ -193,13 +192,14 @@ class WoxLauncherController extends GetxController implements WoxLauncherInterfa if (query.queryType == WoxQueryTypeEnum.WOX_QUERY_TYPE_INPUT.code) { // save the cursor position - final cursorPosition = queryBoxTextFieldController.selection.baseOffset; + var cursorPosition = queryBoxTextFieldController.selection.baseOffset; queryBoxTextFieldController.text = query.queryText; if (moveCursorToEnd) { moveQueryBoxCursorToEnd(); } else { // try to restore the cursor position after set text, which will reset the cursor position + cursorPosition = cursorPosition > queryBoxTextFieldController.text.length ? queryBoxTextFieldController.text.length : cursorPosition; queryBoxTextFieldController.selection = TextSelection(baseOffset: cursorPosition, extentOffset: cursorPosition); } } else { @@ -273,13 +273,7 @@ class WoxLauncherController extends GetxController implements WoxLauncherInterfa filterResultActions.refresh(); } - void handleWebSocketMessage(event) { - var msg = WoxWebsocketMsg.fromJson(jsonDecode(event)); - if (msg.success == false) { - Logger.instance.error("Received error message: ${msg.toJson()}"); - return; - } - + void handleWebSocketMessage(WoxWebsocketMsg msg) { if (msg.method != "Query") { Logger.instance.info("Received message: ${msg.method}"); } @@ -304,9 +298,6 @@ class WoxLauncherController extends GetxController implements WoxLauncherInterfa final theme = WoxTheme.fromJson(msg.data); WoxThemeUtil.instance.changeTheme(theme); woxTheme.value = theme; - } else if (msg.method == "Refresh") { - final result = WoxRefreshableResult.fromJson(msg.data); - onRefreshResult(result); } } @@ -478,11 +469,23 @@ class WoxLauncherController extends GetxController implements WoxLauncherInterfa } startRefreshSchedule() { - Timer.periodic(const Duration(milliseconds: 100), (timer) { + var isRequesting = {}; + Timer.periodic(const Duration(milliseconds: 100), (timer) async { + var isVisible = await windowManager.isVisible(); + if (!isVisible) { + return; + } + refreshCounter = refreshCounter + 100; for (var result in queryResults) { if (result.refreshInterval > 0 && refreshCounter % result.refreshInterval == 0) { - var msg = WoxWebsocketMsg( + if (isRequesting.containsKey(result.id)) { + continue; + } else { + isRequesting[result.id] = true; + } + + final msg = WoxWebsocketMsg( id: const UuidV4().generate(), type: WoxMsgTypeEnum.WOX_MSG_TYPE_REQUEST.code, method: WoxMsgMethodEnum.WOX_MSG_METHOD_REFRESH.code, @@ -498,27 +501,22 @@ class WoxLauncherController extends GetxController implements WoxLauncherInterfa ).toJson(), }, ); - WoxWebsocketMsgUtil.instance.sendMessage(msg); + WoxWebsocketMsgUtil.instance.sendMessage(msg).then((resp) { + final refreshResult = WoxRefreshableResult.fromJson(resp); + result.title.value = refreshResult.title; + result.subTitle.value = refreshResult.subTitle; + result.icon.value = refreshResult.icon; + result.preview = refreshResult.preview; + currentPreview.value = refreshResult.preview; + result.contextData = refreshResult.contextData; + result.refreshInterval = refreshResult.refreshInterval; + isRequesting.remove(result.id); + }); } } }); } - void onRefreshResult(WoxRefreshableResult result) { - for (var i = 0; i < queryResults.length; i++) { - if (queryResults[i].id == result.resultId) { - queryResults[i].title.value = result.title; - queryResults[i].subTitle.value = result.subTitle; - queryResults[i].icon.value = result.icon; - queryResults[i].preview = result.preview; - currentPreview.value = result.preview; - queryResults[i].contextData = result.contextData; - queryResults[i].refreshInterval = result.refreshInterval; - break; - } - } - } - @override void dispose() { queryBoxFocusNode.dispose(); diff --git a/Wox.UI.Flutter/wox/lib/utils/wox_websocket_msg_util.dart b/Wox.UI.Flutter/wox/lib/utils/wox_websocket_msg_util.dart index 7b74cdd8e..d190e227b 100644 --- a/Wox.UI.Flutter/wox/lib/utils/wox_websocket_msg_util.dart +++ b/Wox.UI.Flutter/wox/lib/utils/wox_websocket_msg_util.dart @@ -1,7 +1,9 @@ +import 'dart:async'; import 'dart:convert'; import 'package:web_socket_channel/web_socket_channel.dart'; import 'package:wox/entity/wox_websocket_msg.dart'; +import 'package:wox/enums/wox_msg_method_enum.dart'; import 'package:wox/utils/log.dart'; class WoxWebsocketMsgUtil { @@ -19,6 +21,8 @@ class WoxWebsocketMsgUtil { int connectionAttempts = 1; + final Map _completers = {}; + void _connect() { _channel?.sink.close(); _channel = null; @@ -26,7 +30,19 @@ class WoxWebsocketMsgUtil { _channel = WebSocketChannel.connect(uri); _channel!.stream.listen( (event) { - onMessageReceived(event); + var msg = WoxWebsocketMsg.fromJson(jsonDecode(event)); + if (msg.success == false) { + Logger.instance.error("Received error message: ${msg.toJson()}"); + return; + } + + if (_completers.containsKey(msg.id)) { + _completers[msg.id]!.complete(msg); + _completers.remove(msg.id); + return; + } + + onMessageReceived(msg); }, onDone: () { _reconnect(); @@ -50,7 +66,18 @@ class WoxWebsocketMsgUtil { } // send message to websocket server - void sendMessage(WoxWebsocketMsg msg) { + Future sendMessage(WoxWebsocketMsg msg) async { + // if query message, send it directly, no need to wait for response + // because query result may return multiple times + if (msg.method == WoxMsgMethodEnum.WOX_MSG_METHOD_QUERY.code) { + _channel?.sink.add(jsonEncode(msg)); + return; + } + + Completer completer = Completer(); + _completers[msg.id] = completer; _channel?.sink.add(jsonEncode(msg)); + var responseMsg = await completer.future as WoxWebsocketMsg; + return responseMsg.data; } } diff --git a/Wox/plugin/system/chatgpt.go b/Wox/plugin/system/chatgpt.go index dccdf14e5..7a992ce83 100644 --- a/Wox/plugin/system/chatgpt.go +++ b/Wox/plugin/system/chatgpt.go @@ -19,6 +19,10 @@ import ( var chatgptIcon = plugin.NewWoxImageBase64(`data:image/png;base64,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`) var chatgptLoadingIcon = plugin.NewWoxImageBase64(`data:image/gif;base64,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`) +var chatgptDeleteIcon = plugin.NewWoxImageSvg(``) +var chatgptNewChatIcon = plugin.NewWoxImageBase64(`data:image/png;base64,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`) +var chatgptActiveChatIcon = plugin.NewWoxImageBase64(`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAWcUlEQVR4nO1deVwVR56vccZkd7Mzk2SPyeyVz8zmk83sfnbcZCabGTUCCgqiKJ6It0bU8QJBQBAQ5HxijEdAo4lH0AhGjSd4EeQyEI2JhsQjCAjK+Y7qpzGbyaT282u63+uurvde93sNjyTU5/P7Q3xdVV3fqt9dv0aov/W3/tbf+punzWQyPW21WqdyHLcRY1yGMa7DGLdijL/iOI5w3a0JY1yOMd7OcVwExvg/+ldex/bgwYN/4jguFhZfWHR3qJ7juDX3799/qh8cNxvHcb/BGB/CGH/jARAywhh/jTEutFgsL/YDo7Ldv3//lxjjNzDGf9YLCE4JzF+EMf6uHxgnDWM8FmPc2VNAcEpgjBjjmf2gUI0Q8ijHcZsxxt86W0CLBZPamjqyc/txEh+zjcyYuo4EB8QRvyGRZMTLUWTMqHgyfco6snrVdvJG/lHyYW0d/4wrYLq6unIIIT/qB6YbjL/mOK7Y2YLdrm8mW157l0wYu4b4/HG5JhofnEg2vXqQ1Nc3OwWlubn5KGwMQshPTCbTvwE7s1gsTwD9YMBqbW19DGNc6miRWprbSHZGAfEfFqUZCJqGD40kGWl7yZ079xyCYjQazRjj/2OwtocY46ugZHAcl2A2m5//3oEEOxFjfNbR4pw4VsmzIB9qYUeOSiQzI98mK7ZUk8SD9STjnInkVH9Jcqq+JOnnTWTNodtk+ZZqMjOqgP8t/fxo/1hy5NAFPeTPPYxxHmiD6PvQOI5bz3pRk8lMstMLFAs5YfpGEvPmFX7xDRe/UkU5VQ9JzFsfk4mztyj6W5eymxiNJj2AAblXbLVa/dB3tVmt1sksAd7ZaSTRK16XLVzQmFR+UdWC4Ihid18lwePWyfpesWQT6eww6qm1FYIhi75LDYQlx3FG1smgwQhfsotkXcAegyFSVhlHpi/fIxtj6aKNxGg0y+bR1HiX3LzZxFNra4dWUMB9swB9V5rAdxUvAsJbulCvpBzXDQgDRQvTT8nHmmsgsSvzydTQFOI7eIWCvQWNWEUWzDWQDTnvkNJzH6pidZ2dnW8SQgaivtysVutvWa4QEOC9BYaBly1fkrBFO93W2AAgQ+Y+8vlnt52Ccu/evYtms/lx1Fcbx3EF9KTvtrSRsYF2bSp86a6eA6L6IYnMqyGjQ9IcLrbf0CheOwsas5an4T6rHP92SCSvHDQ0tDgE5e7du9cqKyt/ivpSI4QM4DjOB/R5esI5mfskAnytrjLDIKHEoltkfPirikX1HRJFQme8RpZtLCfJR5pIduUDxbPpZ028YjEv8QgTTFCljx4pdwjKjRs3LkZERPyNt3FAFovldxzH5WKM7ziywP2HrbS9mB7alIGitNOdZPqKvcR3iFw2+PvHk4XpxbztorXPuLc/I5Pn5yuAATkISgHrXWtqao4ihH7iTdd5kSvBB+4Q8WVCp2/UFYjsyvv8go/wlbMcv5ejyNyEwySz1OzxGAAMfWKil29lCn1Q8/Py8lYhhHrPwuc47u8xxjvUxDAsFovMNxW98yPdwFi5/UOe/dE7eMqC7WTt8bu6Ap91gePlnnScVVF5/PvR79za2mocPHhw7xiQGOM/OGJNLDpzusb2AgEjE3jNx9PFSTp0m0yYuUkBxJjQTBK755ru7FBKoBlKx3xtQxHzvSsqKs4hhH7Zo2AIsWuFU05Kzc2tpOjAeX73BPnHyiYPPN6TxUg/ZyQzV+4jvoMjFXJiSe77uoCthuateU82PtgsDM7wl/Dw8CUIoUd0BwI8nhzHbXIGxKfXviBpybtkwpum5Zur3FqA7IoHZFHWGTJieJxCdZ0TV0QySrULbE/VamCL4jwmhiSRtrZOxZpcvHixDCGkfxgZY7zVof7d0u06B12dBYJU6wGVVOvLx+65RoJDMxT9giMx6UhjrwIhpYz3zWTUKLts3J73nmJtTCbT1y+88EIEQuhnuoEBmSCOwKgov0ImjFEGk8aH5ZLFhnNk7Ym7PDsR/w4sR+0LJx1pIpPmbFX0HTwuvUfUZndoxdaLMhuF5Q8rKCjYjRB6SRcwrFarPyQKsMAo2FNC/Cidf/K8PJJY9IVs0qB+2vT3CqUxxqLF2WeJL3Xi/IfHk8U555gGnbcI3P7B49NtcyzYe1qxTjdv3ryOEJqCEHpUD9W2jQUGHE/pYoELAmIYrElLnXjAe9W86AiJTQHAzIp5h7eivQ0Ai5a+VmGb6/xZOSzh/s0zzzwzHyH0rKeA7GKBsb/gjCKglH6my+GE3QHEV3Lykg436LZ4cLrg9AHbm7pwB0k+esfjPsHw9Hs52jbf+i/uKNYsLS0tByHk75ErhBVYKi/7iI9Z21jU/HySVW51vrgeApKj8hl3lAPQ0kCN9vT0TZprj+8cP1qpAKSwsLAAIRSGEHLPTY8xPkJ3CmrdpHFJtoFDpqznrVeXi+tlQFKOtTD9UVIKGNEtn7SEjaW0IPWEra/12fsVgJSVlZ1GCE1DCGmPMlqt1v9iCXKptxYsbmdsqi8AkvG+mcyJP8ifAply4BdHItJO8J5fhaU/MZv3W2kdK3rHZZk7hV67urq6KwIgz+kiO65/3iBjVeBDUjvZ3gYkp+ohn40Cm4a2h8KX7Sbrzto3EvjVWL4wOFFrT9xTPSZoluKzc2dkKQBpamq6IwDye01gQCiS4ziTQigl251qYBtoWaDeBCS+4DMydmK2YoHhNID/i/UMqOLArlje4jmxRSSzzHXcJvlos+05yLKk16+xsbFJAMRXEyAWi2UU3dm9e+1kpK9di0govNnnAEkrbud3Px0nHxWUxJ8WVX2c7uj2k1G2FVjjS1+9wJ88x4Dcsf1+Zli6ApCGhobbAiCjPU5MeLewVCbItYDR04BkXeDIgrXHyfBh9g0DNNwnhv97doVzDZDNfm6R8dM2KE4ZvPvqd24wn4G/i7+DJAl6Devr678QAAnSBAjHcR/SnUFCszgYHO2+AEhO9UMSta2WjApMksuJwSv4pIbUU62a58nqPzAomd1/cZvs95F5dhfKmvgdzoR6oNZ4+H26M2liQsqxZq8Dklj0BTNmzmtJoekk4YB2B6arEyg1/FgncG7CIdv/bd10SAHIqVOnjgiAjFQNiMVi+Xcl72uxDQSub3dUUL0ASTvdyeTxtNyAf09ftpuXCXoBk3qqW0bRGwA0tLi9n5JxU9Y7jY3k5uZu1CzUrVbrcLqji9VXbQONC8t162U8BSSrnOMT3ug0Hdi1EChKP9ulahfrQbF7PyVjJmQxNkT3fME0YHl8g4KCVgiA/FY1IBjjILqjklN23jg14g2vABI0JkWxM8EPRdsJjnZx4OhuTUsvUMCah+gkGJj0WFFLtzDDFLt27dohAPKvqgHhOG483RH4ZaT5t94AxEdCYydmkbi365w+C5Y2WNz0s6EzNjq0RdwhYKG0S2ZmWCafSE6vo9ls/nr27NnxCKG/1QLIJLqj4pPV9l25aGfvATJYDkhAQDxZuqFMta9JtNZHBlDW+uDlCmvdo9NS9ZDMWW1PcRK1LIyV1+uuX79ehxB6RgsgPqyIoNTN7o0TMieu0O2YOfizIAvRlzotwG4WZhSrDpi5okWZJbL+d795ksm6cnNzcxFC6nKALRbLM3QHN6432gYZFbjGK4DkeOjthedZ7A8I7pE4CqxpJUi2sAE+bCW5dvWWApCWlpbWRx991F/LpUw62kVG+cXYBkor6fAIELUGm28PAQIsy1HCBOT7ejRO1Ze8Jir2uXzxJuYpSUlJyUYI/YtatnWL7mDZIrub2h1tBdRPmyo6LJpPNHMVR/HtMUBWdEcNwZnISikCZ6IHqafg05K6+y+8/5ECkCtXrtQihMaoSjWF9FC6A+CH4gBTXtmmeZIAAMvpt+L1iw4X27cHARH/DpdIAQBW0p0nwapZqw7Y+opcspkZY3/xxRcXqcpqxBjPoDu4eaPRtqAweXf8RAngsJMcZ5HAwl194KZXADEIlPhuPa+w0HMLmZRD4vZ9rnk88HOJGTMwHlyXo9d08+bNWxFCQ10CYrVafwGFW+gO4NKkOFHIAPHIYTda6RDkVdHTnV4BRKTI/BqmM/GV5KOaxwROIvax561TCkAqKirOCzH2v1JzSg7RHZSV2kOUwCOT37vj0YVMpqvD1+7q8AYg/NzKrWRB6nGZ3IN5ap0DyFpnwr25ufmeYLk/7RIQi8USyNIOpMJ93NRcjxObHTvsUt1SlfUARBrwks5J6xzAihefDRweo7iyABk9Tz755CxVeb+CG/4GDQjo1dJEahBeniyUSOAKAZeIjwNbwRuAAHk6B2ne7y2GHBEcjsFITeM4bhzrlAA/lE4UvLB6gGJLTPBfrQAkfNkuTTnBUoJrbLNj3vEKINKYTXXlJ4q1jImJSRXY1gBVoGCMz9OdgI8mafUO2WRnxRY6jTdroYxSU7erg74nODxek6sD2OmS9aV8vpUM4F4EBLzj4vOniz9wFiNR53C0Wq3/bbFYxKKTNgJv5uzwTNmEJ87Z6pYV74hSjjXLsgFFGh2yzmXmu6PrC719Qqb96U3b8yePVykAyczMzBUA+UdVgAisaz6LdYHfn35ZsHxhV+p5iykWFleSXS5zdVCaHtwplF6isSsJa70CiNQ1f+5MrWIN16xZk6U5RsIK60JETEyaA9+QD8VeYHfG7tbvnl+2C1dHakk7mZd4mPgNld/cgjwrYHNZFVavACIN69ZcvOZMhvyzakCsVusUuiOIGdvU37D1ZPW+63w2Ob0zpyzYputN2HUO7qHT90jg/+F3oHp6S8sCmSoNObOKqfn5+S0TAFFf0hZjnEV3BFkV4kCQbaFmF+txV9wgyZui49rOXDHeAASuUNjmNDpBAYbJZHo4YMCAcHdkyCm6s8Q4u/YADkLpRHrKYWcQCBQHVobiyJEJDjMUvQHIoszTTvO06uvrbwlgAKkvxcFxXC3d2YI5Bttgq/dfZ+/ig/V8xQZ6B4dMziHxbjjsssqtvDyg82/BnQ9qsrP8W28AIo3pH3m3TAFIWVlZiQDGZNVgCCzrCt0Z5K6Kg8HFTGcTg+zywGBl1ghoIKkn1XmNoz3MUO9tQECm2k6uXzTzunR8fPw6zYlzAiCfOgNEjZMRglGwu+m8KnF3O6oKlKiTW7y3AZHWfcxI3aMAo7Oz0/rYY4/NEAD5nceAwMVGccAERixDK/+HWL2U/2foLId6E5DIvA/sCs2QSGbhs6qqqlKJ/PiFJkA4jiuhO4QSeeKgK7fValocIJAhsMvpnR86fSPv+lZoalDVZ/W7bmtqvQUIpK5CupL4DFSio9fOYrF8Gx4eHiuAMUFzxSDW9YQNhgMel+hzdMvJpyeSD3oBEFA6wCYTfz9pXDJpb+9SAHL58uUPJKfjfzWBIQASTXd64liVfcFmbfZosWzBKsrKDtYxPaenAYF3AF+e+FuoTV9VofTuQgxk7ty58QIYEC38uTuAjKY7brjdYpMDwE70uNAPV8LCFu0kY0IzyOKcs7pWa4B4fk8BAmxKmvoDdLCwVAEGUGVl5XnJ6RiC3Gkmk+nnrCJli16x3zD60/pS3RbPoHfJv+V7ZK4Wf79Y3QBZ+cYlRfwGvubAAqOtrc347LPPzpcA8oRbgAinpIIeoHD/OdskwEboS/VHsiusJGId4/rC0JV8frCqPirvy5QK+vrahFmb5Sr80EhyYN9ZJhiQ9iNxJLonO6TNYrEsowfp6OgiIYH23QGXIr0NhAF27bZaphEJwSKoTKS2H0jGlqrbYG+BOyRkit1LYRfgSfw9GhYYkmpAIhjjPS5oJhShUZR93bXTnkAHqqqeASqDRgIjklUIAGIpq3Z9ork/uGls68dBHTAQ3lC1AW4pOwLjzJkzxyRghGlyJLoA5U2lxWkkYRPXylTU3iqxZxAIqknMiCpQuOSBt2u5vkDT8k3yCtxSgiviWevedlntmgJjmsfVgKTNbDb/ilVrsbLiY1nNLEii06tYjMEFj4crACCk5XKi24iEawie9E+nJ8HF14TYN3hHobMTIV7O2b9//x4KjP9BejeM8eusCcA3oKSTn61j0oPBQV2RoLGpTGcjqM+eg/1Apj2Vnr/kFAAp3b17t2PevHkJPQ4GtK6urp9hjJsYBg9JTpAXvIdUSr0LUyYdblBoN0Bgu8A3Q/QE3CawQ5JUfWwMNKkLFy6cee65516RADEVIdSzXx+Fm7qsOlpms0WRHgSJYlqK1BiclYaN3q9wNkKKj95JFUBSQy9vy2GXYNTV1V2T+KdEGuuRraGlmc3mLexdgmUlxUWCrHcARquATS1u493ztD0BMXRgi+7UcndFYOzZAPeJdvg1hNbW1o6SkpJjwkXOaZQm9fseqdXrqBFCftzW1qYI7YoEKS/wCTsaGHAkwsV/CPtC3hUIZtlJOG/iPcELM0r4yCIktdF9gM/IVVDMXQJvsjT7PTf7HWbZ18jIyBRJPFxKfm75p3QC5ZHGxsYax8KtnWzMLXRaVBn8SpCRCEQXGfOhCEou6eVsZBFohnD3XRxvXFACU5uqqakpp0AIQQgNUn2RsydbQ0PD47dv31YUq6EdkcCHQxknRi2FL93d46o0sEbpRoGCCSzBLZEVUPb1H1Bfa9u3bx9YXV2937UWgvlkMSgvG7VsCx8vkFao45UAvxgyb2YWSUvZTZZEyEO3UNOwp06GFAwg+P4U6x1KS0uLJSfjD6gPt4GFhYU5XV1dD9Tq68KO49kCUFeXvPoBfE1Neh+l+6To+yU3kBlSNgUUF53P/PxEe3s7lnhr3Ytl9HL70eTJk4fX1tZWagHFGXV2Gknk0s3Kbx3qIEtA66OvrwEY9MYQ7KxvJYnRQC+g71D7dVxc3JqrV69ehvixp6AYjWaSmbZXIVfAkQgGnBZVGq4yABDSUKsoMyAszToZQCdPnjwsASO0V1VanRpcZPxjSEhIVFlZWXFbW5vH300/frSSjBmprL4DSQWQxwvlviHFFPJ/IR4CBAYleG3h/8A3Jf0ogM1GCk4kZ0pqHI577dq1KwMHDpSquOoTo/tgAy1kGPBc0E4OHjy479KlS9VQENJoNH7Jcsq1t7ebXX0WA9ze7mpsUo/tq+sPkDYnX/eEsnxPPfXUbAkY6mtd9fH2UyEhbJxUh4cC9eD7EWngwIHhjz/++Mza2tpyV6o0JHzDR1S0AjF5fDLJ33qE3Gly/GlvoI8//vhDmItkvj69+pGvXmygnfxGCPJDQchJtMU7YMCAsJKSEpdffgOn5keXPydv7TjB+9FmTcvgWRC4PIDAZT5nehaf7Ax3I698dINZNonS/L4Fl4gks1Asy/dj9ANqAwVB+YhAsBMHFBUVJXd0dGC9tDZX1N7ebpHcahLpZdWXMn8ILSAgYAi4teEDWz0FhNls/jMUy3/++ecXUk7CQd9XNuVpezoiIiIabBwQ/DoC8c2lS5cqg4ODI6lTEarpVtMPtD0Cbm34wNahQ4f2Nzc3t7gLBGh5BQUFewYNGhRBATFVUD48+zTRD6w9ATYOLF5AQMDy/Pz8fLj8AkGilpaWe11dXfeBBZlMpq/A/mloaGisq6v7pKSk5Gh2dnbuSy+9tJjhNgcgBmsqUNnfFA128X8KpSmmuUmBQiZI/4nQuT2GEPqVwG78hGptE4WdP1mwfwIF9XWQUF7PdVmk/tbf+hvqW+3/AXPM0izf8OCbAAAAAElFTkSuQmCC`) +var chatgptRenameIcon = plugin.NewWoxImageBase64(`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAABtElEQVR4nO2Zz0sCQRTH32FnO1VU/0U//o8kwZHQPyGI0BkP0tFzB8Odtwj+MVEU3YU6eAyt6eJNL0E1MSoS7q6CKY7xPvAuu9+B992dmZ19D4AgiKXBJD4yiYYJ7HtCPTOhaqxYO4zoSnjEJAZDDfYHY6R6gFUzTGQy1CcTKoRKxYdCsMGkqjOBX3FaRw2Mjdwyoe6maVadP9hpMN0EJofAe3CG8tWmLxT3JLaSEvaEavtFPLVacJbz+o5NNC55KFV3YR3wBeYmDfj2ya8NhWArsljLLk+bGJzbbZwykH03J1ybV66NWWi8fZvMy4dJN7uRHSjd7A7uWU3S+Iw2Ha5NaqaBkdC4ZoAPoz3TwFKSX5wBQwY4vYEuTaGp0CLWtAsZ2kY5fcgMfYk5HSU0HeYMnUb1HMfp//BDk1qKib8baGe1OQYXoKrESrlsbK91YYvJMB8pLQrFYS24wD1PYidS3JXYsoVfcLseGubjkme/y+sCc1YLzvXI5grlao9s3IG5GYTbLaaEJp/EAM4azDb6mEQcXXO5R6Z6nsQnJlXVLwT7UV14wARejzQ993pkBAHO8gNcJwywrWE/wgAAAABJRU5ErkJggg==`) func init() { plugin.AllSystemPlugin = append(plugin.AllSystemPlugin, &ChatgptPlugin{}) @@ -29,9 +33,10 @@ type ChatgptPlugin struct { client *openai.Client nonActiveChats []*Chat - activeChat *Chat - activeChatResult *plugin.QueryResult - activeChatAnswer string + activeChat *Chat + activeChatResult *plugin.QueryResult + activeChatAnswer string + isSummaryActiveChatTitle bool } type Chat struct { @@ -140,10 +145,11 @@ func (c *ChatgptPlugin) queryConversation(ctx context.Context, query plugin.Quer c.activeChatResult = &plugin.QueryResult{ Title: c.activeChat.Title, SubTitle: "Current active chat", - Icon: chatgptIcon, + Icon: chatgptActiveChatIcon, } } + c.activeChatResult.Title = c.activeChat.Title chatHistory := c.activeChat.Format() if chatHistory == "" && query.Search == "" { chatHistory = "Please ask anything to continue..." @@ -212,6 +218,18 @@ func (c *ChatgptPlugin) queryConversation(ctx context.Context, query plugin.Quer Text: c.activeChatAnswer, Timestamp: util.GetSystemTimestamp(), }) + + if c.activeChat.Title == "New chat" && len(c.activeChat.Conversations) >= 4 && !c.isSummaryActiveChatTitle { + c.api.Log(ctx, "start to summary chat title") + c.isSummaryActiveChatTitle = true + if title, titleErr := c.summaryChatTitle(ctx, c.activeChat.Conversations); titleErr == nil { + c.activeChat.Title = title + c.activeChatResult.Title = title + current.Title = title + } + c.isSummaryActiveChatTitle = false + } + c.activeChatAnswer = "" c.saveActiveChat(ctx) return current @@ -231,6 +249,7 @@ func (c *ChatgptPlugin) queryConversation(ctx context.Context, query plugin.Quer { Name: "Delete chat", PreventHideAfterAction: true, + Icon: chatgptDeleteIcon, Action: func(actionContext plugin.ActionContext) { c.deleteChat(ctx, c.activeChat.Id, true) c.api.ChangeQuery(ctx, share.ChangedQuery{ @@ -239,34 +258,38 @@ func (c *ChatgptPlugin) queryConversation(ctx context.Context, query plugin.Quer }) }, }, + { + Name: "Rename chat", + PreventHideAfterAction: true, + Icon: chatgptRenameIcon, + Action: func(actionContext plugin.ActionContext) { + //TODO: + c.api.ChangeQuery(ctx, share.ChangedQuery{ + QueryType: plugin.QueryTypeInput, + QueryText: query.TriggerKeyword + " ", + }) + }, + }, } results = append(results, *c.activeChatResult) } - newChatPreviewData := "Please input conversation title to continue..." - if query.Search != "" { - newChatPreviewData = fmt.Sprintf("Please input conversation title to continue\n\nTitle: %s", query.Search) - } results = append(results, plugin.QueryResult{ Title: "Start a new chat", Preview: plugin.WoxPreview{ PreviewType: plugin.WoxPreviewTypeMarkdown, - PreviewData: newChatPreviewData, + PreviewData: "Start a new chat", }, - Icon: chatgptIcon, + Icon: chatgptNewChatIcon, Actions: []plugin.QueryResultAction{ { Name: "Start", PreventHideAfterAction: true, Action: func(actionContext plugin.ActionContext) { - if query.Search == "" { - return - } - newChat := &Chat{ Id: uuid.NewString(), - Title: query.Search, + Title: "New chat", CreatedTimestamp: util.GetSystemTimestamp(), } c.nonActiveChats = append(c.nonActiveChats, newChat) @@ -308,6 +331,7 @@ func (c *ChatgptPlugin) queryConversation(ctx context.Context, query plugin.Quer { Name: "Delete chat", PreventHideAfterAction: true, + Icon: chatgptDeleteIcon, Action: func(actionContext plugin.ActionContext) { c.deleteChat(ctx, chat.Id, true) c.api.ChangeQuery(ctx, share.ChangedQuery{ @@ -569,3 +593,32 @@ func (c *ChatgptPlugin) deleteChat(ctx context.Context, chatId string, isActive c.saveChats(ctx) } + +func (c *ChatgptPlugin) summaryChatTitle(ctx context.Context, conversations []Conversation) (string, error) { + conversations = append(conversations, Conversation{ + Role: openai.ChatMessageRoleUser, + Text: "Please summary above chat in 20 words, don't give any other unnecessary information, just the summarized title itself.", + }) + + var chatMessages []openai.ChatCompletionMessage + for _, conversation := range conversations { + chatMessages = append(chatMessages, openai.ChatCompletionMessage{ + Role: conversation.Role, + Content: conversation.Text, + }) + } + + resp, err := c.client.CreateChatCompletion( + ctx, + openai.ChatCompletionRequest{ + Model: openai.GPT3Dot5Turbo, + Messages: chatMessages, + }, + ) + if err != nil { + c.api.Log(ctx, fmt.Sprintf("Failed to summary chat title: %s", err.Error())) + return "", err + } + + return resp.Choices[0].Message.Content, nil +} diff --git a/Wox/plugin/system/url.go b/Wox/plugin/system/url.go index f92dea3db..1e96077e7 100644 --- a/Wox/plugin/system/url.go +++ b/Wox/plugin/system/url.go @@ -3,6 +3,7 @@ package system import ( "context" "regexp" + "time" "wox/plugin" "wox/util" ) @@ -51,6 +52,27 @@ func (r *UrlPlugin) Init(ctx context.Context, initParams plugin.InitParams) { func (r *UrlPlugin) Query(ctx context.Context, query plugin.Query) (results []plugin.QueryResult) { if len(r.reg.FindStringIndex(query.Search)) > 0 { + results = append(results, plugin.QueryResult{ + Title: query.Search, + SubTitle: "Open the typed URL from Wox", + Score: 100, + Icon: urlIcon, + RefreshInterval: 100, + OnRefresh: func(result plugin.RefreshableResult) plugin.RefreshableResult { + time.Sleep(time.Second) + result.Title = util.GetSystemTimestampStr() + result.SubTitle = util.GetSystemTimestampStr() + return result + }, + Actions: []plugin.QueryResultAction{ + { + Name: "Open in browser", + Action: func(actionContext plugin.ActionContext) { + util.ShellOpen(query.Search) + }, + }, + }, + }) results = append(results, plugin.QueryResult{ Title: query.Search, SubTitle: "Open the typed URL from Wox",