Skip to content

Instantly share code, notes, and snippets.

@appsparkler
Created March 9, 2019 10:33
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save appsparkler/cc4b5269ab59130446e0aecd33ee5fea to your computer and use it in GitHub Desktop.
Cordova Writing On An Existing File If Already Available (updating data)
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