Ejemplo n.º 1
0
        public ActionResult Download(Guid entityListId, Guid viewId, string from, string to, string filter, string search)
        {
            DateTime parsedFrom;

            var fromDate = DateTime.TryParseExact(from, "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out parsedFrom)
                                ? parsedFrom
                                : DateTime.UtcNow.AddYears(-10);

            DateTime parsedTo;

            var toDate = DateTime.TryParseExact(to, "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out parsedTo)
                                ? parsedTo
                                : DateTime.UtcNow.AddYears(10);

            var dataAdapter = new EntityListCalendarDataAdapter(
                new EntityReference("adx_entitylist", entityListId),
                new EntityReference("savedquery", viewId),
                new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext));

            var events = dataAdapter.SelectEvents(fromDate, toDate, filter, search)
                         .OrderBy(e => e.Start)
                         .ThenBy(e => e.Summary);

            var vcalendar = new VCalendar(events.Select(GetVEvent));

            return(new ContentResult
            {
                ContentType = "text/calendar",
                Content = vcalendar.ToString()
            });
        }
Ejemplo n.º 2
0
        public void UnitTest1()
        {
            var             calString      = @"BEGIN:VCALENDAR
BEGIN:VFREEBUSY
FREEBUSY:19980314T233000Z/19980315T003000Z
FREEBUSY:19980316T153000Z/19980316T163000Z
FREEBUSY:19980318T030000Z/19980318T040000Z
URL:http://www.example.com/calendar/busytime/jsmith.ifb
END:VFREEBUSY
END:VCALENDAR
";
            VCalendar       calendar       = VCalendar.Parse(calString);
            var             calendarString = calendar.ToString();
            UnicodeEncoding uniencoding    = new UnicodeEncoding();
            UTF8Encoding    utf8Encoding   = new UTF8Encoding();
            var             toWrite        = utf8Encoding.GetBytes(calendarString);

            File.Delete("output1.ics");
            using (var writer = File.OpenWrite("output1.ics"))
            {
                writer.Seek(0, SeekOrigin.End);
                writer.Write(toWrite, 0, toWrite.Length);
            }
            using (var reader = File.OpenText("output1.ics"))
            {
                var writedCal      = reader.ReadToEnd();
                var writedCalLines = Parser.CalendarReader(writedCal);
                var expectedLines  = Parser.CalendarReader(calString);
                Assert.Equal(expectedLines.Length, writedCalLines.Length);
                for (int i = 0; i < writedCalLines.Length; i++)
                {
                    Assert.Contains(expectedLines[i], writedCalLines);
                }
            }
            Assert.NotNull(calendarString);
        }
Ejemplo n.º 3
0
        public void BuildVCalendar()
        {
            var             calString      = @"BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
X-WR-CALNAME:[email protected]
X-WR-TIMEZONE:America/Los_Angeles
BEGIN:VTIMEZONE
TZID:America/Los_Angeles
X-LIC-LOCATION:America/Los_Angeles
BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
TZNAME:PDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
TZNAME:PST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=America/Los_Angeles:20120629T130000
DTEND;TZID=America/Los_Angeles:20120629T140000
DTSTAMP:20120629T112428Z
UID:[email protected]
RRULE:FREQ=YEARLY;INTERVAL=4;BYMONTH=11;BYDAY=TU;
 BYMONTHDAY=2,3,4,5,6,7,8
RRULE:FREQ=YEARLY;INTERVAL=4;BYMONTH=11;BYDAY=TU;
 BYMONTHDAY=2,3,4,5,6,7,8
CREATED:20120629T111935Z
DESCRIPTION:foo
LAST-MODIFIED:20120629T112428Z
LOCATION:Barcelona
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Demo B2G Calendar
TRANSP:OPAQUE
BEGIN:VALARM
ACTION:EMAIL
DESCRIPTION:This is an event reminder
SUMMARY:Alarm notification
ATTENDEE:mailto:[email protected]
ATTENDEE:mailto:[email protected]
TRIGGER:-P0DT0H30M0S
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:This is an event reminder
TRIGGER:-P0DT0H30M0S
END:VALARM
END:VEVENT
END:VCALENDAR
";
            VCalendar       calendar       = VCalendar.Parse(calString);
            var             calendarString = calendar.ToString();
            UnicodeEncoding uniencoding    = new UnicodeEncoding();
            UTF8Encoding    utf8Encoding   = new UTF8Encoding();
            var             toWrite        = utf8Encoding.GetBytes(calendarString);

            File.Delete("output1.ics");
            using (var writer = File.OpenWrite("output1.ics"))
            {
                writer.Seek(0, SeekOrigin.End);
                writer.Write(toWrite, 0, toWrite.Length);
            }
            using (var reader = File.OpenText("output1.ics"))
            {
                var writedCal      = reader.ReadToEnd();
                var writedCalLines = Parser.CalendarReader(writedCal);
                var expectedLines  = Parser.CalendarReader(calString);
                Assert.Equal(expectedLines.Length, writedCalLines.Length);
                for (int i = 0; i < writedCalLines.Length; i++)
                {
                    Assert.Contains(expectedLines[i], writedCalLines);
                }
            }
            Assert.NotNull(calendarString);
        }
Ejemplo n.º 4
0
        public void ToStringTest()
        {
            var       calString    = @"BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
X-WR-CALNAME:[email protected]
X-WR-TIMEZONE:America/Los_Angeles
BEGIN:VTIMEZONE
TZID:America/Los_Angeles
X-LIC-LOCATION:America/Los_Angeles
BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
TZNAME:PDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
TZNAME:PST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
RDATE:19450603T010000
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=America/Los_Angeles:20120629T130000
DTEND;TZID=America/Los_Angeles:20120629T140000
DTSTAMP:20120629T112428Z
UID:[email protected]
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
CREATED:20120629T111935Z
DESCRIPTION:foo
LAST-MODIFIED:20120629T112428Z
LOCATION:Barcelona
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Demo B2G Calendar
TRANSP:OPAQUE
BEGIN:VALARM
ACTION:EMAIL
DESCRIPTION:This is an event reminder
SUMMARY:Alarm notification
ATTENDEE:mailto:[email protected]
TRIGGER:-P0DT0H30M0S
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:This is an event reminder
TRIGGER:-P0DT0H30M0S
END:VALARM
END:VEVENT
END:VCALENDAR
";
            VCalendar calendar     = VCalendar.Parse(calString);
            var       xmlDoc       = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<C:calendar-query xmlns:D=""DAV:""
xmlns:C=""urn:ietf:params:xml:ns:caldav"">
<D:prop>
<D:getetag/>
<C:calendar-data>
<C:comp name=""VCALENDAR"">
<C:prop name=""VERSION""/>
<C:comp name=""VEVENT"">
<C:prop name=""SUMMARY""/>
<C:prop name=""UID""/>
<C:prop name=""DTSTART""/>
<C:prop name=""DTEND""/>
</C:comp>
<C:comp name=""VTIMEZONE""/>
</C:comp>
</C:calendar-data>
</D:prop>
<C:filter>
<C:comp-filter name=""VCALENDAR"">
<C:comp-filter name=""VEVENT"">
	<C:time-range start=""20060104T000000Z""
end=""20060105T000000Z""/>
</C:comp-filter>
</C:comp-filter>
</C:filter>
</C:calendar-query>";
            var       xmlTree      = XmlTreeStructure.Parse(xmlDoc);
            var       node         = xmlTree.GetChildAtAnyLevel("calendar-data");
            var       newCalString = calendar.ToString(node);
            var       newCal       = new VCalendar(newCalString);

            Assert.Equal(2, newCal.CalendarComponents.Count);
            Assert.Contains("VEVENT", newCal.CalendarComponents.Keys);
            Assert.Contains("VTIMEZONE", newCal.CalendarComponents.Keys);
            Assert.Equal(4, newCal.CalendarComponents["VEVENT"].First().Properties.Count);
        }
Ejemplo n.º 5
0
    public void Returns_Correct_VCalendar()
    {
        // Arrange
        var e0              = new EventModel(Rnd.DateTime, Rnd.DateTime, false, Rnd.Str, Rnd.Str, Rnd.Str, false);
        var e1              = new EventModel(Rnd.DateTime, Rnd.DateTime, false, Rnd.Str, Rnd.Str, Rnd.Str, true);
        var events          = ImmutableList.Create(e0, e1);
        var lastModified    = Rnd.DateTime;
        var lastModifiedStr = VCalendar.Format(lastModified);
        var calendar        = new CalendarModel(events, lastModified);
        var tzid            = Rnd.Str;
        var domain          = Rnd.Str;
        var vcal            = new VCalendar(calendar, tzid);
        var expected        = new StringBuilder()
                              .AppendLine("BEGIN:VCALENDAR")
                              .AppendLine("VERSION:2.0")
                              .AppendLine("PRODID:-//bfren//NONSGML Jeebs.Calendar//EN")
                              .AppendLine("CALSCALE:GREGORIAN")
                              .AppendLine("X-PUBLISHED-TTL:PT1H")
                              .AppendLine("BEGIN:VTIMEZONE")
                              .AppendLine("TZID:Europe/London")
                              .AppendLine("BEGIN:STANDARD")
                              .AppendLine("TZNAME:GMT")
                              .AppendLine("DTSTART:19710101T020000")
                              .AppendLine("TZOFFSETFROM:+0100")
                              .AppendLine("TZOFFSETTO:+0000")
                              .AppendLine("RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU")
                              .AppendLine("END:STANDARD")
                              .AppendLine("BEGIN:DAYLIGHT")
                              .AppendLine("TZNAME:BST")
                              .AppendLine("DTSTART:19710101T010000")
                              .AppendLine("TZOFFSETFROM:+0000")
                              .AppendLine("TZOFFSETTO:+0100")
                              .AppendLine("RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU")
                              .AppendLine("END:DAYLIGHT")
                              .AppendLine("END:VTIMEZONE")
                              .AppendLine("BEGIN:VEVENT")
                              .AppendLine($"UID:{lastModifiedStr}-000000@{domain}")
                              .AppendLine($"CREATED:{lastModifiedStr}")
                              .AppendLine($"LAST-MODIFIED:{lastModifiedStr}")
                              .AppendLine($"DTSTAMP:{lastModifiedStr}")
                              .AppendLine($"SUMMARY:{e0.Summary}")
                              .AppendLine($"DESCRIPTION:{e0.Description}")
                              .AppendLine($"LOCATION:{e0.Location}")
                              .AppendLine($"DTSTART;TZID={tzid}:{VCalendar.Format(e0.Start)}")
                              .AppendLine($"DTEND;TZID={tzid}:{VCalendar.Format(e0.End)}")
                              .AppendLine("END:VEVENT")
                              .AppendLine("BEGIN:VEVENT")
                              .AppendLine($"UID:{lastModifiedStr}-000001@{domain}")
                              .AppendLine($"CREATED:{lastModifiedStr}")
                              .AppendLine($"LAST-MODIFIED:{lastModifiedStr}")
                              .AppendLine($"DTSTAMP:{lastModifiedStr}")
                              .AppendLine($"SUMMARY:{e1.Summary}")
                              .AppendLine($"DESCRIPTION:{e1.Description}")
                              .AppendLine($"LOCATION:{e1.Location}")
                              .AppendLine($"DTSTART;TZID={tzid}:{VCalendar.Format(e1.Start)}")
                              .AppendLine($"DTEND;TZID={tzid}:{VCalendar.Format(e1.End)}")
                              .AppendLine("TRANSP:TRANSPARENT")
                              .AppendLine("END:VEVENT")
                              .AppendLine("END:VCALENDAR")
                              .ToString();

        // Act
        var result = vcal.ToString(domain);

        // Assert
        Assert.Equal(expected, result);
    }