Search in sources :

Example 26 with CalendarData

use of com.cloudcraftgaming.discal.api.object.calendar.CalendarData in project DisCal-Discord-Bot by NovaFox161.

the class EventEndpoint method updateEvent.

public static String updateEvent(Request request, Response response) {
    JSONObject body = new JSONObject(request.body());
    String eventId = body.getString("id");
    GuildSettings settings;
    if (DiscordAccountHandler.getHandler().hasAccount(request.session().id())) {
        Map m = DiscordAccountHandler.getHandler().getAccount(request.session().id());
        WebGuild g = (WebGuild) m.get("selected");
        g.setSettings(DatabaseManager.getManager().getSettings(Long.valueOf(g.getId())));
        settings = g.getSettings();
    } else {
        long guildId = body.getLong("guild_id");
        settings = DatabaseManager.getManager().getSettings(guildId);
    }
    // Okay, time to update the event
    try {
        Calendar service;
        if (settings.useExternalCalendar()) {
            service = CalendarAuth.getCalendarService(settings);
        } else {
            service = CalendarAuth.getCalendarService();
        }
        CalendarData calendarData = DatabaseManager.getManager().getMainCalendar(settings.getGuildID());
        com.google.api.services.calendar.model.Calendar cal = service.calendars().get(calendarData.getCalendarId()).execute();
        Event event = new Event();
        event.setId(eventId);
        event.setVisibility("public");
        event.setSummary(body.getString("summary"));
        event.setDescription(body.getString("description"));
        EventDateTime start = new EventDateTime();
        start.setDateTime(new DateTime(body.getLong("epochStart")));
        event.setStart(start.setTimeZone(cal.getTimeZone()));
        EventDateTime end = new EventDateTime();
        end.setDateTime(new DateTime(body.getLong("epochEnd")));
        event.setEnd(end.setTimeZone(cal.getTimeZone()));
        if (!body.getString("color").equalsIgnoreCase("NONE")) {
            event.setColorId(EventColor.fromNameOrHexOrID(body.getString("color")).getId().toString());
        }
        if (!body.getString("location").equalsIgnoreCase("") || !body.getString("location").equalsIgnoreCase("N/a")) {
            event.setLocation(body.getString("location"));
        }
        JSONObject recur = body.getJSONObject("recurrence");
        if (recur.getBoolean("recur")) {
            // Handle recur
            Recurrence recurrence = new Recurrence();
            recurrence.setFrequency(EventFrequency.fromValue(recur.getString("frequency")));
            recurrence.setCount(recur.getInt("count"));
            recurrence.setInterval(recur.getInt("interval"));
            String[] rr = new String[] { recurrence.toRRule() };
            event.setRecurrence(Arrays.asList(rr));
        }
        EventData ed = new EventData(settings.getGuildID());
        if (!body.getString("image").equalsIgnoreCase("") && ImageUtils.validate(body.getString("image"))) {
            ed.setImageLink(body.getString("image"));
            ed.setEventId(eventId);
            ed.setEventEnd(event.getEnd().getDateTime().getValue());
        }
        if (ed.shouldBeSaved()) {
            DatabaseManager.getManager().updateEventData(ed);
        }
        service.events().update(calendarData.getCalendarId(), eventId, event).execute();
        response.status(200);
        response.body(ResponseUtils.getJsonResponseMessage("Successfully updated event!"));
    } catch (Exception e) {
        Logger.getLogger().exception(null, "[WEB] Failed to update event!", e, EventEndpoint.class, true);
        e.printStackTrace();
        response.status(500);
        response.body(ResponseUtils.getJsonResponseMessage("Failed to update event!"));
    }
    return response.body();
}
Also used : Recurrence(com.cloudcraftgaming.discal.api.object.event.Recurrence) EventDateTime(com.google.api.services.calendar.model.EventDateTime) Calendar(com.google.api.services.calendar.Calendar) WebGuild(com.cloudcraftgaming.discal.api.object.web.WebGuild) DateTime(com.google.api.client.util.DateTime) EventDateTime(com.google.api.services.calendar.model.EventDateTime) EventData(com.cloudcraftgaming.discal.api.object.event.EventData) JSONObject(org.json.JSONObject) CalendarData(com.cloudcraftgaming.discal.api.object.calendar.CalendarData) Event(com.google.api.services.calendar.model.Event) Map(java.util.Map) GuildSettings(com.cloudcraftgaming.discal.api.object.GuildSettings)

