Additional check in sort dialog (code review).
[modest] / src / modest-tny-folder.h
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 /*
31  * TnyFolder Decorator
32  */
33
34 #ifndef __MODEST_TNY_FOLDER_H__
35 #define __MODEST_TNY_FOLDER_H__
36
37 #include <tny-folder.h>
38 #include <modest-local-folder-info.h>
39
40 G_BEGIN_DECLS
41
42 /*  TODO: move this to tinymail */
43 #define TNY_FOLDER_TYPE_INVALID -1
44
45 typedef enum {
46         MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE  = 1 << 1,
47         MODEST_FOLDER_RULES_FOLDER_NON_DELETABLE  = 1 << 2,
48         MODEST_FOLDER_RULES_FOLDER_NON_MOVEABLE   = 1 << 3,
49         MODEST_FOLDER_RULES_FOLDER_NON_RENAMEABLE = 1 << 4,
50 } ModestTnyFolderRules;
51
52 /** Note: This is not a derived TnyFolder type. These are just convenience 
53  * functions for working with a TnyFolder. tinymail does not seem to offer any 
54  * easy way to cause derived TnyFolders to be instantiated.
55  */
56   
57 /**
58  * modest_tny_folder_guess_type:
59  * @folder: a valid tnymail folder
60  * 
61  * determine the type of the folder. first, we see if tinymail
62  * can give a specific type. if it cannot, we try to guess the
63  * type, using modest_tny_folder_guess_type_from_name
64  *  
65  * Returns: the folder type, or TNY_FOLDER_TYPE_UNKNOWN
66  */
67 TnyFolderType  modest_tny_folder_guess_folder_type   (TnyFolder *folder);
68
69
70
71 /**
72  * modest_tny_folder_is_remote_folder:
73  * @folder: a valid tnymail folder
74  * 
75  * checks if the folder is part of the "remote" account
76  *  
77  * Returns: TRUE if it's a remote folder, FALSE otherwise
78  */
79 gboolean
80 modest_tny_folder_is_remote_folder   (TnyFolder *folder);
81
82 /**
83  * modest_tny_folder_is_local_folder:
84  * @folder: a valid tnymail folder
85  * 
86  * checks if the folder is part of the "local folders" pseudo-account
87  *  
88  * Returns: TRUE if it's a local folder, FALSE otherwise
89  */
90 gboolean modest_tny_folder_is_local_folder   (TnyFolder *folder);
91
92 /**
93  * modest_tny_folder_is_memory_card_folder:
94  * @folder: a valid tnymail folder
95  * 
96  * checks if the folder is part of the memory card account.
97  *  
98  * Returns: TRUE if it's a memory card folder, FALSE otherwise
99  */
100 gboolean
101 modest_tny_folder_is_memory_card_folder   (TnyFolder *folder);
102
103 /**
104  * modest_tny_folder_get_local_folder_type:
105  * @folder: a valid tnymail folder
106  * 
107  * checks if the folder is part of the "local folders" pseudo-account
108  *  
109  * Returns: TRUE if it's a local folder, FALSE otherwise
110  */
111 TnyFolderType modest_tny_folder_get_local_or_mmc_folder_type  (TnyFolder *folder);
112
113
114 /**
115  * modest_tny_folder_get_rules:
116  * @folder: a valid tnymail folder
117  * 
118  * get the rules for this folder; can messages be put in it,
119  * can the folder be deleted, etc.
120  *  
121  * Returns: the ModestTnyFolderRules rules (bitwise-OR) for this
122  * folder
123  */
124 ModestTnyFolderRules  modest_tny_folder_get_rules   (TnyFolder *folder);
125
126
127 /**
128  * modest_tny_folder_get_help_id:
129  * @folder: a valid tnymail folder
130  * 
131  * get the help_id for this folder
132  *  
133  * Returns: get the help_id for this folder, or NULL in case of error
134  */
135 const gchar* modest_tny_folder_get_help_id (TnyFolder *folder);
136
137
138 /**
139  * modest_tny_folder_is_outbox_for_account:
140  * @folder: a valid tnymail folder
141  * 
142  * Discover whether this folder is the per-account outbox for the specified 
143  * account.
144  *  
145  * Returns: TRUE if this folder is the per-account outbox for the account.
146  */
147 gboolean modest_tny_folder_is_outbox_for_account (TnyFolder *folder, 
148                                                   TnyAccount *account);
149                                         
150 /**
151  * modest_tny_folder_get_account:
152  * @folder: a folder
153  * 
154  * Get the parent account of the folder or, for TnyMergeFolder 
155  * instances, get the local-folders account.
156  *  
157  * Returns: the account. You should call g_object_unref() on this.
158  */       
159 TnyAccount *modest_tny_folder_get_account (TnyFolder *folder);
160
161 /**
162  * modest_tny_msg_get_header_unique_id:
163  * @header: a #TnyHeader
164  * 
165  * This function returns a unique id for a message summary from 
166  * a TnyHeader retrieved with tny_folder_get_headers. You can not use
167  * the TnyHeader returned by tny_msg_get_header because it has no uid.
168  *
169  * This uid is built from the folder URL string and the header uid,
170  * the caller of the function must free the unique id when no longer
171  * needed
172  * 
173  * Returns: a unique identificator for a header object
174  **/
175 gchar* modest_tny_folder_get_header_unique_id (TnyHeader *header);
176
177 /**
178  * modest_tny_folder_has_subfolder_with_name:
179  * @folder: a #TnyFolderStore 
180  * @name: the name to check into subfolders.
181  * @nonstrict: if TRUE, also match on different-case and current-locale
182  * display versions of the name
183  *   
184  * This function check if subfolders of @folder has the same
185  * name as @name.
186  *
187  * Returns: TRUE if some subfolder has the name @name.
188  **/
189 gboolean modest_tny_folder_has_subfolder_with_name (TnyFolderStore *folder,
190                                                     const gchar *name,
191                                                     gboolean nonstrict);
192
193 /**
194  * modest_tny_folder_is_ancestor:
195  * @folder: a #TnyFolder 
196  * @ancestor: a #TnyFolderStore
197  * 
198  * This function checks if @ancestor is an ancestor of @folder
199  * 
200  * Returns: TRUE if @ancestor is an ancestor of @folder, FALSE
201  * otherwise
202  **/
203 gboolean modest_tny_folder_is_ancestor (TnyFolder *folder,
204                                         TnyFolderStore *ancestor);
205
206 /**
207  * modest_tny_folder_store_find_folder_from_uri:
208  * @folder_store: a #TnyFolderStore
209  * @uri: a string
210  *
211  * This method tries to find a folder in @folder_store. The idea is
212  * being as fast as possible being synchronous. This is accomplished
213  * avoiding network access.
214  *
215  * Returns: %NULL if folder is not found, or a #TnyFolder.
216  */
217 TnyFolder *modest_tny_folder_store_find_folder_from_uri (TnyFolderStore *folder_store, const gchar *uri);
218
219 /**
220  * modest_tny_folder_get_display_name:
221  * @folder: a #TnyFolder
222  *
223  * obtain the display name for @folder
224  *
225  * Returns: a newly allocated string
226  */
227 gchar * modest_tny_folder_get_display_name (TnyFolder *folder);
228
229 G_END_DECLS
230
231 #endif /* __MODEST_TNY_FOLDER_H__*/