Start Rust rewrite
* Implement downloading and caching * Write some tests
This commit is contained in:
parent
317f32565b
commit
1647ddef77
11 changed files with 2815 additions and 1 deletions
17
.idea/dataSources.xml
generated
Normal file
17
.idea/dataSources.xml
generated
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||
<data-source source="LOCAL" name="test" uuid="2de274d0-0fd4-4132-93aa-2af5c71e03cf">
|
||||
<driver-ref>sqlite.xerial</driver-ref>
|
||||
<synchronize>true</synchronize>
|
||||
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
|
||||
<jdbc-url>jdbc:sqlite:C:\Users\Jules\GitHub\ics-fusion\test.db</jdbc-url>
|
||||
<working-dir>$ProjectFileDir$</working-dir>
|
||||
<libraries>
|
||||
<library>
|
||||
<url>file://$APPLICATION_CONFIG_DIR$/jdbc-drivers/Xerial SQLiteJDBC/3.39.2/sqlite-jdbc-3.39.2.jar</url>
|
||||
</library>
|
||||
</libraries>
|
||||
</data-source>
|
||||
</component>
|
||||
</project>
|
6
.idea/ics-fusion.iml
generated
6
.idea/ics-fusion.iml
generated
|
@ -2,7 +2,11 @@
|
|||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/resources/test" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
|
|
9
.idea/misc.xml
generated
Normal file
9
.idea/misc.xml
generated
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="PWA">
|
||||
<option name="wasEnabledAtLeastOnce" value="true" />
|
||||
</component>
|
||||
<component name="ProjectRootManager">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
1444
Cargo.lock
generated
Normal file
1444
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
17
Cargo.toml
Normal file
17
Cargo.toml
Normal file
|
@ -0,0 +1,17 @@
|
|||
[package]
|
||||
name = "ics-fusion"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
serde_json = "1.0.91"
|
||||
url = "2.3.1"
|
||||
reqwest = { version = "0.11.13", features = ["blocking"] }
|
||||
icalendar = "0.15.1"
|
||||
sha2 = "0.10.6"
|
||||
chrono = "0.4.23"
|
||||
rusqlite = { version = "0.28.0", features = ["bundled"] }
|
||||
env_logger = "0.10.0"
|
||||
log = "0.4.17"
|
971
resources/test/belgium.ics
Normal file
971
resources/test/belgium.ics
Normal file
|
@ -0,0 +1,971 @@
|
|||
BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
PRODID:-//Office Holidays Ltd.//EN
|
||||
X-WR-CALNAME:Belgium Holidays
|
||||
X-WR-CALDESC:Public Holidays in Belgium. Provided by http://www.officeholidays.com
|
||||
REFRESH-INTERVAL;VALUE=DURATION:PT48H
|
||||
X-PUBLISHED-TTL:PT48H
|
||||
CALSCALE:GREGORIAN
|
||||
METHOD:PUBLISH
|
||||
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-01-01BE415regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: New Year's Day is a public holiday in all countries that observe the Gregorian calendar, with the exception of Israel\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/international-new-years-day
|
||||
DTSTART;VALUE=DATE:20230101
|
||||
DTEND;VALUE=DATE:20230102
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:New Year's Day
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-01-06BE278regnap@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: A major Christian celebration, Epiphany is celebrated on January 6th and commemorates the presentation of the infant Jesus to the Magi, or three wise men. In some countries, it may be known as Three Kings Day.\n\nNot a public holiday\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/epiphany
|
||||
DTSTART;VALUE=DATE:20230106
|
||||
DTEND;VALUE=DATE:20230107
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Three Kings' Day (Not a Public Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-04-09BE265regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Easter Sunday is the most important date in the Christian church. In the bible, it is the day when Mary Magdalene found that an empty tomb in the cave in which Jesus had been placed.\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/easter-sunday
|
||||
DTSTART;VALUE=DATE:20230409
|
||||
DTEND;VALUE=DATE:20230410
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Easter Sunday
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-04-10BE263regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Easter is probably the most important holiday of the Christian year, celebrating the Resurrection of Jesus\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/easter-monday
|
||||
DTSTART;VALUE=DATE:20230410
|
||||
DTEND;VALUE=DATE:20230411
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Easter Monday
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-05-01BE475regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: This holiday is most commonly associated as a commemoration of the achievements of the labour movement\n\nInternational Workers' Day\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/labour-day
|
||||
DTSTART;VALUE=DATE:20230501
|
||||
DTEND;VALUE=DATE:20230502
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Labour Day
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-05-14BE563regnap@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Mother's Day is celebrated across the world, in more than 50 countries, though not all countries celebrate it on the same day\n\n2nd Sunday in May\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/mothers-day
|
||||
DTSTART;VALUE=DATE:20230514
|
||||
DTEND;VALUE=DATE:20230515
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Mother's Day (Not a Public Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-05-18BE37regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: This day observes the departure of Jesus from earth after his resurrection. It is perhaps the earliest observed celebration in Christianity.\n\n39 days after Easter Sunday\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/ascension-day
|
||||
DTSTART;VALUE=DATE:20230518
|
||||
DTEND;VALUE=DATE:20230519
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20220504T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Ascension Day
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-05-19BE2854regnap@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Banks are closed on the Friday after Ascension Day in Belgium\n\nBanks are closed\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/ascension-friday
|
||||
DTSTART;VALUE=DATE:20230519
|
||||
DTEND;VALUE=DATE:20230520
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Bank Holiday (Not a Public Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-05-28BE1012regnap@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Celebrates the gift of the Holy Spirit. It is celebrated on the seventh Sunday after Easter\n\n50 Days after Easter\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/pentecost-sunday
|
||||
DTSTART;VALUE=DATE:20230528
|
||||
DTEND;VALUE=DATE:20230529
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20221129T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Pentecost Sunday (Not a Public Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-05-29BE927regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Commemorates the coming of the Holy Spirit in the form of flames to the Apostles.\n\n7th Monday after Easter\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/whit-monday
|
||||
DTSTART;VALUE=DATE:20230529
|
||||
DTEND;VALUE=DATE:20230530
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20220620T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Pentecost Monday
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-06-10BE290regnap@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Not a public holiday. Father's Day is a celebration that honours the role of fathers\n\n2nd Sunday in June. Not a public holiday\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/fathers-day
|
||||
DTSTART;VALUE=DATE:20230610
|
||||
DTEND;VALUE=DATE:20230611
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Father's Day (Not a Public Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-07-21BE82regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Independence Day celebrates the separation of Belgium from the Netherlands in 1831\n\nNational Day\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/belgium-independence-day
|
||||
DTSTART;VALUE=DATE:20230721
|
||||
DTEND;VALUE=DATE:20230722
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Independence Day
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-08-15BE42regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: The Feast of the Assumption is the principal feast of the Blessed Virgin, the mother of Jesus Christ\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/assumption-day
|
||||
DTSTART;VALUE=DATE:20230815
|
||||
DTEND;VALUE=DATE:20230816
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Assumption Day
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-09-27BE325regregion@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: On 24 June 1975, the date of 27 September was selected by the French Community as French Community Day. It was first celebrated later that same year\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/french-community-holiday
|
||||
DTSTART;VALUE=DATE:20230927
|
||||
DTEND;VALUE=DATE:20230928
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Brabant wallon, Hainaut, Liège, Luxemburg, Namur
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20191229T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:French Community Holiday (Regional Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-11-01BE9regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Pope Boniface IV dedicated the day as a holiday to honour the Blessed Virgin Mary and all martyrs\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/all-saints-day
|
||||
DTSTART;VALUE=DATE:20231101
|
||||
DTEND;VALUE=DATE:20231102
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:All Saints' Day
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-11-02BE10regnap@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Dedicated to the remembrance of the departed. All Souls' Day follows All Saints' Day.\n\nNot a public holiday\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/all-souls-day
|
||||
DTSTART;VALUE=DATE:20231102
|
||||
DTEND;VALUE=DATE:20231103
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:All Souls' Day (Not a Public Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-11-11BE705regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Observed on 11th November to recall the end of World War I on that date in 1918 and honor the veterans of both World Wars.\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/remembrance-day
|
||||
DTSTART;VALUE=DATE:20231111
|
||||
DTEND;VALUE=DATE:20231112
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20211022T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Armistice Day
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-11-15BE-WLG337regregion@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Day of the German-speaking Community of Belgium\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/liege/german-community-day
|
||||
DTSTART;VALUE=DATE:20231115
|
||||
DTEND;VALUE=DATE:20231116
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Liège
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20191229T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:German Community Day (Regional Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-12-06BE298regnap@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: A day when many children across Europe receive gifts in honour of Saint Nicholas\n\nNot a public holiday\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/feast-of-st-nicholas
|
||||
DTSTART;VALUE=DATE:20231206
|
||||
DTEND;VALUE=DATE:20231207
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Feast of St. Nicholas (Not a Public Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2023-12-25BE181regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Christmas celebrates the Nativity of Jesus which according to tradition took place on December 25th 1 BC\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/christmas-day
|
||||
DTSTART;VALUE=DATE:20231225
|
||||
DTEND;VALUE=DATE:20231226
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Christmas Day
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-01-01BE415regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: New Year's Day is a public holiday in all countries that observe the Gregorian calendar, with the exception of Israel\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/international-new-years-day
|
||||
DTSTART;VALUE=DATE:20240101
|
||||
DTEND;VALUE=DATE:20240102
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:New Year's Day
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-01-06BE278regnap@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: A major Christian celebration, Epiphany is celebrated on January 6th and commemorates the presentation of the infant Jesus to the Magi, or three wise men. In some countries, it may be known as Three Kings Day.\n\nNot a public holiday\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/epiphany
|
||||
DTSTART;VALUE=DATE:20240106
|
||||
DTEND;VALUE=DATE:20240107
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Three Kings' Day (Not a Public Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-03-31BE265regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Easter Sunday is the most important date in the Christian church. In the bible, it is the day when Mary Magdalene found that an empty tomb in the cave in which Jesus had been placed.\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/easter-sunday
|
||||
DTSTART;VALUE=DATE:20240331
|
||||
DTEND;VALUE=DATE:20240401
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Easter Sunday
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-04-01BE263regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Easter is probably the most important holiday of the Christian year, celebrating the Resurrection of Jesus\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/easter-monday
|
||||
DTSTART;VALUE=DATE:20240401
|
||||
DTEND;VALUE=DATE:20240402
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Easter Monday
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-05-01BE475regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: This holiday is most commonly associated as a commemoration of the achievements of the labour movement\n\nInternational Workers' Day\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/labour-day
|
||||
DTSTART;VALUE=DATE:20240501
|
||||
DTEND;VALUE=DATE:20240502
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Labour Day
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-05-09BE37regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: This day observes the departure of Jesus from earth after his resurrection. It is perhaps the earliest observed celebration in Christianity.\n\n39 days after Easter Sunday\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/ascension-day
|
||||
DTSTART;VALUE=DATE:20240509
|
||||
DTEND;VALUE=DATE:20240510
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20220504T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Ascension Day
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-05-10BE2854regnap@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Banks are closed on the Friday after Ascension Day in Belgium\n\nBanks are closed\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/ascension-friday
|
||||
DTSTART;VALUE=DATE:20240510
|
||||
DTEND;VALUE=DATE:20240511
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Bank Holiday (Not a Public Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-05-12BE563regnap@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Mother's Day is celebrated across the world, in more than 50 countries, though not all countries celebrate it on the same day\n\n2nd Sunday in May\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/mothers-day
|
||||
DTSTART;VALUE=DATE:20240512
|
||||
DTEND;VALUE=DATE:20240513
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Mother's Day (Not a Public Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-05-19BE1012regnap@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Celebrates the gift of the Holy Spirit. It is celebrated on the seventh Sunday after Easter\n\n50 Days after Easter\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/pentecost-sunday
|
||||
DTSTART;VALUE=DATE:20240519
|
||||
DTEND;VALUE=DATE:20240520
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20221129T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Pentecost Sunday (Not a Public Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-05-20BE927regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Commemorates the coming of the Holy Spirit in the form of flames to the Apostles.\n\n7th Monday after Easter\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/whit-monday
|
||||
DTSTART;VALUE=DATE:20240520
|
||||
DTEND;VALUE=DATE:20240521
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20220620T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Pentecost Monday
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-06-09BE290regnap@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Not a public holiday. Father's Day is a celebration that honours the role of fathers\n\n2nd Sunday in June. Not a public holiday\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/fathers-day
|
||||
DTSTART;VALUE=DATE:20240609
|
||||
DTEND;VALUE=DATE:20240610
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Father's Day (Not a Public Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-07-21BE82regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Independence Day celebrates the separation of Belgium from the Netherlands in 1831\n\nNational Day\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/belgium-independence-day
|
||||
DTSTART;VALUE=DATE:20240721
|
||||
DTEND;VALUE=DATE:20240722
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Independence Day
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-08-15BE42regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: The Feast of the Assumption is the principal feast of the Blessed Virgin, the mother of Jesus Christ\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/assumption-day
|
||||
DTSTART;VALUE=DATE:20240815
|
||||
DTEND;VALUE=DATE:20240816
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Assumption Day
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-09-27BE325regregion@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: On 24 June 1975, the date of 27 September was selected by the French Community as French Community Day. It was first celebrated later that same year\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/french-community-holiday
|
||||
DTSTART;VALUE=DATE:20240927
|
||||
DTEND;VALUE=DATE:20240928
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Brabant wallon, Hainaut, Liège, Luxemburg, Namur
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20191229T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:French Community Holiday (Regional Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-11-01BE9regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Pope Boniface IV dedicated the day as a holiday to honour the Blessed Virgin Mary and all martyrs\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/all-saints-day
|
||||
DTSTART;VALUE=DATE:20241101
|
||||
DTEND;VALUE=DATE:20241102
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:All Saints' Day
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-11-02BE10regnap@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Dedicated to the remembrance of the departed. All Souls' Day follows All Saints' Day.\n\nNot a public holiday\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/all-souls-day
|
||||
DTSTART;VALUE=DATE:20241102
|
||||
DTEND;VALUE=DATE:20241103
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:All Souls' Day (Not a Public Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-11-11BE705regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Observed on 11th November to recall the end of World War I on that date in 1918 and honor the veterans of both World Wars.\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/remembrance-day
|
||||
DTSTART;VALUE=DATE:20241111
|
||||
DTEND;VALUE=DATE:20241112
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20211022T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Armistice Day
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-11-15BE-WLG337regregion@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Day of the German-speaking Community of Belgium\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/liege/german-community-day
|
||||
DTSTART;VALUE=DATE:20241115
|
||||
DTEND;VALUE=DATE:20241116
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Liège
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20191229T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:German Community Day (Regional Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-12-06BE298regnap@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: A day when many children across Europe receive gifts in honour of Saint Nicholas\n\nNot a public holiday\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/feast-of-st-nicholas
|
||||
DTSTART;VALUE=DATE:20241206
|
||||
DTEND;VALUE=DATE:20241207
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Feast of St. Nicholas (Not a Public Holiday)
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
CLASS:PUBLIC
|
||||
UID:2024-12-25BE181regcountry@www.officeholidays.com
|
||||
CREATED:20230114T111157Z
|
||||
DESCRIPTION: Christmas celebrates the Nativity of Jesus which according to tradition took place on December 25th 1 BC\n\n\n\nInformation provided by www.officeholidays.com
|
||||
URL:https://www.officeholidays.com/holidays/belgium/christmas-day
|
||||
DTSTART;VALUE=DATE:20241225
|
||||
DTEND;VALUE=DATE:20241226
|
||||
DTSTAMP:20080101T000000Z
|
||||
LOCATION:Belgium
|
||||
PRIORITY:5
|
||||
LAST-MODIFIED:20210707T000000Z
|
||||
SEQUENCE:1
|
||||
SUMMARY;LANGUAGE=en-us:Christmas Day
|
||||
TRANSP:OPAQUE
|
||||
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
|
||||
X-MICROSOFT-CDO-IMPORTANCE:1
|
||||
X-MICROSOFT-DISALLOW-COUNTER:FALSE
|
||||
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
|
||||
X-MS-OLK-AUTOFILLLOCATION:FALSE
|
||||
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
|
||||
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
|
||||
X-MS-OLK-CONFTYPE:0
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
148
src/caching.rs
Normal file
148
src/caching.rs
Normal file
|
@ -0,0 +1,148 @@
|
|||
use chrono::{DateTime, Utc};
|
||||
use icalendar::{Calendar, parser};
|
||||
use rusqlite::{Connection, Error, params, Rows, Statement};
|
||||
#[cfg(not(test))]
|
||||
use log::{debug, info, warn};
|
||||
#[cfg(test)]
|
||||
use std::{println as debug, println as warn, println as info};
|
||||
|
||||
|
||||
use crate::fetcher::{Remote};
|
||||
|
||||
struct CacheEntry {
|
||||
hash: String,
|
||||
update_time: Option<String>,
|
||||
calendar: Option<String>,
|
||||
}
|
||||
|
||||
pub struct CachedRemote {
|
||||
cache_delay: Option<u32>,
|
||||
remote: Remote,
|
||||
cache_db: Connection,
|
||||
}
|
||||
|
||||
impl CachedRemote {
|
||||
pub fn cache(&self) -> Result<(), Error> {
|
||||
debug!("Start caching of {:?}", self.remote);
|
||||
if self.cache_delay.is_none() || self.remote.is_local() {
|
||||
debug!("No need to cache {:?}", self.remote);
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
self.force_cache()
|
||||
}
|
||||
|
||||
pub fn force_cache(&self) -> Result<(), Error> {
|
||||
let entry = CacheEntry {
|
||||
hash: self.remote.hash(),
|
||||
update_time: Some(Utc::now().to_rfc3339()),
|
||||
calendar: match self.remote.get() {
|
||||
Some(cal) => Some(parser::unfold(&cal.to_string())),
|
||||
None => None,
|
||||
},
|
||||
};
|
||||
|
||||
self.cache_db.execute("REPLACE INTO cache (hash, update_time, calendar) values (?1, ?2, ?3);",
|
||||
params![&entry.hash, &entry.update_time, &entry.calendar])?;
|
||||
debug!("Cached {:?}", self.remote);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn get_from_cache(&self) -> Option<Calendar> {
|
||||
info!("Getting {:?} from cache", self.remote);
|
||||
let mut statement: Statement;
|
||||
|
||||
if let Ok(stmt) = self.cache_db.prepare("SELECT calendar FROM cache where hash = ?"){
|
||||
statement = stmt;
|
||||
} else {
|
||||
warn!("Could not prepare statement");
|
||||
return None;
|
||||
}
|
||||
|
||||
let mut rows: Rows;
|
||||
if let Ok(rows_ok) = statement.query([self.remote.hash()]) {
|
||||
rows = rows_ok;
|
||||
} else {
|
||||
warn!("Could not get a row from the query");
|
||||
return None;
|
||||
}
|
||||
|
||||
let cal_str: String;
|
||||
if let Ok(Some(r)) = rows.next(){
|
||||
if let Ok(s) = r.get(0) {
|
||||
cal_str = s;
|
||||
} else {
|
||||
return None
|
||||
}
|
||||
} else {
|
||||
warn!("No result from query");
|
||||
return None;
|
||||
}
|
||||
|
||||
if let Ok(cal) = parser::read_calendar(&cal_str) {
|
||||
debug!("Returned cached from {:?}", self.remote);
|
||||
debug!("{}", cal);
|
||||
return Some(Calendar::from(cal));
|
||||
}
|
||||
|
||||
warn!("Unable to parse calendar from cache");
|
||||
None
|
||||
}
|
||||
|
||||
pub fn get(&self) -> Option<Calendar> {
|
||||
if self.cache_delay.is_none() || self.remote.is_local() {
|
||||
return self.remote.get();
|
||||
}
|
||||
|
||||
if let Some(cal) = self.get_from_cache() {
|
||||
return Some(cal);
|
||||
}
|
||||
|
||||
self.remote.get()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
fn create_cache(path: Option<String>) -> Result<Connection, Error> {
|
||||
let conn = match path {
|
||||
Some(path) => Connection::open(path)?,
|
||||
None => Connection::open_in_memory()?,
|
||||
};
|
||||
|
||||
conn.execute(r#"
|
||||
CREATE TABLE IF NOT EXISTS cache (
|
||||
hash TEXT PRIMARY KEY,
|
||||
update_time TEXT,
|
||||
calendar BLOB
|
||||
);"#, ())?;
|
||||
|
||||
Ok(conn)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn cache_calendar() {
|
||||
env_logger::init();
|
||||
|
||||
let db = create_cache(Some(String::from("test.db"))).unwrap();
|
||||
|
||||
let cached_remote = CachedRemote {
|
||||
cache_delay: Some(10),
|
||||
remote: Remote::new("resources/test/belgium.ics"),
|
||||
cache_db: db,
|
||||
};
|
||||
|
||||
debug!("Test in progress");
|
||||
cached_remote.force_cache().unwrap();
|
||||
|
||||
let from_cache = cached_remote.get_from_cache().unwrap();
|
||||
let from_remote = cached_remote.remote.get().unwrap();
|
||||
|
||||
assert_eq!(from_remote, from_cache);
|
||||
|
||||
}
|
||||
}
|
41
src/config.rs
Normal file
41
src/config.rs
Normal file
|
@ -0,0 +1,41 @@
|
|||
use std::{fs, io};
|
||||
use std::path::{Path, PathBuf};
|
||||
use url::Url;
|
||||
|
||||
|
||||
|
||||
|
||||
struct Config {
|
||||
directory: Box<Path>,
|
||||
}
|
||||
|
||||
|
||||
fn list_files(directory: &Path) -> Result<Vec<PathBuf>, io::Error> {
|
||||
Ok(fs::read_dir(directory)?
|
||||
.into_iter()
|
||||
.filter(|r| r.is_ok()) // Get rid of Err variants for Result<DirEntry>
|
||||
.map(|r| r.unwrap().path()) // This is safe, since we only have the Ok variants
|
||||
.filter(|r| r.is_file()) // Filter to keep only files
|
||||
.collect())
|
||||
}
|
||||
|
||||
fn parse_config(directory: &str) -> Result<Config, String> {
|
||||
let files = list_files(Path::new(directory))
|
||||
.expect("unable to list files in the configuration directory");
|
||||
|
||||
for file in files {
|
||||
println!("{:?}", file.display());
|
||||
}
|
||||
|
||||
Ok(Config { directory: Box::from(Path::new("")) })
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn parsing_config() {
|
||||
parse_config("resources/test").unwrap();
|
||||
}
|
||||
}
|
144
src/fetcher.rs
Normal file
144
src/fetcher.rs
Normal file
|
@ -0,0 +1,144 @@
|
|||
use std::fs;
|
||||
use std::path::Path;
|
||||
use url::Url;
|
||||
use icalendar::{Calendar, parser};
|
||||
use sha2::{Sha256, Digest};
|
||||
use sha2::digest::FixedOutput;
|
||||
#[cfg(not(test))]
|
||||
use log::{debug, info, warn};
|
||||
#[cfg(test)]
|
||||
use std::{println as debug, println as warn, println as info};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Remote {
|
||||
location: Location,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum Location {
|
||||
Online(Url),
|
||||
Local(Box<Path>),
|
||||
}
|
||||
|
||||
|
||||
impl Remote {
|
||||
|
||||
pub fn new(location: &str) -> Remote {
|
||||
let location = match Url::parse(location) {
|
||||
Ok(url) => Location::Online(url),
|
||||
Err(_) => Location::Local(Box::from(Path::new(location)))
|
||||
};
|
||||
|
||||
Remote {location}
|
||||
}
|
||||
|
||||
pub fn is_local(&self) -> bool {
|
||||
match &self.location {
|
||||
Location::Online(_) => false,
|
||||
Location::Local(_) => true,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn hash(&self) -> String {
|
||||
let path = match &self.location {
|
||||
Location::Online(url) => url.to_string(),
|
||||
Location::Local(path) => String::from(path.to_str().unwrap_or("")),
|
||||
};
|
||||
|
||||
let mut hasher = Sha256::new();
|
||||
hasher.update(path);
|
||||
|
||||
format!("{:x}", hasher.finalize_fixed())
|
||||
}
|
||||
|
||||
pub fn get(&self) -> Option<Calendar> {
|
||||
debug!("Getting ics from {:?}", self.location);
|
||||
let content = match &self.location {
|
||||
Location::Online(url) => {
|
||||
match get_url_content(url.to_string()) {
|
||||
Ok(content) => Some(content),
|
||||
Err(_) => None,
|
||||
}
|
||||
}
|
||||
|
||||
Location::Local(path) => {
|
||||
match fs::read_to_string(path) {
|
||||
Ok(content) => Some(content),
|
||||
Err(_) => None,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if let Some(content) = content {
|
||||
if let Ok(cal) = parser::read_calendar(&content) {
|
||||
return Some(Calendar::from(cal));
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
fn get_url_content(url: String) -> Result<String, reqwest::Error> {
|
||||
let content = reqwest::blocking::get(url)?
|
||||
.text()?;
|
||||
|
||||
Ok(content)
|
||||
}
|
||||
|
||||
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use std::path::Path;
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn get_ics_from_file() {
|
||||
|
||||
let remote = Remote{
|
||||
location: Location::Local(Box::from(Path::new("resources/test/belgium.ics"))),
|
||||
};
|
||||
|
||||
let cal = remote.get();
|
||||
|
||||
assert!(cal.is_some());
|
||||
|
||||
let cal = cal.unwrap();
|
||||
|
||||
// Calendar has 40 events
|
||||
assert_eq!(cal.len(), 40);
|
||||
assert_eq!(cal.get_name().unwrap(), "Belgium Holidays");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn cannot_parse_calendar() {
|
||||
|
||||
let remote = Remote {
|
||||
location: Location::Online(Url::parse("https://example.com/").unwrap()),
|
||||
};
|
||||
|
||||
let cal = remote.get();
|
||||
|
||||
if let Some(cal) = cal {
|
||||
assert_eq!(cal.len(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hash_test() {
|
||||
let remote = Remote {
|
||||
location: Location::Local(Box::from(Path::new("file.ics"))),
|
||||
};
|
||||
|
||||
let remote1 = Remote {
|
||||
location: Location::Local(Box::from(Path::new("file.ics"))),
|
||||
};
|
||||
|
||||
assert_eq!(remote.hash(), remote1.hash())
|
||||
}
|
||||
}
|
18
src/lib.rs
Normal file
18
src/lib.rs
Normal file
|
@ -0,0 +1,18 @@
|
|||
mod config;
|
||||
mod fetcher;
|
||||
mod caching;
|
||||
|
||||
pub fn add(left: usize, right: usize) -> usize {
|
||||
left + right
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn it_works() {
|
||||
let result = add(2, 2);
|
||||
assert_eq!(result, 4);
|
||||
}
|
||||
}
|
1
src/main.rs
Normal file
1
src/main.rs
Normal file
|
@ -0,0 +1 @@
|
|||
pub fn main() {}
|
Loading…
Add table
Reference in a new issue