diff --git a/js/app.js b/js/app.js index f538ed79..fb5f74dd 100644 --- a/js/app.js +++ b/js/app.js @@ -62,18 +62,19 @@ controller:"UserModalController",scope:a,windowClass:"user_modal_window mobile_m }:{_:"updateNewStickerSet",stickerset:e},l.processUpdateMessage({_:"updateShort",update:i})})}function y(e){return b({_:"inputStickerSetShortName",short_name:e})}function b(e){var i=t.$new(!0);i.inputStickerset=e;n.open({templateUrl:templateUrl("stickerset_modal"),controller:"StickersetModalController",scope:i,windowClass:"stickerset_modal_window mobile_modal"})}function w(e){for(var t,n=0,i=0;i1209600||(i=e[t][0],f.hasUser(i)||f.saveApiUser(e[t][1]),a.push({id:i,rate:e[t][2],date:e[t][3]}))}return a})}function y(e){v().then(function(t){for(var i=!1,a=t.length,r=[],o=0;o15&&(r=r.slice(0,15)),r.push([e,f.getUser(e),1,tsNow(!0)])),ConfigStorage.set({inline_bots_popular:r}),n.$broadcast("inline_bots_popular")})}function b(n){return m.resolveUsername(n).then(function(i){if(i>0){var a=f.getUser(i);if(a.pFlags.bot&&void 0!==a.bot_inline_placeholder){var r={username:n,id:i,placeholder:a.bot_inline_placeholder};return a.pFlags.bot_inline_geo&&_.isAvailable()?x(i).then(function(){return _.getPosition().then(function(t){return r.geo=t,e.when(r)})})["catch"](function(){return e.when(r)}):e.when(r)}}return t.reject()},function(e){return e.handled=!0,t.reject(e)})}function w(e,t,n,i,a){return o.invokeApi("messages.getInlineBotResults",{flags:0|(i?1:0),bot:f.getUserInput(t),peer:m.getInputPeerByID(e),query:n,geo_point:i&&{_:"inputGeoPoint",lat:i.lat,"long":i["long"]},offset:a},{timeout:1,stopTime:-1,noErrorBox:!0}).then(function(e){var n=e.query_id;return delete e._,delete e.flags,delete e.query_id,e.switch_pm&&(e.switch_pm.rText=p.wrapRichText(e.switch_pm.text,{noLinebreaks:!0,noLinks:!0})),angular.forEach(e.results,function(e){var i=n+"_"+e.id;e.qID=i,e.botID=t,e.rTitle=p.wrapRichText(e.title,{noLinebreaks:!0,noLinks:!0}),e.rDescription=p.wrapRichText(e.description,{noLinebreaks:!0,noLinks:!0}),e.initials=(e.url||e.title||e.type||"").substr(0,1),e.document&&c.saveDoc(e.document),e.photo&&d.savePhoto(e.photo),P[i]=e}),e})}function k(e,t,n){if(e&&e[0]&&["photo","gif","sticker"].indexOf(e[0].type)!=-1){var i=[];angular.forEach(e,function(e){var t,n,a,r;if("botInlineMediaResult"==e._){if(a=e.document)t=e.document.w,n=e.document.h;else if(r=e.photo){var o=(r.sizes||[])[0];t=o&&o.w,n=o&&o.h}}else t=e.w,n=e.h;t&&n||(t=n=1),i.push(t/n)});var a=[],r=0,o=0;angular.forEach(i,function(e){var i=e*n;o+=i,!r||r<4&&o<1.1*t?r++:(a.push(r),r=1,o=i)}),r&&a.push(r);var s=0,l=a.length-1;angular.forEach(a,function(a,r){var o=r==l,c=i.slice(s,s+a),d=0;angular.forEach(c,function(e){d+=e}),angular.forEach(c,function(i,a){var r=n,l=t*i/d,c=r*i;o&&l>c&&(l=c);var u=e[s+a];u.thumbW=Math.floor(l)-2,u.thumbH=Math.floor(r)-2}),s+=a})}}function M(e,t,i){var r=m.getPeerString(e),o={};o["inline_switch_pm"+t]={peer:r,time:tsNow()},a.set(o),n.$broadcast("history_focus",{peerString:m.getPeerString(t)}),s.startBot(t,0,i)}function S(t){var n=f.getUser(t);if(!n||!n.pFlags.bot||!n.bot_inline_placeholder)return e.when(!1);var i="inline_switch_pm"+t;return a.get(i).then(function(e){return!!(e&&(a.remove(i),tsNow()-e.time<36e5))&&e.peer})}function A(e,t,i){n.$broadcast("history_focus",{peerString:t,attachment:{_:"inline_query",mention:"@"+f.getUser(e).username,query:i}})}function C(e,t){var n=s.getMessage(e),i=n.viaBotID||n.fromID;if(t.pFlags&&t.pFlags.same_peer){var a=s.getMessagePeer(n),r=m.getPeerString(a);return void A(i,r,t.query)}return S(i).then(function(e){return e?A(i,e,t.query):void g.selectPeer({canSend:!0}).then(function(e){return A(i,e,t.query)})})}function T(e,t){var n=s.getMessage(e),i=(n.fromID,s.getMessagePeer(n));return o.invokeApi("messages.getBotCallbackAnswer",{flags:1,peer:m.getInputPeerByID(i),msg_id:l.getMessageLocalID(e),data:t.data},{timeout:1,stopTime:-1,noErrorBox:!0}).then(function(e){if("string"==typeof e.message&&e.message.length)$(e.message,e.pFlags.alert);else if("string"==typeof e.url){var t=p.wrapUrl(e.url,!0);h.openUrl(t)}})}function E(e){var t=s.getMessage(e),n=s.getMessagePeer(t);return o.invokeApi("messages.getBotCallbackAnswer",{flags:2,peer:m.getInputPeerByID(n),msg_id:l.getMessageLocalID(e)},{timeout:1,stopTime:-1,noErrorBox:!0}).then(function(n){"string"==typeof n.message&&n.message.length?$(n.message,n.pFlags.alert):"string"==typeof n.url&&u.openGame(t.media.game.id,e,n.url)})}function $(e,t){if("string"==typeof e&&e.length){var n=p.wrapRichText(e,{noLinks:!0,noLinebreaks:!0});t?r.show({title_html:n,alert:!0}):i.pop({type:"info",body:n.valueOf(),bodyOutputType:"trustedHtml",showCloseButton:!1})}}function I(e,t,n){var i=P[t];if(void 0===i)return!1;y(i.botID);var a=t.split("_"),r=a.shift(),o=a.join("_");if(n=n||{},n.viaBotID=i.botID,n.queryID=r,n.resultID=o,i.send_message.reply_markup&&(n.reply_markup=i.send_message.reply_markup),"botInlineMessageText"==i.send_message._)n.entities=i.send_message.entities,s.sendText(e,i.send_message.message,n);else{var l="",c=!1;switch(i.send_message._){case"botInlineMessageMediaAuto":if(l=i.send_message.caption,"botInlineMediaResult"==i._){var d=i.document,u=i.photo;c=d?{_:"inputMediaDocument",id:{_:"inputDocument",id:d.id,access_hash:d.access_hash},caption:l}:{_:"inputMediaPhoto",id:{_:"inputPhoto",id:u.id,access_hash:u.access_hash},caption:l}}break;case"botInlineMessageMediaGeo":c={_:"inputMediaGeoPoint",geo_point:{_:"inputGeoPoint",lat:i.send_message.geo.lat,"long":i.send_message.geo["long"]}};break;case"botInlineMessageMediaVenue":c={_:"inputMediaVenue",geo_point:{_:"inputGeoPoint",lat:i.send_message.geo.lat,"long":i.send_message.geo["long"]},title:i.send_message.title,address:i.send_message.address,provider:i.send_message.provider,venue_id:i.send_message.venue_id};break;case"botInlineMessageMediaContact":c={_:"inputMediaContact",phone_number:i.send_message.phone_number,first_name:i.send_message.first_name,last_name:i.send_message.last_name}}c||(c={_:"messageMediaPending",type:i.type,file_name:i.title||i.content_url||i.url,size:0,progress:{percent:30,total:0}}),s.sendOther(e,c,n)}}function x(e){var n="bot_access_geo"+e;return a.get(n).then(function(e){return!(!e||!e.granted)||r.confirm({type:"BOT_ACCESS_GEO_INLINE"}).then(function(){var e={};return e[n]={granted:!0,time:tsNow()},a.set(e),!0},function(){var e={};return e[n]={denied:!0,time:tsNow()},a.set(e),t.reject()})})}var P={};return{resolveInlineMention:b,getPopularBots:v,sendInlineResult:I,getInlineResults:w,regroupWrappedResults:k,switchToPM:M,checkSwitchReturn:S,switchInlineButtonClick:C,callbackButtonClick:T,gameButtonClick:E}}]).service("ApiUpdatesManager",["$rootScope","MtpNetworkerFactory","AppUsersManager","AppChatsManager","AppPeersManager","MtpApiManager",function(e,t,n,i,a,r){function o(){var e=_.seq+1,t=_.pendingSeqUpdates[e];if(!t)return!1;for(var n,i,a=t.updates,n=0,i=a.length;n=_.syncPending.seqAwaiting&&(_.syncPending.ptsAwaiting?delete _.syncPending.seqAwaiting:(clearTimeout(_.syncPending.timeout),_.syncPending=!1)),!0}function s(e){var t=e?f(e):_;if(!t.pendingPtsUpdates.length)return!1;t.pendingPtsUpdates.sort(function(e,t){return e.pts-t.pts});for(var n,i=t.pts,a=!1,r=!1,o=0,s=t.pendingPtsUpdates.length;o=n.pts&&(a=n.pts,r=o);if(!a)return!1;for(console.log(dT(),"pop pending pts updates",a,t.pendingPtsUpdates.slice(0,r+1)),t.pts=a,o=0;o<=r;o++)n=t.pendingPtsUpdates[o],h(n);return t.pendingPtsUpdates.splice(0,r+1),!t.pendingPtsUpdates.length&&t.syncPending&&(t.syncPending.seqAwaiting?delete t.syncPending.ptsAwaiting:(clearTimeout(t.syncPending.timeout),t.syncPending=!1)),!0}function l(){_.syncLoading||d()}function c(e,t){var r={date:e.date,seq:e.seq,seqStart:e.seq_start};switch(e._){case"updatesTooLong":case"new_session_created":l();break;case"updateShort":m(e.update,r);break;case"updateShortMessage":case"updateShortChatMessage":var o=2&e.flags,s=e.from_id||(o?y:e.user_id),c=e.chat_id?-e.chat_id:o?e.user_id:y;m({_:"updateNewMessage",message:{_:"message",flags:e.flags,pFlags:e.pFlags,id:e.id,from_id:s,to_id:a.getOutputPeer(c),date:e.date,message:e.message,fwd_from:e.fwd_from,reply_to_msg_id:e.reply_to_msg_id,entities:e.entities},pts:e.pts,pts_count:e.pts_count},r);break;case"updatesCombined":case"updates":n.saveApiUsers(e.users),i.saveApiChats(e.chats),angular.forEach(e.updates,function(e){m(e,r)});break;default:console.warn(dT(),"Unknown update message",e)}}function d(){_.syncLoading||(_.syncLoading=!0,_.pendingSeqUpdates={},_.pendingPtsUpdates=[]),_.syncPending&&(clearTimeout(_.syncPending.timeout),_.syncPending=!1),r.invokeApi("updates.getDifference",{pts:_.pts,date:_.date,qts:-1},{timeout:2147483647}).then(function(t){if("updates.differenceEmpty"==t._)return console.log(dT(),"apply empty diff",t.seq),_.date=t.date,_.seq=t.seq,_.syncLoading=!1,e.$broadcast("stateSynchronized"),!1;n.saveApiUsers(t.users),i.saveApiChats(t.chats);angular.forEach(t.other_updates,function(e){switch(e._){case"updateChannelTooLong":case"updateNewChannelMessage":case"updateEditChannelMessage":return void m(e)}h(e)}),angular.forEach(t.new_messages,function(e){h({_:"updateNewMessage",message:e,pts:_.pts,pts_count:0})});var a=t.intermediate_state||t.state;_.seq=a.seq,_.pts=a.pts,_.date=a.date,"updates.differenceSlice"==t._?d():(e.$broadcast("stateSynchronized"),_.syncLoading=!1)},function(){_.syncLoading=!1})}function u(t){var a=f(t);a.syncLoading||(a.syncLoading=!0,a.pendingPtsUpdates=[]),a.syncPending&&(clearTimeout(a.syncPending.timeout),a.syncPending=!1),r.invokeApi("updates.getChannelDifference",{channel:i.getChannelInput(t),filter:{_:"channelMessagesFilterEmpty"},pts:a.pts,limit:30},{timeout:2147483647}).then(function(r){return a.pts=r.pts,"updates.channelDifferenceEmpty"==r._?(console.log(dT(),"apply channel empty diff",r),a.syncLoading=!1,e.$broadcast("stateSynchronized"),!1):"updates.channelDifferenceTooLong"==r._?(console.log(dT(),"channel diff too long",r),a.syncLoading=!1,delete v[t],h({_:"updateChannelReload",channel_id:t}),!1):(n.saveApiUsers(r.users),i.saveApiChats(r.chats),console.log(dT(),"applying",r.other_updates.length,"channel other updates"),angular.forEach(r.other_updates,function(e){h(e)}),console.log(dT(),"applying",r.new_messages.length,"channel new messages"),angular.forEach(r.new_messages,function(e){h({_:"updateNewChannelMessage",message:e,pts:a.pts,pts_count:0})}),console.log(dT(),"apply channel diff",a.pts),void("updates.channelDifference"!=r._||r.pFlags["final"]?(console.log(dT(),"finished channel get diff"),e.$broadcast("stateSynchronized"),a.syncLoading=!1):u(t)))},function(){a.syncLoading=!1})}function p(e,t){if(!t)throw new Error("Add channel state without pts "+e);return void 0===v[e]&&(v[e]={pts:t,pendingPtsUpdates:[],syncPending:!1,syncLoading:!1},!0)}function f(e,t){return void 0===v[e]&&p(e,t),v[e]}function m(e,t){t=t||{};var r=!1;switch(e._){case"updateNewChannelMessage":case"updateEditChannelMessage":r=-a.getPeerID(e.message.to_id);break;case"updateDeleteChannelMessages":r=e.channel_id;break;case"updateChannelTooLong":if(r=e.channel_id,void 0===v[r])return!1}var c=r?f(r,e.pts):_;if(c.syncLoading)return!1;if("updateChannelTooLong"==e._)return(!c.lastPtsUpdateTime||c.lastPtsUpdateTime0&&!n.hasUser(m)&&(y="toPeer User")||m<0&&!i.hasChat(-m)&&(y="toPeer Chat"))return console.warn(dT(),"Not enough data for message update",m,y,p),r&&i.hasChat(r)?u(r):l(),!1}else if(r&&!i.hasChat(r))return!1;var b,w;if(e.pts){var k=c.pts+(e.pts_count||0);if(kc.pts)c.pts=e.pts,b=!0,c.lastPtsUpdateTime=tsNow();else if(e.pts_count)return!1;r&&t.date&&_.date0){var M=t.seq,S=t.seqStart||M;if(S!=c.seq+1&&S>c.seq)return console.warn(dT(),"Seq hole",c,c.syncPending&&c.syncPending.seqAwaiting),void 0===c.pendingSeqUpdates[S]&&(c.pendingSeqUpdates[S]={seq:M,date:t.date,updates:[]}),c.pendingSeqUpdates[S].updates.push(e),c.syncPending||(c.syncPending={timeout:setTimeout(function(){d()},5e3)}),(!c.syncPending.seqAwaiting||c.syncPending.seqAwaitingf)||(f=!1,!1))}var c,d=0,u=!1,p=0,f=!1;return n.getUserID().then(function(e){p=e}),t.$on("apiUpdate",function(e,t){"updateUserStatus"==t._&&t.user_id==p&&(f=tsNow()+("userStatusOnline"==t.status._?3e5:0))}),{start:r,isOtherDeviceActive:l}}]).service("NotificationsManager",["$rootScope","$window","$interval","$q","$modal","_","toaster","MtpApiManager","AppPeersManager","AppChatsManager","AppUsersManager","IdleManager","Storage","AppRuntimeManager","FileManager","WebPushApiManager",function(e,t,n,i,a,r,o,s,l,c,d,u,p,f,m,h){function g(){p.get("notify_nodesktop","notify_volume","notify_novibrate","notify_nopreview","notify_nopush").then(function(e){if(ee.nodesktop=e[0],ee.volume=e[1]===!1?.5:e[1],ee.novibrate=e[2],ee.nopreview=e[3],ee.nopush=e[4],ne){var t=!ee.nopush&&!ee.nodesktop&&h.isAvailable||!1,n=te!==!1;t!=n&&(t?h.subscribe():h.unsubscribe())}h.setSettings(ee)})}function _(){return ee}function v(e){return void 0!==K[e]?K[e]:K[e]=s.invokeApi("account.getNotifySettings",{peer:{_:"inputNotifyPeer",peer:l.getInputPeerByID(e)}})}function y(e){if(e=e||"favicon.ico",U!==e){var t=document.createElement("link");t.rel="shortcut icon",t.type="image/x-icon",t.href=e,Y.parentNode.replaceChild(t,Y),Y=t,U=e}}function b(t,n){K[t]=i.when(n),e.$broadcast("notify_settings",{peerID:t})}function w(e,t){b(e,t);var n=angular.copy(t);return n._="inputPeerNotifySettings",s.invokeApi("account.updateNotifySettings",{peer:{_:"inputNotifyPeer",peer:l.getInputPeerByID(e)},settings:n})}function k(e){return v(e).then(function(e){return"peerNotifySettings"==e._&&1e3*e.mute_until>tsNow()})}function M(){if(g(),e.$on("settings_changed",g),h.start(),!B)return!1;"Notification"in window&&"granted"!==Notification.permission&&"denied"!==Notification.permission&&$(t).on("click",A);try{"onbeforeunload"in window&&$(t).on("beforeunload",P)}catch(n){}}function S(){P(),n.cancel(F),y(),Q=!0}function A(){Notification.requestPermission(),$(t).off("click",A)}function C(t){if(console.log("notify",t,e.idle.isIDLE,B,Q),!Q){if(Config.Navigator.ffos&&!Config.Navigator.ffos2p)t.image="https://telegram.org/img/t_logo.png";else if(t.image&&!angular.isString(t.image)){if(Config.Navigator.ffos2p)return m.getDataUrl(t.image,"image/jpeg").then(function(e){t.image=e,C(t)}),!1;t.image=m.getUrl(t.image,"image/jpeg")}else t.image||(t.image="img/icons/icon60.png");V++;var n=tsNow();if(ee.volume>0&&(!t.tag||!q[t.tag]||n>q[t.tag]+6e4)&&(T(ee.volume),q[t.tag]=n),!B||"Notification"in window&&"granted"!==Notification.permission)return!1;if(ee.nodesktop){if(z&&!ee.novibrate)return void navigator.vibrate([200,100,200])}else{var i,a=++j,r=t.key||"k"+a;if("Notification"in window)try{t.tag&&angular.forEach(H,function(e){e&&e.tag==t.tag&&(e.hidden=!0)}),i=new Notification(t.title,{icon:t.image||"",body:t.message||"",tag:t.tag||"",silent:t.silent||!1})}catch(o){return B=!1,void h.setLocalNotificationsDisabled()}else if("mozNotification"in navigator)i=navigator.mozNotification.createNotification(t.title,t.message||"",t.image||"");else{if(!N)return;window.external.msSiteModeClearIconOverlay(),window.external.msSiteModeSetIconOverlay("img/icons/icon16.png",t.title),window.external.msSiteModeActivate(),i={index:a}}i.onclick=function(){i.close(),f.focus(),P(),t.onclick&&t.onclick()},i.onclose=function(){i.hidden||(delete H[r],P())},i.show&&i.show(),H[r]=i,Config.Navigator.mobile||setTimeout(function(){I(r)},8e3)}}}function T(e){var t=tsNow();if(!(W&&t');i.find("audio")[0].volume=e}}function E(e){var t=H[e];if(t){V>0&&V--;try{t.close?(t.hidden=!0,t.close()):N&&t.index==j&&window.external.msSiteModeClearIconOverlay()}catch(n){}delete V[e]}}function I(e){var t=H[e];if(t){try{t.close&&(t.hidden=!0,t.close())}catch(n){}delete V[e]}}function x(e){delete q[e]}function P(){N?window.external.msSiteModeClearIconOverlay():angular.forEach(H,function(e){try{e.close&&e.close()}catch(t){}}),H={},V=0,h.hidePushNotifications()}function D(e){return(!te||!angular.equals(te,e))&&void s.invokeApi("account.registerDevice",{token_type:e.tokenType,token:e.tokenValue,other_uids:[]}).then(function(){te=e},function(e){e.handled=!0})}function R(e){return!!te&&void s.invokeApi("account.unregisterDevice",{token_type:e.tokenType,token:e.tokenValue,other_uids:[]}).then(function(){te=!1},function(e){e.handled=!0})}function O(){return z}navigator.vibrate=navigator.vibrate||navigator.mozVibrate||navigator.webkitVibrate;var N=!1;try{window.external&&window.external.msIsSiteMode()&&(N=!0)}catch(L){}var F,U,B=N||"Notification"in window||"mozNotification"in navigator,H={},j=0,V=0,q={},z=!!navigator.vibrate,W=!1,G=!1,K={},Y=$('link[rel="icon"]:first')[0],X=r.pluralize("page_title_pluralize_notifications"),J=document.title,Z=!1,Q=!1,ee={};e.$watch("idle.deactivated",function(e){e&&S()}),e.$watch("idle.isIDLE",function(e){Q||(e||P(),Config.Navigator.mobile||(n.cancel(F),e?(J=document.title,F=n(function(){Z||!V?(Z=!1,document.title=J,y()):(Z=!0,document.title=X(V),y("favicon_unread.ico"))},1e3)):(Z=!1,document.title=J,y())))}),e.$on("apiUpdate",function(e,t){switch(t._){case"updateNotifySettings":if("notifyPeer"==t.peer._){var n=l.getPeerID(t.peer.peer);b(n,t.notify_settings)}}});var te=!1,ne=!1;e.$on("push_init",function(e,t){ne=!0,ee.nodesktop||ee.nopush?R(t):t?D(t):h.subscribe()}),e.$on("push_subscribe",function(e,t){D(t)}),e.$on("push_unsubscribe",function(e,t){R(t)});var ie=i.defer(),ae=e.$on("dialogs_multiupdate",function(){ae(),ie.resolve()}),re=ie.promise;return e.$on("push_notification_click",function(t,n){if("push_settings"==n.action)return void re.then(function(){a.open({templateUrl:templateUrl("settings_modal"),controller:"SettingsModalController",windowClass:"settings_modal_window mobile_modal",backdrop:"single"})});if("mute1d"==n.action)return void s.invokeApi("account.updateDeviceLocked",function(){}).then(function(){var e=o.pop({type:"info",body:r("push_action_mute1d_success"),bodyOutputType:"trustedHtml",clickHandler:function(){o.clear(e)},showCloseButton:!1})});var i=n.custom&&n.custom.peerID;console.log("click",n,i),i&&re.then(function(){n.custom.channel_id&&!c.hasChat(n.custom.channel_id)||i>0&&!d.hasUser(i)||e.$broadcast("history_focus",{peerString:l.getPeerString(i)})})}),{start:M,notify:C,cancel:E,clear:P,soundReset:x,getPeerSettings:v,getPeerMuted:k,savePeerSettings:b,updatePeerSettings:w,updateNotifySettings:g,getNotifySettings:_,getVibrateSupport:O,testSound:T}}]).service("PasswordManager",["$timeout","$q","$rootScope","MtpApiManager","CryptoWorker","MtpSecureRandom",function(e,t,n,i,a,r){function o(e){return i.invokeApi("account.getPassword",{},e).then(function(e){return e})}function s(e,n){var a,o,s={new_settings:{_:"account.passwordInputSettings",flags:0,hint:n.hint||""}};if(a="string"==typeof n.cur_password&&n.cur_password.length>0?u(e.current_salt,n.cur_password):t.when([]),"string"==typeof n.new_password&&n.new_password.length>0){var l=new Array(8),c=bufferConcat(e.new_salt,l);r.nextBytes(l),o=u(c,n.new_password),s.new_settings.new_salt=c,s.new_settings.flags|=1}else"string"==typeof n.new_password&&(s.new_settings.flags|=1,s.new_settings.new_salt=[]),o=t.when([]);return"string"==typeof n.email&&(s.new_settings.flags|=2,s.new_settings.email=n.email||""),t.all([a,o]).then(function(e){return s.current_password_hash=e[0],s.new_settings.new_password_hash=e[1],i.invokeApi("account.updatePasswordSettings",s)})}function l(e,t,n){return u(e.current_salt,t).then(function(e){return i.invokeApi("auth.checkPassword",{password_hash:e},n)})}function c(e,t){return i.invokeApi("auth.requestPasswordRecovery",{},t)}function d(e,t){return i.invokeApi("auth.recoverPassword",{code:e},t)}function u(e,t){for(var n=unescape(encodeURIComponent(t)),i=new ArrayBuffer(n.length),r=new Uint8Array(i),o=0,s=n.length;o=1)return console.log("Skip error box, too many open",o,n,i),!1;i=i||{};var a=e.$new();angular.extend(a,n),o++;var r=t.open({templateUrl:templateUrl("error_modal"),scope:a,windowClass:i.windowClass||"error_modal_window"});return r.result["finally"](function(){o--}),r}function a(e,t){return i({title:e,description:t})}function r(n,i,a){i=i||{},a=a||{};var r=e.$new();angular.extend(r,n),angular.extend(r,{data:a});var o=t.open({templateUrl:templateUrl("confirm_modal"),scope:r,windowClass:i.windowClass||"confirm_modal_window"});return o.result}var o=0;return n.safeConfirm=function(e,t){"string"==typeof e&&(e={message:e}),r(e).then(function(e){t(e||!0)},function(){t(!1)})},{show:i,alert:a,confirm:r}}]).service("PeersSelectService",["$rootScope","$modal",function(e,t){function n(n){var i=e.$new();return i.multiSelect=!1,i.noMessages=!0,i.forPeerSelect=!0,n&&angular.extend(i,n),t.open({templateUrl:templateUrl("peer_select"),controller:"PeerSelectController",scope:i,windowClass:"peer_select_window mobile_modal",backdrop:"single"}).result}function i(i){if(Config.Mobile)return n(i).then(function(e){return[e]});var a=e.$new();return a.multiSelect=!0,a.noMessages=!0,a.forPeerSelect=!0,i&&angular.extend(a,i),t.open({templateUrl:templateUrl("peer_select"),controller:"PeerSelectController",scope:a,windowClass:"peer_select_window mobile_modal",backdrop:"single"}).result}return{selectPeer:n,selectPeers:i}}]).service("ContactsSelectService",["$rootScope","$modal",function(e,t){function n(n,i){i=i||{};var a=e.$new();return a.multiSelect=n,angular.extend(a,i),!a.action&&n&&(a.action="select"),t.open({templateUrl:templateUrl("contacts_modal"),controller:"ContactsModalController",scope:a,windowClass:"contacts_modal_window mobile_modal",backdrop:"single"}).result}return{selectContacts:function(e){return n(!0,e)},selectContact:function(e){return n(!1,e)}}}]).service("ChangelogNotifyService",["Storage","$rootScope","$modal","$timeout","MtpApiManager","ApiUpdatesManager",function(e,t,n,i,a,r){function o(){l||(l=!0,a.getUserID().then(function(t){t&&i(function(){e.get("last_version").then(function(t){t!=Config.App.version&&(t?a.invokeApi("help.getAppChangelog",{prev_app_version:t},{noErrorBox:!0}).then(function(t){return!("updates"==t._&&!t.updates.length)&&(r.processUpdateMessage(t),void e.set({last_version:Config.App.version}))}):e.set({last_version:Config.App.version}))})},5e3)}))}function s(e){var i=t.$new();i.lastVersion=e,n.open({controller:"ChangelogModalController",templateUrl:templateUrl("changelog_modal"),scope:i,windowClass:"changelog_modal_window mobile_modal"})}var l=!1;return{checkUpdate:o,showChangelog:s}}]).service("HttpsMigrateService",["ErrorService","Storage",function(e,t){function n(){t.get("https_dismiss").then(function(n){(!n||tsNow()>n+432e5)&&e.confirm({type:"MIGRATE_TO_HTTPS"}).then(function(){var e;try{e=window.open("https://web.telegram.org","_blank")}catch(t){}e||(location.href="https://web.telegram.org")},function(){t.set({https_dismiss:tsNow()})})})}function i(){a||"http:"!=location.protocol||Config.Modes.http||Config.App.domains.indexOf(location.hostname)==-1||(a=!0,setTimeout(n,12e4))}var a=!1;return{start:i,check:n}}]).service("LayoutSwitchService",["ErrorService","Storage","AppRuntimeManager","$window",function(e,t,n,i){function a(e){ConfigStorage.noPrefix(),t.set({layout_selected:e?"mobile":"desktop",layout_width:$(window).width()}).then(function(){n.reload()})}function r(n){if(!l){var i=$(window).width(),r=i<600;!i||!n&&(Config.Navigator.mobile?i<=800:r)||r!=Config.Mobile&&(ConfigStorage.noPrefix(),t.get("layout_width").then(function(n){return i!=n&&(l=!0,void e.confirm({type:r?"SWITCH_MOBILE_VERSION":"SWITCH_DESKTOP_VERSION"}).then(function(){a(r)},function(){ConfigStorage.noPrefix(),t.set({layout_width:i}),l=!1}))}))}}function o(){s||Config.Navigator.mobile||(s=!0,r(),$(i).on("resize",r))}var s=!1,l=!1;return{start:o,switchLayout:a}}]).service("TelegramMeWebService",["Storage",function(e){function t(t){return!n&&void e.get("tgme_sync").then(function(n){var i=tsNow(!0);if(t&&n&&n.canRedirect==t&&n.ts+86400>i)return!1;e.set({tgme_sync:{canRedirect:t,ts:i}});var a=$("