152 lines
6.4 KiB
Java
152 lines
6.4 KiB
Java
package de.jeyp91.googlecalendar;
|
|
|
|
import com.google.api.client.util.DateTime;
|
|
import com.google.api.services.calendar.Calendar;
|
|
import com.google.api.services.calendar.model.Event;
|
|
import com.google.api.services.calendar.model.EventDateTime;
|
|
import com.google.api.services.calendar.model.EventReminder;
|
|
import com.google.api.services.calendar.model.Events;
|
|
import de.jeyp91.tippliga.TLWLeague;
|
|
import de.jeyp91.tippliga.TLWMatchday;
|
|
|
|
import java.io.IOException;
|
|
import java.time.LocalDateTime;
|
|
import java.time.ZoneId;
|
|
import java.time.ZonedDateTime;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
import static de.jeyp91.googlecalendar.GoogleCalendarConnector.getSerivce;
|
|
|
|
public class TippligaGoogleEventManager {
|
|
|
|
private static List<Event> allEvents = null;
|
|
|
|
private static List<Event> getAllEvents(Integer season) {
|
|
if(allEvents == null) {
|
|
allEvents = getAllEventsStartingFromDateTime(new DateTime(season-1 + "-01-01T00:00:00Z"));
|
|
}
|
|
return allEvents;
|
|
}
|
|
|
|
public static List<Event> getAllEventsStartingFromDateTime(DateTime dateTime) {
|
|
|
|
Calendar service = getSerivce();
|
|
Events events = null;
|
|
|
|
String calendarUrl = CalendarConfigProvider.getCalendarUrl();
|
|
|
|
// Build a new authorized API client service.
|
|
try {
|
|
events = service.events().list(calendarUrl)
|
|
.setMaxResults(500)
|
|
.setTimeMin(dateTime)
|
|
.setOrderBy("startTime")
|
|
.setSingleEvents(true)
|
|
.execute();
|
|
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
assert events != null;
|
|
List<Event> items = events.getItems();
|
|
|
|
return items;
|
|
}
|
|
|
|
public static Event findEvent(List<Event> allEvents, Integer season, Integer league, Integer matchday, Integer deliveryDateNumber) {
|
|
String description = getDescription(season, league, matchday, deliveryDateNumber);
|
|
for(int i = 0; i < allEvents.size(); i++) {
|
|
if(allEvents.get(i).getDescription().equals(description)) return allEvents.get(i);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static void createOrUpdateEventsForMatchday(TLWMatchday matchday) {
|
|
createOrUpdateEvent(matchday, matchday.getDeliveryDate(), 1);
|
|
if(!matchday.getDeliveryDate2().equals("")) createOrUpdateEvent(matchday, matchday.getDeliveryDate2(), 2);
|
|
if(!matchday.getDeliveryDate3().equals("")) createOrUpdateEvent(matchday, matchday.getDeliveryDate3(), 3);
|
|
}
|
|
|
|
public static void createOrUpdateEvent(TLWMatchday matchday, String deliveryDateString, Integer deliverDateNumber) {
|
|
List<Event> allEvents = getAllEvents(matchday.getSeason());
|
|
Event event = findEvent(allEvents, matchday.getSeason(), matchday.getLeague(), matchday.getMatchday(), deliverDateNumber);
|
|
if(event == null)
|
|
createNewEvent(matchday, deliveryDateString, deliverDateNumber);
|
|
else
|
|
updateEvent(event, matchday, deliveryDateString, deliverDateNumber);
|
|
}
|
|
|
|
private static void createNewEvent(TLWMatchday matchday, String deliveryDateString, Integer deliverDateNumber) {
|
|
String calendarUrl = CalendarConfigProvider.getCalendarUrl();
|
|
|
|
Event event = getEvent(matchday, deliveryDateString, deliverDateNumber);
|
|
|
|
try {
|
|
getSerivce().events().insert(calendarUrl, event).execute();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private static void updateEvent(Event oldEvent, TLWMatchday matchday, String deliveryDateString, Integer deliverDateNumber) {
|
|
String calendarUrl = CalendarConfigProvider.getCalendarUrl();
|
|
|
|
Event event = getEvent(matchday, deliveryDateString, deliverDateNumber);
|
|
|
|
try {
|
|
getSerivce().events().update(calendarUrl, oldEvent.getId(), event).execute();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public static void deleteEvent(TLWMatchday matchday, Integer deliverDateNumber) {
|
|
String calendarUrl = CalendarConfigProvider.getCalendarUrl();
|
|
|
|
Event event = findEvent(getAllEvents(matchday.getSeason()), matchday.getSeason(), matchday.getLeague(), matchday.getMatchday(), deliverDateNumber);
|
|
if(event != null) {
|
|
try {
|
|
getSerivce().events().delete(calendarUrl, event.getId()).execute();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
|
|
private static Event getEvent(TLWMatchday matchday, String deliveryDateString, Integer deliverDateNumber) {
|
|
String matchdayName = matchday.getMatchdayName().equals("") ? matchday.getMatchday().toString() + ". Spieltag" : matchday.getMatchdayName();
|
|
String summary = TLWLeague.getLeagueNameCalendar(matchday.getLeague()) + " " + matchdayName + " tippen!";
|
|
if(deliverDateNumber > 1) summary += " " + deliverDateNumber + ". Chance \uD83D\uDE43";
|
|
String description = getDescription(matchday.getSeason(), matchday.getLeague(), matchday.getMatchday(), deliverDateNumber);
|
|
String location = "https://tippliga-wuerzburg.de/app.php/football/bet";
|
|
|
|
LocalDateTime deliveryLocalDateTime = LocalDateTime.parse(deliveryDateString.replace(" ", "T"));
|
|
ZonedDateTime zdtBerlin = ZonedDateTime.of(deliveryLocalDateTime, ZoneId.of("Europe/Berlin"));
|
|
DateTime deliveryDateTime = new DateTime(zdtBerlin.toInstant().toEpochMilli());
|
|
EventDateTime date = new EventDateTime()
|
|
.setDateTime(deliveryDateTime)
|
|
.setTimeZone("Europe/Berlin");
|
|
|
|
// Set reminder to 12 hours before
|
|
Event.Reminders reminders = new Event.Reminders();
|
|
reminders.setUseDefault(false);
|
|
EventReminder[] reminderOverrides = new EventReminder[] {
|
|
new EventReminder().setMethod("popup").setMinutes(12 * 60),
|
|
};
|
|
reminders.setOverrides(Arrays.asList(reminderOverrides));
|
|
|
|
return new Event()
|
|
.setSummary(summary)
|
|
.setLocation(location)
|
|
.setDescription(description)
|
|
.setStart(date)
|
|
.setEnd(date)
|
|
.setReminders(reminders);
|
|
}
|
|
|
|
private static String getDescription(Integer season, Integer league, Integer matchday, Integer deliverDateNumber) {
|
|
return "Saison: " + season + "\n" + "Liga: " + league + "\n" + "Spieltag: " + matchday + "\n" + "Abgabeschluss: " + deliverDateNumber;
|
|
}
|
|
} |