Example 27 with CalendarData

use of com.cloudcraftgaming.discal.api.object.calendar.CalendarData in project DisCal-Discord-Bot by NovaFox161.

the class EventEndpoint method createEvent.

public static String createEvent(Request request, Response response) {
    JSONObject body = new JSONObject(request.body());
    GuildSettings settings;
    if (DiscordAccountHandler.getHandler().hasAccount(request.session().id())) {
        Map m = DiscordAccountHandler.getHandler().getAccount(request.session().id());
        WebGuild g = (WebGuild) m.get("selected");
        g.setSettings(DatabaseManager.getManager().getSettings(Long.valueOf(g.getId())));
        settings = g.getSettings();
    } else {
        long guildId = body.getLong("guild_id");
        settings = DatabaseManager.getManager().getSettings(guildId);
    }
    // Okay, time to update the event
    try {
        Calendar service;
        if (settings.useExternalCalendar()) {
            service = CalendarAuth.getCalendarService(settings);
        } else {
            service = CalendarAuth.getCalendarService();
        }
        CalendarData calendarData = DatabaseManager.getManager().getMainCalendar(settings.getGuildID());
        com.google.api.services.calendar.model.Calendar cal = service.calendars().get(calendarData.getCalendarId()).execute();
        Event event = new Event();
        event.setId(KeyGenerator.generateEventId());
        event.setVisibility("public");
        event.setSummary(body.getString("summary"));
        event.setDescription(body.getString("description"));
        EventDateTime start = new EventDateTime();
        start.setDateTime(new DateTime(body.getLong("epochStart")));
        event.setStart(start.setTimeZone(cal.getTimeZone()));
        EventDateTime end = new EventDateTime();
        end.setDateTime(new DateTime(body.getLong("epochEnd")));
        event.setEnd(end.setTimeZone(cal.getTimeZone()));
        if (!body.getString("color").equalsIgnoreCase("NONE")) {
            event.setColorId(EventColor.fromNameOrHexOrID(body.getString("color")).getId().toString());
        }
        if (!body.getString("location").equalsIgnoreCase("") || !body.getString("location").equalsIgnoreCase("N/a")) {
            event.setLocation(body.getString("location"));
        }
        JSONObject recur = body.getJSONObject("recurrence");
        if (recur.getBoolean("recur")) {
            // Handle recur
            Recurrence recurrence = new Recurrence();
            recurrence.setFrequency(EventFrequency.fromValue(recur.getString("frequency")));
            recurrence.setCount(recur.getInt("count"));
            recurrence.setInterval(recur.getInt("interval"));
            String[] rr = new String[] { recurrence.toRRule() };
            event.setRecurrence(Arrays.asList(rr));
        }
        EventData ed = new EventData(settings.getGuildID());
        if (!body.getString("image").equalsIgnoreCase("") && ImageUtils.validate(body.getString("image"))) {
            ed.setImageLink(body.getString("image"));
            ed.setEventEnd(event.getEnd().getDateTime().getValue());
        }
        if (ed.shouldBeSaved()) {
            DatabaseManager.getManager().updateEventData(ed);
        }
        Event confirmed = service.events().insert(calendarData.getCalendarId(), event).execute();
        response.status(200);
        JSONObject respondBody = new JSONObject();
        respondBody.put("Message", "Successfully create event!");
        respondBody.put("id", confirmed.getId());
        response.body(respondBody.toString());
    } catch (Exception e) {
        Logger.getLogger().exception(null, "[WEB] Failed to update event!", e, EventEndpoint.class, true);
        e.printStackTrace();
        response.status(500);
        response.body(ResponseUtils.getJsonResponseMessage("Failed to update event!"));
    }
    return response.body();
}
Also used : Recurrence(com.cloudcraftgaming.discal.api.object.event.Recurrence) EventDateTime(com.google.api.services.calendar.model.EventDateTime) Calendar(com.google.api.services.calendar.Calendar) WebGuild(com.cloudcraftgaming.discal.api.object.web.WebGuild) DateTime(com.google.api.client.util.DateTime) EventDateTime(com.google.api.services.calendar.model.EventDateTime) EventData(com.cloudcraftgaming.discal.api.object.event.EventData) JSONObject(org.json.JSONObject) CalendarData(com.cloudcraftgaming.discal.api.object.calendar.CalendarData) Event(com.google.api.services.calendar.model.Event) Map(java.util.Map) GuildSettings(com.cloudcraftgaming.discal.api.object.GuildSettings)

