package org.gege.caldavsyncadapter.caldav.entities;
import java.net.URI;
import java.util.ArrayList;
//import org.gege.caldavsyncadapter.CalendarColors;
import org.gege.caldavsyncadapter.caldav.entities.DavCalendar.CalendarSource;
import org.gege.caldavsyncadapter.syncadapter.notifications.NotificationsHelper;
import android.accounts.Account;
import android.content.ContentProviderClient;
//import android.content.ContentUris;
//import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.RemoteException;
import android.provider.CalendarContract.Calendars;
//import android.util.Log;
public class CalendarList {
// private static final String TAG = "CalendarList";
private java.util.ArrayList<DavCalendar> mList = new java.util.ArrayList<DavCalendar>();
private Account mAccount = null;
private ContentProviderClient mProvider = null;
public CalendarSource Source = CalendarSource.undefined;
public String ServerUrl = "";
public CalendarList(Account account, ContentProviderClient provider, CalendarSource source, String serverUrl) {
this.mAccount = account;
this.mProvider = provider;
this.Source = source;
this.ServerUrl = serverUrl;
}
/* public Calendar getCalendarByAndroidCalendarId(int calendarId) {
Calendar Result = null;
for (Calendar Item : mList) {
if (Item.getAndroidCalendarId() == calendarId)
Result = Item;
}
return Result;
}*/
public DavCalendar getCalendarByURI(URI calendarURI) {
DavCalendar Result = null;
for (DavCalendar Item : mList) {
if (Item.getURI().equals(calendarURI))
Result = Item;
}
return Result;
}
public DavCalendar getCalendarByAndroidUri(Uri androidCalendarUri) {
DavCalendar Result = null;
for (DavCalendar Item : mList) {
if (Item.getAndroidCalendarUri().equals(androidCalendarUri))
Result = Item;
}
return Result;
}
/**
* function to get all calendars from client side android
* @return
*/
public boolean readCalendarFromClient() {
boolean Result = false;
Cursor cur = null;
Uri uri = Calendars.CONTENT_URI;
/* COMPAT: in the past, the serverurl was not stored within a calendar. (see #98)
* so there was no chance to see which calendars belongs to a named account.
* username + serverurl have to be unique
* ((DavCalendar.SERVERURL = ?) OR (DavCalendar.SERVERURL IS NULL))
*/
String selection = "(" + "(" + Calendars.ACCOUNT_NAME + " = ?) AND " +
"(" + Calendars.ACCOUNT_TYPE + " = ?) AND " +
"((" + DavCalendar.SERVERURL + " = ?) OR " +
"(" + DavCalendar.SERVERURL + " IS NULL)) AND " +
"(" + Calendars.OWNER_ACCOUNT + " = ?)" +
")";
String[] selectionArgs = new String[] { mAccount.name,
mAccount.type,
this.ServerUrl,
mAccount.name
};
// Submit the query and get a Cursor object back.
try {
cur = mProvider.query(uri, null, selection, selectionArgs, null);
} catch (RemoteException e) {
e.printStackTrace();
}
if (cur != null) {
while (cur.moveToNext()) {
mList.add(new DavCalendar(mAccount, mProvider, cur, this.Source, this.ServerUrl));
}
cur.close();
Result = true;
}
return Result;
}
public boolean deleteCalendarOnClientSideOnly(android.content.Context context) {
boolean Result = false;
for (DavCalendar androidCalendar : this.mList) {
if (!androidCalendar.foundServerSide) {
NotificationsHelper.signalSyncErrors(context, "CalDAV Sync Adapter", "calendar deleted: " + androidCalendar.getCalendarDisplayName());
androidCalendar.deleteAndroidCalendar();
}
}
return Result;
}
public void addCalendar(DavCalendar item) {
item.setAccount(this.mAccount);
item.setProvider(this.mProvider);
item.ServerUrl = this.ServerUrl;
this.mList.add(item);
}
public java.util.ArrayList<DavCalendar> getCalendarList() {
return this.mList;
}
public void setAccount(Account account) {
this.mAccount = account;
}
public void setProvider(ContentProviderClient provider) {
this.mProvider = provider;
}
public ArrayList<Uri> getNotifyList() {
ArrayList<Uri> Result = new ArrayList<Uri>();
for (DavCalendar cal : this.mList) {
Result.addAll(cal.getNotifyList());
}
return Result;
}
}