day events can now stretch over multi. days, collisions for appointments at same time handled better
This commit is contained in:
parent
f56dde48f9
commit
dfe340c3a1
1 changed files with 59 additions and 50 deletions
|
@ -2,8 +2,9 @@ from datetime import datetime, date, time, timezone, timedelta
|
||||||
from PIL import Image,ImageDraw,ImageFont
|
from PIL import Image,ImageDraw,ImageFont
|
||||||
import pickle as p
|
import pickle as p
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
import requests
|
import requests
|
||||||
import sys
|
import sys, os
|
||||||
sys.path.insert(0, './caldav')
|
sys.path.insert(0, './caldav')
|
||||||
import caldav
|
import caldav
|
||||||
from caldav.lib.error import AuthorizationError
|
from caldav.lib.error import AuthorizationError
|
||||||
|
@ -16,7 +17,10 @@ selected_cals = []
|
||||||
language="EN"
|
language="EN"
|
||||||
weekday_l_key = "FULL"
|
weekday_l_key = "FULL"
|
||||||
draw_date = False
|
draw_date = False
|
||||||
|
has_color = False
|
||||||
#open config file, load configs
|
#open config file, load configs
|
||||||
|
|
||||||
|
if (os.path.isfile("./config")):
|
||||||
configfile = open("./config", "r")
|
configfile = open("./config", "r")
|
||||||
conf = configfile.readlines()
|
conf = configfile.readlines()
|
||||||
print(conf)
|
print(conf)
|
||||||
|
@ -42,6 +46,9 @@ for l in conf:
|
||||||
k = l[10:]
|
k = l[10:]
|
||||||
trueish = ["true","TRUE","1","True","T"]
|
trueish = ["true","TRUE","1","True","T"]
|
||||||
draw_date = (k in trueish)
|
draw_date = (k in trueish)
|
||||||
|
elif(l.startswith("colormode")):
|
||||||
|
if l[10:] == "2color":
|
||||||
|
has_color = True
|
||||||
|
|
||||||
#print(selected_cals)
|
#print(selected_cals)
|
||||||
#look if server and user are set
|
#look if server and user are set
|
||||||
|
@ -111,7 +118,8 @@ if(server_reached and client_established):
|
||||||
if(event_start_str.startswith("VALUE")):
|
if(event_start_str.startswith("VALUE")):
|
||||||
#if it is an event over a whole day, sort it into the day events
|
#if it is an event over a whole day, sort it into the day events
|
||||||
day_events.append({
|
day_events.append({
|
||||||
"DATE":date(int(event_start_str.split("}")[1].split("-")[0]),int(event_start_str.split("}")[1].split("-")[1]),int(event_start_str.split("}")[1].split("-")[2])),
|
"START":date(int(event_start_str.split("}")[1].split("-")[0]),int(event_start_str.split("}")[1].split("-")[1]),int(event_start_str.split("}")[1].split("-")[2])),
|
||||||
|
"END":date(int(event_end_str.split("}")[1].split("-")[0]),int(event_end_str.split("}")[1].split("-")[1]),int(event_end_str.split("}")[1].split("-")[2])),
|
||||||
"SUMMARY":str(event.vobject_instance.vevent.summary.value),
|
"SUMMARY":str(event.vobject_instance.vevent.summary.value),
|
||||||
"CALENDAR":c.name
|
"CALENDAR":c.name
|
||||||
})
|
})
|
||||||
|
@ -260,29 +268,30 @@ for y in range(upper_border_grid+weekday_height+4,lower_border_grid,two_hour_spa
|
||||||
draw.text((left_border_grid-timefont.getsize(str(i*2+first_hour))[0], y), str(i*2+first_hour), font = timefont, fill = 0)
|
draw.text((left_border_grid-timefont.getsize(str(i*2+first_hour))[0], y), str(i*2+first_hour), font = timefont, fill = 0)
|
||||||
i +=1
|
i +=1
|
||||||
|
|
||||||
events_on_weekday = [0,0,0,0,0,0,0]
|
already_an_event = np.zeros((7,lower_border_grid - upper_border_grid))
|
||||||
|
|
||||||
known_calendars = {"DLRG Kalendar" : "DLRG", "Uni Kalendar" : "UNI", "Persönlich" : "PER"}
|
known_calendars = {"DLRG Kalendar" : "DLRG", "Uni Kalendar" : "UNI", "Persönlich" : "PER"}
|
||||||
|
|
||||||
for event in day_events:
|
for event in day_events:
|
||||||
row = width_day*event["DATE"].weekday()+left_border_grid+4
|
for d in range(event["START"].weekday(),event["END"].weekday()):
|
||||||
|
row = width_day*d+left_border_grid+4
|
||||||
if event["CALENDAR"] in known_calendars:
|
if event["CALENDAR"] in known_calendars:
|
||||||
cal = known_calendars[event["CALENDAR"]]
|
cal = known_calendars[event["CALENDAR"]]
|
||||||
else:
|
else:
|
||||||
cal = event["CALENDAR"]
|
cal = event["CALENDAR"]
|
||||||
if(events_on_weekday[event["DATE"].weekday()]== 0):
|
if(np.amax(already_an_event[d,:])== 0):
|
||||||
draw.rectangle((row,upper_border_grid+weekday_height+5,row+width_day-6,lower_border_grid-1),fill = 255)
|
draw.rectangle((row,upper_border_grid+weekday_height+5,row+width_day-6,lower_border_grid-1),fill = 255)
|
||||||
draw.line([(row,upper_border_grid+weekday_height+5),(row,lower_border_grid-1)], width = 4, fill = 0)
|
draw.line([(row,upper_border_grid+weekday_height+5),(row,lower_border_grid-1)], width = 4, fill = 0)
|
||||||
draw.line([(row,lower_border_grid-2),(row+width_day-6,lower_border_grid-2)], width = 2, fill = 0)
|
draw.line([(row,lower_border_grid-2),(row+width_day-6,lower_border_grid-2)], width = 2, fill = 0)
|
||||||
draw.line([(row,upper_border_grid+weekday_height+5),(row+width_day-6,upper_border_grid+weekday_height+5)], width = 2, fill = 0)
|
draw.line([(row,upper_border_grid+weekday_height+5),(row+width_day-6,upper_border_grid+weekday_height+5)], width = 2, fill = 0)
|
||||||
draw.line([(row+width_day-7,upper_border_grid+weekday_height+5),(row+width_day-7,lower_border_grid-1)], width = 2, fill = 0)
|
draw.line([(row+width_day-7,upper_border_grid+weekday_height+5),(row+width_day-7,lower_border_grid-1)], width = 2, fill = 0)
|
||||||
wi, hi = eventfont.getsize (event["SUMMARY"])
|
wi, hi = eventfont.getsize (event["SUMMARY"])
|
||||||
draw_text_90_into("["+cal+"] "+event["SUMMARY"], Himage, (row+4,height_grid-(weekday_height+5)-round(wi/2)))
|
draw_text_90_into("["+cal+"] "+event["SUMMARY"], Himage, (row+4,round(height_grid/2-(weekday_height+5)-wi/2)))
|
||||||
else:
|
else:
|
||||||
wi, hi = eventfont.getsize(event["SUMMARY"])
|
wi, hi = eventfont.getsize(event["SUMMARY"])
|
||||||
draw.line([(row+6+hi,upper_border_grid+weekday_height+9),(row+6+hi,lower_border_grid-4)], width = 2, fill = 0)
|
draw.line([(row+6+hi,upper_border_grid+weekday_height+9),(row+6+hi,lower_border_grid-4)], width = 2, fill = 0)
|
||||||
draw_text_90_into("["+cal+"] "+event["SUMMARY"], Himage, (row+10+hi,-round(wi/2)))
|
draw_text_90_into("["+cal+"] "+event["SUMMARY"], Himage, (row+10+hi,round(height_grid/2-(weekday_height+5)-wi/2)))
|
||||||
events_on_weekday[event["DATE"].weekday()] += 1
|
already_an_event[d,:] += 1
|
||||||
|
|
||||||
for event in time_events:
|
for event in time_events:
|
||||||
#draw rectangle
|
#draw rectangle
|
||||||
|
@ -290,11 +299,11 @@ for event in time_events:
|
||||||
|
|
||||||
row_start = width_day*event["START"].weekday()+left_border_grid+4
|
row_start = width_day*event["START"].weekday()+left_border_grid+4
|
||||||
row_end = width_day*event["END"].weekday()+left_border_grid+4
|
row_end = width_day*event["END"].weekday()+left_border_grid+4
|
||||||
left_border_event = row_start+(events_on_weekday[event["START"].weekday()]*(6+(eventfont.getsize(event["SUMMARY"])[1])))
|
right_border_event = row_start+width_day-6
|
||||||
right_border_event = row_start+width_day-6-((events_on_weekday[event["START"].weekday()])>0)*3
|
|
||||||
upper_border_event = round(upper_border_grid+weekday_height+5+((lower_border_grid-(upper_border_grid+weekday_height+5))/hours_in_day)*(event["START"].hour-first_hour+(event["START"].minute/60)))
|
upper_border_event = round(upper_border_grid+weekday_height+5+((lower_border_grid-(upper_border_grid+weekday_height+5))/hours_in_day)*(event["START"].hour-first_hour+(event["START"].minute/60)))
|
||||||
lower_border_event = round(upper_border_grid+weekday_height+5+((lower_border_grid-(upper_border_grid+weekday_height+5))/hours_in_day)*(event["END"].hour-first_hour+(event["END"].minute/60)))
|
lower_border_event = round(upper_border_grid+weekday_height+5+((lower_border_grid-(upper_border_grid+weekday_height+5))/hours_in_day)*(event["END"].hour-first_hour+(event["END"].minute/60)))
|
||||||
|
left_border_event = row_start+((np.amax(already_an_event[event["START"].weekday(),upper_border_event:lower_border_event]))*6)
|
||||||
|
already_an_event[event["START"].weekday(),upper_border_event:lower_border_event] +=1
|
||||||
if (row_start == row_end):
|
if (row_start == row_end):
|
||||||
draw.rectangle((left_border_event,upper_border_event,right_border_event,lower_border_event),fill = 255)
|
draw.rectangle((left_border_event,upper_border_event,right_border_event,lower_border_event),fill = 255)
|
||||||
if(lower_border_event<lower_border_grid):
|
if(lower_border_event<lower_border_grid):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue