|
|
@@ -81,7 +81,13 @@
|
|
|
<path d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1zM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4zM2.5 3h11V2h-11z"/>
|
|
|
</svg>
|
|
|
</button>
|
|
|
-
|
|
|
+ <button v-if="messages.length > 0" class="btn mr-1" @click="downloadConv(viewingConvId)" :disabled="isGenerating">
|
|
|
+ <!-- download conversation button -->
|
|
|
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-download" viewBox="0 0 16 16">
|
|
|
+ <path d="M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5"/>
|
|
|
+ <path d="M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708z"/>
|
|
|
+ </svg>
|
|
|
+ </button>
|
|
|
<button class="btn" @click="showConfigDialog = true" :disabled="isGenerating">
|
|
|
<!-- edit config button -->
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-gear" viewBox="0 0 16 16">
|
|
|
@@ -526,6 +532,23 @@
|
|
|
this.fetchMessages();
|
|
|
}
|
|
|
},
|
|
|
+ downloadConv(convId) {
|
|
|
+ const conversation = StorageUtils.getOneConversation(convId);
|
|
|
+ if (!conversation) {
|
|
|
+ alert('Conversation not found.');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const conversationJson = JSON.stringify(conversation, null, 2);
|
|
|
+ const blob = new Blob([conversationJson], { type: 'application/json' });
|
|
|
+ const url = URL.createObjectURL(blob);
|
|
|
+ const a = document.createElement('a');
|
|
|
+ a.href = url;
|
|
|
+ a.download = `conversation_${convId}.json`;
|
|
|
+ document.body.appendChild(a);
|
|
|
+ a.click();
|
|
|
+ document.body.removeChild(a);
|
|
|
+ URL.revokeObjectURL(url);
|
|
|
+ },
|
|
|
async sendMessage() {
|
|
|
if (!this.inputMsg) return;
|
|
|
const currConvId = this.viewingConvId;
|