Skip to content

Commit

Permalink
Merge pull request #70 from webOS-ports/Garfonso/work
Browse files Browse the repository at this point in the history
update to 0.3.25
  • Loading branch information
Garfonso committed Mar 5, 2015
2 parents d4eaa0b + 3d736fa commit 98bfff9
Show file tree
Hide file tree
Showing 29 changed files with 799 additions and 596 deletions.
13 changes: 13 additions & 0 deletions ChangeLog
@@ -1,3 +1,16 @@
0.3.25:
o fixed: recurring events with exceptions could be added multiple times. Deleting one of them deleted the server event.
o change: (BIG CHANGE!) Now using event timezone id, again. Solves issues with daylight saving times and recurrences.
Please test this carefully. In local tests with Google, ownclound and eGroupware results are better than before.
One issue remains, but this is a bug in the calendar app:
For events from a foreing timezone exceptions are not handled properly and the original occurence will
show in the calendar in addition to possible differing occurences or even though the occurence it has been delete completely.
2015-03-03: Achim Königs <garfonso@mobo.info>

0.3.24:
o fixed issue with event exceptions not being upsynced properly and possibly lost afterwards.
2015-03-03: Achim Königs <garfonso@mobo.info>

0.3.23:
o App: stats and status display improvements
o refresh Auth on 401 errors for OAuth and Digest Auth
Expand Down
4 changes: 2 additions & 2 deletions app/app/assistants/check-status-assistant.js
Expand Up @@ -173,9 +173,9 @@ CheckStatusAssistant.prototype.processStatus = function (status) {
this.upNumbersDisplay.innerHTML = "No uploads";
}
if (stat.downloadTotal) {
this.upNumbersDisplay.innerHTML = "Downloading " + (stat.downloadsDone || 0) + " of " + stat.downloadTotal;
this.downNumbersDisplay.innerHTML = "Downloading " + (stat.downloadsDone || 0) + " of " + stat.downloadTotal;
} else {
this.upNumbersDisplay.innerHTML = "No downloads";
this.downNumbersDisplay.innerHTML = "No downloads";
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion package/packageinfo.json
Expand Up @@ -2,7 +2,7 @@
"id": "org.webosports.cdav",
"package_format_version": 2,
"loc_name": "C+DAV synergy connector",
"version": "0.3.23",
"version": "0.3.25",
"vendor": "WebOS Ports - Stefan Schmidt",
"vendorurl": "www.webos-ports.org",
"app": "org.webosports.cdav.app",
Expand Down
103 changes: 0 additions & 103 deletions service/javascript/assistants/addeventassistant.js

This file was deleted.

117 changes: 117 additions & 0 deletions service/javascript/assistants/additemassistant.js
@@ -0,0 +1,117 @@
/*jslint node: true, nomen: true */
/*global Log, DB, checkResult, fs, Future, libPath, Kinds, iCal */

var vCard = require(libPath + "vCard.js");
var CalendarEventHandler = require(libPath + "CalendarEventHandler.js");

var AddItemAssistant = function () { "use strict"; };

function removeIds(obj) {
"use strict";
var key;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
if (key === "_id") {
delete obj[key];
} else if (typeof obj[key] === "object") {
obj[key] = removeIds(obj[key]);
}
}
}
return obj;
}

function parseAndPut(data, filename, contact) {
"use strict";
var future = new Future();

if (contact) {
future.nest(vCard.parseVCard({account: { name: "addItemAssistant",
kind: Kinds.objects.contact.id },
vCard: data}));
} else {
future.nest(iCal.parseICal(data));

future.then(function () {
var result = checkResult(future), objs = [];
Log.log("parse result: ", result);

if (result.returnValue === true) {
objs.push(result.result);
result.result.remoteId = filename;
if (result.hasExceptions) {
future.nest(CalendarEventHandler.fillParentIds(filename, result.result, result.exceptions));
objs = objs.concat(result.exceptions);
} else {
future.result = {returnValue: true};
}
}

objs.forEach(function (event) {
event._kind = Kinds.objects.calendarevent.id;
});

future.then(function idCB() {
checkResult(future);
Log.debug("Putting: ", objs);
future.nest(DB.put(objs));
});
});
}

return future;
}

