From 7c988c413575a6802c9d15f118b3a6cccac52ad5 Mon Sep 17 00:00:00 2001 From: Eduard Kuzmenko Date: Wed, 25 Jan 2023 18:21:38 +0400 Subject: [PATCH] PWA: share, push fixes, install button Convert webp image to jpeg Fix playing animations with open sidebar New attach design Fix breaking attach popup with invalid video Fix managing folders --- .env | 6 +- public/assets/img/masked.svg | 45 +++ public/assets/img/screenshot.jpg | Bin 0 -> 333899 bytes public/site.webmanifest | 19 + public/site_apple.webmanifest | 19 + public/version | 2 +- src/components/animationIntersector.ts | 11 +- src/components/chat/bubbles.ts | 34 +- src/components/chat/chat.ts | 25 +- src/components/chat/input.ts | 1 - src/components/dotRenderer.ts | 6 +- src/components/inputFieldAnimated.ts | 4 +- src/components/popups/forward.ts | 7 +- src/components/popups/newMedia.ts | 348 +++++++++++------ .../popups/reportMessagesConfirm.ts | 2 +- src/components/scrollable.ts | 4 +- src/components/sidebarLeft/index.ts | 9 + src/components/sidebarLeft/tabs/background.ts | 150 +++++--- .../sidebarLeft/tabs/backgroundColor.ts | 39 +- src/components/sidebarLeft/tabs/editFolder.ts | 22 +- .../sidebarLeft/tabs/generalSettings.ts | 358 +++++++++++++++++- src/components/wrappers/sticker.ts | 8 +- src/components/wrappers/stickerEmoji.ts | 20 +- src/components/wrappers/stickerSetThumb.ts | 13 +- src/config/app.ts | 2 +- src/config/state.ts | 150 +++++--- src/environment/installPrompt.ts | 2 + src/environment/standalone.ts | 2 + src/environment/userAgent.ts | 2 +- src/environment/videoMimeTypesSupport.ts | 3 +- src/helpers/canvas/canvasToVideo.ts | 55 +++ src/helpers/color.ts | 37 +- src/helpers/dom/installPrompt.ts | 17 + src/helpers/object/validateInitObject.ts | 18 +- src/helpers/onMediaLoad.ts | 2 +- src/helpers/preloadAnimatedEmojiSticker.ts | 5 +- src/helpers/themeController.ts | 10 +- src/index.ts | 6 + src/lang.ts | 9 + src/lib/appManagers/appDocsManager.ts | 2 +- src/lib/appManagers/appImManager.ts | 44 ++- src/lib/appManagers/appMessagesManager.ts | 15 +- src/lib/appManagers/utils/state/loadState.ts | 117 ++++-- src/lib/mtproto/apiFileManager.ts | 4 +- src/lib/mtproto/mtprotoworker.ts | 7 + src/lib/mtproto/webPushApiManager.ts | 4 +- src/lib/rlottie/lottieLoader.ts | 9 +- src/lib/rlottie/rlottiePlayer.ts | 2 + src/lib/serviceWorker/index.service.ts | 8 + src/lib/serviceWorker/push.ts | 162 ++++---- src/lib/serviceWorker/serviceMessagePort.ts | 1 + src/lib/serviceWorker/share.ts | 52 +++ src/lib/storages/filters.ts | 58 ++- src/scss/partials/_button.scss | 4 + src/scss/partials/_chat.scss | 117 +++--- src/scss/partials/_chatBubble.scss | 20 +- src/scss/partials/_document.scss | 8 +- src/scss/partials/_leftSidebar.scss | 43 ++- src/scss/partials/_row.scss | 7 + src/scss/partials/_themes.scss | 98 +++++ src/scss/partials/popups/_mediaAttacher.scss | 104 ++++- src/scss/partials/popups/_reportMessages.scss | 2 +- src/scss/style.scss | 19 +- webpack.common.js | 6 +- 64 files changed, 1765 insertions(+), 620 deletions(-) create mode 100644 public/assets/img/masked.svg create mode 100644 public/assets/img/screenshot.jpg create mode 100644 src/environment/installPrompt.ts create mode 100644 src/environment/standalone.ts create mode 100644 src/helpers/canvas/canvasToVideo.ts create mode 100644 src/helpers/dom/installPrompt.ts create mode 100644 src/lib/serviceWorker/share.ts create mode 100644 src/scss/partials/_themes.scss diff --git a/.env b/.env index 7aaf0ddf..deb1d6b4 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ API_ID=1025907 API_HASH=452b0359b988148995f22ff0f4229750 -VERSION=1.7.0 -VERSION_FULL=1.7.0 (289) -BUILD=289 +VERSION=1.7.1 +VERSION_FULL=1.7.1 (291) +BUILD=291 diff --git a/public/assets/img/masked.svg b/public/assets/img/masked.svg new file mode 100644 index 00000000..e80baa89 --- /dev/null +++ b/public/assets/img/masked.svg @@ -0,0 +1,45 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/public/assets/img/screenshot.jpg b/public/assets/img/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51db4997bd3d0f6b54a6b56cbb60980bfc9a062e GIT binary patch literal 333899 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�_s*A{yDtY_}Uf+*wefY2B|vxt6n<25-Ee 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⪻KlL1sbVG!CjZE4=CoLnaz4!3u#yU?n1MU) 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 { + this.removeAnimationByPlayer(animation); + }); + } + if(animation instanceof RLottiePlayer) { if(!rootScope.settings.stickers.loop && animation.loop) { animation.loop = rootScope.settings.stickers.loop; diff --git a/src/components/chat/bubbles.ts b/src/components/chat/bubbles.ts index 24d9abad..93411214 100644 --- a/src/components/chat/bubbles.ts +++ b/src/components/chat/bubbles.ts @@ -132,6 +132,7 @@ import confirmationPopup from '../confirmationPopup'; import wrapPeerTitle from '../wrappers/peerTitle'; import {PopupPeerCheckboxOptions} from '../popups/peer'; import toggleDisability from '../../helpers/dom/toggleDisability'; +import {copyTextToClipboard} from '../../helpers/clipboard'; export const USER_REACTIONS_INLINE = false; const USE_MEDIA_TAILS = false; @@ -1671,9 +1672,18 @@ export default class ChatBubbles { const contactDiv: HTMLElement = findUpClassName(target, 'contact'); if(contactDiv) { - this.chat.appImManager.setInnerPeer({ - peerId: contactDiv.dataset.peerId.toPeerId() - }); + const peerId = contactDiv.dataset.peerId.toPeerId(); + if(peerId) { + this.chat.appImManager.setInnerPeer({ + peerId + }); + } else { + const phone = contactDiv.querySelector('.contact-number'); + copyTextToClipboard(phone.innerText.replace(/\s/g, '')); + toastNew({langPackKey: 'PhoneCopied'}); + cancelEvent(e); + } + return; } @@ -3940,11 +3950,9 @@ export default class ChatBubbles { } return new Promise((resolve, reject) => { - const popup = new PopupForward({ - [this.peerId]: [] - }, (peerId) => { + const popup = new PopupForward(undefined, (peerId) => { resolve(peerId); - }, true); + }); popup.addEventListener('close', () => { reject(); @@ -4568,11 +4576,12 @@ export default class ChatBubbles { contactDetails.className = 'contact-details'; const contactNameDiv = document.createElement('div'); contactNameDiv.className = 'contact-name'; + const fullName = [ + contact.first_name, + contact.last_name + ].filter(Boolean).join(' '); contactNameDiv.append( - wrapEmojiText([ - contact.first_name, - contact.last_name - ].filter(Boolean).join(' ')) + fullName.trim() ? wrapEmojiText(fullName) : i18n('AttachContact') ); const contactNumberDiv = document.createElement('div'); @@ -4585,7 +4594,8 @@ export default class ChatBubbles { const avatarElem = new AvatarElement(); avatarElem.updateWithOptions({ lazyLoadQueue: this.lazyLoadQueue, - peerId: contact.user_id.toPeerId() + peerId: contact.user_id.toPeerId(), + peerTitle: fullName.trim() ? undefined : I18n.format('AttachContact', true)[0] }); avatarElem.classList.add('contact-avatar', 'avatar-54'); diff --git a/src/components/chat/chat.ts b/src/components/chat/chat.ts index 97e04604..d17d5a98 100644 --- a/src/components/chat/chat.ts +++ b/src/components/chat/chat.ts @@ -20,7 +20,7 @@ import {NULL_PEER_ID, REPLIES_PEER_ID} from '../../lib/mtproto/mtproto_config'; import SetTransition from '../singleTransition'; import AppPrivateSearchTab from '../sidebarRight/tabs/search'; import renderImageFromUrl from '../../helpers/dom/renderImageFromUrl'; -import mediaSizes from '../../helpers/mediaSizes'; +import mediaSizes, {ScreenSize} from '../../helpers/mediaSizes'; import ChatSearch from './search'; import IS_TOUCH_SUPPORTED from '../../environment/touchSupport'; import getAutoDownloadSettingsByPeerId, {ChatAutoDownloadSettings} from '../../helpers/autoDownload'; @@ -34,8 +34,9 @@ import AppSharedMediaTab from '../sidebarRight/tabs/sharedMedia'; import noop from '../../helpers/noop'; import middlewarePromise from '../../helpers/middlewarePromise'; import indexOfAndSplice from '../../helpers/array/indexOfAndSplice'; -import {Message} from '../../layer'; +import {Message, WallPaper} from '../../layer'; import animationIntersector, {AnimationItemGroup} from '../animationIntersector'; +import {getColorsFromWallPaper} from '../sidebarLeft/tabs/background'; export type ChatType = 'chat' | 'pinned' | 'discussion' | 'scheduled'; @@ -122,16 +123,19 @@ export default class Chat extends EventListenerBase<{ public setBackground(url: string, skipAnimation?: boolean): Promise { const theme = themeController.getTheme(); + const themeSettings = theme.settings; + const wallPaper = themeSettings.wallpaper; + const colors = getColorsFromWallPaper(wallPaper); let item: HTMLElement; - const isColorBackground = !!theme.background.color && !theme.background.slug && !theme.background.intensity; + const isColorBackground = !!colors && !(wallPaper as WallPaper.wallPaper).slug && !wallPaper.settings.intensity; if( isColorBackground && document.documentElement.style.cursor === 'grabbing' && this.gradientRenderer && !this.patternRenderer ) { - this.gradientCanvas.dataset.colors = theme.background.color; + this.gradientCanvas.dataset.colors = colors; this.gradientRenderer.init(this.gradientCanvas); return Promise.resolve(); } @@ -150,7 +154,7 @@ export default class Chat extends EventListenerBase<{ // this.renderDarkPattern = undefined; - const intensity = theme.background.intensity && theme.background.intensity / 100; + const intensity = wallPaper.settings?.intensity && wallPaper.settings.intensity / 100; const isDarkPattern = !!intensity && intensity < 0; let patternRenderer: ChatBackgroundPatternRenderer; @@ -190,19 +194,18 @@ export default class Chat extends EventListenerBase<{ // }); // }; // } - } else if(theme.background.slug) { + } else { item.classList.add('is-image'); } - } else if(theme.background.color) { + } else { item.classList.add('is-color'); } } let gradientRenderer: ChatBackgroundGradientRenderer; - const color = theme.background.color; - if(color) { + if(colors) { // if(color.includes(',')) { - const {canvas, gradientRenderer: _gradientRenderer} = ChatBackgroundGradientRenderer.create(color); + const {canvas, gradientRenderer: _gradientRenderer} = ChatBackgroundGradientRenderer.create(colors); gradientRenderer = this.gradientRenderer = _gradientRenderer; gradientCanvas = this.gradientCanvas = canvas; gradientCanvas.classList.add('chat-background-item-canvas', 'chat-background-item-color-canvas'); @@ -365,7 +368,7 @@ export default class Chat extends EventListenerBase<{ }); this.bubbles.listenerSetter.add(this.appImManager)('tab_changing', (tabId) => { - freezeObservers(this.appImManager.chat !== this || tabId !== APP_TABS.CHAT); + freezeObservers(this.appImManager.chat !== this || (tabId !== APP_TABS.CHAT && mediaSizes.activeScreen === ScreenSize.mobile)); }); } diff --git a/src/components/chat/input.ts b/src/components/chat/input.ts index 9de458cf..4c42bb3c 100644 --- a/src/components/chat/input.ts +++ b/src/components/chat/input.ts @@ -1608,7 +1608,6 @@ export default class ChatInput { this.messageInputField.input.classList.replace('input-field-input', 'input-message-input'); this.messageInputField.inputFake.classList.replace('input-field-input', 'input-message-input'); this.messageInput = this.messageInputField.input; - this.messageInput.classList.add('no-scrollbar'); this.attachMessageInputListeners(); if(IS_STICKY_INPUT_BUGGED) { diff --git a/src/components/dotRenderer.ts b/src/components/dotRenderer.ts index c2aa6fd6..0c12d37e 100644 --- a/src/components/dotRenderer.ts +++ b/src/components/dotRenderer.ts @@ -165,14 +165,10 @@ export default class DotRenderer implements AnimationItemWrapper { animationGroup: AnimationItemGroup, multiply?: number }) { - middleware.onClean(() => { - animationIntersector.removeAnimationByPlayer(dotRenderer); - }); - const dotRenderer = new DotRenderer(width, height, multiply); dotRenderer.renderFirstFrame(); - animationIntersector.addAnimation(dotRenderer, animationGroup, dotRenderer.canvas, true); + animationIntersector.addAnimation(dotRenderer, animationGroup, dotRenderer.canvas, middleware); return dotRenderer; } diff --git a/src/components/inputFieldAnimated.ts b/src/components/inputFieldAnimated.ts index 7bd9f34f..98e43b11 100644 --- a/src/components/inputFieldAnimated.ts +++ b/src/components/inputFieldAnimated.ts @@ -14,6 +14,7 @@ const USELESS_REG_EXP = new RegExp(`(${BOM})|()`, 'g'); export default class InputFieldAnimated extends InputField { public inputFake: HTMLElement; + public onChangeHeight: (height: number) => void; // public onLengthChange: (length: number, isOverflow: boolean) => void; // protected wasInputFakeClientHeight: number; @@ -31,7 +32,7 @@ export default class InputFieldAnimated extends InputField { _i18n(this.inputFake, options.placeholder, undefined, 'placeholder'); } - this.input.classList.add('scrollable', 'scrollable-y'); + this.input.classList.add('scrollable', 'scrollable-y', 'no-scrollbar'); // this.wasInputFakeClientHeight = 0; // this.showScrollDebounced = debounce(() => this.input.classList.remove('no-scrollbar'), 150, false, true); this.inputFake = document.createElement('div'); @@ -62,6 +63,7 @@ export default class InputFieldAnimated extends InputField { this.input.style.transitionDuration = `${transitionDuration}ms`; if(setHeight) { + this.onChangeHeight?.(newHeight); this.input.style.height = newHeight ? newHeight + 'px' : ''; } diff --git a/src/components/popups/forward.ts b/src/components/popups/forward.ts index 9c919221..b3e6d68a 100644 --- a/src/components/popups/forward.ts +++ b/src/components/popups/forward.ts @@ -11,13 +11,12 @@ import PopupPickUser from './pickUser'; export default class PopupForward extends PopupPickUser { constructor( - peerIdMids: {[fromPeerId: PeerId]: number[]}, - onSelect?: (peerId: PeerId) => Promise | void, - overrideOnSelect = false + peerIdMids?: {[fromPeerId: PeerId]: number[]}, + onSelect?: (peerId: PeerId) => Promise | void ) { super({ peerTypes: ['dialogs', 'contacts'], - onSelect: overrideOnSelect ? onSelect : async(peerId) => { + onSelect: !peerIdMids && onSelect ? onSelect : async(peerId) => { if(onSelect) { const res = onSelect(peerId); if(res instanceof Promise) { diff --git a/src/components/popups/newMedia.ts b/src/components/popups/newMedia.ts index c8f5b336..20978712 100644 --- a/src/components/popups/newMedia.ts +++ b/src/components/popups/newMedia.ts @@ -40,6 +40,9 @@ import defineNotNumerableProperties from '../../helpers/object/defineNotNumerabl import {Photo, PhotoSize} from '../../layer'; import {getPreviewBytesFromURL} from '../../helpers/bytes/getPreviewURLFromBytes'; import {renderImageFromUrlPromise} from '../../helpers/dom/renderImageFromUrl'; +import ButtonMenuToggle from '../buttonMenuToggle'; +import partition from '../../helpers/array/partition'; +import InputFieldAnimated from '../inputFieldAnimated'; type SendFileParams = SendFileDetails & { file?: File, @@ -53,15 +56,14 @@ type SendFileParams = SendFileDetails & { let currentPopup: PopupNewMedia; +const MAX_WIDTH = 400 - 16; + export function getCurrentNewMediaPopup() { return currentPopup; } export default class PopupNewMedia extends PopupElement { - private input: HTMLElement; private mediaContainer: HTMLElement; - private groupCheckboxField: CheckboxField; - private mediaCheckboxField: CheckboxField; private wasInputValue: string; private willAttach: Partial<{ @@ -70,22 +72,26 @@ export default class PopupNewMedia extends PopupElement { group: boolean, sendFileDetails: SendFileParams[] }>; - private inputField: InputField; + private messageInputField: InputFieldAnimated; private captionLengthMax: number; private animationGroup: AnimationItemGroup; + private _scrollable: Scrollable; + private inputContainer: HTMLDivElement; constructor( private chat: Chat, private files: File[], - willAttachType: PopupNewMedia['willAttach']['type'] + willAttachType: PopupNewMedia['willAttach']['type'], + private ignoreInputValue?: boolean ) { super('popup-send-photo popup-new-media', { closable: true, withConfirm: 'Modal.Send', confirmShortcutIsSendShortcut: true, body: true, - title: true + title: true, + scrollable: true }); this.animationGroup = ''; @@ -96,7 +102,7 @@ export default class PopupNewMedia extends PopupElement { this.willAttach = { type: willAttachType, sendFileDetails: [], - group: false + group: true }; const captionMaxLength = await this.managers.apiManager.getLimit('caption'); @@ -125,25 +131,93 @@ export default class PopupNewMedia extends PopupElement { this.header.append(sendMenu.sendMenu); } + const btnMenu = await ButtonMenuToggle({ + listenerSetter: this.listenerSetter, + direction: 'bottom-left', + buttons: [{ + icon: 'image', + text: 'Popup.Attach.AsMedia', + onClick: () => this.changeType('media'), + verify: () => this.hasAnyMedia() && this.willAttach.type === 'document' + }, { + icon: 'document', + text: 'SendAsFile', + onClick: () => this.changeType('document'), + verify: () => this.files.length === 1 && this.willAttach.type !== 'document' + }, { + icon: 'document', + text: 'SendAsFiles', + onClick: () => this.changeType('document'), + verify: () => this.files.length > 1 && this.willAttach.type !== 'document' + }, { + icon: 'groupmedia', + text: 'Popup.Attach.GroupMedia', + onClick: () => this.changeGroup(true), + verify: () => !this.willAttach.group && this.canGroupSomething() + }, { + icon: 'groupmediaoff', + text: 'Popup.Attach.UngroupMedia', + onClick: () => this.changeGroup(false), + verify: () => this.willAttach.group && this.canGroupSomething() + }, { + icon: 'mediaspoiler', + text: 'EnablePhotoSpoiler', + onClick: () => this.changeSpoilers(true), + verify: () => this.canToggleSpoilers(true, true) + }, { + icon: 'mediaspoiler', + text: 'Popup.Attach.EnableSpoilers', + onClick: () => this.changeSpoilers(true), + verify: () => this.canToggleSpoilers(true, false) + }, { + icon: 'mediaspoileroff', + text: 'DisablePhotoSpoiler', + onClick: () => this.changeSpoilers(false), + verify: () => this.canToggleSpoilers(false, true) + }, { + icon: 'mediaspoileroff', + text: 'Popup.Attach.RemoveSpoilers', + onClick: () => this.changeSpoilers(false), + verify: () => this.canToggleSpoilers(false, false) + }] + }); + + this.header.append(btnMenu); + + this.btnConfirm.remove(); + this.mediaContainer = document.createElement('div'); this.mediaContainer.classList.add('popup-photo'); - const scrollable = new Scrollable(null); - scrollable.container.append(this.mediaContainer); + this.scrollable.container.append(this.mediaContainer); - this.inputField = new InputField({ + const inputContainer = this.inputContainer = document.createElement('div'); + inputContainer.classList.add('popup-input-container'); + + const c = document.createElement('div'); + c.classList.add('popup-input-inputs', 'input-message-container'); + + this.messageInputField = new InputFieldAnimated({ placeholder: 'PreviewSender.CaptionPlaceholder', - label: 'Caption', - name: 'photo-caption', - maxLength: this.captionLengthMax, - withLinebreaks: true + name: 'message', + withLinebreaks: true, + maxLength: this.captionLengthMax }); - this.input = this.inputField.input; - this.inputField.value = this.wasInputValue = this.chat.input.messageInputField.input.innerHTML; - this.chat.input.messageInputField.value = ''; + this.listenerSetter.add(this.scrollable.container)('scroll', this.onScroll); + this.listenerSetter.add(this.messageInputField.input)('scroll', this.onScroll); - this.body.append(scrollable.container); - this.container.append(this.inputField.container); + this.messageInputField.input.classList.replace('input-field-input', 'input-message-input'); + this.messageInputField.inputFake.classList.replace('input-field-input', 'input-message-input'); + + c.append(this.messageInputField.input, this.messageInputField.inputFake); + inputContainer.append(c, this.btnConfirm); + + if(!this.ignoreInputValue) { + this.messageInputField.value = this.wasInputValue = this.chat.input.messageInputField.input.innerHTML; + this.chat.input.messageInputField.value = ''; + } + + this.container.append(inputContainer); this.attachFiles(); @@ -169,13 +243,7 @@ export default class PopupNewMedia extends PopupElement { icon: 'mediaspoileroff', text: 'DisablePhotoSpoiler', onClick: () => { - toggleMediaSpoiler({ - mediaSpoiler: item.mediaSpoiler, - reveal: true, - destroyAfter: true - }); - - item.mediaSpoiler = undefined; + this.removeMediaSpoiler(item); }, verify: () => !!(isMedia && item.mediaSpoiler) }], @@ -192,6 +260,14 @@ export default class PopupNewMedia extends PopupElement { currentPopup = this; } + private onScroll = () => { + const {input} = this.messageInputField; + this.scrollable.onAdditionalScroll(); + if(input.scrollTop > 0 && input.scrollHeight > 130) { + this.scrollable.container.classList.remove('scrolled-bottom'); + } + }; + private async applyMediaSpoiler(item: SendFileParams, noAnimation?: boolean) { const middleware = item.middlewareHelper.get(); const {width: widthStr, height: heightStr} = item.itemDiv.style; @@ -268,6 +344,16 @@ export default class PopupNewMedia extends PopupElement { }); } + private removeMediaSpoiler(item: SendFileParams) { + toggleMediaSpoiler({ + mediaSpoiler: item.mediaSpoiler, + reveal: true, + destroyAfter: true + }); + + item.mediaSpoiler = undefined; + } + public appendDrops(element: HTMLElement) { this.body.append(element); } @@ -280,59 +366,66 @@ export default class PopupNewMedia extends PopupElement { this.willAttach.type = type; } - private appendGroupCheckboxField() { - const good = this.files.length > 1; - if(good && !this.groupCheckboxField) { - this.groupCheckboxField = new CheckboxField({ - text: 'PreviewSender.GroupItems', - name: 'group-items' - }); - this.container.append(...[ - this.groupCheckboxField.label, - this.mediaCheckboxField?.label, - this.inputField.container - ].filter(Boolean)); - - this.willAttach.group = true; - this.groupCheckboxField.setValueSilently(this.willAttach.group); - - this.listenerSetter.add(this.groupCheckboxField.input)('change', () => { - const checked = this.groupCheckboxField.checked; - - this.willAttach.group = checked; - - this.attachFiles(); - }); - } else if(this.groupCheckboxField) { - this.groupCheckboxField.label.classList.toggle('hide', !good); - } + private partition() { + const [media, files] = partition(this.willAttach.sendFileDetails, (d) => MEDIA_MIME_TYPES_SUPPORTED.has(d.file.type)); + return { + media, + files + }; } - private appendMediaCheckboxField() { - const good = !!this.files.find((file) => MEDIA_MIME_TYPES_SUPPORTED.has(file.type)); - if(good && !this.mediaCheckboxField) { - this.mediaCheckboxField = new CheckboxField({ - text: 'PreviewSender.CompressFile', - name: 'compress-items' - }); - this.container.append(...[ - this.groupCheckboxField?.label, - this.mediaCheckboxField.label, - this.inputField.container - ].filter(Boolean)); + private mediaCount() { + return this.partition().media.length; + } - this.mediaCheckboxField.setValueSilently(this.willAttach.type === 'media'); + private hasAnyMedia() { + return this.mediaCount() > 0; + } - this.listenerSetter.add(this.mediaCheckboxField.input)('change', () => { - const checked = this.mediaCheckboxField.checked; + private canGroupSomething() { + const {media, files} = this.partition(); + return media.length > 1 || files.length > 1; + } - this.willAttach.type = checked ? 'media' : 'document'; - - this.attachFiles(); - }); - } else if(this.mediaCheckboxField) { - this.mediaCheckboxField.label.classList.toggle('hide', !good); + private canToggleSpoilers(toggle: boolean, single: boolean) { + let good = this.willAttach.type === 'media' && this.hasAnyMedia(); + if(single && good) { + good = this.files.length === 1; } + + if(good) { + const media = this.willAttach.sendFileDetails + .filter((d) => MEDIA_MIME_TYPES_SUPPORTED.has(d.file.type)) + const mediaWithSpoilers = media.filter((d) => d.mediaSpoiler); + + good = single ? true : media.length > 1; + + if(good) { + good = toggle ? media.length !== mediaWithSpoilers.length : media.length === mediaWithSpoilers.length; + } + } + + return good; + } + + private changeType(type: PopupNewMedia['willAttach']['type']) { + this.willAttach.type = type; + this.attachFiles(); + } + + public changeGroup(group: boolean) { + this.willAttach.group = group; + this.attachFiles(); + } + + public changeSpoilers(toggle: boolean) { + this.partition().media.forEach((item) => { + if(toggle && !item.mediaSpoiler) { + this.applyMediaSpoiler(item); + } else if(!toggle && item.mediaSpoiler) { + this.removeMediaSpoiler(item); + } + }); } public addFiles(files: File[]) { @@ -352,13 +445,14 @@ export default class PopupNewMedia extends PopupElement { private onKeyDown = (e: KeyboardEvent) => { const target = e.target as HTMLElement; - if(target !== this.input) { + const {input} = this.messageInputField; + if(target !== input) { if(target.tagName === 'INPUT' || target.isContentEditable) { return; } - this.input.focus(); - placeCaretAtEnd(this.input); + input.focus(); + placeCaretAtEnd(input); } }; @@ -371,7 +465,7 @@ export default class PopupNewMedia extends PopupElement { return; } - let caption = this.inputField.value; + let caption = this.messageInputField.value; if(caption.length > this.captionLengthMax) { toast(I18n.format('Error.PreviewSender.CaptionTooLong', true)); return; @@ -420,20 +514,27 @@ export default class PopupNewMedia extends PopupElement { input.replyToMsgId = this.chat.threadId; input.onMessageSent(); + this.wasInputValue = undefined; this.hide(); } - private async scaleImageForTelegram(image: HTMLImageElement, params: SendFileParams) { + private modifyMimeTypeForTelegram(mimeType: string) { + return mimeType === 'image/webp' ? 'image/jpeg' : mimeType; + } + + private async scaleImageForTelegram(image: HTMLImageElement, mimeType: string, convertWebp?: boolean) { const PHOTO_SIDE_LIMIT = 2560; - const mimeType = params.file.type; let url = image.src, scaledBlob: Blob; - if(mimeType !== 'image/gif' && Math.max(image.naturalWidth, image.naturalHeight) > PHOTO_SIDE_LIMIT) { + if( + mimeType !== 'image/gif' && + (Math.max(image.naturalWidth, image.naturalHeight) > PHOTO_SIDE_LIMIT || (convertWebp && mimeType === 'image/webp')) + ) { const {blob} = await scaleMediaElement({ media: image, boxSize: makeMediaSize(PHOTO_SIDE_LIMIT, PHOTO_SIDE_LIMIT), mediaSize: makeMediaSize(image.naturalWidth, image.naturalHeight), - mimeType: mimeType as any + mimeType: this.modifyMimeTypeForTelegram(mimeType) as any }); scaledBlob = blob; @@ -442,8 +543,7 @@ export default class PopupNewMedia extends PopupElement { await renderImageFromUrlPromise(image, url); } - params.objectURL = url; - params.scaledBlob = scaledBlob; + return scaledBlob && {url, blob: scaledBlob}; } private async attachMedia(params: SendFileParams) { @@ -453,11 +553,9 @@ export default class PopupNewMedia extends PopupElement { const file = params.file; const isVideo = file.type.startsWith('video/'); - let promise: Promise; if(isVideo) { const video = createVideo(); - const source = document.createElement('source'); - source.src = params.objectURL = await apiManagerProxy.invoke('createObjectURL', file); + video.src = params.objectURL = await apiManagerProxy.invoke('createObjectURL', file); video.autoplay = true; video.controls = false; video.muted = true; @@ -466,36 +564,49 @@ export default class PopupNewMedia extends PopupElement { video.pause(); }, {once: true}); - promise = onMediaLoad(video).then(async() => { - params.width = video.videoWidth; - params.height = video.videoHeight; - params.duration = Math.floor(video.duration); + itemDiv.append(video); - const audioDecodedByteCount = (video as any).webkitAudioDecodedByteCount; - if(audioDecodedByteCount !== undefined) { - params.noSound = !audioDecodedByteCount; - } + let error: Error; + try { + await onMediaLoad(video); + } catch(err) { + error = err as any; + } - itemDiv.append(video); - const thumb = await createPosterFromVideo(video); - params.thumb = { - url: await apiManagerProxy.invoke('createObjectURL', thumb.blob), - ...thumb - }; - }); + params.width = video.videoWidth; + params.height = video.videoHeight; + params.duration = Math.floor(video.duration); - video.append(source); + if(error) { + throw error; + } + + const audioDecodedByteCount = (video as any).webkitAudioDecodedByteCount; + if(audioDecodedByteCount !== undefined) { + params.noSound = !audioDecodedByteCount; + } + + const thumb = await createPosterFromVideo(video); + params.thumb = { + url: await apiManagerProxy.invoke('createObjectURL', thumb.blob), + ...thumb + }; } else { const img = new Image(); + itemDiv.append(img); const url = await apiManagerProxy.invoke('createObjectURL', file); - await renderImageFromUrlPromise(img, url); - await this.scaleImageForTelegram(img, params); + await renderImageFromUrlPromise(img, url); + const mimeType = params.file.type; + const scaled = await this.scaleImageForTelegram(img, mimeType, true); + if(scaled) { + params.objectURL = scaled.url; + params.scaledBlob = scaled.blob; + } + params.width = img.naturalWidth; params.height = img.naturalHeight; - itemDiv.append(img); - if(file.type === 'image/gif') { params.noSound = true; @@ -510,11 +621,9 @@ export default class PopupNewMedia extends PopupElement { ...thumb }; }) - ]); + ]).then(() => {}); } } - - return promise; } private async attachDocument(params: SendFileParams): ReturnType { @@ -532,8 +641,10 @@ export default class PopupNewMedia extends PopupElement { if(isPhoto) { img = new Image(); await renderImageFromUrlPromise(img, params.objectURL); - await this.scaleImageForTelegram(img, params); - params.scaledBlob = undefined; + const scaled = await this.scaleImageForTelegram(img, params.file.type); + if(scaled) { + params.objectURL = scaled.url; + } } const doc = { @@ -596,7 +707,10 @@ export default class PopupNewMedia extends PopupElement { const promise = shouldCompress ? this.attachMedia(params) : this.attachDocument(params); willAttach.sendFileDetails.push(params); - return promise; + return promise.catch((err) => { + itemDiv.style.backgroundColor = '#000'; + console.error('error rendering file', err); + }); }; private shouldCompress(mimeType: string) { @@ -607,7 +721,7 @@ export default class PopupNewMedia extends PopupElement { // show now if(!this.element.classList.contains('active')) { this.listenerSetter.add(document.body)('keydown', this.onKeyDown); - this.addEventListener('close', () => { + !this.ignoreInputValue && this.addEventListener('close', () => { if(this.wasInputValue) { this.chat.input.messageInputField.value = this.wasInputValue; } @@ -655,7 +769,7 @@ export default class PopupNewMedia extends PopupElement { private appendMediaToContainer(params: SendFileParams) { if(this.shouldCompress(params.file.type)) { - const size = calcImageInBox(params.width, params.height, 380, 320); + const size = calcImageInBox(params.width, params.height, MAX_WIDTH, 320); params.itemDiv.style.width = size.width + 'px'; params.itemDiv.style.height = size.height + 'px'; } @@ -693,9 +807,6 @@ export default class PopupNewMedia extends PopupElement { params.middlewareHelper.destroy(); }); - this.appendGroupCheckboxField(); - this.appendMediaCheckboxField(); - const promises = files.map((file) => this.attachFile(file)); Promise.all(promises).then(() => { @@ -717,7 +828,7 @@ export default class PopupNewMedia extends PopupElement { prepareAlbum({ container: albumContainer, items: sendFileDetails.map((o) => ({w: o.width, h: o.height})), - maxWidth: 380, + maxWidth: MAX_WIDTH, minWidth: 100, spacing: 4 }); @@ -746,6 +857,7 @@ export default class PopupNewMedia extends PopupElement { }); }).then(() => { this.onRender(); + this.onScroll(); }); } } diff --git a/src/components/popups/reportMessagesConfirm.ts b/src/components/popups/reportMessagesConfirm.ts index 5e5240b5..e8d886a7 100644 --- a/src/components/popups/reportMessagesConfirm.ts +++ b/src/components/popups/reportMessagesConfirm.ts @@ -47,7 +47,7 @@ export default class PopupReportMessagesConfirm extends PopupPeer { this.show(); }); - this.header.append(div); + this.header.replaceWith(div); const inputField = new InputField({ label: 'ReportHint', diff --git a/src/components/scrollable.ts b/src/components/scrollable.ts index e8f4109f..b0bf78aa 100644 --- a/src/components/scrollable.ts +++ b/src/components/scrollable.ts @@ -153,8 +153,8 @@ export class ScrollableBase { this.onScrolledBottom = undefined; } - public append(element: HTMLElement) { - this.container.append(element); + public append(...args: Parameters) { + this.container.append(...args); } public scrollIntoViewNew(options: Omit) { diff --git a/src/components/sidebarLeft/index.ts b/src/components/sidebarLeft/index.ts index fe80fc88..1e203d9e 100644 --- a/src/components/sidebarLeft/index.ts +++ b/src/components/sidebarLeft/index.ts @@ -54,6 +54,7 @@ import SettingSection, {SettingSectionOptions} from '../settingSection'; import {FOLDER_ID_ARCHIVE} from '../../lib/mtproto/mtproto_config'; import mediaSizes from '../../helpers/mediaSizes'; import {fastRaf} from '../../helpers/schedulers'; +import {getInstallPrompt} from '../../helpers/dom/installPrompt'; export const LEFT_COLUMN_ACTIVE_CLASSNAME = 'is-left-column-shown'; @@ -218,6 +219,14 @@ export class AppSidebarLeft extends SidebarSlider { }); }, verify: () => App.isMainDomain + }, { + icon: 'download', + text: 'PWA.Install', + onClick: () => { + const installPrompt = getInstallPrompt(); + installPrompt?.(); + }, + verify: () => !!getInstallPrompt() }]; const filteredButtons = menuButtons.filter(Boolean); diff --git a/src/components/sidebarLeft/tabs/background.ts b/src/components/sidebarLeft/tabs/background.ts index c35a3b58..3ec904b2 100644 --- a/src/components/sidebarLeft/tabs/background.ts +++ b/src/components/sidebarLeft/tabs/background.ts @@ -24,7 +24,7 @@ import ProgressivePreloader from '../../preloader'; import {SliderSuperTab} from '../../slider'; import AppBackgroundColorTab from './backgroundColor'; import choosePhotoSize from '../../../lib/appManagers/utils/photos/choosePhotoSize'; -import {STATE_INIT, Theme} from '../../../config/state'; +import {STATE_INIT, AppTheme} from '../../../config/state'; import themeController from '../../../helpers/themeController'; import requestFile from '../../../helpers/files/requestFile'; import {renderImageFromUrlPromise} from '../../../helpers/dom/renderImageFromUrl'; @@ -33,10 +33,29 @@ import {MediaSize} from '../../../helpers/mediaSize'; import wrapPhoto from '../../wrappers/photo'; import {CreateRowFromCheckboxField} from '../../row'; import {generateSection} from '../../settingSection'; +import {hexToRgb} from '../../../helpers/color'; + +export function getHexColorFromTelegramColor(color: number) { + const hex = (color < 0 ? 0xFFFFFF + color : color).toString(16); + return '#' + (hex.length >= 6 ? hex : '0'.repeat(6 - hex.length) + hex); +} + +export function getRgbColorFromTelegramColor(color: number) { + return hexToRgb(getHexColorFromTelegramColor(color)); +} + +export function getColorsFromWallPaper(wallPaper: WallPaper) { + return wallPaper.settings ? [ + wallPaper.settings.background_color, + wallPaper.settings.second_background_color, + wallPaper.settings.third_background_color, + wallPaper.settings.fourth_background_color + ].filter(Boolean).map(getHexColorFromTelegramColor).join(',') : ''; +} export default class AppBackgroundTab extends SliderSuperTab { + public static tempId = 0; private grid: HTMLElement; - private tempId = 0; private clicked: Set = new Set(); private blurCheckboxField: CheckboxField; @@ -72,14 +91,15 @@ export default class AppBackgroundTab extends SliderSuperTab { attachClickEvent(resetButton, this.onResetClick, {listenerSetter: this.listenerSetter}); + const wallPaper = this.theme.settings?.wallpaper; const blurCheckboxField = this.blurCheckboxField = new CheckboxField({ text: 'ChatBackground.Blur', name: 'blur', - checked: this.theme.background.blur + checked: (wallPaper as WallPaper.wallPaper)?.settings?.pFlags?.blur }); this.listenerSetter.add(blurCheckboxField.input)('change', async() => { - this.theme.background.blur = blurCheckboxField.input.checked; + this.theme.settings.wallpaper.settings.pFlags.blur = blurCheckboxField.input.checked || undefined; await this.managers.appStateManager.pushToState('settings', rootScope.settings); // * wait for animation end @@ -92,7 +112,7 @@ export default class AppBackgroundTab extends SliderSuperTab { return; } - this.setBackgroundDocument(wallpaper); + AppBackgroundTab.setBackgroundDocument(wallpaper); }, 100); }); @@ -149,7 +169,7 @@ export default class AppBackgroundTab extends SliderSuperTab { const newKey = this.getWallPaperKey(wallPaper); this.elementsByKey.set(newKey, container); - this.setBackgroundDocument(wallPaper).then(deferred.resolve, deferred.reject); + AppBackgroundTab.setBackgroundDocument(wallPaper).then(deferred.resolve, deferred.reject); }, deferred.reject); const key = this.getWallPaperKey(wallPaper); @@ -163,7 +183,7 @@ export default class AppBackgroundTab extends SliderSuperTab { tryAgainOnFail: false }); - const container = await this.addWallPaper(wallPaper, false); + const {container} = await this.addWallPaper(wallPaper, false); this.clicked.add(key); preloader.attach(container, false, deferred); @@ -173,33 +193,27 @@ export default class AppBackgroundTab extends SliderSuperTab { private onResetClick = () => { const defaultTheme = STATE_INIT.settings.themes.find((t) => t.name === this.theme.name); if(defaultTheme) { - ++this.tempId; - this.theme.background = copy(defaultTheme.background); + ++AppBackgroundTab.tempId; + this.theme.settings = copy(defaultTheme.settings); this.managers.appStateManager.pushToState('settings', rootScope.settings); appImManager.applyCurrentTheme(undefined, undefined, true); - this.blurCheckboxField.setValueSilently(this.theme.background.blur); + this.blurCheckboxField.setValueSilently(this.theme.settings?.wallpaper?.settings?.pFlags?.blur); } }; - private getColorsFromWallPaper(wallPaper: WallPaper) { - return wallPaper.settings ? [ - wallPaper.settings.background_color, - wallPaper.settings.second_background_color, - wallPaper.settings.third_background_color, - wallPaper.settings.fourth_background_color - ].filter(Boolean).map((color) => '#' + color.toString(16)).join(',') : ''; - } - private getWallPaperKey(wallPaper: WallPaper) { return '' + wallPaper.id; } - private getWallPaperKeyFromTheme(theme: Theme) { - return '' + theme.background.id; + private getWallPaperKeyFromTheme(theme: AppTheme) { + return '' + (this.getWallPaperKey(theme.settings?.wallpaper) || ''); } - private addWallPaper(wallPaper: WallPaper, append = true) { - const colors = this.getColorsFromWallPaper(wallPaper); + public static addWallPaper( + wallPaper: WallPaper, + container = document.createElement('div') + ) { + const colors = getColorsFromWallPaper(wallPaper); const hasFile = wallPaper._ === 'wallPaper'; if((hasFile && wallPaper.pFlags.pattern && !colors)/* || (wallpaper.document as MyDocument).mime_type.indexOf('application/') === 0 */) { @@ -210,17 +224,11 @@ export default class AppBackgroundTab extends SliderSuperTab { const doc = hasFile ? wallPaper.document as Document.document : undefined; - const container = document.createElement('div'); - container.classList.add('grid-item'); - + container.classList.add('background-item'); container.dataset.id = '' + wallPaper.id; - const key = this.getWallPaperKey(wallPaper); - this.wallPapersByElement.set(container, wallPaper); - this.elementsByKey.set(key, container); - const media = document.createElement('div'); - media.classList.add('grid-item-media'); + media.classList.add('background-item-media'); const loadPromises: Promise[] = []; let wrapped: ReturnType, size: ReturnType; @@ -271,7 +279,7 @@ export default class AppBackgroundTab extends SliderSuperTab { if(isDark && hasFile) { const promise = wrapped.then(({loadPromises}) => { return loadPromises.full.then(async() => { - const cacheContext = await this.managers.thumbsStorage.getCacheContext(doc, size.type); + const cacheContext = await rootScope.managers.thumbsStorage.getCacheContext(doc, size.type); canvas.style.webkitMaskImage = `url(${cacheContext.url})`; canvas.style.opacity = '' + (wallPaper.pFlags.dark ? 100 + wallPaper.settings.intensity : wallPaper.settings.intensity) / 100; media.append(canvas); @@ -284,13 +292,32 @@ export default class AppBackgroundTab extends SliderSuperTab { } } - if(this.getWallPaperKeyFromTheme(this.theme) === key) { - container.classList.add('active'); + return { + container, + media, + loadPromise: Promise.all(loadPromises) + }; + } + + private addWallPaper(wallPaper: WallPaper, append = true) { + const result = AppBackgroundTab.addWallPaper(wallPaper); + if(result) { + const {container, media} = result; + container.classList.add('grid-item'); + media.classList.add('grid-item-media'); + + const key = this.getWallPaperKey(wallPaper); + this.wallPapersByElement.set(container, wallPaper); + this.elementsByKey.set(key, container); + + if(this.getWallPaperKeyFromTheme(this.theme) === key) { + container.classList.add('active'); + } + + this.grid[append ? 'append' : 'prepend'](container); } - this.grid[append ? 'append' : 'prepend'](container); - - return Promise.all(loadPromises).then(() => container); + return result && result.loadPromise.then(() => result); } private onGridClick = (e: MouseEvent | TouchEvent) => { @@ -299,7 +326,7 @@ export default class AppBackgroundTab extends SliderSuperTab { const wallpaper = this.wallPapersByElement.get(target); if(wallpaper._ === 'wallPaperNoFile') { - this.setBackgroundDocument(wallpaper); + AppBackgroundTab.setBackgroundDocument(wallpaper); return; } @@ -314,9 +341,9 @@ export default class AppBackgroundTab extends SliderSuperTab { }); const load = async() => { - const promise = this.setBackgroundDocument(wallpaper); + const promise = AppBackgroundTab.setBackgroundDocument(wallpaper); const cacheContext = await this.managers.thumbsStorage.getCacheContext(doc); - if(!cacheContext.url || this.theme.background.blur) { + if(!cacheContext.url || this.theme.settings?.wallpaper?.settings?.pFlags?.blur) { preloader.attach(target, true, promise); } }; @@ -337,13 +364,7 @@ export default class AppBackgroundTab extends SliderSuperTab { // console.log(doc); }; - private saveToCache = (slug: string, url: string) => { - fetch(url).then((response) => { - appImManager.cacheStorage.save('backgrounds/' + slug, response); - }); - }; - - private setBackgroundDocument = (wallPaper: WallPaper) => { + public static setBackgroundDocument = (wallPaper: WallPaper) => { const _tempId = ++this.tempId; const middleware = () => _tempId === this.tempId; @@ -351,24 +372,32 @@ export default class AppBackgroundTab extends SliderSuperTab { const deferred = deferredPromise(); let download: Promise | ReturnType; if(doc) { - download = appDownloadManager.downloadMediaURL({media: doc, queueId: appImManager.chat.bubbles ? appImManager.chat.bubbles.lazyLoadQueue.queueId : 0}); + download = appDownloadManager.downloadMediaURL({ + media: doc, + queueId: appImManager.chat.bubbles ? appImManager.chat.bubbles.lazyLoadQueue.queueId : 0 + }); deferred.addNotifyListener = download.addNotifyListener; deferred.cancel = download.cancel; } else { download = Promise.resolve(); } + const saveToCache = (slug: string, url: string) => { + fetch(url).then((response) => { + appImManager.cacheStorage.save('backgrounds/' + slug, response); + }); + }; + download.then(async() => { if(!middleware()) { deferred.resolve(); return; } - const background = this.theme.background; + const themeSettings = themeController.getTheme().settings; const onReady = (url?: string) => { - // const perf = performance.now(); let getPixelPromise: Promise; - const backgroundColor = this.getColorsFromWallPaper(wallPaper); + const backgroundColor = getColorsFromWallPaper(wallPaper); if(url && !backgroundColor) { getPixelPromise = averageColor(url); } else { @@ -383,19 +412,14 @@ export default class AppBackgroundTab extends SliderSuperTab { } const hsla = highlightningColor(Array.from(pixel) as any); - // const hsla = 'rgba(0, 0, 0, 0.3)'; - // console.log(doc, hsla, performance.now() - perf); const slug = (wallPaper as WallPaper.wallPaper).slug ?? ''; - background.id = wallPaper.id; - background.intensity = wallPaper.settings?.intensity ?? 0; - background.color = backgroundColor; - background.slug = slug; - background.highlightningColor = hsla; - this.managers.appStateManager.pushToState('settings', rootScope.settings); + themeSettings.wallpaper = wallPaper; + themeSettings.highlightningColor = hsla; + rootScope.managers.appStateManager.pushToState('settings', rootScope.settings); if(slug) { - this.saveToCache(slug, url); + saveToCache(slug, url); } appImManager.applyCurrentTheme(slug, url, true).then(deferred.resolve); @@ -407,10 +431,10 @@ export default class AppBackgroundTab extends SliderSuperTab { return; } - const cacheContext = await this.managers.thumbsStorage.getCacheContext(doc); - if(background.blur) { + const cacheContext = await rootScope.managers.thumbsStorage.getCacheContext(doc); + if(themeSettings.wallpaper?.settings?.pFlags?.blur) { setTimeout(() => { - const {canvas, promise} = blur(cacheContext.url, 12, 4) + const {canvas, promise} = blur(cacheContext.url, 12, 4); promise.then(() => { if(!middleware()) { deferred.resolve(); diff --git a/src/components/sidebarLeft/tabs/backgroundColor.ts b/src/components/sidebarLeft/tabs/backgroundColor.ts index bf590530..5587a749 100644 --- a/src/components/sidebarLeft/tabs/backgroundColor.ts +++ b/src/components/sidebarLeft/tabs/backgroundColor.ts @@ -4,7 +4,7 @@ * https://github.com/morethanwords/tweb/blob/master/LICENSE */ -import {Theme} from '../../../config/state'; +import {AppTheme} from '../../../config/state'; import {hexaToRgba} from '../../../helpers/color'; import {attachClickEvent} from '../../../helpers/dom/clickEvent'; import findUpClassName from '../../../helpers/dom/findUpClassName'; @@ -16,12 +16,13 @@ import rootScope from '../../../lib/rootScope'; import ColorPicker, {ColorPickerColor} from '../../colorPicker'; import SettingSection from '../../settingSection'; import {SliderSuperTab} from '../../slider'; +import {WallPaper} from '../../../layer'; export default class AppBackgroundColorTab extends SliderSuperTab { private colorPicker: ColorPicker; private grid: HTMLElement; private applyColor: (hex: string, updateColorPicker?: boolean) => void; - private theme: Theme; + private theme: AppTheme; init() { this.container.classList.add('background-container', 'background-color-container'); @@ -92,8 +93,10 @@ export default class AppBackgroundColorTab extends SliderSuperTab { private setActive() { const active = this.grid.querySelector('.active'); - const background = this.theme.background; - const target = background.color ? this.grid.querySelector(`.grid-item[data-color="${background.color}"]`) : null; + const background = this.theme.settings; + const wallPaper = background.wallpaper; + const color = wallPaper.settings.background_color; + const target = color ? this.grid.querySelector(`.grid-item[data-color="${color}"]`) : null; if(active === target) { return; } @@ -112,14 +115,22 @@ export default class AppBackgroundColorTab extends SliderSuperTab { this.colorPicker.setColor(hex); } else { const rgba = hexaToRgba(hex); - const background = this.theme.background; + const settings = this.theme.settings; const hsla = highlightningColor(rgba); - background.id = '2'; - background.intensity = 0; - background.slug = ''; - background.color = hex.toLowerCase(); - background.highlightningColor = hsla; + const wallPaper: WallPaper.wallPaperNoFile = { + _: 'wallPaperNoFile', + id: 0, + pFlags: {}, + settings: { + _: 'wallPaperSettings', + background_color: parseInt(hex.slice(1), 16) + } + }; + + settings.wallpaper = wallPaper; + settings.highlightningColor = hsla; + this.managers.appStateManager.pushToState('settings', rootScope.settings); appImManager.applyCurrentTheme(undefined, undefined, true); @@ -133,17 +144,17 @@ export default class AppBackgroundColorTab extends SliderSuperTab { onOpen() { setTimeout(() => { - const background = this.theme.background; + const settings = this.theme.settings; + const color = settings?.wallpaper?.settings?.background_color; - const color = (background.color || '').split(',')[0]; - const isColored = !!color && !background.slug; + const isColored = !!color && settings.wallpaper._ === 'wallPaperNoFile'; // * set active if type is color if(isColored) { this.colorPicker.onChange = this.onColorChange; } - this.colorPicker.setColor(color || '#cccccc'); + this.colorPicker.setColor((color && '#' + color.toString(16)) || '#cccccc'); if(!isColored) { this.colorPicker.onChange = this.onColorChange; diff --git a/src/components/sidebarLeft/tabs/editFolder.ts b/src/components/sidebarLeft/tabs/editFolder.ts index 97924dc8..26e7af7a 100644 --- a/src/components/sidebarLeft/tabs/editFolder.ts +++ b/src/components/sidebarLeft/tabs/editFolder.ts @@ -61,6 +61,7 @@ export default class AppEditFolderTab extends SliderSuperTab { this.stickerContainer.classList.add('sticker-container'); this.confirmBtn = ButtonIcon('check btn-confirm hide blue'); + let deleting = false; const deleteFolderButton: ButtonMenuItemOptions = { icon: 'delete danger', text: 'FilterMenuDelete', @@ -71,13 +72,16 @@ export default class AppEditFolderTab extends SliderSuperTab { buttons: [{ langKey: 'Delete', callback: () => { - deleteFolderButton.element.setAttribute('disabled', 'true'); + if(deleting) { + return; + } + + deleting = true; + this.managers.filtersStorage.updateDialogFilter(this.filter, true).then((bool) => { - if(bool) { - this.close(); - } + this.close(); }).finally(() => { - deleteFolderButton.element.removeAttribute('disabled'); + deleting = false; }); }, isDanger: true @@ -212,7 +216,7 @@ export default class AppEditFolderTab extends SliderSuperTab { this.confirmBtn.setAttribute('disabled', 'true'); - let promise: Promise; + let promise: Promise; if(!this.filter.id) { promise = this.managers.filtersStorage.createDialogFilter(this.filter); } else { @@ -220,9 +224,7 @@ export default class AppEditFolderTab extends SliderSuperTab { } promise.then((bool) => { - if(bool) { - this.close(); - } + this.close(); }).catch((err) => { if(err.type === 'DIALOG_FILTERS_TOO_MUCH') { toast('Sorry, you can\'t create more folders.'); @@ -266,6 +268,7 @@ export default class AppEditFolderTab extends SliderSuperTab { this.setFilter(this.originalFilter, true); this.onEditOpen(); } else { + this.setInitFilter(); this.onCreateOpen(); } }); @@ -283,7 +286,6 @@ export default class AppEditFolderTab extends SliderSuperTab { this.setTitle('FilterNew'); this.menuBtn.classList.add('hide'); this.confirmBtn.classList.remove('hide'); - this.nameInputField.value = ''; for(const flag in this.flags) { // @ts-ignore diff --git a/src/components/sidebarLeft/tabs/generalSettings.ts b/src/components/sidebarLeft/tabs/generalSettings.ts index 0909feec..7ef699b7 100644 --- a/src/components/sidebarLeft/tabs/generalSettings.ts +++ b/src/components/sidebarLeft/tabs/generalSettings.ts @@ -11,11 +11,11 @@ import RadioField from '../../radioField'; import rootScope from '../../../lib/rootScope'; import {IS_APPLE} from '../../../environment/userAgent'; import Row, {CreateRowFromCheckboxField} from '../../row'; -import AppBackgroundTab from './background'; +import AppBackgroundTab, {getHexColorFromTelegramColor, getRgbColorFromTelegramColor} from './background'; import {LangPackKey, _i18n} from '../../../lib/langPack'; import {attachClickEvent} from '../../../helpers/dom/clickEvent'; import assumeType from '../../../helpers/assumeType'; -import {AvailableReaction, MessagesAllStickers, StickerSet} from '../../../layer'; +import {AvailableReaction, BaseTheme, MessagesAllStickers, StickerSet} from '../../../layer'; import LazyLoadQueue from '../../lazyLoadQueue'; import PopupStickers from '../../popups/stickers'; import eachMinute from '../../../helpers/eachMinute'; @@ -27,6 +27,14 @@ import {State} from '../../../config/state'; import wrapStickerSetThumb from '../../wrappers/stickerSetThumb'; import wrapStickerToRow from '../../wrappers/stickerToRow'; import SettingSection, {generateSection} from '../../settingSection'; +import {ScrollableX} from '../../scrollable'; +import wrapStickerEmoji from '../../wrappers/stickerEmoji'; +import {Theme} from '../../../layer'; +import findUpClassName from '../../../helpers/dom/findUpClassName'; +import RLottiePlayer from '../../../lib/rlottie/rlottiePlayer'; +import {hexToRgb, ColorRgb, rgbaToHexa, rgbaToHsla, rgbToHsv, hsvToRgb} from '../../../helpers/color'; +import clamp from '../../../helpers/number/clamp'; +import themeController from '../../../helpers/themeController'; export class RangeSettingSelector { public container: HTMLDivElement; @@ -87,11 +95,20 @@ export class RangeSettingSelector { } export default class AppGeneralSettingsTab extends SliderSuperTabEventable { - init() { + public static getInitArgs() { + return { + accountThemes: rootScope.managers.apiManager.invokeApi('account.getThemes', {format: 'android', hash: 0}), + allStickers: rootScope.managers.appStickersManager.getAllStickers(), + quickReaction: rootScope.managers.appReactionsManager.getQuickReaction() + }; + } + + public init(p: ReturnType) { this.container.classList.add('general-settings-container'); this.setTitle('General'); const section = generateSection.bind(null, this.scrollable); + const promises: Promise[] = []; { const container = section('Settings'); @@ -122,6 +139,320 @@ export default class AppGeneralSettingsTab extends SliderSuperTabEventable { ); } + if(false) { + const container = section('ColorTheme'); + + const scrollable = new ScrollableX(null); + const themesContainer = scrollable.container; + themesContainer.classList.add('themes-container'); + + type K = {theme: Theme, player?: RLottiePlayer}; + const themesMap = new Map(); + + type AppColorName = 'primary-color' | 'message-out-primary-color'; + type AppColor = { + rgb?: boolean, + light?: boolean, + lightFilled?: boolean, + dark?: boolean, + darkRgb?: boolean, + darkFilled?: boolean + }; + + const appColorMap: {[name in AppColorName]: AppColor} = { + 'primary-color': { + rgb: true, + light: true, + lightFilled: true, + dark: true, + darkRgb: true + }, + 'message-out-primary-color': { + rgb: true, + light: true, + lightFilled: true, + dark: true + } + }; + + var mix = function(color1: ColorRgb, color2: ColorRgb, weight: number) { + const out = new Array(3) as ColorRgb; + for(let i = 0; i < 3; ++i) { + const v1 = color1[i], v2 = color2[i]; + out[i] = Math.floor(v2 + (v1 - v2) * (weight / 100.0)); + } + + return out; + }; + + function computePerceivedBrightness(color: ColorRgb) { + return (color[0] * 0.2126 + color[1] * 0.7152 + color[2] * 0.0722) / 255; + } + + function getAverageColor(color1: ColorRgb, color2: ColorRgb): ColorRgb { + return color1.map((v, i) => Math.round((v + color2[i]) / 2)) as ColorRgb; + } + + const getAccentColor = (baseHsv: number[], baseColor: ColorRgb, elementColor: ColorRgb): ColorRgb => { + const hsvTemp3 = rgbToHsv(...baseColor); + const hsvTemp4 = rgbToHsv(...elementColor); + + const dist = Math.min(1.5 * hsvTemp3[1] / baseHsv[1], 1); + + hsvTemp3[0] = Math.min(360, hsvTemp4[0] - hsvTemp3[0] + baseHsv[0]); + hsvTemp3[1] = Math.min(1, hsvTemp4[1] * baseHsv[1] / hsvTemp3[1]); + hsvTemp3[2] = Math.min(1, (hsvTemp4[2] / hsvTemp3[2] + dist - 1) * baseHsv[2] / dist); + if(hsvTemp3[2] < 0.3) { + return elementColor; + } + return hsvToRgb(...hsvTemp3); + }; + + const changeColorAccent = (baseHsv: number[], accentHsv: number[], color: ColorRgb, isDarkTheme = themeController.isNight()) => { + const colorHsv = rgbToHsv(...color); + + const diffH = Math.min(Math.abs(colorHsv[0] - baseHsv[0]), Math.abs(colorHsv[0] - baseHsv[0] - 360)); + if(diffH > 30) { + return color; + } + + const dist = Math.min(1.5 * colorHsv[1] / baseHsv[1], 1); + + colorHsv[0] = Math.min(360, colorHsv[0] + accentHsv[0] - baseHsv[0]); + colorHsv[1] = Math.min(1, colorHsv[1] * accentHsv[1] / baseHsv[1]); + colorHsv[2] = Math.min(1, colorHsv[2] * (1 - dist + dist * accentHsv[2] / baseHsv[2])); + + let newColor = hsvToRgb(...colorHsv); + + const origBrightness = computePerceivedBrightness(color); + const newBrightness = computePerceivedBrightness(newColor); + + // We need to keep colors lighter in dark themes and darker in light themes + const needRevertBrightness = isDarkTheme ? origBrightness > newBrightness : origBrightness < newBrightness; + + if(needRevertBrightness) { + const amountOfNew = 0.6; + const fallbackAmount = (1 - amountOfNew) * origBrightness / newBrightness + amountOfNew; + newColor = changeBrightness(newColor, fallbackAmount); + } + + return newColor; + }; + + const changeBrightness = (color: ColorRgb, amount: number) => { + return color.map((v) => clamp(Math.round(v * amount), 0, 255)) as ColorRgb; + }; + + const applyAppColor = ({ + name, + hex, + element = document.documentElement, + lightenAlpha = 0.08, + darkenAlpha = lightenAlpha + }: { + name: AppColorName, + hex: string, + element?: HTMLElement, + lightenAlpha?: number + darkenAlpha?: number + }) => { + const appColor = appColorMap[name]; + const rgb = hexToRgb(hex); + const hsla = rgbaToHsla(...rgb); + + const mixColor2 = hexToRgb(themeController.isNight() ? '#212121' : '#ffffff'); + const lightenedRgb = mix(rgb, mixColor2, lightenAlpha * 100); + + const darkenedHsla: typeof hsla = { + ...hsla, + l: hsla.l - darkenAlpha * 100 + }; + + element.style.setProperty('--' + name, hex); + appColor.rgb && element.style.setProperty('--' + name + '-rgb', rgb.join(',')); + appColor.light && element.style.setProperty('--light-' + name, `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${lightenAlpha})`); + appColor.lightFilled && element.style.setProperty('--light-filled-' + name, `rgb(${lightenedRgb[0]}, ${lightenedRgb[1]}, ${lightenedRgb[2]})`); + appColor.dark && element.style.setProperty('--dark-' + name, `hsl(${darkenedHsla.h}, ${darkenedHsla.s}%, ${darkenedHsla.l}%)`); + // appColor.darkFilled && element.style.setProperty('--dark-' + name, `hsl(${darkenedHsla.h}, ${darkenedHsla.s}%, ${darkenedHsla.l}%)`); + }; + + const applyTheme = (theme: Theme, element = document.documentElement) => { + const isNight = themeController.isNight(); + const themeSettings = theme.settings.find((settings) => settings.base_theme._ === (isNight ? 'baseThemeNight' : 'baseThemeClassic')); + + console.log('applyTheme', theme, themeSettings); + + // android `accentBaseColor` and `key_chat_outBubble` + const PRIMARY_COLOR = isNight ? '#3e88f6' : '#328ace'; + const LIGHT_PRIMARY_COLOR = isNight ? '#366cae' : '#e6f2fb'; + + const hsvTemp1 = rgbToHsv(...hexToRgb(PRIMARY_COLOR)); // primary base + let hsvTemp2 = rgbToHsv(...getRgbColorFromTelegramColor(themeSettings.accent_color)); // new primary + + const newAccentRgb = changeColorAccent( + hsvTemp1, + hsvTemp2, + hexToRgb(PRIMARY_COLOR) + // hexToRgb('#eeffde') + ); + const newAccentHex = rgbaToHexa(newAccentRgb); + + let h = getHexColorFromTelegramColor(themeSettings.accent_color); + console.log(h, newAccentHex); + h = newAccentHex; + + applyAppColor({ + name: 'primary-color', + hex: h, + // hex: newAccentHex, + element, + darkenAlpha: 0.04 + }); + + if(element === document.documentElement) { + AppBackgroundTab.setBackgroundDocument(themeSettings.wallpaper); + } + + if(!themeSettings.message_colors?.length) { + return; + } + + const messageOutRgbColor = hexToRgb(LIGHT_PRIMARY_COLOR); // light primary + + const firstColor = getRgbColorFromTelegramColor(themeSettings.message_colors[0]); + + let messageColor = firstColor; + if(themeSettings.message_colors.length > 1) { + themeSettings.message_colors.slice(1).forEach((nextColor) => { + messageColor = getAverageColor(messageColor, getRgbColorFromTelegramColor(nextColor)); + }); + + messageColor = getAccentColor(hsvTemp1, messageOutRgbColor, firstColor); + } + + const o = messageColor; + // const hsvTemp1 = rgbToHsv(...hexToRgb('#4fae4e')); + // const hsvTemp1 = rgbToHsv(...hexToRgb('#328ace')); + hsvTemp2 = rgbToHsv(...o); + + const c = changeColorAccent( + hsvTemp1, + hsvTemp2, + messageOutRgbColor + // hexToRgb('#eeffde') + ); + + console.log(o, c); + + applyAppColor({ + name: 'message-out-primary-color', + hex: rgbaToHexa(messageColor), + element, + lightenAlpha: isNight ? 0.76 : 0.12 + }); + }; + + attachClickEvent(themesContainer, (e) => { + const container = findUpClassName(e.target, 'theme-container'); + if(!container) { + return; + } + + const lastActive = themesContainer.querySelector('.active'); + if(lastActive) { + lastActive.classList.remove('active'); + } + + const item = themesMap.get(container); + container.classList.add('active'); + + if(item.player) { + if(item.player.paused) { + item.player.restart(); + } + } + + applyTheme(item.theme); + }, {listenerSetter: this.listenerSetter}); + + const promise = p.accountThemes.then(async(accountThemes) => { + if(accountThemes._ === 'account.themesNotModified') { + return; + } + + console.log(accountThemes); + + const defaultThemes = accountThemes.themes.filter((theme) => theme.pFlags.default); + const promises = defaultThemes.map(async(theme, idx) => { + const baseTheme: BaseTheme['_'] = themeController.isNight() ? 'baseThemeNight' : 'baseThemeClassic'; + const wallpaper = theme.settings.find((settings) => settings.base_theme._ === baseTheme).wallpaper; + const result = AppBackgroundTab.addWallPaper(wallpaper); + + const container = result.container; + const k: K = {theme}; + themesMap.set(container, k); + + applyTheme(theme, container); + + if(idx === 0) { + container.classList.add('active'); + } + + const emoticon = theme.emoticon; + const loadPromises: Promise[] = []; + let emoticonContainer: HTMLElement; + if(emoticon) { + emoticonContainer = document.createElement('div'); + emoticonContainer.classList.add('theme-emoticon'); + const size = 28; + wrapStickerEmoji({ + div: emoticonContainer, + width: size, + height: size, + emoji: theme.emoticon, + managers: this.managers, + loadPromises, + middleware: this.middlewareHelper.get() + }).then(({render}) => render).then((player) => { + k.player = player as RLottiePlayer; + }); + } + + const bubble = document.createElement('div'); + bubble.classList.add('theme-bubble'); + + const bubbleIn = bubble.cloneNode() as HTMLElement; + + bubbleIn.classList.add('is-in'); + bubble.classList.add('is-out'); + + loadPromises.push(result.loadPromise); + + container.classList.add('theme-container'); + + await Promise.all(loadPromises); + + if(emoticonContainer) { + container.append(emoticonContainer); + } + + container.append(bubbleIn, bubble); + + return container; + }); + + const containers = await Promise.all(promises); + + scrollable.append(...containers); + }); + + promises.push(promise); + + container.append( + themesContainer + ); + } + { const container = section('General.Keyboard'); @@ -264,7 +595,7 @@ export default class AppGeneralSettingsTab extends SliderSuperTabEventable { }); const renderQuickReaction = () => { - this.managers.appReactionsManager.getQuickReaction().then((reaction) => { + p.quickReaction.then((reaction) => { if(reaction._ === 'availableReaction') { return reaction.static_icon; } else { @@ -325,7 +656,8 @@ export default class AppGeneralSettingsTab extends SliderSuperTabEventable { lazyLoadQueue, width: 36, height: 36, - autoplay: true + autoplay: true, + middleware: this.middlewareHelper.get() }); row.container.append(div); @@ -333,13 +665,14 @@ export default class AppGeneralSettingsTab extends SliderSuperTabEventable { stickersContent[method](row.container); }; - this.managers.appStickersManager.getAllStickers().then((allStickers) => { + const promise = p.allStickers.then((allStickers) => { assumeType(allStickers); - for(const stickerSet of allStickers.sets) { - renderStickerSet(stickerSet); - } + const promises = allStickers.sets.map((stickerSet) => renderStickerSet(stickerSet)); + return Promise.all(promises); }); + promises.push(promise); + this.listenerSetter.add(rootScope)('stickers_installed', (set) => { if(!stickerSets[set.id]) { renderStickerSet(set, 'prepend'); @@ -360,12 +693,7 @@ export default class AppGeneralSettingsTab extends SliderSuperTabEventable { ); this.scrollable.append(section.container); } - } - onOpen() { - if(this.init) { - this.init(); - this.init = null; - } + return Promise.all(promises); } } diff --git a/src/components/wrappers/sticker.ts b/src/components/wrappers/sticker.ts index dbb6f677..e056b514 100644 --- a/src/components/wrappers/sticker.ts +++ b/src/components/wrappers/sticker.ts @@ -381,8 +381,10 @@ export default async function wrapSticker({doc, div, middleware, loadStickerMidd needUpscale, skipRatio, toneIndex, - sync: isCustomEmoji - }, group, loadStickerMiddleware ?? middleware); + sync: isCustomEmoji, + middleware: loadStickerMiddleware ?? middleware, + group + }); // const deferred = deferredPromise(); @@ -557,7 +559,7 @@ export default async function wrapSticker({doc, div, middleware, loadStickerMidd } if(isAnimated) { - animationIntersector.addAnimation(media as HTMLVideoElement, group); + animationIntersector.addAnimation(media as HTMLVideoElement, group, undefined, middleware); } if(loaded.push(media) === mediaLength) { diff --git a/src/components/wrappers/stickerEmoji.ts b/src/components/wrappers/stickerEmoji.ts index abe2b7a2..c63220de 100644 --- a/src/components/wrappers/stickerEmoji.ts +++ b/src/components/wrappers/stickerEmoji.ts @@ -7,14 +7,17 @@ import {AppManagers} from '../../lib/appManagers/managers'; import rootScope from '../../lib/rootScope'; import wrapSticker from './sticker' +import {Modify} from '../../types'; -export default async function wrapStickerEmoji({emoji, div, width, height, managers = rootScope.managers}: { - emoji: string, +export default async function wrapStickerEmoji(options: Modify[0], { div: HTMLElement, - managers?: AppManagers, - width: number, - height: number -}) { + doc?: never +}>) { + const { + emoji, + div, + managers = rootScope.managers + } = options; const doc = await managers.appStickersManager.getAnimatedEmojiSticker(emoji); if(!doc) { div.classList.add('media-sticker-wrapper'); @@ -22,11 +25,8 @@ export default async function wrapStickerEmoji({emoji, div, width, height, manag } return wrapSticker({ + ...options, doc, - div, - emoji, - width, - height, loop: false, play: true }); diff --git a/src/components/wrappers/stickerSetThumb.ts b/src/components/wrappers/stickerSetThumb.ts index b5745200..86b635f0 100644 --- a/src/components/wrappers/stickerSetThumb.ts +++ b/src/components/wrappers/stickerSetThumb.ts @@ -14,8 +14,9 @@ import rootScope from '../../lib/rootScope'; import animationIntersector, {AnimationItemGroup} from '../animationIntersector'; import LazyLoadQueue from '../lazyLoadQueue'; import wrapSticker from './sticker'; +import {Middleware} from '../../helpers/middleware'; -export default async function wrapStickerSetThumb({set, lazyLoadQueue, container, group, autoplay, width, height, managers = rootScope.managers}: { +export default async function wrapStickerSetThumb({set, lazyLoadQueue, container, group, autoplay, width, height, managers = rootScope.managers, middleware}: { set: StickerSet.stickerSet, lazyLoadQueue: LazyLoadQueue, container: HTMLElement, @@ -24,6 +25,7 @@ export default async function wrapStickerSetThumb({set, lazyLoadQueue, container width: number, height: number, managers?: AppManagers + middleware?: Middleware }) { if(set.thumbs?.length) { container.classList.add('media-sticker-wrapper'); @@ -44,8 +46,10 @@ export default async function wrapStickerSetThumb({set, lazyLoadQueue, container width, height, needUpscale: true, - name: 'setThumb' + set.id - }, group); + name: 'setThumb' + set.id, + group, + middleware + }); }); } else { let media: HTMLElement; @@ -93,7 +97,8 @@ export default async function wrapStickerSetThumb({set, lazyLoadQueue, container lazyLoadQueue, managers, width, - height + height, + middleware }); // kostil } } diff --git a/src/config/app.ts b/src/config/app.ts index 23a5a391..c465dd0c 100644 --- a/src/config/app.ts +++ b/src/config/app.ts @@ -21,7 +21,7 @@ const App = { version: process.env.VERSION, versionFull: process.env.VERSION_FULL, build: +process.env.BUILD, - langPackVersion: '0.8.0', + langPackVersion: '0.8.3', langPack: 'webk', langPackCode: 'en', domains: MAIN_DOMAINS, diff --git a/src/config/state.ts b/src/config/state.ts index 401e369c..7a462bab 100644 --- a/src/config/state.ts +++ b/src/config/state.ts @@ -8,16 +8,17 @@ import {AppMediaPlaybackController} from '../components/appMediaPlaybackControll import {IS_MOBILE} from '../environment/userAgent'; import getTimeFormat from '../helpers/getTimeFormat'; import {nextRandomUint} from '../helpers/random'; -import {AutoDownloadSettings, NotifyPeer, PeerNotifySettings} from '../layer'; +import {AutoDownloadSettings, BaseTheme, NotifyPeer, PeerNotifySettings, Theme, ThemeSettings, WallPaper} from '../layer'; import {TopPeerType, MyTopPeer} from '../lib/appManagers/appUsersManager'; import DialogsStorage from '../lib/storages/dialogs'; import FiltersStorage from '../lib/storages/filters'; -import {AuthState} from '../types'; +import {AuthState, Modify} from '../types'; import App from './app'; const STATE_VERSION = App.version; const BUILD = App.build; +// ! DEPRECATED export type Background = { type?: 'color' | 'image' | 'default', // ! DEPRECATED blur: boolean, @@ -28,10 +29,12 @@ export type Background = { id: string | number, // wallpaper id }; -export type Theme = { +export type AppTheme = Modify +}>; export type AutoDownloadPeerTypeSettings = { contacts: boolean, @@ -95,8 +98,8 @@ export type State = { big: boolean }, background?: Background, // ! DEPRECATED - themes: Theme[], - theme: Theme['name'], + themes: AppTheme[], + theme: AppTheme['name'], notifications: { sound: boolean }, @@ -110,41 +113,101 @@ export type State = { notifySettings: {[k in Exclude]?: PeerNotifySettings.peerNotifySettings} }; -const BACKGROUND_DAY_DESKTOP: Background = { - blur: false, - slug: 'pattern', - color: '#dbddbb,#6ba587,#d5d88d,#88b884', - highlightningColor: 'hsla(86.4, 43.846153%, 45.117647%, .4)', - intensity: 50, - id: '1' -}; +// const BACKGROUND_DAY_MOBILE: Background = { +// blur: false, +// slug: '', +// color: '#dbddbb,#6ba587,#d5d88d,#88b884', +// highlightningColor: 'hsla(86.4, 43.846153%, 45.117647%, .4)', +// intensity: 0, +// id: '1' +// }; -const BACKGROUND_DAY_MOBILE: Background = { - blur: false, +// const BACKGROUND_NIGHT_MOBILE: Background = { +// blur: false, +// slug: '', +// color: '#0f0f0f', +// highlightningColor: 'hsla(0, 0%, 3.82353%, 0.4)', +// intensity: 0, +// id: '-1' +// }; + +export const DEFAULT_THEME: Theme = { + _: 'theme', + access_hash: '', + id: '', + settings: [{ + _: 'themeSettings', + pFlags: {}, + base_theme: {_: 'baseThemeClassic'}, + accent_color: 0x3390ec, + message_colors: [0x4fae4e], + wallpaper: { + _: 'wallPaper', + pFlags: { + default: true, + pattern: true + }, + access_hash: '', + document: undefined, + id: '', + slug: 'pattern', + settings: { + _: 'wallPaperSettings', + pFlags: {}, + intensity: 50, + background_color: 0xdbddbb, + second_background_color: 0x6ba587, + third_background_color: 0xd5d88d, + fourth_background_color: 0x88b884 + } + } + }, { + _: 'themeSettings', + pFlags: {}, + base_theme: {_: 'baseThemeNight'}, + accent_color: 0x8774E1, + message_colors: [0x8774E1], + wallpaper: { + _: 'wallPaper', + pFlags: { + default: true, + pattern: true, + dark: true + }, + access_hash: '', + document: undefined, + id: '', + slug: 'pattern', + settings: { + _: 'wallPaperSettings', + pFlags: {}, + intensity: -50, + background_color: 0xfec496, + second_background_color: 0xdd6cb9, + third_background_color: 0x962fbf, + fourth_background_color: 0x4f5bd5 + } + } + }], slug: '', - color: '#dbddbb,#6ba587,#d5d88d,#88b884', - highlightningColor: 'hsla(86.4, 43.846153%, 45.117647%, .4)', - intensity: 0, - id: '1' + title: '', + emoticon: '🏠', + pFlags: {default: true} }; -const BACKGROUND_NIGHT_DESKTOP: Background = { - blur: false, - slug: 'pattern', - // color: '#dbddbb,#6ba587,#d5d88d,#88b884', - color: '#fec496,#dd6cb9,#962fbf,#4f5bd5', - highlightningColor: 'hsla(299.142857, 44.166666%, 37.470588%, .4)', - intensity: -50, - id: '-1' -}; - -const BACKGROUND_NIGHT_MOBILE: Background = { - blur: false, - slug: '', - color: '#0f0f0f', - highlightningColor: 'hsla(0, 0%, 3.82353%, 0.4)', - intensity: 0, - id: '-1' +const makeDefaultAppTheme = ( + name: AppTheme['name'], + baseTheme: BaseTheme['_'], + highlightningColor: string +): AppTheme => { + return { + ...DEFAULT_THEME, + name, + settings: { + ...DEFAULT_THEME.settings.find((s) => s.base_theme._ === baseTheme), + highlightningColor + } + }; }; export const STATE_INIT: State = { @@ -214,13 +277,10 @@ export const STATE_INIT: State = { suggest: true, big: true }, - themes: [{ - name: 'day', - background: IS_MOBILE ? BACKGROUND_DAY_MOBILE : BACKGROUND_DAY_DESKTOP - }, { - name: 'night', - background: IS_MOBILE ? BACKGROUND_NIGHT_MOBILE : BACKGROUND_NIGHT_DESKTOP - }], + themes: [ + makeDefaultAppTheme('day', 'baseThemeClassic', 'hsla(86.4, 43.846153%, 45.117647%, .4)'), + makeDefaultAppTheme('night', 'baseThemeNight', 'hsla(299.142857, 44.166666%, 37.470588%, .4)') + ], theme: 'system', notifications: { sound: false diff --git a/src/environment/installPrompt.ts b/src/environment/installPrompt.ts new file mode 100644 index 00000000..25f1096c --- /dev/null +++ b/src/environment/installPrompt.ts @@ -0,0 +1,2 @@ +const IS_INSTALL_PROMPT_SUPPORTED = 'onbeforeinstallprompt' in window; +export default IS_INSTALL_PROMPT_SUPPORTED; diff --git a/src/environment/standalone.ts b/src/environment/standalone.ts new file mode 100644 index 00000000..fb4cb142 --- /dev/null +++ b/src/environment/standalone.ts @@ -0,0 +1,2 @@ +const IS_STANDALONE = window.matchMedia('(display-mode: standalone)').matches; +export default IS_STANDALONE; diff --git a/src/environment/userAgent.ts b/src/environment/userAgent.ts index d42a9e92..cf05f867 100644 --- a/src/environment/userAgent.ts +++ b/src/environment/userAgent.ts @@ -21,4 +21,4 @@ export const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > export const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE; -export const IS_MOBILE = /* screen.width && screen.width < 480 || */navigator.maxTouchPoints > 0 && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1; +export const IS_MOBILE = (navigator.maxTouchPoints === undefined || navigator.maxTouchPoints > 0) && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1; diff --git a/src/environment/videoMimeTypesSupport.ts b/src/environment/videoMimeTypesSupport.ts index 1ef3c9b7..cabcee2c 100644 --- a/src/environment/videoMimeTypesSupport.ts +++ b/src/environment/videoMimeTypesSupport.ts @@ -1,6 +1,7 @@ import IS_MOV_SUPPORTED from './movSupport'; -const VIDEO_MIME_TYPES_SUPPORTED = new Set([ +export type VIDEO_MIME_TYPE = 'image/gif' | 'video/mp4' | 'video/webm' | 'video/quicktime'; +const VIDEO_MIME_TYPES_SUPPORTED: Set = new Set([ 'image/gif', // have to display it as video 'video/mp4', 'video/webm' diff --git a/src/helpers/canvas/canvasToVideo.ts b/src/helpers/canvas/canvasToVideo.ts new file mode 100644 index 00000000..1b07762b --- /dev/null +++ b/src/helpers/canvas/canvasToVideo.ts @@ -0,0 +1,55 @@ +/* + * https://github.com/morethanwords/tweb + * Copyright (C) 2019-2021 Eduard Kuzmenko + * https://github.com/morethanwords/tweb/blob/master/LICENSE + */ + +import type {VIDEO_MIME_TYPE} from '../../environment/videoMimeTypesSupport'; + +export default function canvasToVideo({ + canvas, + timeslice, + duration, + // mimeType = 'video/webm; codecs="vp8"', + mimeType = 'video/webm; codecs="vp8"', + audioBitsPerSecond = 0, + videoBitsPerSecond = 25000000 +}: { + canvas: HTMLCanvasElement + timeslice: number, + duration: number, + mimeType?: string, + audioBitsPerSecond?: number, + videoBitsPerSecond?: number +}) { + return new Promise((resolve, reject) => { + try { + const stream = canvas.captureStream(); + const blobs: Blob[] = []; + const recorder = new MediaRecorder(stream, { + mimeType, + audioBitsPerSecond, + videoBitsPerSecond + }); + + recorder.ondataavailable = (event) => { + if(event.data && event.data.size > 0) { + blobs.push(event.data); + } + + if(blobs.length === duration / timeslice) { + stream.getTracks()[0].stop(); + recorder.stop(); + + resolve(new Blob(blobs, {type: mimeType})); + } + }; + + recorder.start(timeslice); + } catch(e) { + reject(e); + } + }); +} + +(window as any).canvasToVideo = canvasToVideo; diff --git a/src/helpers/color.ts b/src/helpers/color.ts index 04658460..43b40c56 100644 --- a/src/helpers/color.ts +++ b/src/helpers/color.ts @@ -14,6 +14,31 @@ export type ColorHsla = { export type ColorRgba = [number, number, number, number]; export type ColorRgb = [number, number, number]; +/** + * https://stackoverflow.com/a/54070620/6758968 + * r, g, b in [0, 255] + * @returns h in [0,360) and s, v in [0,1] + */ +export function rgbToHsv(r: number, g: number, b: number): [number, number, number] { + r /= 255, g /= 255, b /= 255; + const v = Math.max(r, g, b), + c = v - Math.min(r, g, b); + const h = c && ((v === r) ? (g - b ) / c : ((v == g) ? 2 + (b - r) / c : 4 + (r - g) / c)); + return [60 * (h < 0 ? h + 6 : h), v && c / v, v]; +} + +/** + * https://stackoverflow.com/a/54024653/6758968 + * @param h [0, 360] + * @param s [0, 1] + * @param v [0, 1] + * @returns r, g, b in [0, 255] + */ +export function hsvToRgb(h: number, s: number, v: number): ColorRgb { + const f = (n: number, k: number = (n + h / 60) % 6) => Math.round((v - v * s * Math.max(Math.min(k, 4 - k, 1), 0)) * 255); + return [f(5), f(3), f(1)]; +} + /** * @returns h [0, 360], s [0, 100], l [0, 100], a [0, 1] */ @@ -55,13 +80,11 @@ export function rgbaToHsla(r: number, g: number, b: number, a: number = 1): Colo /** * Converts an HSL color value to RGB. Conversion formula * adapted from http://en.wikipedia.org/wiki/HSL_color_space. - * Assumes h in [0, 360], s, and l are contained in the set [0, 1], a in [0, 1] and - * returns r, g, and b in the set [0, 255]. * - * @param {number} h The hue - * @param {number} s The saturation - * @param {number} l The lightness - * @return {Array} The RGB representation + * @param {number} h The hue [0, 360] + * @param {number} s The saturation [0, 1] + * @param {number} l The lightness [0, 1] + * @return {Array} The RGB representation [0, 255] */ export function hslaToRgba(h: number, s: number, l: number, a: number): ColorRgba { h /= 360, s /= 100, l /= 100; @@ -86,7 +109,7 @@ export function hslaToRgba(h: number, s: number, l: number, a: number): ColorRgb b = hue2rgb(p, q, h - 1/3); } - return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), Math.round(a * 255)]; + return [r, g, b, a].map((v) => Math.round(v * 255)) as ColorRgba; } export function hslaStringToRgba(hsla: string) { diff --git a/src/helpers/dom/installPrompt.ts b/src/helpers/dom/installPrompt.ts new file mode 100644 index 00000000..35a086cf --- /dev/null +++ b/src/helpers/dom/installPrompt.ts @@ -0,0 +1,17 @@ +let callback: () => Promise; +export default function cacheInstallPrompt() { + window.addEventListener('beforeinstallprompt', (deferredPrompt: any) => { + callback = async() => { + deferredPrompt.prompt(); + const {outcome} = await deferredPrompt.userChoice; + const installed = outcome === 'accepted'; + if(installed) { + callback = undefined; + } + }; + }); +} + +export function getInstallPrompt() { + return callback; +} diff --git a/src/helpers/object/validateInitObject.ts b/src/helpers/object/validateInitObject.ts index 622ac341..3349560a 100644 --- a/src/helpers/object/validateInitObject.ts +++ b/src/helpers/object/validateInitObject.ts @@ -1,13 +1,25 @@ import copy from './copy'; import isObject from './isObject'; -export default function validateInitObject(initObject: any, currentObject: any, onReplace?: (key: string) => void, previousKey?: string) { +export default function validateInitObject( + initObject: any, + currentObject: any, + onReplace?: (key: string) => void, + previousKey?: string, + ignorePaths?: Set, + path?: string +) { for(const key in initObject) { + const _path = path ? `${path}.${key}` : key; + if(ignorePaths?.has(_path)) { + continue; + } + if(typeof(currentObject[key]) !== typeof(initObject[key])) { currentObject[key] = copy(initObject[key]); - onReplace && onReplace(previousKey || key); + onReplace?.(previousKey || key); } else if(isObject(initObject[key])) { - validateInitObject(initObject[key], currentObject[key], onReplace, previousKey || key); + validateInitObject(initObject[key], currentObject[key], onReplace, previousKey || key, ignorePaths, _path); } } } diff --git a/src/helpers/onMediaLoad.ts b/src/helpers/onMediaLoad.ts index 891f1a1b..b0001acc 100644 --- a/src/helpers/onMediaLoad.ts +++ b/src/helpers/onMediaLoad.ts @@ -15,7 +15,7 @@ export default function onMediaLoad(media: HTMLMediaElement, readyState = media. }; const onError = (e: ErrorEvent) => { media.removeEventListener(loadEventName, onLoad); - reject(e); + reject(media.error); }; media.addEventListener(loadEventName, onLoad, {once: true}); media.addEventListener(errorEventName, onError, {once: true}); diff --git a/src/helpers/preloadAnimatedEmojiSticker.ts b/src/helpers/preloadAnimatedEmojiSticker.ts index b4e627d4..ca158e69 100644 --- a/src/helpers/preloadAnimatedEmojiSticker.ts +++ b/src/helpers/preloadAnimatedEmojiSticker.ts @@ -29,8 +29,9 @@ export default function preloadAnimatedEmojiSticker(emoji: string, width?: numbe name: 'doc' + doc.id, autoplay: false, loop: false, - toneIndex - }, 'none'); + toneIndex, + group: 'none' + }); animation.addEventListener('firstFrame', () => { saveLottiePreview(doc, animation.canvas[0], toneIndex); diff --git a/src/helpers/themeController.ts b/src/helpers/themeController.ts index 1ab88c30..dd6a0ecf 100644 --- a/src/helpers/themeController.ts +++ b/src/helpers/themeController.ts @@ -4,7 +4,7 @@ * https://github.com/morethanwords/tweb/blob/master/LICENSE */ -import type {Theme} from '../config/state'; +import type {AppTheme} from '../config/state'; import IS_TOUCH_SUPPORTED from '../environment/touchSupport'; import rootScope from '../lib/rootScope'; import {hslaStringToHex} from './color'; @@ -12,7 +12,7 @@ import {hslaStringToHex} from './color'; export class ThemeController { private themeColor: string; private _themeColorElem: Element; - private systemTheme: Theme['name']; + private systemTheme: AppTheme['name']; constructor() { rootScope.addEventListener('theme_change', () => { @@ -71,8 +71,8 @@ export class ThemeController { public applyHighlightningColor() { let hsla: string; const theme = themeController.getTheme(); - if(theme.background.highlightningColor) { - hsla = theme.background.highlightningColor; + if(theme.settings?.highlightningColor) { + hsla = theme.settings.highlightningColor; document.documentElement.style.setProperty('--message-highlightning-color', hsla); } else { document.documentElement.style.removeProperty('--message-highlightning-color'); @@ -100,7 +100,7 @@ export class ThemeController { return this.getTheme().name === 'night'; } - public getTheme(name: Theme['name'] = rootScope.settings.theme === 'system' ? this.systemTheme : rootScope.settings.theme) { + public getTheme(name: AppTheme['name'] = rootScope.settings.theme === 'system' ? this.systemTheme : rootScope.settings.theme) { return rootScope.settings.themes.find((t) => t.name === name); } } diff --git a/src/index.ts b/src/index.ts index b4a549a6..b1b14dd9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -30,6 +30,8 @@ import parseUriParams from './helpers/string/parseUriParams'; import Modes from './config/modes'; import {AuthState} from './types'; import {IS_BETA} from './config/debug'; +import IS_INSTALL_PROMPT_SUPPORTED from './environment/installPrompt'; +import cacheInstallPrompt from './helpers/dom/installPrompt'; // import appNavigationController from './components/appNavigationController'; document.addEventListener('DOMContentLoaded', async() => { @@ -209,6 +211,10 @@ document.addEventListener('DOMContentLoaded', async() => { }, {capture: true, passive: false}); */ } + if(IS_INSTALL_PROMPT_SUPPORTED) { + cacheInstallPrompt(); + } + const perf = performance.now(); // await pause(1000000); diff --git a/src/lang.ts b/src/lang.ts index 5f56ac4a..495acbb0 100644 --- a/src/lang.ts +++ b/src/lang.ts @@ -109,6 +109,7 @@ const lang = { 'one_value': '%d exception', 'other_value': '%d exceptions' }, + 'PWA.Install': 'Install App', 'Link.Available': 'Link is available', 'Link.Taken': 'Link is already taken', 'Link.Invalid': 'Link is invalid', @@ -119,6 +120,11 @@ const lang = { 'Popup.Unpin.HideTitle': 'Hide pinned messages', 'Popup.Unpin.HideDescription': 'Do you want to hide the pinned message bar? It wil stay hidden until a new message is pinned.', 'Popup.Unpin.Hide': 'Hide', + 'Popup.Attach.GroupMedia': 'Group all media', + 'Popup.Attach.UngroupMedia': 'Ungroup all media', + 'Popup.Attach.AsMedia': 'Send as media', + 'Popup.Attach.EnableSpoilers': 'Hide all with spoilers', + 'Popup.Attach.RemoveSpoilers': 'Remove all spoilers', 'TwoStepAuth.EmailCodeChangeEmail': 'Change Email', 'MarkupTooltip.LinkPlaceholder': 'Enter URL...', 'MediaViewer.Context.Download': 'Download', @@ -876,6 +882,9 @@ const lang = { 'LimitReachedFoldersLocked': 'You have reached the limit of **%1$d** folders for this account. We are working to let you increase this limit in the future.', 'FwdMessageToSavedMessages': 'Message forwarded to **Saved Messages**.', 'FwdMessagesToSavedMessages': 'Messages forwarded to **Saved Messages**.', + 'ColorTheme': 'Color theme', + 'SendAsFile': 'Send as file', + 'SendAsFiles': 'Send as files', // * macos 'AccountSettings.Filters': 'Chat Folders', diff --git a/src/lib/appManagers/appDocsManager.ts b/src/lib/appManagers/appDocsManager.ts index 67cb4ffd..80018359 100644 --- a/src/lib/appManagers/appDocsManager.ts +++ b/src/lib/appManagers/appDocsManager.ts @@ -231,7 +231,7 @@ export class AppDocsManager extends AppManager { doc.file_name = `${doc.type}_${date}${ext ? '.' + ext : ''}`; } - if(isServiceWorkerOnline() && (doc.type === 'gif' && doc.size > 8e6) || doc.type === 'audio' || doc.type === 'video'/* || doc.mime_type.indexOf('video/') === 0 */) { + if(isServiceWorkerOnline() && ((doc.type === 'gif' && doc.size > 8e6) || doc.type === 'audio' || doc.type === 'video')/* || doc.mime_type.indexOf('video/') === 0 */) { doc.supportsStreaming = true; const cacheContext = this.thumbsStorage.getCacheContext(doc); diff --git a/src/lib/appManagers/appImManager.ts b/src/lib/appManagers/appImManager.ts index 845c5525..ce0adc8c 100644 --- a/src/lib/appManagers/appImManager.ts +++ b/src/lib/appManagers/appImManager.ts @@ -27,7 +27,7 @@ import {MOUNT_CLASS_TO} from '../../config/debug'; import appNavigationController from '../../components/appNavigationController'; import AppPrivateSearchTab from '../../components/sidebarRight/tabs/search'; import I18n, {i18n, join, LangPackKey} from '../langPack'; -import {ChatFull, ChatInvite, ChatParticipant, ChatParticipants, Message, MessageAction, MessageMedia, SendMessageAction, User, Chat as MTChat, UrlAuthResult} from '../../layer'; +import {ChatFull, ChatInvite, ChatParticipant, ChatParticipants, Message, MessageAction, MessageMedia, SendMessageAction, User, Chat as MTChat, UrlAuthResult, WallPaper} from '../../layer'; import PeerTitle from '../../components/peerTitle'; import PopupPeer, {PopupPeerCheckboxOptions} from '../../components/popups/peer'; import blurActiveElement from '../../helpers/dom/blurActiveElement'; @@ -100,6 +100,7 @@ import parseUriParams from '../../helpers/string/parseUriParams'; import getMessageThreadId from './utils/messages/getMessageThreadId'; import findUpTag from '../../helpers/dom/findUpTag'; import {MTAppConfig} from '../mtproto/appConfig'; +import PopupForward from '../../components/popups/forward'; export type ChatSavedPosition = { mids: number[], @@ -186,10 +187,19 @@ export class AppImManager extends EventListenerBase<{ this.backgroundPromises = {}; STATE_INIT.settings.themes.forEach((theme) => { - if(theme.background.slug) { - const url = 'assets/img/' + theme.background.slug + '.svg' + (IS_FIREFOX ? '?1' : ''); - this.backgroundPromises[theme.background.slug] = Promise.resolve(url); + const themeSettings = theme.settings; + if(!themeSettings) { + return; } + + const {wallpaper} = themeSettings; + const slug = (wallpaper as WallPaper.wallPaper).slug; + if(!slug) { + return; + } + + const url = 'assets/img/' + slug + '.svg' + (IS_FIREFOX ? '?1' : ''); + this.backgroundPromises[slug] = Promise.resolve(url); }); this.selectTab(APP_TABS.CHATLIST); @@ -793,6 +803,23 @@ export class AppImManager extends EventListenerBase<{ this.onHashChange(true); this.attachKeydownListener(); this.handleAutologinDomains(); + this.checkForShare(); + } + + private checkForShare() { + const share = apiManagerProxy.share; + if(share) { + apiManagerProxy.share = undefined; + new PopupForward(undefined, async(peerId) => { + await this.setPeer({peerId}); + if(share.files?.length) { + const foundMedia = share.files.some((file) => MEDIA_MIME_TYPES_SUPPORTED.has(file.type)); + new PopupNewMedia(this.chat, share.files, foundMedia ? 'media' : 'document'); + } else { + this.managers.appMessagesManager.sendText(peerId, share.text); + } + }); + } } public handleUrlAuth(options: { @@ -1495,16 +1522,17 @@ export class AppImManager extends EventListenerBase<{ public setCurrentBackground(broadcastEvent = false): ReturnType { const theme = themeController.getTheme(); - if(theme.background.slug) { + const slug = (theme.settings?.wallpaper as WallPaper.wallPaper)?.slug; + if(slug) { const defaultTheme = STATE_INIT.settings.themes.find((t) => t.name === theme.name); // const isDefaultBackground = theme.background.blur === defaultTheme.background.blur && - // theme.background.slug === defaultTheme.background.slug; + // slug === defaultslug; // if(!isDefaultBackground) { - return this.getBackground(theme.background.slug).then((url) => { + return this.getBackground(slug).then((url) => { return this.setBackground(url, broadcastEvent); }, () => { // * if NO_ENTRY_FOUND - theme.background = copy(defaultTheme.background); // * reset background + theme.settings = copy(defaultTheme.settings); // * reset background return this.setCurrentBackground(true); }); // } diff --git a/src/lib/appManagers/appMessagesManager.ts b/src/lib/appManagers/appMessagesManager.ts index 436c461e..72873c67 100644 --- a/src/lib/appManagers/appMessagesManager.ts +++ b/src/lib/appManagers/appMessagesManager.ts @@ -9,6 +9,10 @@ * https://github.com/zhukov/webogram/blob/master/LICENSE */ +import type {ApiFileManager} from '../mtproto/apiFileManager'; +import type {MediaSize} from '../../helpers/mediaSize'; +import type {Progress} from './appDownloadManager'; +import type {VIDEO_MIME_TYPE} from '../../environment/videoMimeTypesSupport'; import LazyLoadQueueBase from '../../components/lazyLoadQueueBase'; import deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise'; import tsNow from '../../helpers/tsNow'; @@ -16,7 +20,6 @@ import {randomLong} from '../../helpers/random'; import {Chat, ChatFull, Dialog as MTDialog, DialogPeer, DocumentAttribute, InputMedia, InputMessage, InputPeerNotifySettings, InputSingleMedia, Message, MessageAction, MessageEntity, MessageFwdHeader, MessageMedia, MessageReplies, MessageReplyHeader, MessagesDialogs, MessagesFilter, MessagesMessages, MethodDeclMap, NotifyPeer, PeerNotifySettings, PhotoSize, SendMessageAction, Update, Photo, Updates, ReplyMarkup, InputPeer, InputPhoto, InputDocument, InputGeoPoint, WebPage, GeoPoint, ReportReason, MessagesGetDialogs, InputChannel, InputDialogPeer, ReactionCount, MessagePeerReaction, MessagesSearchCounter, Peer, MessageReactions, Document, InputFile, Reaction, ForumTopic as MTForumTopic, MessagesForumTopics, MessagesGetReplies, MessagesGetHistory, MessagesAffectedHistory, UrlAuthResult} from '../../layer'; import {ArgumentTypes, InvokeApiOptions} from '../../types'; import {logger, LogTypes} from '../logger'; -import type {ApiFileManager} from '../mtproto/apiFileManager'; import {ReferenceContext} from '../mtproto/referenceDatabase'; import DialogsStorage, {GLOBAL_FOLDER_ID} from '../storages/dialogs'; import {ChatRights} from './appChatsManager'; @@ -36,7 +39,6 @@ import deepEqual from '../../helpers/object/deepEqual'; import splitStringByLength from '../../helpers/string/splitStringByLength'; import debounce from '../../helpers/schedulers/debounce'; import {AppManager} from './manager'; -import type {MediaSize} from '../../helpers/mediaSize'; import getPhotoMediaInput from './utils/photos/getPhotoMediaInput'; import getPhotoDownloadOptions from './utils/photos/getPhotoDownloadOptions'; import fixEmoji from '../richTextProcessor/fixEmoji'; @@ -53,7 +55,6 @@ import defineNotNumerableProperties from '../../helpers/object/defineNotNumerabl import getDocumentMediaInput from './utils/docs/getDocumentMediaInput'; import getDocumentInputFileName from './utils/docs/getDocumentInputFileName'; import getFileNameForUpload from '../../helpers/getFileNameForUpload'; -import type {Progress} from './appDownloadManager'; import noop from '../../helpers/noop'; import appTabsManager from './appTabsManager'; import MTProtoMessagePort from '../mtproto/mtprotoMessagePort'; @@ -817,7 +818,7 @@ export class AppMessagesManager extends AppManager { cacheContext.url = options.objectURL || ''; photo = this.appPhotosManager.savePhoto(photo); - } else if(getEnvironment().VIDEO_MIME_TYPES_SUPPORTED.has(fileType)) { + } else if(getEnvironment().VIDEO_MIME_TYPES_SUPPORTED.has(fileType as VIDEO_MIME_TYPE)) { attachType = 'video'; apiFileName = 'video.mp4'; actionName = 'sendMessageUploadVideoAction'; @@ -5624,7 +5625,7 @@ export class AppMessagesManager extends AppManager { return chatPeerIds[chatPeerIds.length - 1] === peerId; }); - if(!tab) { + if(!tab && tabs.length) { tabs.sort((a, b) => a.state.idleStartTime - b.state.idleStartTime); tab = !tabs[0].state.idleStartTime ? tabs[0] : tabs[tabs.length - 1]; } @@ -5633,7 +5634,7 @@ export class AppMessagesManager extends AppManager { port.invokeVoid('notificationBuild', { message, ...options - }, tab.source); + }, tab?.source); } public getScheduledMessagesStorage(peerId: PeerId) { @@ -6393,7 +6394,7 @@ export class AppMessagesManager extends AppManager { } } - return unreadCount || +!!(dialog as Dialog).pFlags.unread_mark; + return unreadCount || +!!(dialog as Dialog).pFlags?.unread_mark; } public isDialogUnread(dialog: Dialog | ForumTopic) { diff --git a/src/lib/appManagers/utils/state/loadState.ts b/src/lib/appManagers/utils/state/loadState.ts index 564c0561..e4301ed7 100644 --- a/src/lib/appManagers/utils/state/loadState.ts +++ b/src/lib/appManagers/utils/state/loadState.ts @@ -6,7 +6,7 @@ import App from '../../../../config/app'; import DEBUG from '../../../../config/debug'; -import {AutoDownloadPeerTypeSettings, State, STATE_INIT} from '../../../../config/state'; +import {AutoDownloadPeerTypeSettings, State, STATE_INIT, Background, AppTheme} from '../../../../config/state'; import compareVersion from '../../../../helpers/compareVersion'; import copy from '../../../../helpers/object/copy'; import validateInitObject from '../../../../helpers/object/validateInitObject'; @@ -18,6 +18,7 @@ import {recordPromiseBound} from '../../../../helpers/recordPromise'; // import RESET_STORAGES_PROMISE from "../storages/resetStoragesPromise"; import {StoragesResults} from '../storages/loadStorages'; import {logger} from '../../../logger'; +import {WallPaper} from '../../../../layer'; const REFRESH_EVERY = 24 * 60 * 60 * 1000; // 1 day // const REFRESH_EVERY = 1e3; @@ -245,22 +246,6 @@ async function loadStateInner() { // state = this.state = new Proxy(state, getHandler()); - // * support old version - if(!state.settings.hasOwnProperty('theme') && state.settings.hasOwnProperty('nightTheme')) { - state.settings.theme = state.settings.nightTheme ? 'night' : 'day'; - pushToState('settings', state.settings); - } - - // * support old version - if(!state.settings.hasOwnProperty('themes') && state.settings.background) { - state.settings.themes = copy(STATE_INIT.settings.themes); - const theme = state.settings.themes.find((t) => t.name === state.settings.theme); - if(theme) { - theme.background = state.settings.background; - pushToState('settings', state.settings); - } - } - // * migrate auto download settings const autoDownloadSettings = state.settings.autoDownload; if(autoDownloadSettings?.private !== undefined) { @@ -291,9 +276,12 @@ async function loadStateInner() { pushToState('settings', state.settings); } + const SKIP_VALIDATING_PATHS: Set = new Set([ + 'settings.themes' + ]); validateInitObject(STATE_INIT, state, (missingKey) => { pushToState(missingKey as keyof State, state[missingKey as keyof State]); - }); + }, undefined, SKIP_VALIDATING_PATHS); let newVersion: string, oldVersion: string; if(state.version !== STATE_VERSION || state.build !== BUILD/* || true */) { @@ -306,26 +294,83 @@ async function loadStateInner() { resetStorages.add('dialogs'); } - // * migrate backgrounds (March 13, 2022; to version 1.3.0) - if(compareVersion(state.version, '1.3.0') === -1) { + if(compareVersion(state.version, '1.7.1') === -1) { let migrated = false; - state.settings.themes.forEach((theme, idx, arr) => { - if(( - theme.name === 'day' && - theme.background.slug === 'ByxGo2lrMFAIAAAAmkJxZabh8eM' && - theme.background.type === 'image' - ) || ( - theme.name === 'night' && - theme.background.color === '#0f0f0f' && - theme.background.type === 'color' - )) { - const newTheme = STATE_INIT.settings.themes.find((newTheme) => newTheme.name === theme.name); - if(newTheme) { - arr[idx] = copy(newTheme); - migrated = true; - } + // * migrate backgrounds (March 13, 2022; to version 1.3.0) + if(compareVersion(state.version, '1.3.0') === -1) { + migrated = true; + state.settings.theme = copy(STATE_INIT.settings.theme); + state.settings.themes = copy(STATE_INIT.settings.themes); + } else if(compareVersion(state.version, '1.7.1') === -1) { // * migrate backgrounds (January 25th, 2023; to version 1.7.1) + migrated = true; + const oldThemes = state.settings.themes as any as Array<{ + name: AppTheme['name'], + background: Background + }>; + + state.settings.themes = copy(STATE_INIT.settings.themes); + + try { + oldThemes.forEach((oldTheme) => { + const oldBackground = oldTheme.background; + if(!oldBackground) { + return; + } + + const newTheme = state.settings.themes.find((t) => t.name === oldTheme.name); + newTheme.settings.highlightningColor = oldBackground.highlightningColor; + + const getColorFromHex = (hex: string) => hex && parseInt(hex.slice(1), 16); + + const colors = (oldBackground.color || '').split(',').map(getColorFromHex); + + if(oldBackground.color && !oldBackground.slug) { + newTheme.settings.wallpaper = { + _: 'wallPaperNoFile', + id: 0, + pFlags: {}, + settings: { + _: 'wallPaperSettings', + pFlags: {} + } + }; + } else { + const wallPaper: WallPaper.wallPaper = { + _: 'wallPaper', + id: 0, + access_hash: 0, + slug: oldBackground.slug, + document: {} as any, + pFlags: {}, + settings: { + _: 'wallPaperSettings', + pFlags: {} + } + }; + + const wallPaperSettings = wallPaper.settings; + newTheme.settings.wallpaper = wallPaper; + if(oldBackground.slug && !oldBackground.color) { + wallPaperSettings.pFlags.blur = oldBackground.blur || undefined; + } else if(oldBackground.intensity) { + wallPaperSettings.intensity = oldBackground.intensity; + wallPaper.pFlags.pattern = true; + wallPaper.pFlags.dark = oldBackground.intensity < 0 || undefined; + } + } + + if(colors.length) { + const wallPaperSettings = newTheme.settings.wallpaper.settings; + wallPaperSettings.background_color = colors[0]; + wallPaperSettings.second_background_color = colors[1]; + wallPaperSettings.third_background_color = colors[2]; + wallPaperSettings.fourth_background_color = colors[3]; + } + }); + } catch(err) { + console.error('migrating themes error', err); } - }); + } if(migrated) { pushToState('settings', state.settings); diff --git a/src/lib/mtproto/apiFileManager.ts b/src/lib/mtproto/apiFileManager.ts index 095de769..77743775 100644 --- a/src/lib/mtproto/apiFileManager.ts +++ b/src/lib/mtproto/apiFileManager.ts @@ -771,9 +771,9 @@ export class ApiFileManager extends AppManager { if(isDocument && !thumb) { this.rootScope.dispatchEvent('document_downloading', (media as Document.document).id); - promise.catch(noop).finally(() => { + promise.then(() => { this.rootScope.dispatchEvent('document_downloaded', (media as Document.document).id); - }); + }).catch(noop); } } diff --git a/src/lib/mtproto/mtprotoworker.ts b/src/lib/mtproto/mtprotoworker.ts index 645b4ebe..2f5f56ef 100644 --- a/src/lib/mtproto/mtprotoworker.ts +++ b/src/lib/mtproto/mtprotoworker.ts @@ -62,6 +62,8 @@ class ApiManagerProxy extends MTProtoMessagePort { private tabState: TabState; + public share: ShareData; + public serviceMessagePort: ServiceMessagePort; private lastServiceWorker: ServiceWorker; @@ -308,6 +310,11 @@ class ApiManagerProxy extends MTProtoMessagePort { hello: (payload, source) => { this.serviceMessagePort.resendLockTask(source); + }, + + share: (payload) => { + this.log('will try to share something'); + this.share = payload; } }); // #endif diff --git a/src/lib/mtproto/webPushApiManager.ts b/src/lib/mtproto/webPushApiManager.ts index b2e8baa4..15271544 100644 --- a/src/lib/mtproto/webPushApiManager.ts +++ b/src/lib/mtproto/webPushApiManager.ts @@ -30,6 +30,8 @@ export type PushSubscriptionNotify = { tokenValue: string }; +const PING_PUSH_INTERVAL = 10000; + export class WebPushApiManager extends EventListenerBase<{ push_notification_click: (n: PushNotificationObject) => void, push_init: (n: PushSubscriptionNotify) => void, @@ -187,7 +189,7 @@ export class WebPushApiManager extends EventListenerBase<{ settings: this.settings }); - this.isAliveTO = setTimeout(this.isAliveNotify, 10000); + this.isAliveTO = setTimeout(this.isAliveNotify, PING_PUSH_INTERVAL); } public setSettings(newSettings: WebPushApiManager['settings']) { diff --git a/src/lib/rlottie/lottieLoader.ts b/src/lib/rlottie/lottieLoader.ts index 28e53193..9a6302ba 100644 --- a/src/lib/rlottie/lottieLoader.ts +++ b/src/lib/rlottie/lottieLoader.ts @@ -151,11 +151,7 @@ export class LottieLoader { ]).then(() => player); } - public async loadAnimationWorker( - params: RLottieOptions, - group: AnimationItemGroup = params.group || '', - middleware?: () => boolean - ): Promise { + public async loadAnimationWorker(params: RLottieOptions): Promise { if(!IS_WEB_ASSEMBLY_SUPPORTED) { return this.loadPromise as any; } @@ -164,6 +160,7 @@ export class LottieLoader { await this.loadLottieWorkers(); } + const {middleware, group = ''} = params; if(middleware && !middleware()) { throw makeError('MIDDLEWARE'); } @@ -190,7 +187,7 @@ export class LottieLoader { const player = this.initPlayer(containers, params); - animationIntersector.addAnimation(player, group); + animationIntersector.addAnimation(player, group, undefined, middleware); return player; } diff --git a/src/lib/rlottie/rlottiePlayer.ts b/src/lib/rlottie/rlottiePlayer.ts index 4ca987ba..a314eab7 100644 --- a/src/lib/rlottie/rlottiePlayer.ts +++ b/src/lib/rlottie/rlottiePlayer.ts @@ -5,6 +5,7 @@ */ import type {AnimationItemGroup, AnimationItemWrapper} from '../../components/animationIntersector'; +import type {Middleware} from '../../helpers/middleware'; import CAN_USE_TRANSFERABLES from '../../environment/canUseTransferables'; import IS_APPLE_MX from '../../environment/appleMx'; import {IS_ANDROID, IS_APPLE_MOBILE, IS_APPLE, IS_SAFARI} from '../../environment/userAgent'; @@ -17,6 +18,7 @@ import framesCache, {FramesCache, FramesCacheItem} from '../../helpers/framesCac export type RLottieOptions = { container: HTMLElement | HTMLElement[], + middleware?: Middleware, canvas?: HTMLCanvasElement, autoplay?: boolean, animationData: Blob, diff --git a/src/lib/serviceWorker/index.service.ts b/src/lib/serviceWorker/index.service.ts index 506cd393..c80da001 100644 --- a/src/lib/serviceWorker/index.service.ts +++ b/src/lib/serviceWorker/index.service.ts @@ -19,6 +19,7 @@ import listenMessagePort from '../../helpers/listenMessagePort'; import {getWindowClients} from '../../helpers/context'; import {MessageSendPort} from '../mtproto/superMessagePort'; import handleDownload from './download'; +import onShareFetch, {checkWindowClientForDeferredShare} from './share'; export const log = logger('SW', LogTypes.Error | LogTypes.Debug | LogTypes.Log | LogTypes.Warn, true); const ctx = self as any as ServiceWorkerGlobalScope; @@ -52,6 +53,8 @@ const onWindowConnected = (source: WindowClient) => { serviceMessagePort.invokeVoid('hello', undefined, source); sendMessagePortIfNeeded(source); connectedWindows.set(source.id, source); + + checkWindowClientForDeferredShare(source); }; export const serviceMessagePort = new ServiceMessagePort(); @@ -137,6 +140,11 @@ const onFetch = (event: FetchEvent): void => { break; } + case 'share': { + onShareFetch(event, params); + break; + } + case 'ping': { event.respondWith(new Response('pong')); break; diff --git a/src/lib/serviceWorker/push.ts b/src/lib/serviceWorker/push.ts index c90b9275..51a830f6 100644 --- a/src/lib/serviceWorker/push.ts +++ b/src/lib/serviceWorker/push.ts @@ -11,7 +11,7 @@ import {Database} from '../../config/databases'; import DATABASE_STATE from '../../config/databases/state'; -import {IS_FIREFOX} from '../../environment/userAgent'; +import {IS_FIREFOX, IS_MOBILE} from '../../environment/userAgent'; import deepEqual from '../../helpers/object/deepEqual'; import IDBStorage from '../files/idb'; import {log, serviceMessagePort} from './index.service'; @@ -20,6 +20,11 @@ import {ServicePushPingTaskPayload} from './serviceMessagePort'; const ctx = self as any as ServiceWorkerGlobalScope; const defaultBaseUrl = location.protocol + '//' + location.hostname + location.pathname.split('/').slice(0, -1).join('/') + '/'; +// as in webPushApiManager.ts +const PING_PUSH_TIMEOUT = 10000 + 1500; +let lastPingTime = 0; +let localNotificationsAvailable = !IS_MOBILE; + export type PushNotificationObject = { loc_key: string, loc_args: string[], @@ -29,7 +34,8 @@ export type PushNotificationObject = { chat_id?: string, // should be number from_id?: string, // should be number msg_id: string, - peerId?: string // should be number + peerId?: string, // should be number + silent?: string // can be '1' }, sound?: string, random_id: number, @@ -37,6 +43,7 @@ export type PushNotificationObject = { description: string, mute: string, // should be number title: string, + message?: string, action?: 'mute1d' | 'push_settings', // will be set before postMessage to main thread }; @@ -55,28 +62,35 @@ class SomethingGetter, Storage extends Record(db, storeName); } - public async get(key: T) { - if(this.cache[key] !== undefined) { + private getDefault(key: T) { + const callback = this.defaults[key]; + return typeof(callback) === 'function' ? callback() : callback; + } + + public get(key: T) { + if(this.cache.hasOwnProperty(key)) { return this.cache[key]; } - let value: Storage[T]; - try { - value = await this.storage.get(key as string); - } catch(err) { + const promise = this.storage.get(key as string) as Promise; + return promise.then((value) => value, () => undefined as Storage[T]).then((value) => { + if(this.cache.hasOwnProperty(key)) { + return this.cache[key]; + } + value ??= this.getDefault(key); + + return this.cache[key] = value; + }); + } + + public getCached(key: T) { + const value = this.get(key); + if(value instanceof Promise) { + throw 'no property'; } - if(this.cache[key] !== undefined) { - return this.cache[key]; - } - - if(value === undefined) { - const callback = this.defaults[key]; - value = typeof(callback) === 'function' ? callback() : callback; - } - - return this.cache[key] = value; + return value; } public async set(key: T, value: Storage[T]) { @@ -101,7 +115,7 @@ type PushStorage = { push_settings: Partial }; -const getter = new SomethingGetter(DATABASE_STATE, 'session', { +const defaults: PushStorage = { push_mute_until: 0, push_lang: { push_message_nopreview: 'You have a new message', @@ -109,67 +123,49 @@ const getter = new SomethingGetter(DATABASE_ push_action_settings: 'Settings' }, push_settings: {} -}); +}; + +const getter = new SomethingGetter(DATABASE_STATE, 'session', defaults); + +// fill cache +for(const i in defaults) { + getter.get(i as keyof PushStorage); +} ctx.addEventListener('push', (event) => { const obj: PushNotificationObject = event.data.json(); - log('push', obj); + log('push', {...obj}); - let hasActiveWindows = false; - const checksPromise = Promise.all([ - getter.get('push_mute_until'), - ctx.clients.matchAll({type: 'window'}) - ]).then((result) => { - const [muteUntil, clientList] = result; + try { + if(!obj.badge) { + throw 'no badge'; + } - log('matched clients', clientList); - hasActiveWindows = clientList.length > 0; + const [muteUntil, settings, lang] = [ + getter.getCached('push_mute_until'), + getter.getCached('push_settings'), + getter.getCached('push_lang') + ]; + + const nowTime = Date.now(); + if( + userInvisibleIsSupported() && + muteUntil && + nowTime < muteUntil + ) { + throw `Supress notification because mute for ${Math.ceil((muteUntil - nowTime) / 60000)} min`; + } + + const hasActiveWindows = (Date.now() - lastPingTime) <= PING_PUSH_TIMEOUT && localNotificationsAvailable; if(hasActiveWindows) { throw 'Supress notification because some instance is alive'; } - const nowTime = Date.now(); - if(userInvisibleIsSupported() && - muteUntil && - nowTime < muteUntil) { - throw `Supress notification because mute for ${Math.ceil((muteUntil - nowTime) / 60000)} min`; - } - - if(!obj.badge) { - throw 'No badge?'; - } - }); - - checksPromise.catch((reason) => { - log(reason); - }); - - const notificationPromise = checksPromise.then(() => { - return Promise.all([getter.get('push_settings'), getter.get('push_lang')]) - }).then((result) => { - return fireNotification(obj, result[0], result[1]); - }); - - const closePromise = notificationPromise.catch(() => { - log('Closing all notifications on push', hasActiveWindows); - if(userInvisibleIsSupported() || hasActiveWindows) { - return closeAllNotifications(); - } - - return ctx.registration.showNotification('Telegram', { - tag: 'unknown_peer' - }).then(() => { - if(hasActiveWindows) { - return closeAllNotifications(); - } - - setTimeout(() => closeAllNotifications(), hasActiveWindows ? 0 : 100); - }).catch((error) => { - log.error('Show notification error', error); - }); - }); - - event.waitUntil(closePromise); + const notificationPromise = fireNotification(obj, settings, lang); + event.waitUntil(notificationPromise); + } catch(err) { + log(err); + } }); ctx.addEventListener('notificationclick', (event) => { @@ -205,7 +201,7 @@ ctx.addEventListener('notificationclick', (event) => { } if(ctx.clients.openWindow) { - return getter.get('push_settings').then((settings) => { + return Promise.resolve(getter.get('push_settings')).then((settings) => { return ctx.clients.openWindow(settings.baseUrl || defaultBaseUrl); }); } @@ -236,7 +232,7 @@ function removeFromNotifications(notification: Notification) { notifications.delete(notification); } -export function closeAllNotifications() { +export function closeAllNotifications(tag?: string) { for(const notification of notifications) { try { notification.close(); @@ -245,7 +241,7 @@ export function closeAllNotifications() { let promise: Promise; if('getNotifications' in ctx.registration) { - promise = ctx.registration.getNotifications({}).then((notifications) => { + promise = ctx.registration.getNotifications({tag}).then((notifications) => { for(let i = 0, len = notifications.length; i < len; ++i) { try { notifications[i].close(); @@ -269,6 +265,7 @@ function userInvisibleIsSupported() { function fireNotification(obj: PushNotificationObject, settings: PushStorage['push_settings'], lang: PushStorage['push_lang']) { const icon = 'assets/img/logo_filled_rounded.png'; + const badge = 'assets/img/masked.svg'; let title = obj.title || 'Telegram'; let body = obj.description || ''; let peerId: string; @@ -286,7 +283,7 @@ function fireNotification(obj: PushNotificationObject, settings: PushStorage['pu obj.custom.peerId = '' + peerId; let tag = 'peer' + peerId; - if(settings && settings.nopreview) { + if(settings?.nopreview) { title = 'Telegram'; body = lang.push_message_nopreview; tag = 'unknown_peer'; @@ -307,21 +304,20 @@ function fireNotification(obj: PushNotificationObject, settings: PushStorage['pu icon, tag, data: obj, - actions + actions, + badge, + silent: obj.custom.silent === '1' }); - return notificationPromise.then((event) => { - // @ts-ignore - if(event?.notification) { - // @ts-ignore - pushToNotifications(event.notification); - } - }).catch((error) => { + return notificationPromise.catch((error) => { log.error('Show notification promise', error); }); } export function onPing(payload: ServicePushPingTaskPayload, source?: MessageEventSource) { + lastPingTime = Date.now(); + localNotificationsAvailable = payload.localNotifications; + if(pendingNotification && source) { serviceMessagePort.invokeVoid('pushClick', pendingNotification, source); pendingNotification = undefined; diff --git a/src/lib/serviceWorker/serviceMessagePort.ts b/src/lib/serviceWorker/serviceMessagePort.ts index 22eb41bf..9d1c1e42 100644 --- a/src/lib/serviceWorker/serviceMessagePort.ts +++ b/src/lib/serviceWorker/serviceMessagePort.ts @@ -52,6 +52,7 @@ export default class ServiceMessagePort extends // to main thread pushClick: (payload: PushNotificationObject) => void, hello: (payload: void, source: MessageEventSource) => void, + share: (payload: ShareData) => void, // to mtproto worker requestFilePart: (payload: ServiceRequestFilePartTaskPayload) => Promise | MyUploadFile diff --git a/src/lib/serviceWorker/share.ts b/src/lib/serviceWorker/share.ts new file mode 100644 index 00000000..da96f991 --- /dev/null +++ b/src/lib/serviceWorker/share.ts @@ -0,0 +1,52 @@ +/* + * https://github.com/morethanwords/tweb + * Copyright (C) 2019-2021 Eduard Kuzmenko + * https://github.com/morethanwords/tweb/blob/master/LICENSE + */ + +import {log, serviceMessagePort} from './index.service'; + +const deferred: {[id: string]: ShareData[]} = {}; + +function parseFormData(formData: FormData): ShareData { + return { + files: formData.getAll('files') as File[], + title: formData.get('title') as string, + text: formData.get('text') as string, + url: formData.get('url') as string + }; +} + +async function processShareEvent(formData: FormData, clientId: string) { + try { + log('share data', formData); + const data = parseFormData(formData); + (deferred[clientId] ??= []).push(data); + } catch(err) { + log.warn('something wrong with the data', err); + } +}; + +export function checkWindowClientForDeferredShare(windowClient: WindowClient) { + const arr = deferred[windowClient.id]; + if(!arr) { + return; + } + + delete deferred[windowClient.id]; + + log('releasing share events to client:', windowClient.id, 'length:', arr.length); + arr.forEach((data) => { + serviceMessagePort.invokeVoid('share', data, windowClient); + }); +} + +export default function onShareFetch(event: FetchEvent, params: string) { + const promise = event.request.formData() + .then((formData) => { + processShareEvent(formData, event.resultingClientId) + return Response.redirect('..'); + }); + + event.respondWith(promise); +} diff --git a/src/lib/storages/filters.ts b/src/lib/storages/filters.ts index 4291d3e2..8267b9ea 100644 --- a/src/lib/storages/filters.ts +++ b/src/lib/storages/filters.ts @@ -342,41 +342,37 @@ export default class FiltersStorage extends AppManager { flags, id: filter.id, filter: remove ? undefined : this.getOutputDialogFilter(filter) - }).then((bool: boolean) => { // возможно нужна проверка и откат, если результат не ТРУ + }).then((bool) => { // возможно нужна проверка и откат, если результат не ТРУ // console.log('updateDialogFilter bool:', bool); - if(bool) { - /* if(!this.filters[filter.id]) { - this.saveDialogFilter(filter); - } - - rootScope.$broadcast('filter_update', filter); */ - - this.onUpdateDialogFilter({ - _: 'updateDialogFilter', - id: filter.id, - filter: remove ? undefined : filter as any - }); - - if(prepend) { - const f: MyDialogFilter[] = []; - for(const filterId in this.filters) { - const filter = this.filters[filterId]; - ++filter.localId; - f.push(filter); - } - - filter.localId = START_LOCAL_ID; - - const order = f.sort((a, b) => a.localId - b.localId).map((filter) => filter.id); - this.onUpdateDialogFilterOrder({ - _: 'updateDialogFilterOrder', - order - }); - } + /* if(!this.filters[filter.id]) { + this.saveDialogFilter(filter); } - return bool; + rootScope.$broadcast('filter_update', filter); */ + + this.onUpdateDialogFilter({ + _: 'updateDialogFilter', + id: filter.id, + filter: remove ? undefined : filter as any + }); + + if(prepend) { + const f: MyDialogFilter[] = []; + for(const filterId in this.filters) { + const filter = this.filters[filterId]; + ++filter.localId; + f.push(filter); + } + + filter.localId = START_LOCAL_ID; + + const order = f.sort((a, b) => a.localId - b.localId).map((filter) => filter.id); + this.onUpdateDialogFilterOrder({ + _: 'updateDialogFilterOrder', + order + }); + } }); } diff --git a/src/scss/partials/_button.scss b/src/scss/partials/_button.scss index 81f993a7..c33710c6 100644 --- a/src/scss/partials/_button.scss +++ b/src/scss/partials/_button.scss @@ -250,6 +250,10 @@ $btn-menu-z-index: 4; margin-inline: .3125rem; font-weight: 500; transform: scale(1); + + .tgico-char { + width: var(--icon-size); + } @include animation-level(2) { transition: transform var(--btn-menu-transition); diff --git a/src/scss/partials/_chat.scss b/src/scss/partials/_chat.scss index f10c21be..db91d798 100644 --- a/src/scss/partials/_chat.scss +++ b/src/scss/partials/_chat.scss @@ -177,47 +177,6 @@ $chat-input-border-radius: 1rem; //right: var(--chat-input-padding); } - .input-message-input { - --custom-emoji-size: var(--messages-custom-emoji-size); - background: none; - border: none; - width: 100%; - padding: .5rem .5625rem; - /* height: 100%; */ - margin-top: -1px; - max-height: calc(30rem - 2.5rem); // 2.5rem - input helper (reply) - //min-height: inherit; - overflow-y: none; - resize: none; - border: none; - outline: none; - font-size: var(--messages-text-size); - line-height: var(--line-height); - - pre { - display: inline; - margin: 0; - } - - @include animation-level(2) { - transition: height $input-half-transition-time; - } - - @media only screen and (max-height: 30rem) { - max-height: unquote('max(36px, calc(100vh - 10rem))'); - } - - @include respond-to(handhelds) { - max-height: 10rem; - } - - &[data-inline-placeholder]:after { - content: attr(data-inline-placeholder); - color: #a2acb4; - pointer-events: none; - } - } - .toggle-emoticons { &:before { content: $tgico-smile; @@ -1297,6 +1256,25 @@ $chat-input-border-radius: 1rem; } } */ + .input-message-input { + margin-top: -1px; + max-height: calc(30rem - 2.5rem) !important; // 2.5rem - input helper (reply) + + @media only screen and (max-height: 30rem) { + max-height: unquote('max(36px, calc(100vh - 10rem))'); + } + + @include respond-to(handhelds) { + max-height: 10rem; + } + + &[data-inline-placeholder]:after { + content: attr(data-inline-placeholder); + color: #a2acb4; + pointer-events: none; + } + } + .new-message-wrapper { --send-as-size: 1.875rem; --send-as-margin-left: .25rem; @@ -1502,22 +1480,6 @@ $chat-input-border-radius: 1rem; } } - .input-message-container { - width: 1%; - max-height: inherit; - flex: 1 1 auto; - position: relative; - overflow: hidden; - align-self: center; - min-height: calc(var(--chat-input-size) - var(--padding-vertical) * 2); - display: flex; - align-items: center; - - > .scrollable { - position: relative; - } - } - .btn-icon { flex: 0 0 auto; font-size: 1.5rem; @@ -1536,6 +1498,47 @@ $chat-input-border-radius: 1rem; } } +.input-message-container { + width: 1%; + max-height: inherit; + flex: 1 1 auto; + position: relative; + overflow: hidden; + align-self: center; + min-height: calc(var(--chat-input-size) - var(--padding-vertical) * 2); + display: flex; + align-items: center; + + .scrollable { + position: relative; + } +} + +.input-message-input { + --custom-emoji-size: var(--messages-custom-emoji-size); + background: none; + border: none; + width: 100%; + padding: .5rem .5625rem; + /* height: 100%; */ + //min-height: inherit; + overflow-y: none; + resize: none; + border: none; + outline: none; + font-size: var(--messages-text-size); + line-height: var(--line-height); + + pre { + display: inline; + margin: 0; + } + + @include animation-level(2) { + transition: height $input-half-transition-time; + } +} + .bubbles { --translateY: 0; width: 100%; diff --git a/src/scss/partials/_chatBubble.scss b/src/scss/partials/_chatBubble.scss index 6a2a9905..70931888 100644 --- a/src/scss/partials/_chatBubble.scss +++ b/src/scss/partials/_chatBubble.scss @@ -1952,6 +1952,11 @@ $bubble-border-radius-big: 12px; white-space: nowrap; height: var(--messages-time-text-size); // * as font-size visibility: visible; + color: var(--message-time-color); + + &:after { + color: var(--message-status-color); + } } .tgico-pinnedchat { @@ -2599,7 +2604,6 @@ $bubble-border-radius-big: 12px; padding-right: 8px; .inner { - color: var(--secondary-text-color); margin-bottom: 4px; } } @@ -2670,13 +2674,15 @@ $bubble-border-radius-big: 12px; .bubble.is-out { flex-direction: row-reverse; - --message-background-color: var(--message-out-background-color); - --light-message-background-color: var(--light-message-out-background-color); - --dark-message-background-color: var(--dark-message-out-background-color); + --message-background-color: var(--light-filled-message-out-primary-color); + --light-message-background-color: var(--light-message-out-primary-color); + --dark-message-background-color: var(--dark-message-out-primary-color); --link-color: var(--message-out-link-color); --message-primary-color: var(--message-out-primary-color); --light-filled-message-primary-color: var(--light-filled-message-out-primary-color); --selection-background-color: var(--message-out-selection-background-color); + --message-time-color: var(--message-out-time-color); + --message-status-color: var(--message-out-status-color); .bubble-content { margin-left: auto; @@ -2801,17 +2807,15 @@ $bubble-border-radius-big: 12px; margin-left: -4px; .inner { - color: var(--message-out-status-color); bottom: 4px; } - &:after, + &:after, .inner:after { font-size: calc(var(--messages-text-size) + 3px); //vertical-align: middle; margin-left: 1px; line-height: var(--messages-time-text-size); // of message - color: var(--message-out-primary-color); } } @@ -2973,7 +2977,7 @@ $bubble-border-radius-big: 12px; &-answer-selected { background-color: var(--message-out-primary-color); - color: var(--message-out-background-color); + color: var(--light-filled-message-out-primary-color); } html.no-touch &-answer:hover { diff --git a/src/scss/partials/_document.scss b/src/scss/partials/_document.scss index 490c087c..a9c754cb 100644 --- a/src/scss/partials/_document.scss +++ b/src/scss/partials/_document.scss @@ -194,10 +194,12 @@ .document, .audio { + --padding: 0px; --icon-size: 3.375rem; --icon-margin: .875rem; - --padding-left: calc(var(--icon-size) + var(--icon-margin)); - padding-left: var(--padding-left); + --padding-left: calc(var(--icon-size) + var(--icon-margin) + var(--padding)); + padding: var(--padding); + padding-inline-start: var(--padding-left); display: flex; flex-direction: column; justify-content: center; @@ -209,7 +211,7 @@ &-download { position: absolute; // left: 0; - margin-left: calc(var(--padding-left) * -1); + margin-inline-start: calc((var(--padding-left) - var(--padding)) * -1); width: var(--icon-size); height: var(--icon-size); color: #fff; diff --git a/src/scss/partials/_leftSidebar.scss b/src/scss/partials/_leftSidebar.scss index c4a11d26..b24ffde5 100644 --- a/src/scss/partials/_leftSidebar.scss +++ b/src/scss/partials/_leftSidebar.scss @@ -1116,7 +1116,7 @@ } .background-container { - .grid { + .background { &-item { &:after { content: " "; @@ -1144,13 +1144,32 @@ &-media { transition: transform .2s ease-in-out; transform: scale(1); + } + } - &.is-pattern { - background-color: #000; - - .media-photo { - mix-blend-mode: overlay; - } + .preloader-container { + z-index: 1; + } + } +} + +.background { + &-item { + cursor: pointer; + + &-media { + border-radius: inherit; + + &.is-pattern { + background-color: #000; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + + .media-photo { + mix-blend-mode: soft-light; } } } @@ -1159,19 +1178,17 @@ width: 100%; height: 100%; object-fit: cover; - } - - .preloader-container { - z-index: 1; + border-radius: inherit; } } - .background-colors-canvas { + &-colors-canvas { position: absolute; width: 100%; height: 100%; -webkit-mask-position: center; - -webkit-mask-size: contain; + -webkit-mask-size: cover; + border-radius: inherit; } } diff --git a/src/scss/partials/_row.scss b/src/scss/partials/_row.scss index 553dc702..0337d19d 100644 --- a/src/scss/partials/_row.scss +++ b/src/scss/partials/_row.scss @@ -166,6 +166,7 @@ $row-border-radius: $border-radius-medium; transform: translateY(-50%); inset-inline-end: .75rem; pointer-events: none; + opacity: 0; } &.cant-sort { @@ -194,6 +195,12 @@ $row-border-radius: $border-radius-medium; } } + @include hover() { + .row-sortable-icon { + opacity: 1; + } + } + .is-reordering & { @include animation-level(2) { transition: transform var(--transition-standard-in); diff --git a/src/scss/partials/_themes.scss b/src/scss/partials/_themes.scss new file mode 100644 index 00000000..fbd7e274 --- /dev/null +++ b/src/scss/partials/_themes.scss @@ -0,0 +1,98 @@ +/* + * https://github.com/morethanwords/tweb + * Copyright (C) 2019-2021 Eduard Kuzmenko + * https://github.com/morethanwords/tweb/blob/master/LICENSE + */ + +.themes { + &-container { + display: flex; + height: 6.5rem; + position: relative; + margin: 0 -.5rem; + width: calc(100% + 1rem); + align-items: center; + + &:before, + &:after { + content: " "; + display: block; + width: .5rem; + flex: 0 0 auto; + } + } +} + +.theme { + &-container { + height: calc(100% - .5rem); + margin: 0 .25rem; + border-radius: $border-radius-medium; + width: 4.5rem; + flex: 0 0 auto; + position: relative; + transform: scale(1); + + @include animation-level(2) { + transition: transform var(--transition-standard-in); + } + + &:active { + transform: scale(.9); + } + + &:before { + position: absolute; + content: " "; + top: -4px; + right: -4px; + bottom: -4px; + left: -4px; + border-radius: #{$border-radius-medium + 4px}; + border: 2px solid var(--primary-color); + transform: scale(.86); + + @include animation-level(2) { + transition: transform var(--transition-standard-in); + } + } + + &.active { + pointer-events: none; + + &:before { + transform: scale(1); + } + } + } + + &-emoticon { + position: absolute; + bottom: .5rem; + left: 50%; + transform: translateX(-50%); + width: 1.75rem; + height: 1.75rem; + pointer-events: none; + } + + &-bubble { + width: 2.5rem; + height: 1.25rem; + border-radius: 1.75rem; + background-color: #fff; + position: absolute; + + &.is-out { + top: .5rem; + right: .375rem; + background-color: var(--light-filled-message-out-primary-color); + } + + &.is-in { + background-color: var(--message-background-color); + top: calc(1.25rem + .5rem + .25rem); + left: .375rem; + } + } +} diff --git a/src/scss/partials/popups/_mediaAttacher.scss b/src/scss/partials/popups/_mediaAttacher.scss index f72384cd..227ce950 100644 --- a/src/scss/partials/popups/_mediaAttacher.scss +++ b/src/scss/partials/popups/_mediaAttacher.scss @@ -4,6 +4,8 @@ * https://github.com/morethanwords/tweb/blob/master/LICENSE */ +@use "sass:math"; + .popup-new-media { $parent: ".popup"; @@ -43,12 +45,11 @@ } &-close { - font-size: 1.5rem; margin: -1px 0 0 -4px; } &-photo { - max-width: 380px; + max-width: 100%; overflow: hidden; // width: fit-content; width: 100%; @@ -93,12 +94,95 @@ } .popup-new-media.popup-send-photo { - .popup-header { + .popup-container { + width: 25rem; + max-width: 25rem; padding: 0; + + &.border-top-offset { + .popup-input-container { + overflow: unset; + + &:before { + top: -8px; + } + } + } + } + + .popup-header { + padding: 0 1rem; + height: 3.5rem; + margin: 0; + } + + .popup-title { + padding-inline-start: 1.5rem; + } + + .popup-close { + margin: 0; } .popup-body { position: relative; + + .scrollable { + padding: 0 .5rem; + } + } + + .input-message-container { + min-height: inherit; + max-height: inherit; + // margin-top: -.5rem; + } + + .input-message-input { + max-height: inherit !important; + } + + .btn-primary { + flex: 0 0 auto; + width: auto; + padding: 0 1rem; + height: 2.5rem; + line-height: 2.5rem; + text-transform: uppercase; + margin-bottom: .5rem; + } + + .popup-input-container { + --height: 3.5rem; + --max-height: 8.375rem; + display: flex; + align-items: flex-end; + justify-content: space-between; + padding: 0 .5rem; + min-height: var(--height); + max-height: var(--max-height); + position: relative; + flex: 0 0 auto; + overflow: hidden; + + &:before { + content: " "; + position: absolute; + height: 1px; + top: 0; + left: 0; + right: 0; + background-color: var(--border-color); + opacity: 0; + + @include animation-level(2) { + transition: opacity var(--transition-standard-in); + } + } + + &.has-border-top:before { + opacity: 1; + } } .checkbox-field { @@ -146,29 +230,35 @@ } .document { + --padding: .25rem; + --icon-size: 4.5rem; + --icon-margin: .5rem; max-width: 100%; overflow: hidden; cursor: default; - height: 4.5rem; + height: 5rem; + margin: 0 .25rem; + border-radius: $border-radius-medium; &-name { - font-weight: normal; width: 100%; max-width: 100%; overflow: hidden; text-overflow: ellipsis; line-height: 1.5; + margin-bottom: .125rem; } &-ico { - height: 48px; - width: 48px; font-size: 16px; font-weight: normal; line-height: 11px; letter-spacing: 0; + border-radius: #{math.div($border-radius-medium, 2)}; } + @include hover-background-effect(); + /* &.photo { .document-ico { border-radius: $border-radius; diff --git a/src/scss/partials/popups/_reportMessages.scss b/src/scss/partials/popups/_reportMessages.scss index e65b5463..faf3bbf6 100644 --- a/src/scss/partials/popups/_reportMessages.scss +++ b/src/scss/partials/popups/_reportMessages.scss @@ -15,7 +15,7 @@ } .popup-body { - margin: 1em -.5rem .375rem -.5rem; + margin: 1rem 0 .375rem; overflow: unset; } diff --git a/src/scss/style.scss b/src/scss/style.scss index f515fe00..9cb65998 100644 --- a/src/scss/style.scss +++ b/src/scss/style.scss @@ -181,7 +181,7 @@ $chat-input-inner-padding-handhelds: .25rem; } } -@mixin splitColor($property, $color, $light: true, $dark: true, $light-rgb: false, $dark-rgb: false, $rgb: false, $alpha: $hover-alpha) { +@mixin splitColor($property, $color, $light: true, $dark: true, $light-filled: false, $dark-filled: false, $rgb: false, $alpha: $hover-alpha) { --#{$property}: #{$color}; $lightened: hover-color($color); @@ -189,8 +189,8 @@ $chat-input-inner-padding-handhelds: .25rem; --light-#{$property}: #{$lightened}; } - @if $light-rgb != false { - --light-filled-#{$property}: #{rgba-to-rgb($lightened, $light-rgb)}; + @if $light-filled != false { + --light-filled-#{$property}: #{rgba-to-rgb($lightened, $light-filled)}; } $darkened: darken($color, $alpha * 100); @@ -198,8 +198,8 @@ $chat-input-inner-padding-handhelds: .25rem; --dark-#{$property}: #{$darkened}; } - @if $dark-rgb != false { - --dark-filled-#{$property}: #{rgba-to-rgb($darkened, $dark-rgb)}; + @if $dark-filled != false { + --dark-filled-#{$property}: #{rgba-to-rgb($darkened, $dark-filled)}; } @if $rgb != false { @@ -223,7 +223,7 @@ $chat-input-inner-padding-handhelds: .25rem; --input-search-background-color: #fff; --input-search-border-color: #dfe1e5; - @include splitColor(primary-color, #3390ec, true, true, #fff, false, true, .04); + @include splitColor(primary-color, #3390ec, true, true, #fff, false, true); @include splitColor(primary-text-color, #000, false, false, false, false, true); --secondary-color: #c4c9cc; @@ -247,6 +247,7 @@ $chat-input-inner-padding-handhelds: .25rem; --menu-background-color: rgba(var(--surface-color-rgb), var(--backdrop-opacity)); --message-background-color: var(--surface-color); + --message-time-color: var(--secondary-text-color); --message-checkbox-color: #61c642; --message-checkbox-border-color: #fff; --message-primary-color: var(--primary-color); @@ -259,6 +260,7 @@ $chat-input-inner-padding-handhelds: .25rem; --message-out-link-color: var(--link-color); @include splitColor(message-out-primary-color, #4fae4e, false, false, $message-out-background-color); --message-out-status-color: var(--message-out-primary-color); + --message-out-time-color: var(--message-out-status-color); --message-out-audio-play-button-color: #fff; --message-out-selection-background-color: var(--selection-background-color); @@ -323,6 +325,7 @@ $chat-input-inner-padding-handhelds: .25rem; --menu-background-color: rgba(var(--surface-color-rgb), .75); --message-background-color: var(--surface-color); + --message-time-color: var(--secondary-text-color); --message-checkbox-color: var(--primary-color); --message-checkbox-border-color: #fff; --message-secondary-color: var(--secondary-color); @@ -333,7 +336,8 @@ $chat-input-inner-padding-handhelds: .25rem; @include splitColor(message-out-background-color, $message-out-background-color, true, true); --message-out-link-color: #fff; @include splitColor(message-out-primary-color, #fff, false, false, $message-out-background-color); - --message-out-status-color: rgba(255, 255, 255, .6); + --message-out-status-color: #fff; + --message-out-time-color: rgba(255, 255, 255, .6); --message-out-audio-play-button-color: var(--message-out-background-color); --message-out-selection-background-color: rgba(var(--surface-color-rgb), .4); // * Night theme end @@ -395,6 +399,7 @@ $chat-input-inner-padding-handhelds: .25rem; @import "partials/customEmoji"; @import "partials/usernames"; @import "partials/topics"; +@import "partials/themes"; @import "partials/popups/popup"; @import "partials/popups/editAvatar"; diff --git a/webpack.common.js b/webpack.common.js index d3b052ee..7fe5a457 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -186,9 +186,9 @@ module.exports = { // }, compress: true, http2: useLocalNotLocal ? true : (useLocal ? undefined : true), - https: useLocal ? undefined : { - key: fs.readFileSync(__dirname + '/certs/server-key.pem', 'utf8'), - cert: fs.readFileSync(__dirname + '/certs/server-cert.pem', 'utf8') + https: useLocal ? undefined : { // generated keys using mkcert + key: fs.readFileSync(__dirname + '/certs/localhost-key.pem', 'utf8'), + cert: fs.readFileSync(__dirname + '/certs/localhost.pem', 'utf8') }, allowedHosts: useLocal ? undefined : [ domain