[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         $("#folder-type-all").bind("click", function() {
35                 showFolderList("ALL");
36                 highlightStoragetype("ALL");
37         });
38
39         $("#folder-type-internal").bind("click", function() {
40                 showFolderList("INTERNAL");
41                 highlightStoragetype("INTERNAL");
42         });
43
44         $("#folder-type-external").bind("click", function() {
45                 showFolderList("EXTERNAL");
46                 highlightStoragetype("EXTERNAL");
47         });
48
49         onContentChange();
50 });
51
52 $(document).delegate("#items", "pageinit", function() {
53         $("#items").bind("pageshow", showItemList);
54
55         $("#items-list input").bind("change", function() {
56                 if ($(this).prop("checked") == true) {
57                         gMediaType = $(this).attr("value");
58                         getFolderItems(gFolderId, gMediaType);
59                 }
60         });
61
62         $("#items-list").delegate("li", "click", function() {
63                 var id = $(this).data("id");
64                 if (id != null) {
65                         gItemId = Number(id);
66                         $.mobile.changePage("#detail");
67                 }
68                 return false;
69         });
70 });
71
72 $(document).delegate("#detail", "pageinit", function() {
73         $("#detail").bind("pagebeforeshow", showMediaDetail);
74 });
75
76 $(window).on('tizenhwkey', function (e) {
77         if (e.originalEvent.keyName === "back") {
78                 if ($.mobile.activePage.attr('id') === 'main') {
79                         tizen.application.getCurrentApplication().exit();
80                 } else {
81                         history.back();
82                 }
83         }
84 });
85
86 function setLastStorage(storageType) {
87         gStorageType = storageType;
88 }
89
90 function makeListItem(id, mainText, subText) {
91         return '<li class="ui-li-has-multiline ui-li-text-ellipsis"'
92                         + (id == null ? '' : ' data-id="'+ id +'"')
93                         + '>'
94                         + stripTags(mainText)
95                         + '<span class="ui-li-text-sub">'
96                         + stripTags(subText)
97                         + '</span></li>';
98 }
99
100 function stripTags(str) {
101         return gSpan.text(str).html();
102 }
103
104 function getFolders (storageType) {
105         try {
106                 gMediaSource = tizen.content;
107                 gMediaSource.getDirectories(onGetFoldersSuccess, onGetFoldersError);
108         } catch (exc) {
109                 alert("getLocalMediaSource exc:" + exc.message);
110         }
111
112         function onGetFoldersSuccess(folders) {
113                 $("#file-list").delegate("li", "vclick", function() {
114                         var id = $(this).data("id");
115                         if (id != null) {
116                                 getFolderItems(Number(id), gMediaType);
117
118                         }
119                         return false;
120                 });
121
122                 gMediaFolders = folders;
123                 showFolderList(storageType);
124                 /*
125                  * refresh view when looking at external items
126                  * while external storage is detaching
127                  */
128                 if($.mobile.activePage.attr("id") == "items") {
129                         showItemList();
130                 }
131         }
132
133         function onGetFoldersError(err) {
134                 alert("GetFolders failed:" + err.message);
135         }
136
137         gFlagInit = true;
138 }
139
140 function onContentChange() {
141         tizen.systeminfo.addPropertyValueChangeListener('STORAGE', function() {
142                 getFolders(gStorageType);
143         });
144 }
145
146 function showFolderList(storageType) {
147         setLastStorage(storageType);
148         if(gFlagInit == false){
149                 getFolders(storageType);
150         }
151         else{
152                 var str = '',
153                         gMF = gMediaFolders.length,
154                         i;
155                 for ( i = 0; i < gMF; i++) {
156                         if (storageType == "ALL" || storageType == gMediaFolders[i].storageType) {
157                                 str += makeListItem(i, gMediaFolders[i].title, gMediaFolders[i].directoryURI);
158                         }
159                 }
160                 $("#file-list").empty().hide().append(str).listview("refresh").show();
161         }
162 }
163
164
165 function showItemList() {
166         var str = '', title, i, gMediaLen;
167         try {
168                 title = gMediaFolders[gFolderId].title;
169                 $("#items-title").text(gFolderId == null ? "All" : title.toString());
170
171                 gMediaLen = gMediaItems.length;
172                 for (i = 0; i < gMediaLen; i += 1) {
173                         str += makeListItem(i, gMediaItems[i].title,
174                                         gMediaItems[i].type + "  Rating: " + gMediaItems[i].rating);
175                 }
176                 $("#items-list > li[data-id]").remove();
177                 $("#items-list").append(str).trigger("create").listview("refresh");
178         } catch (exc) {
179                 gMediaType = gStorageType = "ALL";
180                 getFolders(gStorageType);
181                 $("#folder-list li").removeClass("storagetypeHighlight");
182                 $("#folder-type-all").addClass("storagetypeHighlight");
183                 $.mobile.changePage("#main");
184         }
185 }
186
187 function getFolderItems(folderId, mediaType) {
188         function onFindItemsSuccess(items) {
189                 gMediaItems = items;
190                 gFolderId = folderId;
191                 gMediaType = mediaType;
192
193                 if($.mobile.activePage.attr("id") == "items") {
194                         showItemList();
195                 } else {
196                         $.mobile.changePage("#items");
197                 }
198         }
199
200         function onFindItemsError(err) {
201                 alert("getFolderItems findItems failed: " + err.message);
202         }
203
204         try {
205                 gMediaSource.find(onFindItemsSuccess, onFindItemsError,
206                                 folderId == null ? null : gMediaFolders[folderId].id,
207                                 mediaType == "ALL" ? null : new tizen.AttributeFilter("type", "EXACTLY", mediaType),
208                                 new tizen.SortMode("title", "ASC"));
209         } catch (exc) {
210                 //alert("findItems exc:" + exc.message);
211         }
212 }
213
214 function makeCommonPropertiesListItems(item) {
215         return makeListItem(null, "Title", item.title)
216                         + makeListItem(null, "Size", item.size + " Bytes")
217                         + makeListItem(null, "Type", item.type)
218                         + makeListItem(null, "Identifier", item.id)
219                         + makeListItem(null, "Item URI", item.contentURI)
220                         + makeListItem(null, "MIME type", item.mimeType)
221                         + makeListItem(null, "Modified date", item.modifiedDate.toLocaleString())
222                         + makeListItem(null, "Description", item.description)
223                         + makeListItem(null, "Rating", item.rating);
224 }
225
226 function showMediaDetail() {
227         var str, item = gMediaItems[gItemId];
228         if (item.type == "IMAGE") {
229                 str = makeCommonPropertiesListItems(item)
230                         + makeListItem(null, "Width", item.width)
231                         + makeListItem(null, "Height", item.height);
232                 if (item.geolocation) {
233                         str += makeListItem(null, "Latitude", item.geolocation.latitude)
234                                 + makeListItem(null, "Longitude", item.geolocation.longitude);
235                 }
236         } else if (item.type == "VIDEO") {
237                 str = makeCommonPropertiesListItems(item)
238                         + makeListItem(null, "Width", item.width)
239                         + makeListItem(null, "Height", item.height)
240                         + makeListItem(null, "Album", item.album)
241                         + makeListItem(null, "Artist", item.artists[0])
242                         + makeListItem(null, "Duration", item.duration + " Milliseconds");
243         } else if (item.type == "AUDIO") {
244                 str = makeCommonPropertiesListItems(item)
245                         + makeListItem(null, "Album", item.album)
246                         + makeListItem(null, "Artist", item.artists[0])
247                         + makeListItem(null, "Composer", item.composers[0])
248                         + makeListItem(null, "Genre", item.genres[0])
249                         + makeListItem(null, "Copyright", item.copyright)
250                         + makeListItem(null, "Bitrate", item.bitrate + " Bps")
251                         + makeListItem(null, "Track number", item.trackNumber)
252                         + makeListItem(null, "Duration", item.duration + " Milliseconds");
253         } else {
254                 str = makeCommonPropertiesListItems(item);
255         }
256
257         $("#media-details").html(str).trigger("create").listview("refresh");
258 }
259