From 880422dc419f3e4e923acd147e5371eb57468859 Mon Sep 17 00:00:00 2001 From: Christian Fiedler Date: Mon, 26 Aug 2013 17:34:58 +0200 Subject: [PATCH] ics import --- CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj | 8 + .../Model/TimeTable/AppointmentModel.cs | 151 ++++++++++++++++++ .../Pages/TimeTable/TimeTableDay.xaml | 37 +++++ .../Pages/TimeTable/TimeTableDay.xaml.cs | 25 +++ .../CampusAppWP8/Properties/WMAppManifest.xml | 2 +- 5 files changed, 222 insertions(+), 1 deletion(-) create mode 100644 CampusAppWP8/CampusAppWP8/Model/TimeTable/AppointmentModel.cs create mode 100644 CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableDay.xaml create mode 100644 CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableDay.xaml.cs diff --git a/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj b/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj index c40749c8..bf6ce86c 100644 --- a/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj +++ b/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj @@ -112,10 +112,14 @@ + + + TimeTableDay.xaml + @@ -352,6 +356,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + MSBuild:Compile Designer diff --git a/CampusAppWP8/CampusAppWP8/Model/TimeTable/AppointmentModel.cs b/CampusAppWP8/CampusAppWP8/Model/TimeTable/AppointmentModel.cs new file mode 100644 index 00000000..38d5c9fb --- /dev/null +++ b/CampusAppWP8/CampusAppWP8/Model/TimeTable/AppointmentModel.cs @@ -0,0 +1,151 @@ +//----------------------------------------------------------------------------- +// +// Company copyright tag. +// +// fiedlchr +// 26.08.2013 +//----------------------------------------------------------------------------- + +namespace CampusAppWP8.Model.TimeTable +{ + using System; + using System.Collections.Generic; + using System.Text.RegularExpressions; + using System.Windows.Shapes; + using System.Xml.Serialization; + + /// + /// Model for appointments. + /// + [XmlRoot("root")] + public class AppointmentModel + { + /// The Visual object. + private Rectangle rect = null; + + private IcsVEvent data; + + private struct IcsVEvent + { + public DateTime created; + public string uid; + public DateTime lastModified; + public DateTime stamp; + public string summary; + public DateTime start; + public DateTime end; + public string accessClass; + public string location; + public string description; + public string categories; + } + + /// Initializes a new instance of the class. + public AppointmentModel() + { + } + + public AppointmentModel(string icsData) : this() + { + this.ImportFromICS(icsData); + } + + public Rectangle GetRectangle() + { + return this.rect; + } + + public void ImportFromICS(string icsData) + { + string[] elems = Regex.Split(icsData, "\r\n"); + + foreach (string e in elems) + { + string[] parts = e.Split(':'); + + if (parts.Length != 2) + { + throw new NotImplementedException("error in ics string"); + } + + if (parts[0].Contains(";")) + { + parts[0] = parts[0].Split(';')[0]; + } + + switch (parts[0]) + { + case "BEGIN": + break; + case "CREATED": + this.data.created = this.ParseUTC(parts[1]); + break; + case "UID": + this.data.uid = parts[1]; + break; + case "LAST-MODIFIED": + this.data.lastModified = this.ParseUTC(parts[1]); + break; + case "DTSTAMP": + this.data.stamp = this.ParseUTC(parts[1]); + break; + case "SUMMARY": + this.data.summary = parts[1]; + break; + case "DTSTART": + this.data.start = this.ParseUTC(parts[1]); + break; + case "DTEND": + this.data.end = this.ParseUTC(parts[1]); + break; + case "CLASS": + this.data.accessClass = parts[1]; + break; + case "LOCATION": + this.data.location = parts[1]; + break; + case "DESCRIPTION": + this.data.description = parts[1]; + break; + case "CATEGORIES": + this.data.categories = parts[1]; + break; + case "END": + break; + case "VERSION": + break; + case "PRODID": + break; + case "X-WR-CALNAME": + break; + + default: + throw new NotImplementedException("unknown tag in ics: " + parts[0]); + } + } + } + + public string ExportToICS() + { + string retValue = string.Empty; + + + return retValue; + } + + private void CreateRect() + { + + } + + private DateTime ParseUTC(string datetime) + { + datetime = datetime.Insert(4, "-"); + datetime = datetime.Insert(7, "-"); + datetime = datetime.Insert(13, ":"); + datetime = datetime.Insert(16, ":"); + + return DateTime.Parse(datetime); + } + } +} diff --git a/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableDay.xaml b/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableDay.xaml new file mode 100644 index 00000000..7a7746ae --- /dev/null +++ b/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableDay.xaml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableDay.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableDay.xaml.cs new file mode 100644 index 00000000..b84c2d6e --- /dev/null +++ b/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableDay.xaml.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Navigation; +using Microsoft.Phone.Controls; +using Microsoft.Phone.Shell; +using CampusAppWP8.Model.TimeTable; + + +namespace CampusAppWP8.Pages.TimeTable +{ + public partial class TimeTableDay : PhoneApplicationPage + { + private AppointmentModel testMod = null; + + public TimeTableDay() + { + InitializeComponent(); + this.testMod = new AppointmentModel("BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:ownCloud Calendar 0.6.3\r\nX-WR-CALNAME:MyTestAppointment\r\nBEGIN:VEVENT\r\nCREATED;VALUE=DATE-TIME:20130826T142318Z\r\nUID:617332baab\r\nLAST-MODIFIED;VALUE=DATE-TIME:20130826T142318Z\r\nDTSTAMP;VALUE=DATE-TIME:20130826T142318Z\r\nSUMMARY:MyTestAppointment\r\nDTSTART;VALUE=DATE-TIME:20130730T130000Z\r\nDTEND;VALUE=DATE-TIME:20130730T133000Z\r\nCLASS:PUBLIC\r\nLOCATION:BTU Campus\r\nDESCRIPTION:bla\r\nCATEGORIES:Arbeit\r\nEND:VEVENT\r\nEND:VCALENDAR"); + } + } +} \ No newline at end of file diff --git a/CampusAppWP8/CampusAppWP8/Properties/WMAppManifest.xml b/CampusAppWP8/CampusAppWP8/Properties/WMAppManifest.xml index 4d8b94b2..91a401ea 100644 --- a/CampusAppWP8/CampusAppWP8/Properties/WMAppManifest.xml +++ b/CampusAppWP8/CampusAppWP8/Properties/WMAppManifest.xml @@ -18,7 +18,7 @@ - +