Created
March 9, 2019 10:33
-
-
Save appsparkler/cc4b5269ab59130446e0aecd33ee5fea to your computer and use it in GitHub Desktop.
Cordova Writing On An Existing File If Already Available (updating data)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var fileName = 'test-450.json'; | |
var fileData; | |
var savedFileEntry = {}; | |
promise_getPersistentDirectoryEntry() | |
.then(promise_fileEntry.bind(null, fileName, { create:false })) | |
.then(save_fileEntry) | |
.then(promise_file) | |
.then(promise_fileContent) | |
.then(save_fileData) | |
.then(remove_fileEntry) | |
.then(promise_getPersistentDirectoryEntry) | |
.then(promise_fileEntry.bind(null, fileName, {create:true})) | |
.then(promise_fileWriter) | |
.then(edit_content) | |
.then(promise_writeContent) | |
.then(promise_getPersistentDirectoryEntry) | |
.then(promise_fileEntry.bind(null, fileName, {create:false})) | |
.then(promise_file) | |
.then(promise_fileContent) | |
.then(res => { | |
logit('JSON.parse(res.target.result)', JSON.parse(res.target.result)); | |
// logit('savedFileEntry', savedFileEntry); | |
logit('fileData', fileData); | |
}) | |
.catch(err => logit('err', err)); | |
function logit(text, obj) { | |
console.log(`${text} : `, obj); | |
} | |
function promise_getPersistentDirectoryEntry() { | |
return new Promise((resolve, reject) => { | |
try { | |
window.resolveLocalFileSystemURL(cordova.file.dataDirectory, resolve, reject); | |
} catch(e) { | |
reject(e); | |
throw e; | |
} | |
}); | |
} | |
function promise_fileEntry(filename, config, dataDirectory) { | |
return new Promise((resolve, reject) => { | |
try{ | |
dataDirectory.getFile(fileName, config, resolve, reject); | |
} catch(e) { | |
reject(e); | |
throw e; | |
} | |
}) | |
} | |
function promise_file(fileEntry) { | |
return new Promise((resolve, reject) => { | |
try { | |
fileEntry.file(resolve); | |
} catch(e) { | |
reject(e); | |
throw "get_fileFromFileObject error : " + e; | |
} | |
}); | |
} | |
function promise_fileContent(file){ | |
return new Promise((resolve, reject) => { | |
try { | |
var reader = new FileReader(); | |
reader.onloadend = resolve; | |
reader.onerror = reject; | |
reader.readAsText(file); | |
} catch(e) { | |
reject(e); | |
throw e; | |
} | |
}); | |
} | |
function save_fileData(fileLoadEvent) { | |
console.log('fileLoadEvent', fileLoadEvent) | |
try { | |
fileData = fileLoadEvent.target.result; | |
return fileLoadEvent; | |
} catch(e) { | |
throw e; | |
} | |
return result; | |
} | |
function save_fileEntry(fileEntry) { | |
savedFileEntry = fileEntry; | |
return fileEntry; | |
} | |
function remove_fileEntry() { | |
savedFileEntry.remove(); | |
} | |
function promise_fileWriter(fileEntry) { | |
try{ | |
return new Promise((resolve, reject) => { | |
fileEntry.createWriter(resolve); | |
}) | |
} catch(e) { | |
reject(e); | |
throw "error in promise_fileEntry : " + e; | |
} | |
} | |
function promise_writeContent(obj){ | |
return new Promise((resolve, reject) => { | |
try { | |
obj.fileWriter.onwriteend = resolve; | |
obj.fileWriter.write(obj.data); | |
} catch(e){ | |
reject(e) | |
throw e; | |
} | |
}); | |
} | |
function test(fileEntry) { | |
console.log(fileEntry); | |
} | |
function editContent(content, fileWriter){ | |
return fileWriter | |
} | |
function edit_content(fileWriter) { | |
if(fileData) { | |
var savedData = JSON.parse(fileData); | |
savedData[new Date().getTime()] = new Date().toString(); | |
var content = new Blob([ JSON.stringify(savedData, null, 2) ], { type: 'application/json' }); | |
return {data: content, fileWriter} | |
} else { | |
var content = new Blob([ JSON.stringify({message: 'first data for this file...'}, null, 2) ], { type: 'application/json' }); | |
return { data: content, fileWriter } | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment