fdcda8cbc50d5d24e30fc7ede242a3a25dcc4b52
[platform/framework/native/content.git] / src / inc / FCnt_ContentDirectoryImpl.h
1 //
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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  * @file                FCnt_ContentDirectoryImpl.h
18  * @brief               This is the header file for the %_ContentDirectoryImpl class.
19  *
20  * This header file contains the declarations of the %_ContentDirectoryImpl class.
21  */
22
23 #ifndef _FCNT_INTERNAL_CONTENT_DIRECTORY_IMPL_H_
24 #define _FCNT_INTERNAL_CONTENT_DIRECTORY_IMPL_H_
25
26 #include <glib.h>
27 #include <unique_ptr.h>
28 #include <media_content.h>
29 #include <FBaseColIListT.h>
30 #include <FBaseColAllElementsDeleter.h>
31
32 namespace Tizen { namespace Content
33 {
34         static const int MAX_FIELD_LENGTH  = 32;
35         static const int MAX_QUERY_COLUMNS = 20;
36         static const int MAX_QUERY_COLUMNS_FOR_IMAGE_OTHERS = 14;
37         static const int MAX_QUERY_COLUMNS_FOR_VIDEO = 18;
38         static const int ALBUM_COLUMN_NUM = 19;
39
40         typedef struct
41         {
42                 char            dbFieldOspName[MAX_FIELD_LENGTH];
43                 char            dbFieldSlpName[MAX_FIELD_LENGTH];
44         }DatabaseFieldInfo;
45
46         const static DatabaseFieldInfo dbfieldinfo[MAX_QUERY_COLUMNS] =
47         {
48                 //for all types 0 -13
49                 {"ContentType", "MEDIA_TYPE"},
50                 {"ContentFileName", "MEDIA_DISPLAY_NAME"},
51                 {"ContentName", "MEDIA_CONTENT_NAME"},
52                 {"Category", "MEDIA_CATEGORY"},
53                 {"Author", "MEDIA_AUTHOR"},
54                 {"keyword", "MEDIA_KEYWORD"},
55                 {"Provider", "MEDIA_PROVIDER"},
56                 {"Rating", "MEDIA_AGE_RATING"},
57                 {"LocationTag", "MEDIA_LOCATION_TAG"},
58                 {"ContentSize", "MEDIA_SIZE"},
59                 {"DateTime", "MEDIA_ADDED_TIME"},
60                 {"Latitude", "MEDIA_LATITUDE"},
61                 {"Longitude", "MEDIA_LONGITUDE"},
62                 {"Altitude", "MEDIA_ALTITUDE"},
63                 //  for audio and video type 14 - 17
64                 {"Title", "MEDIA_TITLE"},
65                 {"Artist", "MEDIA_ARTIST"},
66                 {"Genre", "MEDIA_GENRE"},
67                 {"Year", "MEDIA_YEAR"},
68                 // for audio type 18 - 19
69                 {"Composer", "MEDIA_COMPOSER"},
70                 {"Album", "MEDIA_ALBUM"}
71         };
72
73 class ContentSearchResult;
74 class ContentDirectory;
75
76 struct GListDeleter
77 {
78         void operator()(GList* pGList)
79         {
80                 g_list_free(pGList);
81                 pGList = NULL;
82         }
83 };
84
85 struct FolderHandleDeleter
86 {
87         void operator()(media_folder_h folderHandle)
88         {
89                 media_folder_destroy(folderHandle);
90                 folderHandle = NULL;
91         }
92 };
93
94 struct MediaHandleDeleter
95 {
96         void operator()(media_info_h mediaHandle)
97         {
98                 media_info_destroy(mediaHandle);
99                 mediaHandle = NULL;
100         }
101 };
102
103 struct FilterHandleDeleter
104 {
105         void operator()(filter_h filterHandle)
106         {
107                 media_filter_destroy(filterHandle);
108                 filterHandle = NULL;
109         }
110 };
111
112 class _ContentDirectoryImpl
113         : public Tizen::Base::Object
114 {
115 public:
116
117         /**
118          * This is the default constructor for this class.
119          *
120          * @since 2.1
121          */
122         _ContentDirectoryImpl(void);
123
124         /**
125          * This is the destructor for this class.
126          *
127          * @since 2.1
128          */
129         virtual ~_ContentDirectoryImpl(void);
130
131         /**
132          * @see @ref Tizen::Content::ContentDirectory::Construct()
133          */
134         result Construct(ContentType type);
135
136         /**
137          * @see @ref Tizen::Content::ContentDirectory::Construct()
138          */
139         result Construct(const Tizen::Base::Collection::IListT<ContentType>& contentTypeList);
140
141         /**
142          * @see @ref Tizen::Content::ContentDirectory::GetContentDirectoryCount()
143          */
144         int GetContentDirectoryCount(void) const;
145
146         /**
147          * @see @ref Tizen::Content::ContentDirectory::GetContentDirectoryPathListN()
148          */
149         Tizen::Base::Collection::IList* GetContentDirectoryPathListN(Tizen::Base::SortOrder sortOrder) const;
150
151         /**
152          * @see @ref Tizen::Content::ContentDirectory::GetContentDirectoryItemCount()
153          */
154         int GetContentDirectoryItemCount(const Tizen::Base::String& contentDirectoryPath) const;
155
156         /**
157          * @see @ref Tizen::Content::ContentDirectory::GetContentDirectoryItemListN()
158          */
159         Tizen::Base::Collection::IList* GetContentDirectoryItemListN(const Tizen::Base::String& contentDirectoryPath, int pageNo, int countPerPage,
160                                                     const Tizen::Base::String& column, Tizen::Base::SortOrder sortOrder) const;
161
162         static _ContentDirectoryImpl* GetInstance(ContentDirectory& contentDirectory);
163
164         static const _ContentDirectoryImpl* GetInstance(const ContentDirectory& contentDirectory);
165
166 private:
167         _ContentDirectoryImpl(const _ContentDirectoryImpl& rhs);
168         _ContentDirectoryImpl& operator =(const _ContentDirectoryImpl& rhs);
169
170         result CreateFolderFilter(bool isMultiContentType, const Tizen::Base::String& folderPath) const;
171         result FillFinalOutList(char* pFolderId) const;
172         result GetSlpColumnName(Tizen::Base::String& inputCol, Tizen::Base::String sortCol) const;
173         result MapCoreErrorToNativeResult(int reason) const;
174         bool CheckMediaPath(const Tizen::Base::String& directoryPath) const;
175
176         mutable std::unique_ptr<filter_s, FilterHandleDeleter> __pFilterHandle;
177         mutable std::unique_ptr<Tizen::Base::Collection::ArrayList, Tizen::Base::Collection::AllElementsDeleter> __pFinalOutList;
178         ContentType     __contentType;
179         bool __isMultiContentType;
180         Tizen::Base::String __multiContentTypeExpr;
181
182
183 };      // class _ContentDirectoryImpl
184
185 }}      // Tizen::Content
186
187 #endif  // _FCNT_INTERNAL_CONTENT_DIRECTORY_IMPL_H_