Example 28 with CalendarData

use of com.cloudcraftgaming.discal.api.object.calendar.CalendarData in project DisCal-Discord-Bot by NovaFox161.

the class EventEndpoint method getEventsForSelectedDate.

public static String getEventsForSelectedDate(Request request, Response response) {
    JSONObject requestBody = new JSONObject(request.body());
    Long startEpoch = Long.valueOf(requestBody.getString("StartEpoch"));
    Long endEpoch = startEpoch + 86400000L;
    GuildSettings settings;
    if (DiscordAccountHandler.getHandler().hasAccount(request.session().id())) {
        Map m = DiscordAccountHandler.getHandler().getAccount(request.session().id());
        WebGuild g = (WebGuild) m.get("selected");
        g.setSettings(DatabaseManager.getManager().getSettings(Long.valueOf(g.getId())));
        settings = g.getSettings();
    } else {
        long guildId = requestBody.getLong("guild_id");
        settings = DatabaseManager.getManager().getSettings(guildId);
    }
    // okay, lets actually get the month's events.
    try {
        Calendar service;
        if (settings.useExternalCalendar()) {
            service = CalendarAuth.getCalendarService(settings);
        } else {
            service = CalendarAuth.getCalendarService();
        }
        CalendarData calendarData = DatabaseManager.getManager().getMainCalendar(settings.getGuildID());
        Events events = service.events().list(calendarData.getCalendarAddress()).setTimeMin(new DateTime(startEpoch)).setTimeMax(new DateTime(endEpoch)).setOrderBy("startTime").setSingleEvents(true).setShowDeleted(false).execute();
        List<Event> items = events.getItems();
        String tz = "Error/Unknown";
        try {
            tz = service.calendars().get(calendarData.getCalendarAddress()).execute().getTimeZone();
        } catch (Exception ignore) {
        }
        List<JSONObject> eventsJson = new ArrayList<>();
        for (Event e : items) {
            JSONObject jo = new JSONObject();
            jo.put("id", e.getId());
            jo.put("epochStart", e.getStart().getDateTime().getValue());
            jo.put("epochEnd", e.getEnd().getDateTime().getValue());
            jo.put("timezone", tz);
            jo.put("summary", e.getSummary());
            jo.put("description", e.getDescription());
            if (e.getLocked() != null) {
                jo.put("location", e.getLocation());
            } else {
                jo.put("location", "N/a");
            }
            jo.put("color", EventColor.fromNameOrHexOrID(e.getColorId()).name());
            jo.put("isParent", !(e.getId().contains("_")));
            if (e.getRecurrence() != null && e.getRecurrence().size() > 0) {
                jo.put("recur", true);
                Recurrence r = new Recurrence().fromRRule(e.getRecurrence().get(0));
                JSONObject rjo = new JSONObject();
                rjo.put("frequency", r.getFrequency().name());
                rjo.put("count", r.getCount());
                rjo.put("interval", r.getInterval());
                jo.put("recurrence", rjo);
            } else {
                jo.put("recur", false);
                JSONObject rjo = new JSONObject();
                rjo.put("frequency", EventFrequency.DAILY.name());
                rjo.put("count", -1);
                rjo.put("interval", 1);
                jo.put("recurrence", rjo);
            }
            EventData ed = DatabaseManager.getManager().getEventData(settings.getGuildID(), e.getId());
            jo.put("image", ed.getImageLink());
            eventsJson.add(jo);
        }
        JSONObject body = new JSONObject();
        body.put("events", eventsJson);
        body.put("count", eventsJson.size());
        response.body(body.toString());
    } catch (Exception e) {
        response.body("Internal server error!");
        Logger.getLogger().exception(null, "[WEB] Failed to retrieve events for specific date!", e, EventEndpoint.class, true);
        return response.body();
    }
    return response.body();
}
Also used : Recurrence(com.cloudcraftgaming.discal.api.object.event.Recurrence) Calendar(com.google.api.services.calendar.Calendar) ArrayList(java.util.ArrayList) WebGuild(com.cloudcraftgaming.discal.api.object.web.WebGuild) DateTime(com.google.api.client.util.DateTime) EventDateTime(com.google.api.services.calendar.model.EventDateTime) EventData(com.cloudcraftgaming.discal.api.object.event.EventData) JSONObject(org.json.JSONObject) Events(com.google.api.services.calendar.model.Events) CalendarData(com.cloudcraftgaming.discal.api.object.calendar.CalendarData) Event(com.google.api.services.calendar.model.Event) Map(java.util.Map) GuildSettings(com.cloudcraftgaming.discal.api.object.GuildSettings)

