[Mediacontent] updated Mediacontent sources
[samples/web/Mediacontent.git] / js / main.js
1 /*
2  *        Copyright 2012  Samsung Electronics Co., Ltd
3  *
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
7  *
8  *                        http://floralicense.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,
18 gMediaType = "ALL", gStorageType, gFlagInit, gSpan = $('<span/>');
19
20 $(document).delegate("#main", "pageinit", function() {
21         var highlightStoragetype =  function (storageType) {
22                 $("#folder-list li").each(function(){
23                         $(this).removeClass("storagetypeHighlight");
24                 });
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");
28         };
29
30         gFlagInit = false;
31
32         gStorageType = gMediaType;
33
34         highlightStoragetype("ALL");
35
36         $("#folder-type-all").bind("vclick", function() {
37                 showFolderList("ALL");
38                 highlightStoragetype("ALL");
39         });
40
41         $("#folder-type-internal").bind("vclick", function() {
42                 showFolderList("INTERNAL");
43                 highlightStoragetype("INTERNAL");
44         });
45
46         $("#folder-type-external").bind("vclick", function() {
47                 showFolderList("EXTERNAL");
48                 highlightStoragetype("EXTERNAL");
49         });
50
51         onContentChange();
52 });
53
54 $(document).delegate("#items", "pageinit", function() {
55         $("#items").bind("pageshow", showItemList);
56
57         $("#items-list input").bind("change", function() {
58                 if ($(this).prop("checked") == true) {
59                         gMediaType = $(this).attr("value");
60                         getFolderItems(gFolderId, gMediaType);
61                 }
62         });
63
64         $("#items-list").delegate("li", "vclick", function() {
65                 var id = $(this).data("id");
66                 if (id != null) {
67                         gItemId = Number(id);
68                         $.mobile.changePage("#detail");
69                 }
70                 return false;
71         });
72 });
73
74 $(document).delegate("#detail", "pageinit", function() {
75         $("#detail").bind("pagebeforeshow", showMediaDetail);
76 });
77
78 $(window).on('tizenhwkey', function (e) {
79         if (e.originalEvent.keyName === "back") {
80                 if ($.mobile.activePage.attr('id') === 'main') {
81                         tizen.application.getCurrentApplication().exit();
82                 } else {
83                         history.back();
84                 }
85         }
86 });
87
88 function setLastStorage(storageType) {
89         gStorageType = storageType;
90 }
91
92 function makeListItem(id, mainText, subText) {
93         return '<li class="ui-li-has-multiline ui-li-text-ellipsis"'
94                         + (id == null ? '' : ' data-id="'+ id +'"')
95                         + '>'
96                         + stripTags(mainText)
97                         + '<span class="ui-li-text-sub">'
98                         + stripTags(subText)
99                         + '</span></li>';
100 }
101
102 function stripTags(str) {
103         return gSpan.text(str).html();
104 }
105
106 function getFolders (storageType) {
107         try {
108                 gMediaSource = tizen.content;
109                 gMediaSource.getDirectories(onGetFoldersSuccess, onGetFoldersError);
110         } catch (exc) {
111                 alert("getLocalMediaSource exc:" + exc.message);
112         }
113
114         function onGetFoldersSuccess(folders) {
115                 $("#file-list").delegate("li", "vclick", function() {
116                         var id = $(this).data("id");
117                         if (id != null) {
118                                 getFolderItems(Number(id), gMediaType);
119
120                         }
121                         return false;
122                 });
123
124                 gMediaFolders = folders;
125                 showFolderList(storageType);
126                 /*
127                  * refresh view when looking at external items
128                  * while external storage is detaching
129                  */
130                 if($.mobile.activePage.attr("id") == "items") {
131                         showItemList();
132                 }
133         }
134
135         function onGetFoldersError(err) {
136                 alert("GetFolders failed:" + err.message);
137         }
138
139         gFlagInit = true;
140 }
141
142 function onContentChange() {
143         tizen.systeminfo.addPropertyValueChangeListener('STORAGE', function() {
144                 $('#main [data-role="content"]').scrollview('scrollTo', 0, 0);
145                 getFolders(gStorageType);
146         });
147 }
148
149 function showFolderList(storageType) {
150         setLastStorage(storageType);
151         if(gFlagInit == false){
152                 getFolders(storageType);
153         }
154         else{
155                 var str = '',
156                         gMF = gMediaFolders.length,
157                         i;
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);
161                         }
162                 }
163                 $("#file-list").empty().hide().append(str).listview("refresh").show();
164         }
165 }
166
167
168 function showItemList() {
169         var str = '', title, i, gMediaLen;
170         try {
171                 title = gMediaFolders[gFolderId].title;
172                 $("#items-title").text(gFolderId == null ? "All" : title.toString());
173
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);
178                 }
179                 $("#items-list > li[data-id]").remove();
180                 $("#items-list").append(str).trigger("create").listview("refresh");
181         } catch (exc) {
182                 gMediaType = gStorageType = "ALL";
183                 getFolders(gStorageType);
184                 $("#folder-list li").removeClass("storagetypeHighlight");
185                 $("#folder-type-all").addClass("storagetypeHighlight");
186                 $.mobile.changePage("#main");
187         }
188 }
189
190 function getFolderItems(folderId, mediaType) {
191         function onFindItemsSuccess(items) {
192                 gMediaItems = items;
193                 gFolderId = folderId;
194                 gMediaType = mediaType;
195
196                 if($.mobile.activePage.attr("id") == "items") {
197                         showItemList();
198                 } else {
199                         $.mobile.changePage("#items");
200                 }
201         }
202
203         function onFindItemsError(err) {
204                 alert("getFolderItems findItems failed: " + err.message);
205         }
206
207         try {
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"));
212         } catch (exc) {
213                 //alert("findItems exc:" + exc.message);
214         }
215 }
216
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);
227 }
228
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);
238                 }
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");
256         } else {
257                 str = makeCommonPropertiesListItems(item);
258         }
259
260         $("#media-details").html(str).trigger("create").listview("refresh");
261 }
262