diff --git a/app/css/app.css b/app/css/app.css index c987b565..697420c2 100644 --- a/app/css/app.css +++ b/app/css/app.css @@ -618,7 +618,7 @@ a.tg_radio_on:hover i.icon-radio { height: 100%; } .img_fullsize_progress_wrap { - background: rgba(0,0,0, .1); + /*background: rgba(0,0,0, .1);*/ position: relative; } .img_fullsize_progress { @@ -1879,7 +1879,7 @@ img.img_fullsize { margin: 0 auto; } .media_modal_info { - color: #777; + color: #999; margin: 20px 0 0; } .media_modal_actions { diff --git a/app/js/controllers.js b/app/js/controllers.js index ea0aa30b..b4c19d75 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -1050,7 +1050,7 @@ angular.module('myApp.controllers', []) } else { settings.mute_until = 2000000000; } - NotificationsManager.savePeerSettings($scope.userID, settings); + NotificationsManager.updatePeerSettings($scope.userID, settings); }); }); }); @@ -1142,7 +1142,7 @@ angular.module('myApp.controllers', []) } else { settings.mute_until = 2000000000; } - NotificationsManager.savePeerSettings(-$scope.chatID, settings); + NotificationsManager.updatePeerSettings(-$scope.chatID, settings); }); }); }); diff --git a/app/js/lib/mtproto.js b/app/js/lib/mtproto.js index 6a335219..e353d8c8 100644 --- a/app/js/lib/mtproto.js +++ b/app/js/lib/mtproto.js @@ -732,7 +732,7 @@ function TLDeserialization (buffer, options) { TLDeserialization.prototype.readInt = function (field) { if (this.offset >= this.intView.length * 4) { - throw new Error('Nothing to fetch'); + throw new Error('Nothing to fetch: ' + field); } var i = this.intView[this.offset / 4]; diff --git a/app/js/lib/schema.tl.txt b/app/js/lib/schema.tl.txt index d7b0b564..eda52b10 100644 --- a/app/js/lib/schema.tl.txt +++ b/app/js/lib/schema.tl.txt @@ -27,8 +27,8 @@ inputMediaUploadedPhoto#2dc53a7d file:InputFile = InputMedia; inputMediaPhoto#8f2ab2ec id:InputPhoto = InputMedia; inputMediaGeoPoint#f9c44144 geo_point:InputGeoPoint = InputMedia; inputMediaContact#a6e45987 phone_number:string first_name:string last_name:string = InputMedia; -inputMediaUploadedVideo#4847d92a file:InputFile duration:int w:int h:int = InputMedia; -inputMediaUploadedThumbVideo#e628a145 file:InputFile thumb:InputFile duration:int w:int h:int = InputMedia; +inputMediaUploadedVideo#133ad6f6 file:InputFile duration:int w:int h:int mime_type:string = InputMedia; +inputMediaUploadedThumbVideo#9912dabf file:InputFile thumb:InputFile duration:int w:int h:int mime_type:string = InputMedia; inputMediaVideo#7f023ae6 id:InputVideo = InputMedia; inputChatPhotoEmpty#1ca48f57 = InputChatPhoto; @@ -117,7 +117,7 @@ messageActionChatDeletePhoto#95e3fbef = MessageAction; messageActionChatAddUser#5e3cfc4b user_id:int = MessageAction; messageActionChatDeleteUser#b2ae9b0c user_id:int = MessageAction; -dialog#214a8cdf peer:Peer top_message:int unread_count:int = Dialog; +dialog#ab3a99ac peer:Peer top_message:int unread_count:int notify_settings:PeerNotifySettings = Dialog; photoEmpty#2331b22d id:long = Photo; photo#22b56751 id:long access_hash:long user_id:int date:int caption:string geo:GeoPoint sizes:Vector = Photo; @@ -127,7 +127,7 @@ photoSize#77bfb61b type:string location:FileLocation w:int h:int size:int = Phot photoCachedSize#e9a734fa type:string location:FileLocation w:int h:int bytes:bytes = PhotoSize; videoEmpty#c10658a8 id:long = Video; -video#5a04a49f id:long access_hash:long user_id:int date:int caption:string duration:int size:int thumb:PhotoSize dc_id:int w:int h:int = Video; +video#388fa391 id:long access_hash:long user_id:int date:int caption:string duration:int mime_type:string size:int thumb:PhotoSize dc_id:int w:int h:int = Video; geoPointEmpty#1117dd5f = GeoPoint; geoPoint#2049d70c long:double lat:double = GeoPoint; @@ -187,7 +187,7 @@ contacts.link#eccea3f5 my_link:contacts.MyLink foreign_link:contacts.ForeignLink contacts.contacts#6f8b8cb2 contacts:Vector users:Vector = contacts.Contacts; contacts.contactsNotModified#b74ba9d2 = contacts.Contacts; -contacts.importedContacts#d1cd0a4c imported:Vector users:Vector = contacts.ImportedContacts; +contacts.importedContacts#ad524315 imported:Vector retry_contacts:Vector users:Vector = contacts.ImportedContacts; contacts.blocked#1c138d15 blocked:Vector users:Vector = contacts.Blocked; contacts.blockedSlice#900802a1 count:int blocked:Vector users:Vector = contacts.Blocked; @@ -334,7 +334,7 @@ decryptedMessageService#aa48327d random_id:long random_bytes:bytes action:Decryp decryptedMessageMediaEmpty#89f5c4a = DecryptedMessageMedia; decryptedMessageMediaPhoto#32798a8c thumb:bytes thumb_w:int thumb_h:int w:int h:int size:int key:bytes iv:bytes = DecryptedMessageMedia; -decryptedMessageMediaVideo#4cee6ef3 thumb:bytes thumb_w:int thumb_h:int duration:int w:int h:int size:int key:bytes iv:bytes = DecryptedMessageMedia; +decryptedMessageMediaVideo#524a415d thumb:bytes thumb_w:int thumb_h:int duration:int mime_type:string w:int h:int size:int key:bytes iv:bytes = DecryptedMessageMedia; decryptedMessageMediaGeoPoint#35480a59 lat:double long:double = DecryptedMessageMedia; decryptedMessageMediaContact#588a0a97 phone_number:string first_name:string last_name:string user_id:int = DecryptedMessageMedia; @@ -354,7 +354,7 @@ updateChatParticipantAdd#3a0eeb22 chat_id:int user_id:int inviter_id:int version updateChatParticipantDelete#6e5f8c22 chat_id:int user_id:int version:int = Update; updateDcOptions#8e5e9873 dc_options:Vector = Update; -inputMediaUploadedAudio#61a6d436 file:InputFile duration:int = InputMedia; +inputMediaUploadedAudio#4e498cab file:InputFile duration:int mime_type:string = InputMedia; inputMediaAudio#89938781 id:InputAudio = InputMedia; inputMediaUploadedDocument#34e794bd file:InputFile file_name:string mime_type:string = InputMedia; inputMediaUploadedThumbDocument#3e46de5d file:InputFile thumb:InputFile file_name:string mime_type:string = InputMedia; @@ -373,16 +373,30 @@ inputAudioFileLocation#74dc404d id:long access_hash:long = InputFileLocation; inputDocumentFileLocation#4e45abe9 id:long access_hash:long = InputFileLocation; decryptedMessageMediaDocument#b095434b thumb:bytes thumb_w:int thumb_h:int file_name:string mime_type:string size:int key:bytes iv:bytes = DecryptedMessageMedia; -decryptedMessageMediaAudio#6080758f duration:int size:int key:bytes iv:bytes = DecryptedMessageMedia; +decryptedMessageMediaAudio#57e0a9cb duration:int mime_type:string size:int key:bytes iv:bytes = DecryptedMessageMedia; audioEmpty#586988d8 id:long = Audio; -audio#427425e7 id:long access_hash:long user_id:int date:int duration:int size:int dc_id:int = Audio; +audio#c7ac6496 id:long access_hash:long user_id:int date:int duration:int mime_type:string size:int dc_id:int = Audio; documentEmpty#36f8c871 id:long = Document; document#9efc6326 id:long access_hash:long user_id:int date:int file_name:string mime_type:string size:int thumb:PhotoSize dc_id:int = Document; help.support#17c6b5f6 phone_number:string user:User = help.Support; +decryptedMessageActionReadMessages#c4f40be random_ids:Vector = DecryptedMessageAction; +decryptedMessageActionDeleteMessages#65614304 random_ids:Vector = DecryptedMessageAction; +decryptedMessageActionScreenshotMessages#8ac1f475 random_ids:Vector = DecryptedMessageAction; +decryptedMessageActionFlushHistory#6719e45c = DecryptedMessageAction; +decryptedMessageActionNotifyLayer#f3048883 layer:int = DecryptedMessageAction; + +notifyPeer#9fd40bd8 peer:Peer = NotifyPeer; +notifyUsers#b4c83b4c = NotifyPeer; +notifyChats#c007cec3 = NotifyPeer; +notifyAll#74d07c60 = NotifyPeer; + +updateUserBlocked#80ece81a user_id:int blocked:Bool = Update; +updateNotifySettings#bec268ef peer:NotifyPeer notify_settings:PeerNotifySettings = Update; + ---functions--- invokeAfterMsg#cb9f372d msg_id:long query:!X = X; @@ -494,4 +508,4 @@ initConnection#69796de9 api_id:int device_model:string system_version:string app help.getSupport#9cdf08cd = help.Support; -invokeWithLayer12#dda60d3c query:!X = X; \ No newline at end of file +invokeWithLayer14#2b9b08fa query:!X = X; \ No newline at end of file diff --git a/app/js/services.js b/app/js/services.js index b637077f..60aab0b3 100644 --- a/app/js/services.js +++ b/app/js/services.js @@ -770,6 +770,8 @@ angular.module('myApp.services', []) if (historiesStorage[peerID] === undefined) { historiesStorage[peerID] = {count: null, history: [dialog.top_message], pending: []} } + + NotificationsManager.savePeerSettings(peerID, dialog.notify_settings); }); return { @@ -2992,6 +2994,18 @@ angular.module('myApp.services', []) } }); + $rootScope.$on('apiUpdate', function (e, update) { + // console.log('on apiUpdate', update); + switch (update._) { + case 'updateNotifySettings': + if (update.peer._ == 'notifyPeer') { + var peerID = AppPeersManager.getPeerID(update.peer.peer); + savePeerSettings(peerID, update.notify_settings); + } + break; + } + }); + return { start: start, notify: notify, @@ -2999,7 +3013,8 @@ angular.module('myApp.services', []) clear: notificationsClear, getPeerSettings: getPeerSettings, getPeerMuted: getPeerMuted, - savePeerSettings: savePeerSettings + savePeerSettings: savePeerSettings, + updatePeerSettings: updatePeerSettings }; function getPeerSettings (peerID) { @@ -3016,11 +3031,16 @@ angular.module('myApp.services', []) } function savePeerSettings (peerID, settings) { + // console.trace(dT(), 'peer settings', peerID, settings); + peerSettings[peerID] = $q.when(settings); + } + + function updatePeerSettings (peerID, settings) { + savePeerSettings(peerID, settings); + var inputSettings = angular.copy(settings); inputSettings._ = 'inputPeerNotifySettings'; - peerSettings[peerID] = $q.when(settings); - return MtpApiManager.invokeApi('account.updateNotifySettings', { peer: { _: 'inputNotifyPeer',