@@ -81,9 +81,26 @@ const createWindow = () => {
81
81
{
82
82
label : 'Export' ,
83
83
visible : parameters . selectionText . trim ( ) . length === 0 ,
84
- click : ( ) => {
85
- mainWindow . webContents . send ( 'export' , isDarkMode )
86
- } ,
84
+ submenu : [
85
+ {
86
+ label : 'Markdown' ,
87
+ click ( ) {
88
+ mainWindow . webContents . send ( 'export' , 'md' , isDarkMode )
89
+ } ,
90
+ } ,
91
+ {
92
+ label : 'PNG' ,
93
+ click ( ) {
94
+ mainWindow . webContents . send ( 'export' , 'png' , isDarkMode )
95
+ } ,
96
+ } ,
97
+ {
98
+ label : 'PDF' ,
99
+ click ( ) {
100
+ mainWindow . webContents . send ( 'export' , 'pdf' , isDarkMode )
101
+ } ,
102
+ } ,
103
+ ] ,
87
104
} ,
88
105
{
89
106
type : 'separator' ,
@@ -205,7 +222,7 @@ const createWindow = () => {
205
222
} ,
206
223
} ,
207
224
{
208
- label : 'BingGPT v0.2.1 ' ,
225
+ label : 'BingGPT v0.3.0 ' ,
209
226
visible : parameters . selectionText . trim ( ) . length === 0 ,
210
227
click : ( ) => {
211
228
shell . openExternal ( 'https://github.com/dice2o/BingGPT/releases' )
@@ -281,19 +298,31 @@ const createWindow = () => {
281
298
}
282
299
283
300
app . whenReady ( ) . then ( ( ) => {
284
- // Export conversation as image
285
- ipcMain . on ( 'export-data' , ( event , dataURL ) => {
286
- if ( dataURL ) {
301
+ // Save to file
302
+ ipcMain . on ( 'export-data' , ( event , format , dataURL ) => {
303
+ if ( format ) {
304
+ const fileName = `BingGPT-${ Math . floor ( Date . now ( ) / 1000 ) } .${ format } `
305
+ let filters
306
+ switch ( format ) {
307
+ case 'md' :
308
+ filters = [ { name : 'Markdown' , extensions : [ 'md' ] } ]
309
+ break
310
+ case 'png' :
311
+ filters = [ { name : 'Image' , extensions : [ 'png' ] } ]
312
+ break
313
+ case 'pdf' :
314
+ filters = [ { name : 'PDF' , extensions : [ 'pdf' ] } ]
315
+ }
287
316
dialog
288
317
. showSaveDialog ( BrowserWindow . getAllWindows ( ) [ 0 ] , {
289
318
title : 'Export' ,
290
- defaultPath : `BingGPT- ${ Math . floor ( Date . now ( ) / 1000 ) } .png` ,
291
- filters : [ { name : 'Images' , extensions : [ 'png' ] } ] ,
319
+ defaultPath : fileName ,
320
+ filters : filters ,
292
321
} )
293
322
. then ( ( result ) => {
294
323
if ( ! result . canceled ) {
295
324
const filePath = result . filePath
296
- const data = dataURL . replace ( / ^ d a t a : i m a g e \/ \w + ; b a s e 6 4 , / , '' )
325
+ const data = dataURL . replace ( / ^ d a t a : \S + ; b a s e 6 4 , / , '' )
297
326
fs . writeFile ( filePath , data , 'base64' , ( err ) => {
298
327
if ( err ) {
299
328
dialog . showMessageBox ( {
0 commit comments