adds ical input to calendar html templates and implements data handling
- the icalHandler in the backend is used in two instances. First, when the user adds a new ical calendar into the database, routes.py passes the information (name and url) to the ical Handler. The calendars are saved in the database as type 'ical'. Then, when a connected device pulls current events, all the calendars which are of type 'ical' are pulled and parsed for current events. See the backend commit for details on what happens there. - All google Calendar related functions now have an additional check, to make sure that the calendar they are working on is of type 'Google'.
This commit is contained in:
parent
524d2f1e1d
commit
752c7c5577
2
backend
2
backend
@ -1 +1 @@
|
||||
Subproject commit fec09edb888013c5cb9c062d5cdb2220bc1a217d
|
||||
Subproject commit 056779f7d26746cf54e73156e0a3909ecf058298
|
@ -2,7 +2,7 @@ FROM python:3.8-slim-buster
|
||||
RUN apt-get update && apt-get upgrade
|
||||
RUN pip3 install flask Flask-SQLAlchemy flask_migrate flask_login flask_wtf python-dotenv
|
||||
RUN apt-get install gcc libpcre3 libpcre3-dev libmariadbclient-dev -y
|
||||
RUN pip3 install uwsgi email-validator RandomWords icalevents
|
||||
RUN pip3 install uwsgi email-validator RandomWords ics
|
||||
RUN pip3 install google google-oauth google-auth-oauthlib google-api-python-client mysqlclient
|
||||
COPY docker-entrypoint.sh /usr/local/bin/
|
||||
EXPOSE 8084
|
||||
|
@ -50,6 +50,7 @@ class DeviceForm(FlaskForm):
|
||||
|
||||
class CalendarForm(FlaskForm):
|
||||
iCalURL = StringField('New ical URL', validators=[DataRequired()])
|
||||
calName = StringField('Calendar Name', validators=[DataRequired()])
|
||||
submit = SubmitField('Add URL')
|
||||
|
||||
def validate_iCalURL (self, iCalURL):
|
||||
|
@ -121,19 +121,23 @@ def deleteAccount(user):
|
||||
|
||||
|
||||
def fetchCalendarEvents(user, calendars, startDate, endDate):
|
||||
|
||||
service = None
|
||||
if user.google_token is not None:
|
||||
client_token = GC.build_credentials(user.google_token.token,
|
||||
user.google_token.refresh_token)
|
||||
credentials = google.oauth2.credentials.Credentials(**client_token)
|
||||
|
||||
client_token = GC.build_credentials(user.google_token.token,
|
||||
user.google_token.refresh_token)
|
||||
credentials = google.oauth2.credentials.Credentials(**client_token)
|
||||
|
||||
service = build(GC.API_SERVICE_NAME, GC.API_VERSION, credentials=credentials)
|
||||
service = build(GC.API_SERVICE_NAME, GC.API_VERSION, credentials=credentials)
|
||||
|
||||
all_events = []
|
||||
for calendar in calendars:
|
||||
if calendar.toggle == "True" and calendar.calType == "Google":
|
||||
if (calendar.toggle == "True" and
|
||||
calendar.calendar_type == "Google" and
|
||||
service != None):
|
||||
event_result = service.events().list(calendarId=calendar.calendar_id,
|
||||
timeMin=startDate,
|
||||
timeMax=endDate,
|
||||
timeMin=startDate.isoformat(),
|
||||
timeMax=endDate.isoformat(),
|
||||
maxResults=10,
|
||||
singleEvents=True,
|
||||
orderBy='startTime').execute()
|
||||
@ -156,7 +160,10 @@ def fetchCalendarEvents(user, calendars, startDate, endDate):
|
||||
|
||||
all_events.append(newEvent)
|
||||
|
||||
colors = service.colors().get().execute()
|
||||
if service != None:
|
||||
colors = service.colors().get().execute()
|
||||
else:
|
||||
colors = None
|
||||
|
||||
return all_events, colors
|
||||
|
||||
|
@ -17,6 +17,7 @@ from flask_login import (
|
||||
from random_words import RandomWords
|
||||
import requests
|
||||
|
||||
import backend.icalHandler as ical
|
||||
import server.googleHandler as google
|
||||
|
||||
from server import login_manager, app, db
|
||||
@ -105,6 +106,9 @@ def calendar():
|
||||
if form.validate_on_submit():
|
||||
# try to add the submitted ical as a calendar
|
||||
print(form.iCalURL.data, flush=True)
|
||||
|
||||
|
||||
ical.icalToCalendarDb(form.iCalURL.data, form.calName.data, current_user)
|
||||
|
||||
# otherwise it is a javascript POST
|
||||
else:
|
||||
@ -255,6 +259,7 @@ def downloader(device):
|
||||
# TODO only pass along google calendars form user
|
||||
startDate, endDate = backend.getTimeStamps()
|
||||
events, colors = google.fetchCalendarEvents(request_user, request_user.calendars, startDate, endDate)
|
||||
events.extend(ical.fetchCalendarEvents(request_user.calendars, startDate, endDate))
|
||||
calendarjson = backend.generateJsonFromCalendarEntries(events, colors)
|
||||
return jsonify(calendarjson)
|
||||
|
||||
|
@ -36,6 +36,8 @@
|
||||
<form action="" method="post">
|
||||
<div class="container grey" style="margin-top: 3rem;">
|
||||
<div>{{ form.hidden_tag() }}</div>
|
||||
<div style="margin: 1rem">{{ form.calName.label }}</div>
|
||||
<div style="margin: 1rem">{{ form.calName(size=24) }}</div>
|
||||
<div style="margin: 1rem">{{ form.iCalURL.label }}</div>
|
||||
<div style="margin: 1rem">{{ form.iCalURL(size=24) }}</div>
|
||||
<div style="with: 8rem; margin: 1rem">{{ form.submit() }}</div>
|
||||
|
Loading…
Reference in New Issue
Block a user