Compare commits

..

No commits in common. "master" and "dev" have entirely different histories.
master ... dev

2 changed files with 8 additions and 86 deletions

View File

@ -16,9 +16,8 @@ API_SERVICE_NAME = 'calendar'
API_VERSION = 'v3' API_VERSION = 'v3'
class Calendar: class Calendar:
def __init__(self, name, calendarId, calType, toggle='False', color="#000000"): def __init__(self, name, calendarId, toggle='False', color="#000000"):
self.name = name self.name = name
self.calType = calType
self.color = color self.color = color
self.toggle=toggle self.toggle=toggle
self.calendarId = calendarId self.calendarId = calendarId
@ -82,7 +81,6 @@ def updateCalendars(user, calendars, colors):
if not user.hasCalendar(calendar.calendarId): if not user.hasCalendar(calendar.calendarId):
color = fromColorIdGetColor(calendar.color, colormap, colors) color = fromColorIdGetColor(calendar.color, colormap, colors)
c = dbCalendar(calendar_id=calendar.calendarId, c = dbCalendar(calendar_id=calendar.calendarId,
calendar_type = calendar.calType,
name = calendar.name, name = calendar.name,
toggle = "False", toggle = "False",
color = color) color = color)
@ -98,9 +96,8 @@ def calendarsFromDb(user):
calendarId = calendar.calendar_id calendarId = calendar.calendar_id
toggle = calendar.toggle toggle = calendar.toggle
color = calendar.color color = calendar.color
calType = calendar.calendar_type
pyCalendars.append(Calendar(name, calendarId, calType, toggle, color)) pyCalendars.append(Calendar(name, calendarId, toggle, color))
return pyCalendars return pyCalendars
@ -113,7 +110,6 @@ def purgeCalendars(calendars, visibleCalendars):
return purged return purged
# remaps a event color id to a calendar color id # remaps a event color id to a calendar color id
# for google calendars
def toCalendarColorId(colormap, colorId): def toCalendarColorId(colormap, colorId):
for remap in colormap['eventRemap']: for remap in colormap['eventRemap']:
if remap['from'] == colorId: if remap['from'] == colorId:
@ -123,7 +119,6 @@ def toCalendarColorId(colormap, colorId):
return colorId return colorId
# remaps a calendar color ID to its natural color # remaps a calendar color ID to its natural color
# for google calendars
def toNaturalColor(colormap, orgColor): def toNaturalColor(colormap, orgColor):
for remap in colormap['colors']: for remap in colormap['colors']:
if remap['api'] == orgColor: if remap['api'] == orgColor:
@ -132,10 +127,8 @@ def toNaturalColor(colormap, orgColor):
print(f"failed with {orgColor}") print(f"failed with {orgColor}")
return orgColor return orgColor
# uses the event color id to convert it to a hex color # use the event color id to convert it to a hex color
# does this for every event in events def colorizeEvents(events, colors):
# this is used for Google Calendars
def colorizeGoogleEvents(events, colors):
COLORS_FILE = os.path.join(os.path.dirname(__file__), 'colors.json') COLORS_FILE = os.path.join(os.path.dirname(__file__), 'colors.json')
with open(COLORS_FILE) as f: with open(COLORS_FILE) as f:
colormap = json.load(f) colormap = json.load(f)
@ -145,12 +138,10 @@ def colorizeGoogleEvents(events, colors):
event.colorHex = forEventGetColor(event, colormap, colors) event.colorHex = forEventGetColor(event, colormap, colors)
# returns a color for a specific calendar color id # returns a color for a specific calendar color id
# for google calendars
def fromColorIdGetColor(color, colormap, colors): def fromColorIdGetColor(color, colormap, colors):
return toNaturalColor(colormap, colors['calendar'][color]['background']) return toNaturalColor(colormap, colors['calendar'][color]['background'])
# generates the natural color for a event color id # generates the natural color for a event color id
# for google calendars
def forEventGetColor(event, colormap, colors): def forEventGetColor(event, colormap, colors):
calColorId = toCalendarColorId(colormap, event.eventColorId) calColorId = toCalendarColorId(colormap, event.eventColorId)
bg = colors['calendar'][calColorId]['background'] bg = colors['calendar'][calColorId]['background']
@ -190,18 +181,17 @@ def getTimeStamps():
# define today and tomorrow # define today and tomorrow
now = datetime.datetime.now(datetime.timezone.utc).astimezone() now = datetime.datetime.now(datetime.timezone.utc).astimezone()
today = now.replace(hour=0, minute=0, second = 0) today = now.replace(hour=0, minute=0, second = 0).isoformat()
tomorrow = now.replace(hour=23, minute=59, second=59).isoformat() # + '+01:00' tomorrow = now.replace(hour=23, minute=59, second=59).isoformat() # + '+01:00'
twodaysfromnow = datetime.datetime.today() + datetime.timedelta(days=2) twodaysfromnow = datetime.datetime.today() + datetime.timedelta(days=2)
twodaysfromnow = twodaysfromnow.replace(hour=23, minute=59, second=59).astimezone() twodaysfromnow = twodaysfromnow.replace(hour=23, minute=59, second=59).astimezone().isoformat()
return today, twodaysfromnow return today, twodaysfromnow
def generateJsonFromCalendarEntries(events, colors): def generateJsonFromCalendarEntries(events, colors):
# fix all colors in events that have a different event color # fix all colors in events that have a different event color
if colors != None: colorizeEvents(events, colors)
colorizeGoogleEvents(events, colors)
# if not events: # if not events:
# print('No upcoming events found.') # print('No upcoming events found.')

View File

@ -1,68 +0,0 @@
from server import db
from database.models import Calendar as dbCalendar
from backend import Event as bEvent
from ics import Calendar as iCalendar
import requests
def icalToCalendarDb(url, name, user):
try:
c = iCalendar(requests.get(url).text)
except:
return False
c = dbCalendar(calendar_id = url,
calendar_type = 'ical',
name = name,
toggle = "False",
color = "#000000")
db.session.add(c)
user.calendars.append(c)
db.session.commit()
def fetchCalendarEvents(calendars, startDate, endDate):
all_events = []
for calendar in calendars:
if calendar.toggle == "True" and calendar.calendar_type == "ical":
ical = iCalendar(requests.get(calendar.calendar_id).text)
for event in ical.events:
event = fitEventToCalendarTimezone(event, ical)
name = event.name
start = event.begin.format()
end = event.end.format()
newEvent = bEvent(name, start, end)
if eventWithinStartEnd(startDate, endDate, event):
if not eventAllDay(event):
print(start, flush=True)
all_events.append(newEvent)
return all_events
def fitEventToCalendarTimezone(event, calendar):
event.begin = event.begin.to(next(iter(calendar._timezones)))
event.end = event.end.to(next(iter(calendar._timezones)))
return event
# converts everything to epoch seconds and utc
# and then checks if at either event start or event end
# is is within startDate and endDate
def eventWithinStartEnd(startDate, endDate, event):
if((startDate.timestamp() <= event.begin.timestamp and
event.begin.timestamp <= endDate.timestamp()) or
startDate.timestamp() <= event.end.timestamp and
event.end.timestamp <= endDate.timestamp()):
return True
return False
def eventAllDay(event):
beginDay = event.begin.replace(hour=0, minute=0, second=0)
endDay = event.end.replace(hour=0, minute=0, second=0)
delta = endDay - beginDay
if delta.days >= 2:
return True
return False