From 37cebdb237b268b7cbcab421142bae6b5f026217 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Fri, 21 Mar 2014 16:05:40 +0400 Subject: [PATCH] Download videos, attach tooltips --- app/css/app.css | 82 +++++++++++++++++++---------- app/img/icons/IconsetW.png | Bin 12709 -> 14676 bytes app/img/icons/IconsetW_1x.png | Bin 5824 -> 6701 bytes app/js/controllers.js | 12 ++++- app/js/services.js | 94 +++++++++++++++++++++++++++++++--- app/partials/im.html | 34 ++++++------ app/partials/message.html | 55 ++++++++++++++------ 7 files changed, 212 insertions(+), 65 deletions(-) diff --git a/app/css/app.css b/app/css/app.css index 9e407f54..5c7b6e53 100644 --- a/app/css/app.css +++ b/app/css/app.css @@ -256,7 +256,7 @@ input[type="number"]::-webkit-inner-spin-button { vertical-align: text-top; background: url(../img/icons/IconsetW.png) -15px -419px no-repeat; - background-size: 42px 620px; + background-size: 42px 680px; opacity: 0.6; } .is_1x .icon-back { @@ -518,7 +518,7 @@ input[type="number"]::-webkit-inner-spin-button { font-size: 12px; line-height: normal; background: #F2F2F2 url(../img/icons/IconsetW.png) -6px -205px no-repeat; - background-size: 42px 620px; + background-size: 42px 680px; border: 1px solid #F2F2F2; border-radius: 3px; padding: 6px 20px 6px 30px; @@ -542,7 +542,7 @@ input[type="number"]::-webkit-inner-spin-button { height: 13px; vertical-align: text-top; background: url(../img/icons/IconsetW.png) -15px -192px no-repeat; - background-size: 42px 620px; + background-size: 42px 680px; opacity: 0.6; } .is_1x .im_dialogs_search_clear { @@ -795,7 +795,7 @@ a.im_dialog:hover .im_dialog_date { margin-left: 6px; background: url(../img/icons/IconsetW.png) -17px -444px no-repeat; - background-size: 42px 620px; + background-size: 42px 680px; } .is_1x .icon-caret { background-image: url(../img/icons/IconsetW_1x.png); @@ -961,7 +961,6 @@ a.im_message_contact_photo { a.im_message_photo_thumb, a.im_message_video_thumb { display: block; - margin-top: 5px; overflow: hidden; border-radius: 2px; } @@ -970,6 +969,15 @@ img.im_message_video_thumb { overflow: hidden; border-radius: 2px; } +.im_message_video, +a.im_message_photo_thumb { + margin-top: 5px; +} +a.im_message_video_thumb { + float: left; + margin-right: 15px; + position: relative; +} img.im_message_video_thumb { -webkit-filter: blur(2px); @@ -983,21 +991,36 @@ img.im_message_video_thumb { div.im_message_video_thumb { position: relative; } -.im_message_video_duration_wrap { - background: rgba(0, 0, 0, 0.5); +.im_message_video_duration { + background: rgba(0, 0, 0, 0.4); color: #FFF; position: absolute; - margin-top: -15px; - height: 15px; - padding: 0 3px; + bottom: 4px; + right: 4px; + padding: 2px 6px; font-size: 11px; line-height: 15px; - - border-radius: 0 0 2px 2px; + border-radius: 2px; overflow: hidden; + z-index: 1; } -.im_message_video_duration { +.icon-videoplay { + position: absolute; + display: inline-block; + top: 50%; + left: 50%; + margin-left: -21px; + margin-top: -21px; + width: 42px; + height: 42px; + + background: url(../img/icons/IconsetW.png) 0 -590px no-repeat; + background-size: 42px 680px; + z-index: 1; +} +.is_1x .icon-videoplay { + background-image: url(../img/icons/IconsetW_1x.png); } .im_message_geopoint { @@ -1020,7 +1043,7 @@ div.im_message_video_thumb { height: 19px; background: url(../img/icons/IconsetW.png) -14px -389px no-repeat; - background-size: 42px 620px; + background-size: 42px 680px; } .is_1x .icon-geo-point { background-image: url(../img/icons/IconsetW_1x.png); @@ -1048,7 +1071,7 @@ div.im_message_video_thumb { vertical-align: text-top; background: #F2F2F2 url(../img/icons/IconsetW.png) -2px -229px no-repeat; - background-size: 42px 620px; + background-size: 42px 680px; border-radius: 3px; margin-right: 10px; } @@ -1135,7 +1158,7 @@ img.im_message_document_thumb { vertical-align: text-top; background: #F2F2F2 url(../img/icons/IconsetW.png) -2px -277px no-repeat; - background-size: 42px 620px; + background-size: 42px 680px; border-radius: 3px; margin-right: 10px; } @@ -1189,6 +1212,13 @@ img.im_message_document_thumb { .im_message_document_thumbed .im_message_document_name { max-width: 150px; } +.im_message_video .im_message_document_name_wrap, +.im_message_video .im_message_download_progress_wrap { + width: 150px; +} +.im_message_video .im_message_document_name_wrap { + margin-top: 5px; +} .tg_up_progress, .tg_down_progress { @@ -1404,7 +1434,7 @@ textarea.im_message_field { height: 23px; vertical-align: text-top; background: url(../img/icons/IconsetW.png) -12px -68px no-repeat; - background-size: 42px 620px; + background-size: 42px 680px; opacity: 0.8; } .is_1x .icon-paperclip { @@ -1432,7 +1462,7 @@ textarea.im_message_field { height: 23px; vertical-align: text-top; background: url(../img/icons/IconsetW.png) -10px -4px no-repeat; - background-size: 42px 620px; + background-size: 42px 680px; opacity: 0.8; } .is_1x .icon-emoji { @@ -1482,7 +1512,7 @@ textarea.im_message_field { height: 21px; vertical-align: text-top; background: url(../img/icons/IconsetW.png) -9px -132px no-repeat; - background-size: 42px 620px; + background-size: 42px 680px; opacity: 0.8; } .is_1x .icon-camera { @@ -1905,7 +1935,7 @@ img.img_fullsize { .emoji-menu-tail { display: none; background: url(../img/icons/IconsetW.png) -14px -268px no-repeat; - background-size: 42px 620px; + background-size: 42px 680px; width: 14px; height: 7px; margin: 0 83px; @@ -2050,7 +2080,7 @@ img.img_fullsize { font-size: 12px; line-height: normal; background: #F2F2F2 url(../img/icons/IconsetW.png) -6px -205px no-repeat; - background-size: 42px 620px; + background-size: 42px 680px; border: 1px solid #F2F2F2; border-radius: 3px; padding: 6px 20px 6px 30px; @@ -2074,7 +2104,7 @@ img.img_fullsize { height: 13px; vertical-align: text-top; background: url(../img/icons/IconsetW.png) -15px -192px no-repeat; - background-size: 42px 620px; + background-size: 42px 680px; opacity: 0.6; } .is_1x .contacts_modal_search_clear { @@ -2151,7 +2181,7 @@ a.contacts_modal_contact:hover .contacts_modal_contact_status { width: 17px; height: 15px; background: url(../img/icons/IconsetW.png) -13px -366px no-repeat; - background-size: 42px 620px; + background-size: 42px 680px; opacity: 0.5; } .is_1x .icon-contact-tick { @@ -2249,7 +2279,7 @@ a.contacts_modal_contact:hover .contacts_modal_contact_status { height: 15px; background: url(../img/icons/IconsetW.png) -15px -319px no-repeat; - background-size: 42px 620px; + background-size: 42px 680px; } .is_1x .icon-delete { background-image: url(../img/icons/IconsetW_1x.png); @@ -2296,7 +2326,7 @@ a.contacts_modal_contact:hover .contacts_modal_contact_status { height: 26px; margin: 13px 0 0 40px; background: url(../img/icons/IconsetW.png) -9px -516px no-repeat; - background-size: 42px 620px; + background-size: 42px 680px; } .is_1x .icon-select-tick { background-image: url(../img/icons/IconsetW_1x.png); @@ -2531,4 +2561,4 @@ ce671b orange color: #999; font-size: 13px; margin-left: 8px; -} \ No newline at end of file +} diff --git a/app/img/icons/IconsetW.png b/app/img/icons/IconsetW.png index ee6a46c43990b5c7ec294a07a8e2a23be3bd7a05..4ba289bd4c2b8d1e81d8cb8aabbc22755f9f6c0f 100644 GIT binary patch literal 14676 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 diff --git a/app/img/icons/IconsetW_1x.png b/app/img/icons/IconsetW_1x.png index 4aa8b600dcb728e06bc93983533a8b82d67bcaba..6d7ffbc85ba6471567a7d2cf84a8fa3a8f09e4b4 100644 GIT binary patch literal 6701 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 C37~KQ literal 5824 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 diff --git a/app/js/controllers.js b/app/js/controllers.js index 68959328..7a43c9ba 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -623,7 +623,11 @@ angular.module('myApp.controllers', []) $scope.$on('history_append', function (e, addedMessage) { if (addedMessage.peerID == $scope.curDialog.peerID) { if ($scope.mediaType) { - $scope.missedCount++; + if (addedMessage.my) { + toggleMedia(); + } else { + $scope.missedCount++; + } return; } // console.log('append', addedMessage); @@ -665,6 +669,12 @@ angular.module('myApp.controllers', []) } }); + $scope.$on('history_focus', function (e, peerData) { + if ($scope.mediaType) { + toggleMedia(); + } + }); + $scope.$on('apiUpdate', function (e, update) { // console.log('on apiUpdate inline', update); switch (update._) { diff --git a/app/js/services.js b/app/js/services.js index 0fb6428c..aa2b9866 100644 --- a/app/js/services.js +++ b/app/js/services.js @@ -1827,8 +1827,9 @@ angular.module('myApp.services', []) }) -.service('AppVideoManager', function ($rootScope, $modal, $window, MtpApiFileManager, AppUsersManager) { +.service('AppVideoManager', function ($rootScope, $modal, $window, $timeout, MtpApiFileManager, AppUsersManager) { var videos = {}; + var videosForHistory = {}; function saveVideo (apiVideo) { videos[apiVideo.id] = apiVideo; @@ -1844,6 +1845,10 @@ angular.module('myApp.services', []) }; function wrapForHistory (videoID) { + if (videosForHistory[videoID] !== undefined) { + return videosForHistory[videoID]; + } + var video = angular.copy(videos[videoID]), width = 200, height = 200, @@ -1867,7 +1872,7 @@ angular.module('myApp.services', []) video.thumb = thumb; - return video; + return videosForHistory[videoID] = video; } function wrapForFull (videoID) { @@ -1915,7 +1920,76 @@ angular.module('myApp.services', []) }); } + function downloadVideo (videoID, accessHash, popup) { + var video = videos[videoID], + historyVideo = videosForHistory[videoID] || video || {}, + inputFileLocation = { + _: 'inputVideoFileLocation', + id: videoID, + access_hash: accessHash || video.access_hash + }; + + historyVideo.progress = {enabled: true, percent: 1, total: video.size}; + + function updateDownloadProgress (progress) { + console.log('dl progress', progress); + historyVideo.progress.done = progress.done; + historyVideo.progress.percent = Math.max(1, Math.floor(100 * progress.done / progress.total)); + $rootScope.$broadcast('history_update'); + } + + var ext = 'mp4', + mimeType = 'video/mpeg4', + fileName = 'video' + videoID + '.' + ext; + + if (window.chrome && chrome.fileSystem && chrome.fileSystem.chooseEntry) { + + chrome.fileSystem.chooseEntry({ + type: 'saveFile', + suggestedName: fileName, + accepts: [{ + mimeTypes: [mimeType], + extensions: [ext] + }] + }, function (writableFileEntry) { + MtpApiFileManager.downloadFile(video.dc_id, inputFileLocation, video.size, writableFileEntry, {mime: mimeType}).then(function (url) { + delete historyVideo.progress; + console.log('file save done'); + }, function (e) { + console.log('video download failed', e); + historyVideo.progress.enabled = false; + }, updateDownloadProgress); + }); + } else { + MtpApiFileManager.downloadFile(video.dc_id, inputFileLocation, video.size, null, {mime: mimeType}).then(function (url) { + delete historyVideo.progress; + + if (popup) { + window.open(url, '_blank'); + return + } + + var a = $('Download') + .css({position: 'absolute', top: 1, left: 1}) + .attr('href', url) + .attr('target', '_blank') + .attr('download', fileName) + .appendTo('body'); + + a[0].dataset.downloadurl = [mimeType, fileName, url].join(':'); + a[0].click(); + $timeout(function () { + a.remove(); + }, 100); + }, function (e) { + console.log('video download failed', e); + historyVideo.progress.enabled = false; + }, updateDownloadProgress); + } + }; + $rootScope.openVideo = openVideo; + $rootScope.downloadVideo = downloadVideo; return { saveVideo: saveVideo, @@ -1977,7 +2051,7 @@ angular.module('myApp.services', []) return docsForHistory[docID] = doc; } - function openDoc (docID, accessHash, popup) { + function downloadDoc (docID, accessHash, popup) { var doc = docs[docID], historyDoc = docsForHistory[docID] || doc || {}, inputFileLocation = { @@ -2024,8 +2098,14 @@ angular.module('myApp.services', []) return } - var a = $('Download').css({position: 'absolute', top: 1, left: 1}).attr('href', url).attr('target', '_blank').attr('download', doc.file_name).appendTo('body'); - a[0].dataset.downloadurl = ['png', doc.file_name, url].join(':'); + var a = $('Download') + .css({position: 'absolute', top: 1, left: 1}) + .attr('href', url) + .attr('target', '_blank') + .attr('download', doc.file_name) + .appendTo('body'); + + a[0].dataset.downloadurl = [doc.mime_type, doc.file_name, url].join(':'); a[0].click(); $timeout(function () { a.remove(); @@ -2037,12 +2117,12 @@ angular.module('myApp.services', []) } } - $rootScope.openDoc = openDoc; + $rootScope.downloadDoc = downloadDoc; return { saveDoc: saveDoc, wrapForHistory: wrapForHistory, - openDoc: openDoc + downloadDoc: downloadDoc } }) diff --git a/app/partials/im.html b/app/partials/im.html index 492b7f0b..eca2232a 100644 --- a/app/partials/im.html +++ b/app/partials/im.html @@ -118,7 +118,7 @@
-
+
is typing
@@ -175,22 +175,24 @@
Drop photos here to send
-
- - +
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
- -
- - -
- - -
- -
- -
diff --git a/app/partials/message.html b/app/partials/message.html index c35748a7..7214d9cc 100644 --- a/app/partials/message.html +++ b/app/partials/message.html @@ -106,22 +106,47 @@ /> - - -
- {{historyMessage.media.video.duration | duration}} - +
+ + {{historyMessage.media.video.duration | duration}} + + + + +
+
+ Video + + {{historyMessage.media.video.size | formatSize}} + + + {{historyMessage.media.video.progress | formatSizeProgress}} + +
+ +
+
+
+ + {{historyMessage.media.video.progress.percent}}% Complete (success) + +
+
+
- +