Files
tlw-database-tool/src/main/java/de/jeyp91/googlecalendar/TippligaGoogleEventManager.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;
}
}