2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.1 (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
8 * http://floralicense.org/license
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.
17 var gMediaSource, gMediaFolders, gMediaItems, gItemId, gFolderId,
18 gMediaType = "ALL", gStorageType, gFlagInit, gSpan = $('<span/>');
20 $(document).delegate("#main", "pageinit", function() {
21 var highlightStoragetype = function (storageType) {
22 $("#folder-list li").each(function(){
23 $(this).removeClass("storagetypeHighlight");
25 if (storageType == "ALL") $("#folder-type-all").addClass("storagetypeHighlight");
26 else if (storageType == "INTERNAL") $("#folder-type-internal").addClass("storagetypeHighlight");
27 else if (storageType == "EXTERNAL") $("#folder-type-external").addClass("storagetypeHighlight");
32 gStorageType = gMediaType;
34 highlightStoragetype("ALL");
36 $("#folder-type-all").bind("vclick", function() {
37 showFolderList("ALL");
38 highlightStoragetype("ALL");
41 $("#folder-type-internal").bind("vclick", function() {
42 showFolderList("INTERNAL");
43 highlightStoragetype("INTERNAL");
46 $("#folder-type-external").bind("vclick", function() {
47 showFolderList("EXTERNAL");
48 highlightStoragetype("EXTERNAL");
54 $(document).delegate("#items", "pageinit", function() {
55 $("#items").bind("pageshow", showItemList);
57 $("#items-list input").bind("change", function() {
58 if ($(this).prop("checked") == true) {
59 gMediaType = $(this).attr("value");
60 getFolderItems(gFolderId, gMediaType);
64 $("#items-list").delegate("li", "vclick", function() {
65 var id = $(this).data("id");
68 $.mobile.changePage("#detail");
74 $(document).delegate("#detail", "pageinit", function() {
75 $("#detail").bind("pagebeforeshow", showMediaDetail);
78 $(window).on('tizenhwkey', function (e) {
79 if (e.originalEvent.keyName === "back") {
80 if ($.mobile.activePage.attr('id') === 'main') {
81 tizen.application.getCurrentApplication().exit();
88 function setLastStorage(storageType) {
89 gStorageType = storageType;
92 function makeListItem(id, mainText, subText) {
93 return '<li class="ui-li-has-multiline ui-li-text-ellipsis"'
94 + (id == null ? '' : ' data-id="'+ id +'"')
97 + '<span class="ui-li-text-sub">'
102 function stripTags(str) {
103 return gSpan.text(str).html();
106 function getFolders (storageType) {
108 gMediaSource = tizen.content;
109 gMediaSource.getDirectories(onGetFoldersSuccess, onGetFoldersError);
111 alert("getLocalMediaSource exc:" + exc.message);
114 function onGetFoldersSuccess(folders) {
115 $("#file-list").delegate("li", "vclick", function() {
116 var id = $(this).data("id");
118 getFolderItems(Number(id), gMediaType);
124 gMediaFolders = folders;
125 showFolderList(storageType);
127 * refresh view when looking at external items
128 * while external storage is detaching
130 if($.mobile.activePage.attr("id") == "items") {
135 function onGetFoldersError(err) {
136 alert("GetFolders failed:" + err.message);
142 function onContentChange() {
143 tizen.systeminfo.addPropertyValueChangeListener('STORAGE', function() {
144 $('#main [data-role="content"]').scrollview('scrollTo', 0, 0);
145 getFolders(gStorageType);
149 function showFolderList(storageType) {
150 setLastStorage(storageType);
151 if(gFlagInit == false){
152 getFolders(storageType);
156 gMF = gMediaFolders.length,
158 for ( i = 0; i < gMF; i++) {
159 if (storageType == "ALL" || storageType == gMediaFolders[i].storageType) {
160 str += makeListItem(i, gMediaFolders[i].title, gMediaFolders[i].directoryURI);
163 $("#file-list").empty().hide().append(str).listview("refresh").show();
168 function showItemList() {
169 var str = '', title, i, gMediaLen;
171 title = gMediaFolders[gFolderId].title;
172 $("#items-title").text(gFolderId == null ? "All" : title.toString());
174 gMediaLen = gMediaItems.length;
175 for (i = 0; i < gMediaLen; i += 1) {
176 str += makeListItem(i, gMediaItems[i].title,
177 gMediaItems[i].type + " Rating: " + gMediaItems[i].rating);
179 $("#items-list > li[data-id]").remove();
180 $("#items-list").append(str).trigger("create").listview("refresh");
182 gMediaType = gStorageType = "ALL";
183 getFolders(gStorageType);
184 $("#folder-list li").removeClass("storagetypeHighlight");
185 $("#folder-type-all").addClass("storagetypeHighlight");
186 $.mobile.changePage("#main");
190 function getFolderItems(folderId, mediaType) {
191 function onFindItemsSuccess(items) {
193 gFolderId = folderId;
194 gMediaType = mediaType;
196 if($.mobile.activePage.attr("id") == "items") {
199 $.mobile.changePage("#items");
203 function onFindItemsError(err) {
204 alert("getFolderItems findItems failed: " + err.message);
208 gMediaSource.find(onFindItemsSuccess, onFindItemsError,
209 folderId == null ? null : gMediaFolders[folderId].id,
210 mediaType == "ALL" ? null : new tizen.AttributeFilter("type", "EXACTLY", mediaType),
211 new tizen.SortMode("title", "ASC"));
213 //alert("findItems exc:" + exc.message);
217 function makeCommonPropertiesListItems(item) {
218 return makeListItem(null, "Title", item.title)
219 + makeListItem(null, "Size", item.size + " Bytes")
220 + makeListItem(null, "Type", item.type)
221 + makeListItem(null, "Identifier", item.id)
222 + makeListItem(null, "Item URI", item.contentURI)
223 + makeListItem(null, "MIME type", item.mimeType)
224 + makeListItem(null, "Modified date", item.modifiedDate.toLocaleString())
225 + makeListItem(null, "Description", item.description)
226 + makeListItem(null, "Rating", item.rating);
229 function showMediaDetail() {
230 var str, item = gMediaItems[gItemId];
231 if (item.type == "IMAGE") {
232 str = makeCommonPropertiesListItems(item)
233 + makeListItem(null, "Width", item.width)
234 + makeListItem(null, "Height", item.height);
235 if (item.geolocation) {
236 str += makeListItem(null, "Latitude", item.geolocation.latitude)
237 + makeListItem(null, "Longitude", item.geolocation.longitude);
239 } else if (item.type == "VIDEO") {
240 str = makeCommonPropertiesListItems(item)
241 + makeListItem(null, "Width", item.width)
242 + makeListItem(null, "Height", item.height)
243 + makeListItem(null, "Album", item.album)
244 + makeListItem(null, "Artist", item.artists[0])
245 + makeListItem(null, "Duration", item.duration + " Milliseconds");
246 } else if (item.type == "AUDIO") {
247 str = makeCommonPropertiesListItems(item)
248 + makeListItem(null, "Album", item.album)
249 + makeListItem(null, "Artist", item.artists[0])
250 + makeListItem(null, "Composer", item.composers[0])
251 + makeListItem(null, "Genre", item.genres[0])
252 + makeListItem(null, "Copyright", item.copyright)
253 + makeListItem(null, "Bitrate", item.bitrate + " Bps")
254 + makeListItem(null, "Track number", item.trackNumber)
255 + makeListItem(null, "Duration", item.duration + " Milliseconds");
257 str = makeCommonPropertiesListItems(item);
260 $("#media-details").html(str).trigger("create").listview("refresh");