https://github.com/jdejaegh/ics-fusion
Filter and merge events from multiple iCalendar feeds
https://github.com/jdejaegh/ics-fusion
calendar filters ical icalendar ics merge
Last synced: 6 months ago
JSON representation
Filter and merge events from multiple iCalendar feeds
- Host: GitHub
- URL: https://github.com/jdejaegh/ics-fusion
- Owner: jdejaegh
- License: mit
- Created: 2020-09-21T12:01:57.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-09-23T08:24:02.000Z (about 2 years ago)
- Last Synced: 2025-03-25T21:23:03.731Z (7 months ago)
- Topics: calendar, filters, ical, icalendar, ics, merge
- Language: Python
- Homepage:
- Size: 54.7 KB
- Stars: 11
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ICS Fusion
## Introduction
ICS Fusion is a tool to merge multiple ics feed into a single ics calendar. Filters and modifications may be applied on the incoming feeds. The resulting ics can be accessed via an HTTP endpoint.## Installation
ICS Fusion is written in Python and using `Flask` to provide the HTTP endpoint. Make sure to install all the modules listed in the `requirements.txt` file before launching the tool.Launch the `app/server.py` file to start the application.
### Building the image
ICS Fusion can be built as a Docker image. To do so, type :`docker build --tag ics-fusion:1.0 .`
in the main folder of Fusion ICS.
### Running the container
To run the container, type:`docker run --publish PORT:8088 --detach --name ics --volume DIRECTORY:/usr/src/ics/app/config ics-fusion:1.0`
Where:
* `PORT` is the port you want to expose on your host machine.
* `DIRECTORY` is the path to your config directory.## Configuration
To create a new feed in the application, create a file with the `.json` extension in the `app/config` folder. The name of the configuration file will be used to create a new endpoint to serve the feed.The JSON configuration file should look like the following.
```json
[
{
"url":"str",
"name":"str",
"cache": 10,
"encoding":"str",
"filters":{
"name":{
"exclude":"RegEx",
"includeOnly":"RegEx",
"ignoreCase":true
},
"description":{
"exclude":"RegEx",
"includeOnly":"RegEx",
"ignoreCase":true
}
},
"modify":{
"time":{
"shift":{
"year":0,
"month":0,
"day":0,
"hour":0,
"minute":0
}
},
"name":{
"addPrefix":"str",
"addSuffix":"str"
},
"description":{
"addPrefix":"str",
"addSuffix":"str"
},
"location":{
"addPrefix":"str",
"addSuffix":"str"
}
}
}
]
```Only the `url` and the `name` field are mandatory.
- `url`: specify the url to find the calendar
- `name`: name to identify the calendar
- `cache`: if present cache the remote calendar according to the interval set in minutes
- `encoding`: specify the encoding to use
- `filters`: structure defining the filters to apply to the calendar
- `name`: filters to apply to the name field of the events
- `description`: filters to apply to the name field of the events
- `exclude`: RegEx to describe the events to exclude - cannot be specified with includeOnly
- `includeOnly`: RegEx to describe the events to include - cannot be specified with exclude
- `ignoreCase`: if true the RegEx will ignore the case of the field
- `modify`: structure defining the modifications to the events of the calendar
- `time`: describe the modifications to apply to the timing of the event
- `shift`: shift the event of a certain amount of time
- `year`, `month`, `day`, `hour`, `minute`: amount of time to add to the events
- `name`: modifications to apply to the name of the events
- `description`: modifications to apply to the description of the events
- `location`: modification to apply to the location of the events
- `addPrefix`: string to add at the beginning of the field
- `addSuffix`: string to add at the end of the field
If multiple calendars are specified in the configuration list, their events will be merged in the resulting ics feed.## Usage
Once the config file is created, the corresponding HTTP endpoint is accessible. For example, if the file `app/config/my-calendar.json` contains the configuration, the HTTP endpoint will be `http://localhost:8088/my-calendar`.## Limitations
Currently, the application only merges events of the ics feeds, the alarms and todos are not supported.