* modest-tny-folder.[ch]:
[modest] / src / modest-tny-folder.c
1 /* Copyright (c) 2006, Nokia Corporation
2  * All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  * * Redistributions of source code must retain the above copyright
9  *   notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  *   notice, this list of conditions and the following disclaimer in the
12  *   documentation and/or other materials provided with the distribution.
13  * * Neither the name of the Nokia Corporation nor the names of its
14  *   contributors may be used to endorse or promote products derived from
15  *   this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
18  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
20  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
21  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29
30 #include <glib.h>
31 #include <glib/gi18n.h>
32 #include <string.h>
33 #include <modest-tny-folder.h>
34 #include <tny-camel-folder.h>
35 #include <camel/camel-folder.h>
36
37 TnyFolderType
38 modest_tny_folder_guess_folder_type_from_name (const gchar* name)
39 {
40         gint  type;
41         gchar *folder;
42
43         g_return_val_if_fail (name, TNY_FOLDER_TYPE_UNKNOWN);
44         
45         type = TNY_FOLDER_TYPE_UNKNOWN;
46         folder = g_utf8_strdown (name, strlen(name));
47
48         if (strcmp (folder, "inbox") == 0 ||
49             strcmp (folder, _("inbox")) == 0)
50                 type = TNY_FOLDER_TYPE_INBOX;
51         else if (strcmp (folder, "outbox") == 0 ||
52                  strcmp (folder, _("outbox")) == 0)
53                 type = TNY_FOLDER_TYPE_OUTBOX;
54         else if (g_str_has_prefix(folder, "junk") ||
55                  g_str_has_prefix(folder, _("junk")))
56                 type = TNY_FOLDER_TYPE_JUNK;
57         else if (g_str_has_prefix(folder, "trash") ||
58                  g_str_has_prefix(folder, _("trash")))
59                 type = TNY_FOLDER_TYPE_TRASH;
60         else if (g_str_has_prefix(folder, "sent") ||
61                  g_str_has_prefix(folder, _("sent")))
62                 type = TNY_FOLDER_TYPE_SENT;
63         else if (g_str_has_prefix(folder, "draft") ||
64                  g_str_has_prefix(folder, _("draft")))
65                 type = TNY_FOLDER_TYPE_DRAFTS;
66         else if (g_str_has_prefix(folder, "notes") ||
67                  g_str_has_prefix(folder, _("notes")))
68                 type = TNY_FOLDER_TYPE_NOTES;
69         else if (g_str_has_prefix(folder, "contacts") ||
70                  g_str_has_prefix(folder, _("contacts")))
71                 type = TNY_FOLDER_TYPE_CONTACTS;
72         else if (g_str_has_prefix(folder, "calendar") ||
73                  g_str_has_prefix(folder, _("calendar")))
74                 type = TNY_FOLDER_TYPE_CALENDAR;
75         
76         g_free (folder);
77         return type;
78 }
79
80
81
82 TnyFolderType
83 modest_tny_folder_guess_folder_type (const TnyFolder *folder)
84 {
85         TnyFolderType type;
86
87         g_return_val_if_fail (folder, TNY_FOLDER_TYPE_UNKNOWN);
88
89         type = tny_folder_get_folder_type (TNY_FOLDER (folder));
90         
91         if (type == TNY_FOLDER_TYPE_UNKNOWN) {
92                 const gchar *folder_name;
93
94                 folder_name = tny_folder_get_name (TNY_FOLDER (folder));
95                 type =  modest_tny_folder_guess_folder_type_from_name (folder_name);
96         }
97
98         return type;
99 }
100
101
102 ModestTnyFolderRules
103 modest_tny_folder_get_folder_rules   (const TnyFolder *folder)
104 {
105         g_return_val_if_fail (folder, 0);
106         
107         /* FIXME -- implement this */
108         return 0;
109 }
110
111
112 gboolean
113 modest_tny_folder_is_local_folder   (const TnyFolder *folder)
114 {
115         TnyAccount*  account;
116         const gchar* account_name;
117         
118         g_return_val_if_fail (folder, FALSE);
119         
120         account = tny_folder_get_account ((TnyFolder*)folder);
121         if (!account)
122                 return FALSE;
123
124         account_name = tny_account_get_id (account);
125         if (!account_name)
126                 return FALSE;
127
128         return (strcmp (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_NAME) == 0);
129 }       
130
131
132 TnyFolderType
133 modest_tny_folder_get_local_folder_type  (const TnyFolder *folder)
134 {
135         CamelFolder *camel_folder;
136         const gchar *full_name;
137         
138         g_return_val_if_fail (folder, TNY_FOLDER_TYPE_UNKNOWN);
139         g_return_val_if_fail (modest_tny_folder_is_local_folder(folder),
140                               TNY_FOLDER_TYPE_UNKNOWN);
141
142         camel_folder = tny_camel_folder_get_folder (TNY_CAMEL_FOLDER(folder));
143         if (!camel_folder)
144                 return TNY_FOLDER_TYPE_UNKNOWN;
145
146         full_name = camel_folder_get_full_name (camel_folder);
147         if (!full_name)
148                 return TNY_FOLDER_TYPE_UNKNOWN;
149
150         return modest_local_folder_info_get_type (full_name);
151 }