[Mediacontent]update Mediacontent(tizen_2.1)
[samples/web/Mediacontent.git] / js / main.js
1 /*
2  *      Copyright 2012  Samsung Electronics Co., Ltd
3  *
4  *      Licensed under the Flora License, Version 1.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.tizenopensource.org/license
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 var gMediaSource, gMediaFolders, gMediaItems, gItemId, gFolderId, gMediaType = "ALL";
18 var flagInit;
19
20 $(document).delegate("#main", "pageinit", function() {
21         flagInit = false;
22
23         $("#main .ui-btn-back").bind("vclick", function() {
24                 tizen.application.getCurrentApplication().exit();
25                 return false;
26         });
27
28         $("#folder-type-all").bind("vclick", function() {
29                 showFolderList("ALL");
30                 $("#folder-type-all").css('color','red');
31                 $("#folder-type-internal").css('color','black');
32                 $("#folder-type-external").css('color','black');
33         });
34
35         $("#folder-type-internal").bind("vclick", function() {
36                 showFolderList("INTERNAL");
37                 $("#folder-type-all").css('color','black');
38                 $("#folder-type-internal").css('color','red');
39                 $("#folder-type-external").css('color','black');
40         });
41
42         $("#folder-type-external").bind("vclick", function() {
43                 showFolderList("EXTERNAL");
44                 $("#folder-type-all").css('color','black');
45                 $("#folder-type-internal").css('color','black');
46                 $("#folder-type-external").css('color','red');
47         });
48
49         $("#all-items").bind("vclick", function() {
50                 getFolderItems(null, gMediaType);
51                 return false;
52         });
53 });
54
55
56 $(document).delegate("#items", "pageinit", function() {
57         $("#items").bind("pagebeforeshow", showItemList);
58
59         $("#items-list input").bind("change", function() {
60                 if ($(this).prop("checked") == true) {
61                         gMediaType = $(this).attr("value");
62                         getFolderItems(gFolderId, gMediaType);
63                 }
64         });
65
66         $("#items-list").delegate("li", "vclick", function() {
67                 var id = $(this).data("id");
68                 if (id != null) {
69                         gItemId = Number(id);
70                         $.mobile.changePage("#detail");
71                 }
72                 return false;
73         });
74
75         $("#batch-update").bind("vclick", function() {
76                 updateLast3Ratings();
77                 return false;
78         });
79 });
80
81 $(document).delegate("#detail", "pageinit", function() {
82         $("#detail").bind("pagebeforeshow", showMediaDetail);
83
84         $("#update").bind("vclick", function() {
85                 updateRating();
86                 window.history.back();
87                 return false;
88         });
89 });
90
91 function makeListItem(id, mainText, subText) {
92         return '<li class="ui-li-has-multiline ui-li-text-ellipsis"'
93                         + (id == null ? '' : ' data-id="'+ id +'"')
94                         + '>'
95                         + mainText
96                         + '<span class="ui-li-text-sub">'
97                         + subText
98                         + '</span></li>';
99 }
100
101 function getFolders (storageType) {
102         try {
103                 gMediaSource = tizen.content;
104                 gMediaSource.getDirectories(onGetFoldersSuccess, onGetFoldersError);
105         } catch (exc) {
106                 alert("getLocalMediaSource exc:" + exc.message);
107         }
108
109         function onGetFoldersSuccess(folders) {
110                 $("#folder-list").delegate("li", "vclick", function() {
111                         var id = $(this).data("id");
112                         if (id != null) {
113                                 getFolderItems(Number(id), gMediaType);
114                         }
115                         return false;
116                 });
117
118                 gMediaFolders = folders;
119                 showFolderList(storageType);
120         }
121
122         function onGetFoldersError(err) {
123                 alert("GetFolders failed:" + err.message);
124         }
125
126         flagInit = true;
127 }
128
129 function showFolderList(storageType) {
130
131         if(flagInit == false){
132                 getFolders(storageType);
133         }
134         else{
135                 var str = '';
136                 for (var i = 0; i < gMediaFolders.length; i++) {
137                         if (storageType == "ALL" || storageType == gMediaFolders[i].storageType) {
138                                 str += makeListItem(i, gMediaFolders[i].title, gMediaFolders[i].folderURI);
139                         }
140                 }
141                 $("#folder-list>li[data-id]").remove();
142                 $("#folder-list").append(str).trigger("create").listview("refresh");
143         }
144 }
145
146
147 function showItemList() {
148         var str = '';
149         var title = gMediaFolders[gFolderId].title;
150
151         $("#items-title").html(gFolderId == null ? "All" : title.toString().toUpperCase());
152
153         for (var i = 0; i < gMediaItems.length; i++) {
154                 str += makeListItem(i, gMediaItems[i].title,
155                                 gMediaItems[i].type + "  Rating: " + gMediaItems[i].rating);
156         }
157
158         $("#items-list>li[data-id]").remove();
159         $("#items-list").append(str).trigger("create").listview("refresh");
160 }
161
162 function getFolderItems(folderId, mediaType) {
163         function onFindItemsSuccess(items) {
164                 gMediaItems = items;
165                 gFolderId = folderId;
166                 gMediaType = mediaType;
167
168                 if($.mobile.activePage.attr("id") == "items") {
169                         showItemList();
170                 } else {
171                         $.mobile.changePage("#items");
172                 }
173         }
174
175         function onFindItemsError(err) {
176                 alert("getFolderItems findItems failed: " + err.message);
177         }
178
179         try {
180                 gMediaSource.find(onFindItemsSuccess, onFindItemsError,
181                                 folderId == null ? null : gMediaFolders[folderId].id,
182                                 mediaType == "ALL" ? null : new tizen.AttributeFilter("type", "EXACTLY", mediaType),
183                                 new tizen.SortMode("title", "ASC"));
184         } catch (exc) {
185                 //alert("findItems exc:" + exc.message);
186         }
187 }
188
189 function makeCommonPropertiesListItems(item) {
190         return makeListItem(null, "Title", item.title)
191                         + makeListItem(null, "Size", item.size + " Bytes")
192                         + makeListItem(null, "Type", item.type)
193                         + makeListItem(null, "Identifier", item.id)
194                         + makeListItem(null, "Item URI", item.contentURI)
195                         + makeListItem(null, "MIME type", item.mimeType)
196                         + makeListItem(null, "Release date", item.releaseDate)
197                         + makeListItem(null, "Modified date", item.modifiedDate)
198                         + makeListItem(null, "Description", item.description)
199                         + makeListItem(null, "Rating", item.rating)
200                         + makeListItem(null, "Thumbnail URI", item.thumbnailURIs[0]);
201 }
202
203 function showMediaDetail() {
204         var str, item = gMediaItems[gItemId];
205
206         if (item.type == "IMAGE") {
207                 str = makeCommonPropertiesListItems(item)
208                         + makeListItem(null, "Width", item.width)
209                         + makeListItem(null, "Height", item.height)
210                         + makeListItem(null, "Latitude", item.geolocation.latitude)
211                         + makeListItem(null, "Longitude", item.geolocation.longitude);
212         } else if (item.type == "VIDEO") {
213                 str = makeCommonPropertiesListItems(item)
214                         + makeListItem(null, "Width", item.width)
215                         + makeListItem(null, "Height", item.height)
216                         + makeListItem(null, "Album", item.album)
217                         + makeListItem(null, "Artist", item.artists[0])
218                         + makeListItem(null, "Duration", item.duration + " Milliseconds");
219         } else if (item.type == "AUDIO") {
220                 str = makeCommonPropertiesListItems(item)
221                         + makeListItem(null, "Album", item.album)
222                         + makeListItem(null, "Artist", item.artists[0])
223                         + makeListItem(null, "Composer", item.composers[0])
224                         + makeListItem(null, "Genre", item.genres[0])
225                         + makeListItem(null, "Copyright", item.copyright)
226                         + makeListItem(null, "Bitrate", item.bitrate + " Bps")
227                         + makeListItem(null, "Track number", item.trackNumber)
228                         + makeListItem(null, "Duration", item.duration + " Milliseconds");
229         } else {
230                 alert("Invalid type");
231                 window.history.back();
232         }
233
234         $("#media-details").html(str).trigger("create").listview("refresh");
235 }
236
237 function updateRating() {
238         var item = gMediaItems[gItemId];
239
240         item.rating += 1; /* increase by 1 */
241         try {
242                 gMediaSource.update(item);
243         } catch (exc) {
244                 alert("updateItem exc: " + exc.message);
245         }
246 }
247
248 function updateLast3Ratings() {
249         function onSuccess() {
250                 getFolderItems(gFolderId, gMediaType);
251         }
252
253         function onError(err) {
254                 alert("updateItemsBatch failed:" + err.message);
255         }
256
257         var itemArray = [];
258
259         for (var i = gMediaItems.length - 1, j = 0; i >= 0 && j < 3; i--, j++) {
260                 gMediaItems[i].rating += 1;
261                 itemArray.push(gMediaItems[i]);
262         }
263
264         try {
265                 gMediaSource.updateBatch(itemArray, onSuccess, onError);
266         } catch (exc) {
267                 alert("updateItemsBatch exc:" + exc.message);
268         }
269 }