Compare commits
	
		
			2 Commits
		
	
	
		
			dev
			...
			056779f7d2
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 056779f7d2 | |||
| fec09edb88 | 
							
								
								
									
										26
									
								
								__init__.py
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								__init__.py
									
									
									
									
									
								
							@@ -16,8 +16,9 @@ API_SERVICE_NAME = 'calendar'
 | 
				
			|||||||
API_VERSION = 'v3'
 | 
					API_VERSION = 'v3'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Calendar:
 | 
					class Calendar:
 | 
				
			||||||
    def __init__(self, name, calendarId, toggle='False', color="#000000"):
 | 
					    def __init__(self, name, calendarId, calType, 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
 | 
				
			||||||
@@ -80,7 +81,8 @@ def updateCalendars(user, calendars, colors):
 | 
				
			|||||||
    for calendar in calendars:
 | 
					    for calendar in calendars:
 | 
				
			||||||
        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)
 | 
				
			||||||
@@ -96,8 +98,9 @@ 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, toggle, color))
 | 
					        pyCalendars.append(Calendar(name, calendarId, calType, toggle, color))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return pyCalendars
 | 
					    return pyCalendars
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -110,6 +113,7 @@ 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:
 | 
				
			||||||
@@ -119,6 +123,7 @@ 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:
 | 
				
			||||||
@@ -127,8 +132,10 @@ def toNaturalColor(colormap, orgColor):
 | 
				
			|||||||
    print(f"failed with {orgColor}")
 | 
					    print(f"failed with {orgColor}")
 | 
				
			||||||
    return orgColor
 | 
					    return orgColor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# use the event color id to convert it to a hex color
 | 
					# uses the event color id to convert it to a hex color
 | 
				
			||||||
def colorizeEvents(events, colors):
 | 
					# does this for every event in events
 | 
				
			||||||
 | 
					# 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)
 | 
				
			||||||
@@ -138,10 +145,12 @@ def colorizeEvents(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']     
 | 
				
			||||||
@@ -181,17 +190,18 @@ 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).isoformat() 
 | 
					    today = now.replace(hour=0, minute=0, second = 0) 
 | 
				
			||||||
    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().isoformat()
 | 
					    twodaysfromnow = twodaysfromnow.replace(hour=23, minute=59, second=59).astimezone()
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    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
 | 
				
			||||||
    colorizeEvents(events, colors)
 | 
					    if colors != None:
 | 
				
			||||||
 | 
					        colorizeGoogleEvents(events, colors)
 | 
				
			||||||
    # if not events:
 | 
					    # if not events:
 | 
				
			||||||
    #    print('No upcoming events found.')
 | 
					    #    print('No upcoming events found.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										63
									
								
								icalHandler.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								icalHandler.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
				
			|||||||
 | 
					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:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                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):
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                        all_events.append(newEvent) 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return all_events
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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
 | 
				
			||||||
		Reference in New Issue
	
	Block a user