Example 29 with CalendarData

use of com.cloudcraftgaming.discal.api.object.calendar.CalendarData in project DisCal-Discord-Bot by NovaFox161.

the class DashboardHandler method deleteCalendar.

public static String deleteCalendar(Request request, Response response) {
    try {
        // TODO: Handle multiple calendars...
        String calId = request.queryParams("calendar-id");
        Map m = DiscordAccountHandler.getHandler().getAccount(request.session().id());
        WebGuild g = (WebGuild) m.get("selected");
        if (g.isManageServer()) {
            CalendarData data = DatabaseManager.getManager().getMainCalendar(Long.valueOf(g.getId()));
            GuildSettings settings = DatabaseManager.getManager().getSettings(Long.valueOf(g.getId()));
            CalendarUtils.deleteCalendar(data, settings);
            g.setCalendar(new WebCalendar().fromCalendar(DatabaseManager.getManager().getMainCalendar(Long.valueOf(g.getId())), DatabaseManager.getManager().getSettings(Long.valueOf(g.getId()))));
            response.redirect("/dashboard/guild/calendar", 301);
        } else {
            response.redirect("/dashboard/guild/calendar", 301);
        }
    } catch (Exception e) {
        Logger.getLogger().exception(null, "[WEB] Failed to delete/remove calendar!", e, DashboardHandler.class, true);
    }
    return response.body();
}
Also used : CalendarData(com.cloudcraftgaming.discal.api.object.calendar.CalendarData) WebGuild(com.cloudcraftgaming.discal.api.object.web.WebGuild) WebCalendar(com.cloudcraftgaming.discal.api.object.web.WebCalendar) HashMap(java.util.HashMap) Map(java.util.Map) GuildSettings(com.cloudcraftgaming.discal.api.object.GuildSettings) JSONException(org.json.JSONException)

Aggregations

CalendarData (com.cloudcraftgaming.discal.api.object.calendar.CalendarData)29 Calendar (com.google.api.services.calendar.Calendar)11 Event (com.google.api.services.calendar.model.Event)9 GuildSettings (com.cloudcraftgaming.discal.api.object.GuildSettings)6 WebGuild (com.cloudcraftgaming.discal.api.object.web.WebGuild)6 DateTime (com.google.api.client.util.DateTime)6 ArrayList (java.util.ArrayList)6 Map (java.util.Map)6 JSONObject (org.json.JSONObject)6 EventData (com.cloudcraftgaming.discal.api.object.event.EventData)5 Calendar (com.google.api.services.calendar.model.Calendar)5 EventDateTime (com.google.api.services.calendar.model.EventDateTime)4 Events (com.google.api.services.calendar.model.Events)4 LocalDateTime (java.time.LocalDateTime)4 DateTimeFormatter (java.time.format.DateTimeFormatter)4 JSONException (org.json.JSONException)4 Recurrence (com.cloudcraftgaming.discal.api.object.event.Recurrence)3 EmbedBuilder (sx.blah.discord.util.EmbedBuilder)3 EventColor (com.cloudcraftgaming.discal.api.enums.event.EventColor)2 PreCalendar (com.cloudcraftgaming.discal.api.object.calendar.PreCalendar)2