It is a solution. Not the best one by any means, but it's still a solution.
A solution to the WebOodi calendar problem (it doesn't have the option to export all your courses into an .ics file) thrown together in a few days. Works as a Google Chrome extension, but you can probably rip some of the scripts out and try to run them without the extension.
Basic functionality is that the extension once initiated, by pressing one button, will scan through your courses on Oodi and pick out the relevant information from the courses you are enrolled in. After this, the extension will do some conversion work with ics.js and generate a calendar.ics file that includes all the courses and exercises picked out before.
You can import this ics (ICAL) file into most modern calendar programs such as iCalendar, Google Calendar, etc.
The extension takes into account recurring events and single events in WebOodi and it seems to be fairly accurate from the tests I've ran.
Sadly this extension is quite invasive in that it takes over control from you while it scans through the courses. However, this is necessary for the extension to gather all the events from your current courses. The source code is available on github for you to check that everything is in order.