Insert event REPLY

This commit is contained in:
M66B 2023-10-26 12:42:12 +02:00
parent b91575031d
commit 4d24edc9ab
2 changed files with 32 additions and 53 deletions

View File

@ -398,57 +398,6 @@ public class CalendarHelper {
return null;
}
static void update(Context context, VEvent event, EntityMessage message) {
String uid = (event.getUid() == null ? null : event.getUid().getValue());
if (TextUtils.isEmpty(uid)) {
EntityLog.log(context, EntityLog.Type.General, message,
"Update event: no uid");
return;
}
List<Attendee> attendees = event.getAttendees();
if (attendees == null || attendees.size() == 0) {
EntityLog.log(context, EntityLog.Type.General, message,
"Update event: no attendees");
return;
}
ParticipationStatus status = attendees.get(0).getParticipationStatus();
if (!ParticipationStatus.ACCEPTED.equals(status) &&
!ParticipationStatus.DECLINED.equals(status)) {
EntityLog.log(context, EntityLog.Type.General, message,
"Update event: not accepted/declined");
return;
}
ContentResolver resolver = context.getContentResolver();
try (Cursor cursor = resolver.query(CalendarContract.Events.CONTENT_URI,
new String[]{CalendarContract.Events._ID},
CalendarContract.Events.UID_2445 + " = ?",
new String[]{uid},
null)) {
if (cursor.getCount() == 0)
EntityLog.log(context, EntityLog.Type.General, message,
"Update event: uid not found");
while (cursor.moveToNext()) {
long eventId = cursor.getLong(0);
// https://developer.android.com/guide/topics/providers/calendar-provider#modify-calendar
Uri updateUri = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, eventId);
ContentValues values = new ContentValues();
if (ParticipationStatus.ACCEPTED.equals(status))
values.put(CalendarContract.Events.STATUS, CalendarContract.Events.STATUS_CONFIRMED);
else
values.put(CalendarContract.Events.STATUS, CalendarContract.Events.STATUS_CANCELED);
int rows = resolver.update(updateUri, values, null, null);
EntityLog.log(context, EntityLog.Type.General, message,
"Updated event id=" + eventId + " uid=" + uid + " rows=" + rows +
" status=" + status + " accept=" + ParticipationStatus.ACCEPTED.equals(status));
}
}
}
static void delete(Context context, VEvent event, EntityMessage message) {
String uid = (event.getUid() == null ? null : event.getUid().getValue());
if (TextUtils.isEmpty(uid))

View File

@ -38,6 +38,7 @@ import android.net.NetworkRequest;
import android.net.Uri;
import android.os.PowerManager;
import android.os.SystemClock;
import android.provider.CalendarContract;
import android.text.TextUtils;
import androidx.annotation.NonNull;
@ -77,6 +78,8 @@ import javax.mail.internet.MimeMessage;
import biweekly.Biweekly;
import biweekly.ICalendar;
import biweekly.component.VEvent;
import biweekly.parameter.ParticipationStatus;
import biweekly.property.Attendee;
import biweekly.property.Method;
public class ServiceSend extends ServiceBase implements SharedPreferences.OnSharedPreferenceChangeListener {
@ -968,9 +971,36 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar
if (method == null || !method.isReply())
return;
VEvent event = icalendar.getEvents().get(0);
EntityMessage message = db.message().getMessage(sid);
CalendarHelper.update(this, event, message);
if (message == null) {
EntityLog.log(this, "Event REPLY message not found");
return;
}
EntityAccount account = db.account().getAccount(message.account);
if (account == null) {
EntityLog.log(this, "Event REPLY account not found");
return;
}
VEvent event = icalendar.getEvents().get(0);
List<Attendee> attendees = event.getAttendees();
if (attendees == null || attendees.size() == 0) {
EntityLog.log(this, "Event REPLY attendee not found");
return;
}
int status;
ParticipationStatus pstatus = attendees.get(0).getParticipationStatus();
if (ParticipationStatus.ACCEPTED.equals(pstatus))
status = CalendarContract.Events.STATUS_CONFIRMED;
else if (ParticipationStatus.DECLINED.equals(pstatus))
status = CalendarContract.Events.STATUS_CANCELED;
else
status = CalendarContract.Events.STATUS_TENTATIVE;
CalendarHelper.insert(this, icalendar, event, status, account, message);
break;
} catch (Throwable ex) {