272fa282ca5485663a3208d136c20280767dd2cc
[platform/core/csapi/tizenfx.git] / src / Tizen.Pims.Calendar / Tizen.Pims.Calendar / CalendarVcalendar.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 using System;
18
19 namespace Tizen.Pims.Calendar
20 {
21     /// <summary>
22     /// Parsing vcalendar file callback function.
23     /// </summary>
24     /// <param name="record">The record</param>
25     /// <returns>true to continue with the next iteration of the loop, otherwise false to break out of the loop</returns>
26     /// <since_tizen> 4 </since_tizen>
27     public delegate bool ParseCallback(CalendarRecord record);
28
29     /// <summary>
30     /// A class for parsing and composing vCalendar.
31     /// </summary>
32     /// <remarks>
33     /// It's based on the vCalendar v2.0 specification
34     /// </remarks>
35     /// <since_tizen> 4 </since_tizen>
36     public static class CalendarVcalendar
37     {
38         /// <summary>
39         /// Retrieves a vcalendar stream from a calendar list.
40         /// </summary>
41         /// <param name="list">The calendar list</param>
42         /// <returns>
43         /// The composed stream.
44         /// </returns>
45         /// <exception cref="ArgumentException">Thrown when one of the arguments provided to a method is not valid</exception>
46         /// <exception cref="OutOfMemoryException">Thrown when failed due to out of memory</exception>
47         /// <since_tizen> 4 </since_tizen>
48         public static string Compose(CalendarList list)
49         {
50             string stream;
51             int error = Interop.Vcalendar.Compose(list._listHandle, out stream);
52             if (CalendarError.None != (CalendarError)error)
53             {
54                 Log.Error(Globals.LogTag, "MakeVcalendar Failed with error " + error);
55                 throw CalendarErrorFactory.GetException(error);
56             }
57             return stream;
58         }
59
60         /// <summary>
61         /// Retrieves all calendars from a vcalendar stream.
62         /// </summary>
63         /// <param name="stream">The vcalendar stream</param>
64         /// <returns>
65         /// the record list
66         /// </returns>
67         /// <exception cref="ArgumentException">Thrown when one of the arguments provided to a method is not valid</exception>
68         /// <exception cref="OutOfMemoryException">Thrown when failed due to out of memory</exception>
69         /// <since_tizen> 4 </since_tizen>
70         public static CalendarList Parse(string stream)
71         {
72             int error = 0;
73             IntPtr _listHandle;
74             error = Interop.Vcalendar.Parse(stream, out _listHandle);
75             if (CalendarError.None != (CalendarError)error)
76             {
77                 Log.Error(Globals.LogTag, "Parse Vcalendar Failed [" + error + "]");
78                 throw CalendarErrorFactory.GetException(error);
79             }
80             return new CalendarList(_listHandle);
81         }
82
83         /// <summary>
84         /// Parse vcalendar file with ForEach
85         /// </summary>
86         /// <param name="path">The file path of the vCalendar stream file</param>
87         /// <param name="callback">he callback function to invoke</param>
88         /// <exception cref="InvalidOperationException">Thrown when method failed due to invalid operation</exception>
89         /// <exception cref="ArgumentException">Thrown when one of the arguments provided to a method is not valid</exception>
90         /// <exception cref="OutOfMemoryException">Thrown when failed due to out of memory</exception>
91         /// <since_tizen> 4 </since_tizen>
92         public static void ParseForEach(string path, ParseCallback callback)
93         {
94             int error = 0;
95
96             Interop.Vcalendar.ParseCallback cb = (IntPtr handle, IntPtr data) =>
97             {
98                 return callback(new CalendarRecord(handle, true));
99             };
100
101             error = Interop.Vcalendar.ParseForEach(path, cb, IntPtr.Zero);
102             if (CalendarError.None != (CalendarError)error)
103             {
104                 Log.Error(Globals.LogTag, "Parse ForEach Vcalendar Failed [" + error + "]");
105                 throw CalendarErrorFactory.GetException(error);
106             }
107         }
108     }
109 }