(fileObject, data)
| 3077 | }; |
| 3078 | |
| 3079 | async function saveDraft(fileObject, data) |
| 3080 | { |
| 3081 | var draftFileName = fileObject.draftFileName || getDraftFileName(fileObject); |
| 3082 | |
| 3083 | if (!checkFileContent(data)) |
| 3084 | { |
| 3085 | throw new Error('Invalid file data'); |
| 3086 | } |
| 3087 | |
| 3088 | await assertWritablePath(draftFileName); |
| 3089 | |
| 3090 | let draftFh; |
| 3091 | |
| 3092 | try |
| 3093 | { |
| 3094 | draftFh = await fsProm.open(draftFileName, O_SYNC | O_CREAT | O_WRONLY | O_TRUNC); |
| 3095 | await fsProm.writeFile(draftFh, data, 'utf8'); |
| 3096 | await draftFh.sync(); // Flush to disk |
| 3097 | } |
| 3098 | finally |
| 3099 | { |
| 3100 | await draftFh?.close(); |
| 3101 | } |
| 3102 | |
| 3103 | if (isWin) |
| 3104 | { |
| 3105 | try |
| 3106 | { |
| 3107 | // Add Hidden attribute: |
| 3108 | var child = spawn('attrib', ['+h', draftFileName]); |
| 3109 | child.on('error', function(err) |
| 3110 | { |
| 3111 | console.log('hiding draft file error: ' + err); |
| 3112 | }); |
| 3113 | } catch(e) {} |
| 3114 | } |
| 3115 | |
| 3116 | return draftFileName; |
| 3117 | } |
| 3118 | |
| 3119 | // Reads the .bkp backup written before the last overwrite (see saveFile), |
| 3120 | // used for best-effort recovery when the main file fails to load. Returns |
no test coverage detected