diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 434c180c..24f60dac 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="4" + android:versionName="0.3.1-alpha" > { c.populated = true; return; } + + + public void deleteAllExceptRemoteNames(Resource[] remoteResources) { + String where; + + if (remoteResources.length != 0) { + List terms = new LinkedList(); + for (Resource res : remoteResources) + terms.add(entryColumnRemoteName() + "<>" + DatabaseUtils.sqlEscapeString(res.getName())); + where = StringUtils.join(terms, " AND "); + } else + where = entryColumnRemoteName() + " IS NOT NULL"; + + Builder builder = ContentProviderOperation.newDelete(entriesURI()).withSelection(where, null); + pendingOperations.add(builder + .withYieldAllowed(true) + .build()); + } /* private helper methods */ diff --git a/src/at/bitfire/davdroid/resource/LocalCalendar.java b/src/at/bitfire/davdroid/resource/LocalCalendar.java index a5f553fb..9cc63954 100644 --- a/src/at/bitfire/davdroid/resource/LocalCalendar.java +++ b/src/at/bitfire/davdroid/resource/LocalCalendar.java @@ -10,6 +10,9 @@ package at.bitfire.davdroid.resource; import java.net.URISyntaxException; import java.text.ParseException; import java.util.LinkedList; +import java.util.List; + +import org.apache.commons.lang.StringUtils; import lombok.Getter; import net.fortuna.ical4j.model.Parameter; @@ -34,6 +37,7 @@ import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.database.Cursor; +import android.database.DatabaseUtils; import android.net.Uri; import android.os.RemoteException; import android.provider.CalendarContract; @@ -82,7 +86,7 @@ public class LocalCalendar extends LocalCollection { values.put(Calendars.ACCOUNT_TYPE, account.type); values.put(Calendars.NAME, info.getPath()); values.put(Calendars.CALENDAR_DISPLAY_NAME, info.getTitle()); - values.put(Calendars.CALENDAR_COLOR, 0xC3EA6E); + values.put(Calendars.CALENDAR_COLOR, 0xFFC3EA6E); values.put(Calendars.CALENDAR_ACCESS_LEVEL, Calendars.CAL_ACCESS_OWNER); values.put(Calendars.ALLOWED_AVAILABILITY, Events.AVAILABILITY_BUSY + "," + Events.AVAILABILITY_FREE + "," + Events.AVAILABILITY_TENTATIVE); values.put(Calendars.ALLOWED_ATTENDEE_TYPES, Attendees.TYPE_NONE + "," + Attendees.TYPE_REQUIRED + "," + Attendees.TYPE_OPTIONAL + "," + Attendees.TYPE_RESOURCE); @@ -307,6 +311,25 @@ public class LocalCalendar extends LocalCollection { } + public void deleteAllExceptRemoteNames(Resource[] remoteResources) { + String where; + + if (remoteResources.length != 0) { + List terms = new LinkedList(); + for (Resource res : remoteResources) + terms.add(entryColumnRemoteName() + "<>" + DatabaseUtils.sqlEscapeString(res.getName())); + where = StringUtils.join(terms, " AND "); + } else + where = entryColumnRemoteName() + " IS NOT NULL"; + + Builder builder = ContentProviderOperation.newDelete(entriesURI()) + .withSelection(Events.CALENDAR_ID + "=? AND (" + where + ")", new String[] { String.valueOf(id) }); + pendingOperations.add(builder + .withYieldAllowed(true) + .build()); + } + + /* private helper methods */ @Override diff --git a/src/at/bitfire/davdroid/resource/LocalCollection.java b/src/at/bitfire/davdroid/resource/LocalCollection.java index 47307e23..b8173e7d 100644 --- a/src/at/bitfire/davdroid/resource/LocalCollection.java +++ b/src/at/bitfire/davdroid/resource/LocalCollection.java @@ -29,6 +29,8 @@ import android.os.RemoteException; import android.provider.CalendarContract; public abstract class LocalCollection { + //private static final String TAG = "davdroid.LocalCollection"; + protected Account account; protected ContentProviderClient providerClient; protected ArrayList pendingOperations = new ArrayList(); @@ -147,22 +149,7 @@ public abstract class LocalCollection { .build()); } - public void deleteAllExceptRemoteNames(Resource[] remoteResources) { - Builder builder = ContentProviderOperation.newDelete(entriesURI()); - - if (remoteResources.length != 0) { - List terms = new LinkedList(); - for (Resource res : remoteResources) - terms.add(entryColumnRemoteName() + "<>" + DatabaseUtils.sqlEscapeString(res.getName())); - String where = StringUtils.join(terms, " AND "); - builder = builder.withSelection(where, new String[] {}); - } else - builder = builder.withSelection(entryColumnRemoteName() + " IS NOT NULL", null); - - pendingOperations.add(builder - .withYieldAllowed(true) - .build()); - } + public abstract void deleteAllExceptRemoteNames(Resource[] remoteResources); public void clearDirty(Resource resource) { pendingOperations.add(ContentProviderOperation diff --git a/src/at/bitfire/davdroid/syncadapter/SelectCollectionsFragment.java b/src/at/bitfire/davdroid/syncadapter/SelectCollectionsFragment.java index a9056e40..d8b4cf4a 100644 --- a/src/at/bitfire/davdroid/syncadapter/SelectCollectionsFragment.java +++ b/src/at/bitfire/davdroid/syncadapter/SelectCollectionsFragment.java @@ -132,7 +132,7 @@ public class SelectCollectionsFragment extends ListFragment { ServerInfo serverInfo = (ServerInfo)getArguments().getSerializable(KEY_SERVER_INFO); try { URI baseURI = new URI(serverInfo.getBaseURL()); - String accountName = serverInfo.getUserName() + "@" + baseURI.getHost(); + String accountName = serverInfo.getUserName() + "@" + baseURI.getHost() + baseURI.getPath(); AccountManager accountManager = AccountManager.get(getActivity()); Account account = new Account(accountName, Constants.ACCOUNT_TYPE); diff --git a/src/ical4j.properties b/src/ical4j.properties index 8b137891..66f4ba5e 100644 --- a/src/ical4j.properties +++ b/src/ical4j.properties @@ -1 +1,4 @@ +ical4j.unfolding.relaxed=true +ical4j.parsing.relaxed=true +ical4j.compatibility.outlook=true