Compare commits
No commits in common. "master" and "dev" have entirely different histories.
24
__init__.py
24
__init__.py
@ -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.')
|
||||||
|
|
||||||
|
@ -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
|
|
Loading…
Reference in New Issue
Block a user