AddItemAssistant.prototype.run = function (outerFuture) {
"use strict";
var args = this.controller.args, filename, parse = false, contact = false;

if (args.json) {
filename = args.json;
if (args.contact) {
contact = true;
}
} else if (args.ics) {
filename = args.ics;
parse = true;
} else if (args.vcf) {
filename = args.vcf;
parse = true;
contact = true;
}

if (filename) {
fs.readFile(filename, function (err, data) {
if (err) {
Log.log("Could not read ", filename);
} else {

if (parse) {
parseAndPut(data.toString("utf8"), filename, contact).then(function (future) {
var result = checkResult(future);
Log.log("Parse & Put Result: ", result);
outerFuture.result = result;
});
} else {
var obj = JSON.parse(data), objs;

obj = removeIds(obj);

if (obj.length >= 0) {
objs = obj;
} else {
objs = [obj];
}

DB.put(objs).then(function (future) {
var result = checkResult(future);
Log.log("Put result: ", result);
outerFuture.result = result;
});
}
}
});
}

return outerFuture;
};
8 changes: 4 additions & 4 deletions service/javascript/assistants/checkcredentialsassistant.js
@@ -1,9 +1,9 @@
/*jslint nomen: true, node: true */
/*global DB, searchAccountConfig, Future, Log, UrlSchemes, Transport, checkResult, servicePath */
/*global DB, searchAccountConfig, Future, Log, UrlSchemes, Transport, checkResult, libPath */
/*exported checkCredentialsAssistant*/
var KeyStore = require(servicePath + "/javascript/utils/KeyStore.js");
var Base64 = require(servicePath + "/javascript/utils/Base64.js");
var AuthManager = require(servicePath + "/javascript/utils/AuthManager.js");
var KeyStore = require(libPath + "KeyStore.js");
var Base64 = require(libPath + "Base64.js");
var AuthManager = require(libPath + "AuthManager.js");

/* Validate contact username/password */
var checkCredentialsAssistant = function () { "use strict"; };
Expand Down
4 changes: 2 additions & 2 deletions service/javascript/assistants/ondeleteassistant.js
@@ -1,8 +1,8 @@
/*jslint nomen: true, node: true */
/*global Class, Future, Log, Sync, DB, checkResult, servicePath */
/*global Class, Future, Log, Sync, DB, checkResult, libPath */
/*exported OnDelete*/

var KeyStore = require(servicePath + "/javascript/utils/KeyStore.js");
var KeyStore = require(libPath + "KeyStore.js");

var OnDelete = Class.create(Sync.DeleteAccountCommand, {
run: function run(outerFuture) {
Expand Down
15 changes: 7 additions & 8 deletions service/javascript/assistants/serviceassistant.js
Expand Up @@ -7,14 +7,13 @@
* run-js-service -d /media/cryptofs/apps/usr/palm/services/org.webosports.cdav.service/
*/
/*jslint node: true */
/*global Log, Class, searchAccountConfig, Transport, Sync, Future, Kinds, KindsCalendar, KindsContacts, KindsTasks, checkResult, lockCreateAssistant, servicePath, httpClient, PackageVersion, fs */
/*exported ServiceAssistant, OnCredentialsChanged*/
/*global Log, Class, searchAccountConfig, Transport, Sync, Future, Kinds, KindsCalendar, KindsContacts, KindsTasks, checkResult, lockCreateAssistant, libPath, httpClient, PackageVersion, fs, iCal */
/*exported ServiceAssistant, OnCredentialsChanged */

var iCal = require(servicePath + "/javascript/utils/iCal.js");
var vCard = require(servicePath + "/javascript/utils/vCard.js");
var AuthManager = require(servicePath + "/javascript/utils/AuthManager.js");
var KeyStore = require(servicePath + "/javascript/utils/KeyStore.js");
var Base64 = require(servicePath + "/javascript/utils/Base64.js");
var vCard = require(libPath + "vCard.js");
var AuthManager = require(libPath + "AuthManager.js");
var KeyStore = require(libPath + "KeyStore.js");
var Base64 = require(libPath + "Base64.js");

var ServiceAssistant = Transport.ServiceAssistantBuilder({
clientId: "",
Expand Down Expand Up @@ -113,7 +112,7 @@ var ServiceAssistant = Transport.ServiceAssistantBuilder({

future.then(this, function () {
var result = checkResult(future);
if (!result.iCal) {
if (!result.returnValue) {
Log.debug("iCal init not ok.");
} else {
Log.debug("iCal initialized");
Expand Down
4 changes: 2 additions & 2 deletions service/javascript/assistants/statusassistant.js
@@ -1,7 +1,7 @@
/*jslint node: true, nomen: true */
/*global servicePath, Log */
/*global libPath, Log */
/*exported statusAssistant*/
var SyncStatus = require(servicePath + "/javascript/utils/SyncStatus.js");
var SyncStatus = require(libPath + "SyncStatus.js");

/* Validate contact username/password */
var statusAssistant = function () { "use strict"; };
Expand Down
22 changes: 9 additions & 13 deletions service/javascript/assistants/syncassistant.js
Expand Up @@ -3,15 +3,15 @@
* Description: Handles the remote to local data conversion for CalDav and CardDav
*/
/*jslint nomen: true, node: true */
/*global Log, Class, Sync, Kinds, Future, CalDav, DB, PalmCall, Activity, checkResult, servicePath */
/*global Log, Class, Sync, Kinds, Future, CalDav, DB, PalmCall, Activity, checkResult, libPath */
/*exported SyncAssistant */

var vCard = require(servicePath + "/javascript/utils/vCard.js");
var ETag = require(servicePath + "/javascript/utils/ETag.js");
var ID = require(servicePath + "/javascript/utils/ID.js");
var SyncKey = require(servicePath + "/javascript/utils/SyncKey.js");
var CalendarEventHandler = require(servicePath + "/javascript/utils/CalendarEventHandler.js");
var SyncStatus = require(servicePath + "/javascript/utils/SyncStatus.js");
var vCard = require(libPath + "vCard.js");
var ETag = require(libPath + "ETag.js");
var ID = require(libPath + "ID.js");
var SyncKey = require(libPath + "SyncKey.js");
var CalendarEventHandler = require(libPath + "CalendarEventHandler.js");
var SyncStatus = require(libPath + "SyncStatus.js");

var SyncAssistant = Class.create(Sync.SyncCommand, {
run: function run(outerfuture, subscription) {
Expand Down Expand Up @@ -112,7 +112,7 @@ var SyncAssistant = Class.create(Sync.SyncCommand, {
this.SyncKey = new SyncKey(this.client, this.handler);

this.$super(run)(future);
future.then(function syncCameBackCB() {
future.then(this, function syncCameBackCB() {
var result = checkResult(future);
Log.debug("Sync came back: ", result);
if (args.syncOnEdit) {
Expand Down Expand Up @@ -1259,11 +1259,7 @@ var SyncAssistant = Class.create(Sync.SyncCommand, {
noReUpload = true;
}

//before I did throw an error here. This prevented the sync from finishing and triggered upsync for this object on
//next occasion... if we only return an error here, probably we loose local changes.
//issue is that on error code 412 (i.e. something changed on server on this object) sync will NEVER finish
//and always will be triggered.
if (result.returnCode === 412) {
if (result.returnCode === 412 || result.returnCode === 409) {
future.result = {returnValue: false, putError: true, msg: "Put object failed, because it was changed on server, too: " + JSON.stringify(result) + " for " + obj.uri, noReUpload: noReUpload };
} else {
future.result = {returnValue: false, putError: true, msg: "Put object failed: " + JSON.stringify(result) + " for " + obj.uri, noReUpload: noReUpload };
Expand Down

0 comments on commit 98bfff9

Please sign in to comment.