use db for calendar change checking

This commit is contained in:
2019-05-05 18:16:37 +02:00
parent 56d6bca8b6
commit ad9eb25df0
2 changed files with 41 additions and 12 deletions

View File

@@ -4,6 +4,7 @@ import uuid
import os
import re
import dateparser
import hashlib
import datetime
import math
import pushover
@@ -241,14 +242,8 @@ class Informer(object):
cal = icx.get_named_calendar(cname)
if not cal:
cal = icx.create_calendar(cname)
calentries = self.im.get_calendar()
known_entries = {}
for calevent in cal.events():
if calevent.data is None:
continue
uid = re.findall("UID:(.*)", calevent.data)[0]
known_entries[uid] = calevent
calentries = self.im.get_calendar()
for entry in calentries:
self.logger.debug(entry)
uid = "infomentor_{}".format(entry["id"])
@@ -267,13 +262,30 @@ class Informer(object):
event.add("dtend", dateparser.parse(entry["end"]).date())
calend.add_component(event)
new_cal_entry = calend.to_ical().decode("utf-8").replace("\r", "")
if uid in known_entries:
if known_entries[uid].data == new_cal_entry:
new_cal_entry = calend.to_ical().replace(b"\r", b"")
new_cal_hash = hashlib.sha1(new_cal_entry).hexdigest()
session = db.get_db()
storedata = {
'calendar_id': uid,
'ical': new_cal_entry,
'hash': new_cal_hash
}
calendarentry = session.query(model.CalendarEntry).filter(model.CalendarEntry.calendar_id == uid) .with_parent(self.user, "calendarentries").one_or_none()
if calendarentry is not None :
if calendarentry.hash == new_cal_hash:
self.logger.info("no change for calendar entry {}".format(uid))
continue
else:
self.logger.info("update for calendar entry {}".format(uid))
self.logger.debug(calend.to_ical())
self.logger.info("update calendar entry {}".format(uid))
for key, value in storedata.items():
setattr(calendarentry, key, value)
else:
self.logger.info("new calendar entry {}".format(uid))
calendarentry = model.CalendarEntry(**storedata)
self.user.calendarentries.append(calendarentry)
session.commit()
self.logger.debug(new_cal_entry.decode('utf-8'))
cal.add_event(calend.to_ical())

View File

@@ -32,6 +32,7 @@ class User(ModelBase):
wantstatus = Column(Boolean)
homeworks = relationship("Homework", back_populates="user")
news = relationship("News",back_populates="user")
calendarentries = relationship("CalendarEntry", back_populates="user", uselist=True)
def __init__(self, *args, **kwargs):
self._setup_cipher()
@@ -119,6 +120,22 @@ class News(ModelBase):
return "<News(id='%d', title='%s')>" % (
self.id, self.title)
class CalendarEntry(ModelBase):
'''A News entry'''
__tablename__ = 'calendarentries'
id = Column(Integer, primary_key=True)
calendar_id = Column(Integer)
title = Column(String)
user_id = Column(Integer, ForeignKey('users.id'))
ical = Column(String)
hash = Column(String)
user = relationship("User", back_populates="calendarentries")
def __repr__(self):
return "<CalendarEntry(id='%d', title='%s', hash='%s')>" % (
self.id, self.title, hash)
class Homework(ModelBase):
'''A homework entry'''
__tablename__ = 'homework'