use db for calendar change checking
This commit is contained in:
@@ -4,6 +4,7 @@ import uuid
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import dateparser
|
import dateparser
|
||||||
|
import hashlib
|
||||||
import datetime
|
import datetime
|
||||||
import math
|
import math
|
||||||
import pushover
|
import pushover
|
||||||
@@ -241,14 +242,8 @@ class Informer(object):
|
|||||||
cal = icx.get_named_calendar(cname)
|
cal = icx.get_named_calendar(cname)
|
||||||
if not cal:
|
if not cal:
|
||||||
cal = icx.create_calendar(cname)
|
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:
|
for entry in calentries:
|
||||||
self.logger.debug(entry)
|
self.logger.debug(entry)
|
||||||
uid = "infomentor_{}".format(entry["id"])
|
uid = "infomentor_{}".format(entry["id"])
|
||||||
@@ -267,13 +262,30 @@ class Informer(object):
|
|||||||
event.add("dtend", dateparser.parse(entry["end"]).date())
|
event.add("dtend", dateparser.parse(entry["end"]).date())
|
||||||
|
|
||||||
calend.add_component(event)
|
calend.add_component(event)
|
||||||
new_cal_entry = calend.to_ical().decode("utf-8").replace("\r", "")
|
new_cal_entry = calend.to_ical().replace(b"\r", b"")
|
||||||
if uid in known_entries:
|
new_cal_hash = hashlib.sha1(new_cal_entry).hexdigest()
|
||||||
if known_entries[uid].data == new_cal_entry:
|
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))
|
self.logger.info("no change for calendar entry {}".format(uid))
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
self.logger.info("update for calendar entry {}".format(uid))
|
self.logger.info("update calendar entry {}".format(uid))
|
||||||
self.logger.debug(calend.to_ical())
|
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())
|
cal.add_event(calend.to_ical())
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ class User(ModelBase):
|
|||||||
wantstatus = Column(Boolean)
|
wantstatus = Column(Boolean)
|
||||||
homeworks = relationship("Homework", back_populates="user")
|
homeworks = relationship("Homework", back_populates="user")
|
||||||
news = relationship("News",back_populates="user")
|
news = relationship("News",back_populates="user")
|
||||||
|
calendarentries = relationship("CalendarEntry", back_populates="user", uselist=True)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self._setup_cipher()
|
self._setup_cipher()
|
||||||
@@ -119,6 +120,22 @@ class News(ModelBase):
|
|||||||
return "<News(id='%d', title='%s')>" % (
|
return "<News(id='%d', title='%s')>" % (
|
||||||
self.id, self.title)
|
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):
|
class Homework(ModelBase):
|
||||||
'''A homework entry'''
|
'''A homework entry'''
|
||||||
__tablename__ = 'homework'
|
__tablename__ = 'homework'
|
||||||
|
|||||||
Reference in New Issue
Block a user