Browse Source

Fix SESSION_REVOKED

Fix file reference bugs
master
morethanwords 4 years ago
parent
commit
03b0535019
  1. 5
      src/components/animationIntersector.ts
  2. 6
      src/components/appMediaPlaybackController.ts
  3. 12
      src/components/audio.ts
  4. 6
      src/components/emoticonsDropdown/index.ts
  5. 5
      src/components/sidebarLeft/settings.ts
  6. 5
      src/helpers/mediaSizes.ts
  7. 12
      src/lib/appManagers/appDocsManager.ts
  8. 6
      src/lib/appManagers/appImManager.ts
  9. 2
      src/lib/appManagers/appMessagesManager.ts
  10. 6
      src/lib/appManagers/appPhotosManager.ts
  11. 6
      src/lib/appManagers/appPollsManager.ts
  12. 6
      src/lib/appManagers/appSidebarLeft.ts
  13. 6
      src/lib/appManagers/appSidebarRight.ts
  14. 7
      src/lib/appManagers/appStateManager.ts
  15. 5
      src/lib/appManagers/appStickersManager.ts
  16. 6
      src/lib/cacheStorage.ts
  17. 5
      src/lib/logger.ts
  18. 6
      src/lib/lottieLoader.ts
  19. 6
      src/lib/mtproto/apiFileManager.ts
  20. 72
      src/lib/mtproto/apiManager.ts
  21. 5
      src/lib/mtproto/mtproto.service.ts
  22. 3
      src/lib/mtproto/mtproto_config.ts
  23. 6
      src/lib/mtproto/mtprotoworker.ts
  24. 6
      src/lib/mtproto/passwordManager.ts
  25. 5
      src/lib/mtproto/referenceDatabase.ts
  26. 6
      src/lib/opusDecodeController.ts
  27. 6
      src/lib/richtextprocessor.ts
  28. 18
      src/lib/storage.ts
  29. 6
      src/lib/webp/webpWorkerController.ts
  30. 4
      src/pages/pageIm.ts
  31. 6
      src/pages/pagesManager.ts
  32. 320
      src/scss/partials/_audio.scss
  33. 2
      src/scss/partials/_chat.scss
  34. 11
      src/scss/partials/_chatBubble.scss
  35. 20
      src/scss/partials/_rightSidebar.scss

5
src/components/animationIntersector.ts

@ -1,5 +1,6 @@
import { isInDOM, $rootScope } from "../lib/utils"; import { isInDOM, $rootScope } from "../lib/utils";
import { RLottiePlayer } from "../lib/lottieLoader"; import { RLottiePlayer } from "../lib/lottieLoader";
import { MOUNT_CLASS_TO } from "../lib/mtproto/mtproto_config";
export interface AnimationItem { export interface AnimationItem {
el: HTMLElement, el: HTMLElement,
@ -166,7 +167,7 @@ export class AnimationIntersector {
} }
const animationIntersector = new AnimationIntersector(); const animationIntersector = new AnimationIntersector();
if(process.env.NODE_ENV == 'development') { if(MOUNT_CLASS_TO) {
(window as any).animationIntersector = animationIntersector; MOUNT_CLASS_TO.animationIntersector = animationIntersector;
} }
export default animationIntersector; export default animationIntersector;

6
src/components/appMediaPlaybackController.ts

@ -3,6 +3,7 @@ import appMessagesManager from "../lib/appManagers/appMessagesManager";
import appDocsManager, {MyDocument} from "../lib/appManagers/appDocsManager"; import appDocsManager, {MyDocument} from "../lib/appManagers/appDocsManager";
import { CancellablePromise, deferredPromise } from "../helpers/cancellablePromise"; import { CancellablePromise, deferredPromise } from "../helpers/cancellablePromise";
import { isSafari } from "../helpers/userAgent"; import { isSafari } from "../helpers/userAgent";
import { MOUNT_CLASS_TO } from "../lib/mtproto/mtproto_config";
// TODO: если удалить сообщение, и при этом аудио будет играть - оно не остановится, и можно будет по нему перейти вникуда // TODO: если удалить сообщение, и при этом аудио будет играть - оно не остановится, и можно будет по нему перейти вникуда
@ -232,8 +233,5 @@ class AppMediaPlaybackController {
} }
const appMediaPlaybackController = new AppMediaPlaybackController(); const appMediaPlaybackController = new AppMediaPlaybackController();
// @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appMediaPlaybackController = appMediaPlaybackController);
if(process.env.NODE_ENV != 'production') {
(window as any).appMediaPlaybackController = appMediaPlaybackController;
}
export default appMediaPlaybackController; export default appMediaPlaybackController;

12
src/components/audio.ts

@ -37,7 +37,6 @@ export function decodeWaveform(waveform: Uint8Array | number[]) {
} else { } else {
var value = dataView.getUint16(byteIndex, true); var value = dataView.getUint16(byteIndex, true);
} }
console.log('decoded waveform, setting last value:', value, byteIndex, bitShift); console.log('decoded waveform, setting last value:', value, byteIndex, bitShift);
result[valueCount - 1] = (value >> bitShift) & 0b00011111; */ result[valueCount - 1] = (value >> bitShift) & 0b00011111; */
return result; return result;
@ -296,7 +295,10 @@ export default class AudioElement extends HTMLElement {
const durationStr = String(doc.duration | 0).toHHMMSS(true); const durationStr = String(doc.duration | 0).toHHMMSS(true);
this.innerHTML = `<div class="audio-toggle audio-ico tgico-largeplay"></div>`; this.innerHTML = `<div class="audio-toggle audio-ico tgico-largeplay">
<div class="part one" x="0" y="0" fill="#fff"></div>
<div class="part two" x="0" y="0" fill="#fff"></div>
</div>`;
const downloadDiv = document.createElement('div'); const downloadDiv = document.createElement('div');
downloadDiv.classList.add('audio-download'); downloadDiv.classList.add('audio-download');
@ -323,7 +325,7 @@ export default class AudioElement extends HTMLElement {
const onPlaying = () => { const onPlaying = () => {
audioTimeDiv.innerText = String(audio.currentTime | 0).toHHMMSS(true) + ' / ' + durationStr; audioTimeDiv.innerText = String(audio.currentTime | 0).toHHMMSS(true) + ' / ' + durationStr;
if(!audio.paused) { if(!audio.paused) {
toggle.classList.remove('tgico-largeplay'); //toggle.classList.remove('tgico-largeplay');
toggle.classList.add('tgico-largepause'); toggle.classList.add('tgico-largepause');
} }
}; };
@ -339,7 +341,7 @@ export default class AudioElement extends HTMLElement {
}); });
this.addAudioListener('ended', () => { this.addAudioListener('ended', () => {
toggle.classList.add('tgico-largeplay'); //toggle.classList.add('tgico-largeplay');
toggle.classList.remove('tgico-largepause'); toggle.classList.remove('tgico-largepause');
}); });
@ -349,7 +351,7 @@ export default class AudioElement extends HTMLElement {
}); });
this.addAudioListener('pause', () => { this.addAudioListener('pause', () => {
toggle.classList.add('tgico-largeplay'); //toggle.classList.add('tgico-largeplay');
toggle.classList.remove('tgico-largepause'); toggle.classList.remove('tgico-largepause');
}); });

6
src/components/emoticonsDropdown/index.ts

@ -10,6 +10,7 @@ import Scrollable, { ScrollableX } from "../scrollable_new";
import EmojiTab from "./tabs/emoji"; import EmojiTab from "./tabs/emoji";
import StickersTab from "./tabs/stickers"; import StickersTab from "./tabs/stickers";
import StickyIntersector from "../stickyIntersector"; import StickyIntersector from "../stickyIntersector";
import { MOUNT_CLASS_TO } from "../../lib/mtproto/mtproto_config";
export const EMOTICONSSTICKERGROUP = 'emoticons-dropdown'; export const EMOTICONSSTICKERGROUP = 'emoticons-dropdown';
@ -326,8 +327,5 @@ export class EmoticonsDropdown {
} }
const emoticonsDropdown = new EmoticonsDropdown(); const emoticonsDropdown = new EmoticonsDropdown();
// @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.emoticonsDropdown = emoticonsDropdown);
if(process.env.NODE_ENV != 'production') {
(window as any).emoticonsDropdown = emoticonsDropdown;
}
export default emoticonsDropdown; export default emoticonsDropdown;

5
src/components/sidebarLeft/settings.ts

@ -31,10 +31,7 @@ export default class AppSettingsTab implements SliderTab {
}); });
this.logOutBtn.addEventListener('click', (e) => { this.logOutBtn.addEventListener('click', (e) => {
apiManager.logOut().finally(() => { apiManager.logOut();
localStorage.clear();
location.reload();
});
}); });
this.buttons.edit.addEventListener('click', () => { this.buttons.edit.addEventListener('click', () => {

5
src/helpers/mediaSizes.ts

@ -1,3 +1,4 @@
import { MOUNT_CLASS_TO } from "../lib/mtproto/mtproto_config";
import EventListenerBase from "./eventListenerBase"; import EventListenerBase from "./eventListenerBase";
type Size = Partial<{width: number, height: number}>; type Size = Partial<{width: number, height: number}>;
@ -112,7 +113,5 @@ class MediaSizes extends EventListenerBase<{
} }
const mediaSizes = new MediaSizes(); const mediaSizes = new MediaSizes();
if(process.env.NODE_ENV != 'production') { MOUNT_CLASS_TO && (MOUNT_CLASS_TO.mediaSizes = mediaSizes);
(window as any).mediaSizes = mediaSizes;
}
export default mediaSizes; export default mediaSizes;

12
src/lib/appManagers/appDocsManager.ts

@ -7,6 +7,7 @@ import appPhotosManager from './appPhotosManager';
import { isServiceWorkerSupported } from '../config'; import { isServiceWorkerSupported } from '../config';
import { InputFileLocation, Document, PhotoSize } from '../../layer'; import { InputFileLocation, Document, PhotoSize } from '../../layer';
import referenceDatabase, { ReferenceContext } from '../mtproto/referenceDatabase'; import referenceDatabase, { ReferenceContext } from '../mtproto/referenceDatabase';
import { MOUNT_CLASS_TO } from '../mtproto/mtproto_config';
export type MyDocument = Document.document; export type MyDocument = Document.document;
@ -22,8 +23,10 @@ class AppDocsManager {
const oldDoc = this.docs[doc.id]; const oldDoc = this.docs[doc.id];
safeReplaceArrayInObject('file_reference', oldDoc, doc); if(doc.file_reference) { // * because we can have a new object w/o the file_reference while sending
referenceDatabase.saveContext(doc.file_reference, context); safeReplaceArrayInObject('file_reference', oldDoc, doc);
referenceDatabase.saveContext(doc.file_reference, context);
}
//console.log('saveDoc', apiDoc, this.docs[apiDoc.id]); //console.log('saveDoc', apiDoc, this.docs[apiDoc.id]);
if(oldDoc) { if(oldDoc) {
@ -319,8 +322,5 @@ class AppDocsManager {
} }
const appDocsManager = new AppDocsManager(); const appDocsManager = new AppDocsManager();
// @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appDocsManager = appDocsManager);
if(process.env.NODE_ENV != 'production') {
(window as any).appDocsManager = appDocsManager;
}
export default appDocsManager; export default appDocsManager;

6
src/lib/appManagers/appImManager.ts

@ -41,6 +41,7 @@ import { ChatContextMenu } from '../../components/chat/contextMenu';
import { ChatSearch } from '../../components/chat/search'; import { ChatSearch } from '../../components/chat/search';
import mediaSizes from '../../helpers/mediaSizes'; import mediaSizes from '../../helpers/mediaSizes';
import { isAndroid, isApple, isSafari } from '../../helpers/userAgent'; import { isAndroid, isApple, isSafari } from '../../helpers/userAgent';
import { MOUNT_CLASS_TO } from '../mtproto/mtproto_config';
//console.log('appImManager included33!'); //console.log('appImManager included33!');
@ -2731,8 +2732,5 @@ export class AppImManager {
} }
const appImManager = new AppImManager(); const appImManager = new AppImManager();
// @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appImManager = appImManager);
if(process.env.NODE_ENV != 'production') {
(window as any).appImManager = appImManager;
}
export default appImManager; export default appImManager;

2
src/lib/appManagers/appMessagesManager.ts

@ -3780,7 +3780,7 @@ export class AppMessagesManager {
let c = message.media.webpage || message.media; let c = message.media.webpage || message.media;
const smth = c.photo || c.document; const smth = c.photo || c.document;
if(smth.file_reference) { if(smth?.file_reference) {
referenceDatabase.deleteContext(smth.file_reference, {type: 'message', messageID}); referenceDatabase.deleteContext(smth.file_reference, {type: 'message', messageID});
} }
} }

6
src/lib/appManagers/appPhotosManager.ts

@ -52,8 +52,10 @@ export class AppPhotosManager {
} */ } */
const oldPhoto = this.photos[photo.id]; const oldPhoto = this.photos[photo.id];
safeReplaceArrayInObject('file_reference', oldPhoto, photo); if(photo.file_reference) { // * because we can have a new object w/o the file_reference while sending
referenceDatabase.saveContext(photo.file_reference, context); safeReplaceArrayInObject('file_reference', oldPhoto, photo);
referenceDatabase.saveContext(photo.file_reference, context);
}
if(oldPhoto) { if(oldPhoto) {
return Object.assign(oldPhoto, photo); return Object.assign(oldPhoto, photo);

6
src/lib/appManagers/appPollsManager.ts

@ -6,6 +6,7 @@ import apiUpdatesManager from "./apiUpdatesManager";
import { $rootScope } from "../utils"; import { $rootScope } from "../utils";
import { logger, LogLevels } from "../logger"; import { logger, LogLevels } from "../logger";
import appUsersManager from "./appUsersManager"; import appUsersManager from "./appUsersManager";
import { MOUNT_CLASS_TO } from "../mtproto/mtproto_config";
export type PollAnswer = { export type PollAnswer = {
_: 'pollAnswer', _: 'pollAnswer',
@ -206,8 +207,5 @@ class AppPollsManager {
} }
const appPollsManager = new AppPollsManager(); const appPollsManager = new AppPollsManager();
// @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appPollsManager = appPollsManager);
if(process.env.NODE_ENV != 'production') {
(window as any).appPollsManager = appPollsManager;
}
export default appPollsManager; export default appPollsManager;

6
src/lib/appManagers/appSidebarLeft.ts

@ -21,6 +21,7 @@ import SidebarSlider from "../../components/slider";
import SearchInput from "../../components/searchInput"; import SearchInput from "../../components/searchInput";
import appStateManager from "./appStateManager"; import appStateManager from "./appStateManager";
import appChatsManager from "./appChatsManager"; import appChatsManager from "./appChatsManager";
import { MOUNT_CLASS_TO } from "../mtproto/mtproto_config";
AvatarElement; AvatarElement;
@ -301,8 +302,5 @@ export class AppSidebarLeft extends SidebarSlider {
} }
const appSidebarLeft = new AppSidebarLeft(); const appSidebarLeft = new AppSidebarLeft();
// @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appSidebarLeft = appSidebarLeft);
if(process.env.NODE_ENV != 'production') {
(window as any).appSidebarLeft = appSidebarLeft;
}
export default appSidebarLeft; export default appSidebarLeft;

6
src/lib/appManagers/appSidebarRight.ts

@ -7,6 +7,7 @@ import mediaSizes, { ScreenSize } from "../../helpers/mediaSizes";
import AppPrivateSearchTab from "../../components/sidebarRight/search"; import AppPrivateSearchTab from "../../components/sidebarRight/search";
import AppSharedMediaTab from "../../components/sidebarRight/sharedMedia"; import AppSharedMediaTab from "../../components/sidebarRight/sharedMedia";
import AppForwardTab from "../../components/sidebarRight/forward"; import AppForwardTab from "../../components/sidebarRight/forward";
import { MOUNT_CLASS_TO } from "../mtproto/mtproto_config";
export const RIGHT_COLUMN_ACTIVE_CLASSNAME = 'is-right-column-shown'; export const RIGHT_COLUMN_ACTIVE_CLASSNAME = 'is-right-column-shown';
@ -165,8 +166,5 @@ export class AppSidebarRight extends SidebarSlider {
} }
const appSidebarRight = new AppSidebarRight(); const appSidebarRight = new AppSidebarRight();
// @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appSidebarRight = appSidebarRight);
if(process.env.NODE_ENV != 'production') {
(window as any).appSidebarRight = appSidebarRight;
}
export default appSidebarRight; export default appSidebarRight;

7
src/lib/appManagers/appStateManager.ts

@ -8,7 +8,7 @@ import apiUpdatesManager from './apiUpdatesManager';
import { $rootScope, copy } from '../utils'; import { $rootScope, copy } from '../utils';
import { logger } from '../logger'; import { logger } from '../logger';
import type { AppStickersManager } from './appStickersManager'; import type { AppStickersManager } from './appStickersManager';
import { App } from '../mtproto/mtproto_config'; import { App, MOUNT_CLASS_TO } from '../mtproto/mtproto_config';
const REFRESH_EVERY = 24 * 60 * 60 * 1000; // 1 day const REFRESH_EVERY = 24 * 60 * 60 * 1000; // 1 day
const STATE_VERSION = App.version; const STATE_VERSION = App.version;
@ -233,8 +233,5 @@ export class AppStateManager {
//console.trace('appStateManager include'); //console.trace('appStateManager include');
const appStateManager = new AppStateManager(); const appStateManager = new AppStateManager();
// @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appStateManager = appStateManager);
if(process.env.NODE_ENV != 'production') {
(window as any).appStateManager = appStateManager;
}
export default appStateManager; export default appStateManager;

5
src/lib/appManagers/appStickersManager.ts

@ -4,6 +4,7 @@ import { $rootScope } from '../utils';
import { StickerSet, InputStickerSet, StickerSetCovered, MessagesRecentStickers, Document, InputFileLocation, MessagesStickerSet, PhotoSize } from '../../layer'; import { StickerSet, InputStickerSet, StickerSetCovered, MessagesRecentStickers, Document, InputFileLocation, MessagesStickerSet, PhotoSize } from '../../layer';
import { Modify } from '../../types'; import { Modify } from '../../types';
import appStateManager from './appStateManager'; import appStateManager from './appStateManager';
import { MOUNT_CLASS_TO } from '../mtproto/mtproto_config';
export class AppStickersManager { export class AppStickersManager {
private stickerSets: { private stickerSets: {
@ -259,7 +260,5 @@ export class AppStickersManager {
} }
const appStickersManager = new AppStickersManager(); const appStickersManager = new AppStickersManager();
if(process.env.NODE_ENV != 'production') { MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appStickersManager = appStickersManager);
(window as any).appStickersManager = appStickersManager;
}
export default appStickersManager; export default appStickersManager;

6
src/lib/cacheStorage.ts

@ -1,5 +1,6 @@
import {blobConstruct} from './bin_utils'; import {blobConstruct} from './bin_utils';
import FileManager from './filemanager'; import FileManager from './filemanager';
import { MOUNT_CLASS_TO } from './mtproto/mtproto_config';
//import { logger } from './polyfill'; //import { logger } from './polyfill';
class CacheStorageController { class CacheStorageController {
@ -95,8 +96,5 @@ class CacheStorageController {
} }
const cacheStorage = new CacheStorageController(); const cacheStorage = new CacheStorageController();
/* // @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.cacheStorage = cacheStorage);
if(process.env.NODE_ENV != 'production') {
(window as any).cacheStorage = cacheStorage;
} */
export default cacheStorage; export default cacheStorage;

5
src/lib/logger.ts

@ -1,3 +1,5 @@
//import { DEBUG } from "./mtproto/mtproto_config";
export enum LogLevels { export enum LogLevels {
log = 1, log = 1,
warn = 2, warn = 2,
@ -11,8 +13,7 @@ function dT() {
} }
export function logger(prefix: string, level = LogLevels.log | LogLevels.warn | LogLevels.error) { export function logger(prefix: string, level = LogLevels.log | LogLevels.warn | LogLevels.error) {
// @ts-ignore if(process.env.NODE_ENV == 'development'/* || true */) {
if(process.env.NODE_ENV == 'production'/* || true */) {
level = LogLevels.error; level = LogLevels.error;
} }

6
src/lib/lottieLoader.ts

@ -5,6 +5,7 @@ import EventListenerBase from "../helpers/eventListenerBase";
import mediaSizes from "../helpers/mediaSizes"; import mediaSizes from "../helpers/mediaSizes";
import { isAndroid, isApple, isAppleMobile, isSafari } from "../helpers/userAgent"; import { isAndroid, isApple, isAppleMobile, isSafari } from "../helpers/userAgent";
import RLottieWorker from 'worker-loader!./rlottie/rlottie.worker'; import RLottieWorker from 'worker-loader!./rlottie/rlottie.worker';
import { MOUNT_CLASS_TO } from "./mtproto/mtproto_config";
let convert = (value: number) => { let convert = (value: number) => {
return Math.round(Math.min(Math.max(value, 0), 1) * 255); return Math.round(Math.min(Math.max(value, 0), 1) * 255);
@ -720,8 +721,5 @@ class LottieLoader {
} }
const lottieLoader = new LottieLoader(); const lottieLoader = new LottieLoader();
// @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.lottieLoader = lottieLoader);
if(process.env.NODE_ENV != 'production') {
(window as any).lottieLoader = lottieLoader;
}
export default lottieLoader; export default lottieLoader;

6
src/lib/mtproto/apiFileManager.ts

@ -9,6 +9,7 @@ import cryptoWorker from "../crypto/cryptoworker";
import { notifySomeone, notifyAll } from "../../helpers/context"; import { notifySomeone, notifyAll } from "../../helpers/context";
import { InputFileLocation, FileLocation, InputFile, UploadFile } from "../../layer"; import { InputFileLocation, FileLocation, InputFile, UploadFile } from "../../layer";
import { CancellablePromise, deferredPromise } from "../../helpers/cancellablePromise"; import { CancellablePromise, deferredPromise } from "../../helpers/cancellablePromise";
import { MOUNT_CLASS_TO } from "./mtproto_config";
type Delayed = { type Delayed = {
offset: number, offset: number,
@ -541,8 +542,5 @@ export class ApiFileManager {
} }
const apiFileManager = new ApiFileManager(); const apiFileManager = new ApiFileManager();
// @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.apiFileManager = apiFileManager);
if(process.env.NODE_ENV != 'production') {
(self as any).apiFileManager = apiFileManager;
}
export default apiFileManager; export default apiFileManager;

72
src/lib/mtproto/apiManager.ts

@ -18,6 +18,17 @@ import { InvokeApiOptions } from '../../types';
//console.error('apiManager included!'); //console.error('apiManager included!');
// TODO: если запрос словил флуд, нужно сохранять его параметры и возвращать тот же промис на новый такой же запрос, например - загрузка истории // TODO: если запрос словил флуд, нужно сохранять его параметры и возвращать тот же промис на новый такой же запрос, например - загрузка истории
export type ApiError = Partial<{
code: number,
type: string,
description: string,
originalError: any,
stack: string,
handled: boolean,
input: string,
message: ApiError
}>;
export class ApiManager { export class ApiManager {
public cachedNetworkers: {[x: number]: MTPNetworker} = {}; public cachedNetworkers: {[x: number]: MTPNetworker} = {};
public cachedUploadNetworkers: {[x: number]: MTPNetworker} = {}; public cachedUploadNetworkers: {[x: number]: MTPNetworker} = {};
@ -87,52 +98,17 @@ export class ApiManager {
} }
return Promise.all(logoutPromises).then(() => { return Promise.all(logoutPromises).then(() => {
AppStorage.remove('dc', 'user_auth', 'stickerSets');
this.baseDcID = 0;
this.telegramMeNotify(false);
this.mtpClearStorage();
}, (error) => { }, (error) => {
storageKeys.push('dc', 'user_auth', 'stickerSets');
AppStorage.remove(storageKeys);
this.baseDcID = 0;
error.handled = true; error.handled = true;
}).finally(() => {
this.baseDcID = 0;
this.telegramMeNotify(false); this.telegramMeNotify(false);
this.mtpClearStorage(); AppStorage.clear();
})/* .then(() => { })/* .then(() => {
location.pathname = '/'; location.pathname = '/';
}) */; }) */;
} }
public mtpClearStorage() {
var saveKeys = ['user_auth', 't_user_auth', 'dc', 't_dc'];
for(var dcID = 1; dcID <= 5; dcID++) {
saveKeys.push('dc' + dcID + '_auth_key');
saveKeys.push('dc' + dcID + '_auth_keyID');
saveKeys.push('dc' + dcID + '_server_salt'); // new
saveKeys.push('t_dc' + dcID + '_auth_key');
saveKeys.push('t_dc' + dcID + '_auth_keyID');
saveKeys.push('t_dc' + dcID + '_server_salt'); // new
}
AppStorage.noPrefix();
AppStorage.get<string[]|boolean[]>(saveKeys).then((values) => {
AppStorage.clear().then(() => {
var restoreObj: any = {};
saveKeys.forEach((key, i) => {
var value = values[i];
if(value !== false && value !== undefined) {
restoreObj[key] = value;
}
});
AppStorage.noPrefix();
return AppStorage.set(restoreObj);
});
});
}
// mtpGetNetworker // mtpGetNetworker
public async getNetworker(dcID: number, options: InvokeApiOptions): Promise<MTPNetworker> { public async getNetworker(dcID: number, options: InvokeApiOptions): Promise<MTPNetworker> {
const upload = (options.fileUpload || options.fileDownload) const upload = (options.fileUpload || options.fileDownload)
@ -205,14 +181,19 @@ export class ApiManager {
///////this.log('Invoke api', method, params, options); ///////this.log('Invoke api', method, params, options);
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let rejectPromise = (error: any) => { let rejectPromise = (error: ApiError) => {
if(!error) { if(!error) {
error = {type: 'ERROR_EMPTY'}; error = {type: 'ERROR_EMPTY'};
} else if (!isObject(error)) { } else if(!isObject(error)) {
error = {message: error}; error = {message: error};
} }
reject(error); reject(error);
if(error.code == 401 && error.type == 'SESSION_REVOKED') {
this.logOut();
}
if(options.ignoreErrors) { if(options.ignoreErrors) {
return; return;
} }
@ -245,8 +226,11 @@ export class ApiManager {
var performRequest = (networker: MTPNetworker) => { var performRequest = (networker: MTPNetworker) => {
return (cachedNetworker = networker) return (cachedNetworker = networker)
.wrapApiCall(method, params, options) .wrapApiCall(method, params, options)
.then(resolve, (error: any) => { .then(resolve, (error: ApiError) => {
this.log.error('Error', error.code, error.type, this.baseDcID, dcID); //if(!options.ignoreErrors) {
if(error.type != 'FILE_REFERENCE_EXPIRED') {
this.log.error('Error', error.code, error.type, this.baseDcID, dcID);
}
if(error.code == 401 && this.baseDcID == dcID) { if(error.code == 401 && this.baseDcID == dcID) {
AppStorage.remove('dc', 'user_auth'); AppStorage.remove('dc', 'user_auth');
@ -270,7 +254,7 @@ export class ApiManager {
(cachedNetworker = networker).wrapApiCall(method, params, options).then(resolve, rejectPromise); (cachedNetworker = networker).wrapApiCall(method, params, options).then(resolve, rejectPromise);
}, rejectPromise); }, rejectPromise);
} else if(error.code == 303) { } else if(error.code == 303) {
var newDcID = error.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_)(\d+)/)[2]; var newDcID = +error.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_)(\d+)/)[2];
if(newDcID != dcID) { if(newDcID != dcID) {
if(options.dcID) { if(options.dcID) {
options.dcID = newDcID; options.dcID = newDcID;
@ -283,7 +267,7 @@ export class ApiManager {
}, rejectPromise); }, rejectPromise);
} }
} else if(!options.rawError && error.code == 420) { } else if(!options.rawError && error.code == 420) {
var waitTime = error.type.match(/^FLOOD_WAIT_(\d+)/)[1] || 10; var waitTime = +error.type.match(/^FLOOD_WAIT_(\d+)/)[1] || 10;
if(waitTime > (options.timeout !== undefined ? options.timeout : 60)) { if(waitTime > (options.timeout !== undefined ? options.timeout : 60)) {
return rejectPromise(error); return rejectPromise(error);

5
src/lib/mtproto/mtproto.service.ts

@ -222,7 +222,4 @@ function alignLimit(limit: number) {
return 2 ** Math.ceil(Math.log(limit) / Math.log(2)); return 2 ** Math.ceil(Math.log(limit) / Math.log(2));
} }
// @ts-ignore //MOUNT_CLASS_TO && (MOUNT_CLASS_TO.onFetch = onFetch);
if(process.env.NODE_ENV != 'production') {
(ctx as any).onFetch = onFetch;
}

3
src/lib/mtproto/mtproto_config.ts

@ -13,3 +13,6 @@ export const Modes = {
ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol == 'https:' && location.search.indexOf('ssl=0') == -1, ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol == 'https:' && location.search.indexOf('ssl=0') == -1,
multipleConnections: true multipleConnections: true
}; };
export const DEBUG = process.env.NODE_ENV != 'production';
export const MOUNT_CLASS_TO: any = DEBUG ? typeof(window) !== 'undefined' ? window : self : null;

6
src/lib/mtproto/mtprotoworker.ts

@ -8,6 +8,7 @@ import type { DownloadOptions } from './apiFileManager';
import type { ServiceWorkerTask, ServiceWorkerTaskResponse } from './mtproto.service'; import type { ServiceWorkerTask, ServiceWorkerTaskResponse } from './mtproto.service';
import { isServiceWorkerSupported } from '../config'; import { isServiceWorkerSupported } from '../config';
import { MethodDeclMap } from '../../layer'; import { MethodDeclMap } from '../../layer';
import { MOUNT_CLASS_TO } from './mtproto_config';
type Task = { type Task = {
taskID: number, taskID: number,
@ -230,8 +231,5 @@ class ApiManagerProxy extends CryptoWorkerMethods {
} }
const apiManagerProxy = new ApiManagerProxy(); const apiManagerProxy = new ApiManagerProxy();
// @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.apiManagerProxy = apiManagerProxy);
if(process.env.NODE_ENV != 'production') {
(window as any).apiManagerProxy = apiManagerProxy;
}
export default apiManagerProxy; export default apiManagerProxy;

6
src/lib/mtproto/passwordManager.ts

@ -1,5 +1,6 @@
import apiManager from './mtprotoworker'; import apiManager from './mtprotoworker';
import { AccountPassword } from '../../layer'; import { AccountPassword } from '../../layer';
import { MOUNT_CLASS_TO } from './mtproto_config';
//import { computeCheck } from "../crypto/srp"; //import { computeCheck } from "../crypto/srp";
export class PasswordManager { export class PasswordManager {
@ -76,8 +77,5 @@ export class PasswordManager {
} }
const passwordManager = new PasswordManager(); const passwordManager = new PasswordManager();
// @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.passwordManager = passwordManager);
if(process.env.NODE_ENV != 'production') {
(self as any).passwordManager = passwordManager;
}
export default passwordManager; export default passwordManager;

5
src/lib/mtproto/referenceDatabase.ts

@ -1,5 +1,6 @@
import { Photo } from "../../layer"; import { Photo } from "../../layer";
import { deepEqual } from "../utils"; import { deepEqual } from "../utils";
import { MOUNT_CLASS_TO } from "./mtproto_config";
export type ReferenceContext = ReferenceContext.referenceContextProfilePhoto | ReferenceContext.referenceContextMessage; export type ReferenceContext = ReferenceContext.referenceContextProfilePhoto | ReferenceContext.referenceContextMessage;
export namespace ReferenceContext { export namespace ReferenceContext {
@ -66,7 +67,5 @@ class ReferenceDatabase {
} }
const referenceDatabase = new ReferenceDatabase(); const referenceDatabase = new ReferenceDatabase();
if(process.env.NODE_ENV != 'production') { MOUNT_CLASS_TO && (MOUNT_CLASS_TO.referenceDatabase = referenceDatabase);
(window as any).referenceDatabase = referenceDatabase;
}
export default referenceDatabase; export default referenceDatabase;

6
src/lib/opusDecodeController.ts

@ -1,5 +1,6 @@
import { isSafari } from "../helpers/userAgent"; import { isSafari } from "../helpers/userAgent";
import { logger, LogLevels } from "./logger"; import { logger, LogLevels } from "./logger";
import { MOUNT_CLASS_TO } from "./mtproto/mtproto_config";
type Result = { type Result = {
bytes: Uint8Array, bytes: Uint8Array,
@ -172,8 +173,5 @@ export class OpusDecodeController {
} }
const opusDecodeController = new OpusDecodeController(); const opusDecodeController = new OpusDecodeController();
// @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.opusDecodeController = opusDecodeController);
if(process.env.NODE_ENV != 'production') {
(window as any).opusDecodeController = opusDecodeController;
}
export default opusDecodeController; export default opusDecodeController;

6
src/lib/richtextprocessor.ts

@ -3,6 +3,7 @@ import Config from './config';
import emojiRegExp from '../emoji/regex'; import emojiRegExp from '../emoji/regex';
import { encodeEmoji } from '../emoji'; import { encodeEmoji } from '../emoji';
import { MOUNT_CLASS_TO } from './mtproto/mtproto_config';
var EmojiHelper = { var EmojiHelper = {
emojiMap: (code: string) => { return code; }, emojiMap: (code: string) => { return code; },
@ -778,10 +779,7 @@ let RichTextProcessor = {
emojiSupported: emojiSupported emojiSupported: emojiSupported
}; };
// @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.RichTextProcessor = RichTextProcessor);
if(process.env.NODE_ENV != 'production') {
(window as any).RichTextProcessor = RichTextProcessor;
}
export {RichTextProcessor}; export {RichTextProcessor};

18
src/lib/storage.ts

@ -121,17 +121,9 @@ class ConfigStorage {
} }
} }
clear(callback: any) { clear() {
if(this.useLs) { localStorage.clear();
try { location.reload();
localStorage.clear();
} catch (e) {
this.useLs = false;
}
}
this.cache = {};
callback();
} }
} }
@ -210,8 +202,8 @@ class AppStorage {
return this.proxy<T>('remove', ...args); return this.proxy<T>('remove', ...args);
} }
public clear<T>(...args: any[]) { public clear() {
return this.proxy<T>('clear', ...args); return this.proxy('clear');
} }
} }

6
src/lib/webp/webpWorkerController.ts

@ -1,6 +1,7 @@
import WebpWorker from 'worker-loader!./webp.worker'; import WebpWorker from 'worker-loader!./webp.worker';
import { CancellablePromise, deferredPromise } from '../../helpers/cancellablePromise'; import { CancellablePromise, deferredPromise } from '../../helpers/cancellablePromise';
import apiManagerProxy from '../mtproto/mtprotoworker'; import apiManagerProxy from '../mtproto/mtprotoworker';
import { MOUNT_CLASS_TO } from '../mtproto/mtproto_config';
export type WebpConvertTask = { export type WebpConvertTask = {
type: 'convertWebp', type: 'convertWebp',
@ -56,8 +57,5 @@ export class WebpWorkerController {
} }
const webpWorkerController = new WebpWorkerController(); const webpWorkerController = new WebpWorkerController();
// @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.webpWorkerController = webpWorkerController);
if(process.env.NODE_ENV != 'production') {
(window as any).webpWorkerController = webpWorkerController;
}
export default webpWorkerController; export default webpWorkerController;

4
src/pages/pageIm.ts

@ -2,6 +2,7 @@ import { openBtnMenu/* , ripple */ } from "../components/misc";
//import {stackBlurImage} from '../lib/StackBlur'; //import {stackBlurImage} from '../lib/StackBlur';
import Page from "./page"; import Page from "./page";
import { cancelEvent } from "../lib/utils"; import { cancelEvent } from "../lib/utils";
import { DEBUG } from "../lib/mtproto/mtproto_config";
let onFirstMount = () => { let onFirstMount = () => {
//return; //return;
@ -21,8 +22,7 @@ let onFirstMount = () => {
alert('navigator.mediaDevices.getUserMedia:' + typeof(navigator.mediaDevices?.getUserMedia)); alert('navigator.mediaDevices.getUserMedia:' + typeof(navigator.mediaDevices?.getUserMedia));
alert('global.WebAssembly:' + typeof(WebAssembly)); */ alert('global.WebAssembly:' + typeof(WebAssembly)); */
// @ts-ignore if(DEBUG) {
if(process.env.NODE_ENV != 'production') {
import('../lib/services'); import('../lib/services');
} }

6
src/pages/pagesManager.ts

@ -2,6 +2,7 @@ import Page from "./page";
import { whichChild } from "../lib/utils"; import { whichChild } from "../lib/utils";
import lottieLoader from "../lib/lottieLoader"; import lottieLoader from "../lib/lottieLoader";
import { horizontalMenu } from "../components/horizontalMenu"; import { horizontalMenu } from "../components/horizontalMenu";
import { MOUNT_CLASS_TO } from "../lib/mtproto/mtproto_config";
class PagesManager { class PagesManager {
private pageID = -1; private pageID = -1;
@ -38,8 +39,5 @@ class PagesManager {
} }
const pagesManager = new PagesManager(); const pagesManager = new PagesManager();
// @ts-ignore MOUNT_CLASS_TO && (MOUNT_CLASS_TO.pagesManager = pagesManager);
if(process.env.NODE_ENV != 'production') {
(window as any).pagesManager = pagesManager;
}
export default pagesManager; export default pagesManager;

320
src/scss/partials/_audio.scss

@ -12,11 +12,325 @@
&-toggle, &-download { &-toggle, &-download {
border-radius: 50%; border-radius: 50%;
background-color: $color-blue; background-color: $color-blue;
font-size: 2.3rem; font-size: 0;
align-items: center; align-items: center;
}
@include respond-to(handhelds) { &-toggle {
font-size: 24px !important; transform: rotate(-119deg);
transition: transform .25s;
}
.tgico-largeplay {
.part {
position: absolute;
background-color: white;
@include respond-to(not-handhelds) {
height: 136px;
width: 136px;
}
@include respond-to(handhelds) {
height: 92px;
width: 92px;
}
&.one {
clip-path: polygon(
43.77666% 55.85251%,
43.77874% 55.46331%,
43.7795% 55.09177%,
43.77934% 54.74844%,
43.77855% 54.44389%,
43.77741% 54.18863%,
43.77625% 53.99325%,
43.77533% 53.86828%,
43.77495% 53.82429%,
43.77518% 53.55329%,
43.7754% 53.2823%,
43.77563% 53.01131%,
43.77585% 52.74031%,
43.77608% 52.46932%,
43.7763% 52.19832%,
43.77653% 51.92733%,
43.77675% 51.65633%,
43.77653% 51.38533%,
43.7763% 51.11434%,
43.77608% 50.84334%,
43.77585% 50.57235%,
43.77563% 50.30136%,
43.7754% 50.03036%,
43.77518% 49.75936%,
43.77495% 49.48837%,
44.48391% 49.4885%,
45.19287% 49.48865%,
45.90183% 49.48878%,
46.61079% 49.48892%,
47.31975% 49.48906%,
48.0287% 49.4892%,
48.73766% 49.48934%,
49.44662% 49.48948%,
50.72252% 49.48934%,
51.99842% 49.4892%,
53.27432% 49.48906%,
54.55022% 49.48892%,
55.82611% 49.48878%,
57.10201% 49.48865%,
58.3779% 49.4885%,
59.6538% 49.48837%,
59.57598% 49.89151%,
59.31883% 50.28598%,
58.84686% 50.70884%,
58.12456% 51.19714%,
57.11643% 51.78793%,
55.78697% 52.51828%,
54.10066% 53.42522%,
52.02202% 54.54581%,
49.96525% 55.66916%,
48.3319% 56.57212%,
47.06745% 57.27347%,
46.11739% 57.79191%,
45.42719% 58.14619%,
44.94235% 58.35507%,
44.60834% 58.43725%,
44.37066% 58.41149%,
44.15383% 58.27711%,
43.99617% 58.0603%,
43.88847% 57.77578%,
43.82151% 57.43825%,
43.78608% 57.06245%,
43.77304% 56.66309%,
43.773% 56.25486%
);
transition: clip-path 250ms;
}
&.two {
clip-path: polygon(
43.77666% 43.83035%,
43.77874% 44.21955%,
43.7795% 44.59109%,
43.77934% 44.93442%,
43.77855% 45.23898%,
43.77741% 45.49423%,
43.77625% 45.68961%,
43.77533% 45.81458%,
43.77495% 45.85858%,
43.77518% 46.12957%,
43.7754% 46.40056%,
43.77563% 46.67156%,
43.77585% 46.94255%,
43.77608% 47.21355%,
43.7763% 47.48454%,
43.77653% 47.75554%,
43.77675% 48.02654%,
43.77653% 48.29753%,
43.7763% 48.56852%,
43.77608% 48.83952%,
43.77585% 49.11051%,
43.77563% 49.38151%,
43.7754% 49.65251%,
43.77518% 49.9235%,
43.77495% 50.1945%,
44.48391% 50.19436%,
45.19287% 50.19422%,
45.90183% 50.19408%,
46.61079% 50.19394%,
47.31975% 50.1938%,
48.0287% 50.19366%,
48.73766% 50.19353%,
49.44662% 50.19338%,
50.72252% 50.19353%,
51.99842% 50.19366%,
53.27432% 50.1938%,
54.55022% 50.19394%,
55.82611% 50.19408%,
57.10201% 50.19422%,
58.3779% 50.19436%,
59.6538% 50.1945%,
59.57598% 49.79136%,
59.31883% 49.39688%,
58.84686% 48.97402%,
58.12456% 48.48572%,
57.11643% 47.89493%,
55.78697% 47.16458%,
54.10066% 46.25764%,
52.02202% 45.13705%,
49.96525% 44.01371%,
48.3319% 43.11074%,
47.06745% 42.4094%,
46.11739% 41.89096%,
45.42719% 41.53667%,
44.94235% 41.3278%,
44.60834% 41.24561%,
44.37066% 41.27137%,
44.15383% 41.40575%,
43.99617% 41.62256%,
43.88847% 41.90709%,
43.82151% 42.24461%,
43.78608% 42.62041%,
43.77304% 43.01978%,
43.773% 43.428%
);
transition: clip-path 250ms;
}
}
}
.tgico-largepause {
transform: rotate(-90deg);
.part {
position: absolute;
background-color: white;
@include respond-to(not-handhelds) {
height: 140px;
width: 140px;
}
@include respond-to(handhelds) {
height: 92px;
width: 92px;
}
&.one {
clip-path: polygon(
56.42249% 57.01763%,
54.93283% 57.0175%,
53.00511% 57.01738%,
50.83554% 57.01727%,
48.62036% 57.01718%,
46.55585% 57.01709%,
44.83822% 57.01702%,
43.66373% 57.01698%,
43.22863% 57.01696%,
42.86372% 57.01904%,
42.56988% 57.01621%,
42.3402% 56.99486%,
42.16778% 56.94152%,
42.0457% 56.84267%,
41.96705% 56.68478%,
41.92493% 56.45432%,
41.91246% 56.13777%,
41.91258% 55.76282%,
41.9129% 55.37058%,
41.91335% 54.96757%,
41.91387% 54.56032%,
41.91439% 54.15537%,
41.91485% 53.75926%,
41.91517% 53.3785%,
41.91529% 53.01965%,
41.94275% 52.72355%,
42.02117% 52.51653%,
42.14465% 52.38328%,
42.30727% 52.30854%,
42.50308% 52.27699%,
42.72619% 52.27341%,
42.97065% 52.28248%,
43.23056% 52.2889%,
43.94949% 52.28896%,
45.45083% 52.28912%,
47.47445% 52.28932%,
49.76027% 52.28957%,
52.04818% 52.28981%,
54.07805% 52.29003%,
55.5898% 52.29019%,
56.32332% 52.29024%,
56.58221% 52.28816%,
56.83726% 52.28948%,
57.07897% 52.30593%,
57.29794% 52.34898%,
57.48468% 52.43029%,
57.62978% 52.56146%,
57.72375% 52.7541%,
57.75718% 53.01981%,
57.75713% 53.37763%,
57.75699% 53.81831%,
57.75679% 54.31106%,
57.75657% 54.82507%,
57.75635% 55.32958%,
57.75615% 55.79377%,
57.75601% 56.18684%,
57.75596% 56.47801%,
57.7549% 56.50122%,
57.74034% 56.5624%,
57.6955% 56.64887%,
57.60334% 56.748%,
57.44691% 56.84712%,
57.20925% 56.93358%,
56.87342% 56.99471%
);
}
&.two {
clip-path: polygon(
56.42249% 42.44625%,
54.93283% 42.44637%,
53.00511% 42.44649%,
50.83554% 42.4466%,
48.62036% 42.4467%,
46.55585% 42.44679%,
44.83822% 42.44685%,
43.66373% 42.4469%,
43.22863% 42.44691%,
42.86372% 42.44483%,
42.56988% 42.44767%,
42.3402% 42.46902%,
42.16778% 42.52235%,
42.0457% 42.6212%,
41.96705% 42.77909%,
41.92493% 43.00956%,
41.91246% 43.32611%,
41.91258% 43.70105%,
41.9129% 44.0933%,
41.91335% 44.49631%,
41.91387% 44.90355%,
41.91439% 45.3085%,
41.91485% 45.70462%,
41.91517% 46.08537%,
41.91529% 46.44422%,
41.94275% 46.74032%,
42.02117% 46.94735%,
42.14465% 47.0806%,
42.30727% 47.15534%,
42.50308% 47.18688%,
42.72619% 47.19047%,
42.97065% 47.1814%,
43.23056% 47.17497%,
43.94949% 47.17491%,
45.45083% 47.17476%,
47.47445% 47.17455%,
49.76027% 47.1743%,
52.04818% 47.17406%,
54.07805% 47.17384%,
55.5898% 47.17369%,
56.32332% 47.17363%,
56.58221% 47.17571%,
56.83726% 47.17439%,
57.07897% 47.15795%,
57.29794% 47.1149%,
57.48468% 47.03359%,
57.62978% 46.90242%,
57.72375% 46.70977%,
57.75718% 46.44406%,
57.75713% 46.08625%,
57.75699% 45.64557%,
57.75679% 45.15282%,
57.75657% 44.6388%,
57.75635% 44.1343%,
57.75615% 43.6701%,
57.75601% 43.27703%,
57.75596% 42.98586%,
57.7549% 42.96265%,
57.74034% 42.90148%,
57.6955% 42.815%,
57.60334% 42.71587%,
57.44691% 42.61675%,
57.20925% 42.53029%,
56.87342% 42.46916%
);
}
} }
} }

2
src/scss/partials/_chat.scss

@ -563,7 +563,7 @@
@include respond-to(handhelds) { @include respond-to(handhelds) {
min-height: 46px; min-height: 46px;
padding: .5px .5rem; padding: .5px .5rem;
} }
@include respond-to(esg-bottom) { @include respond-to(esg-bottom) {
min-height: 46px; min-height: 46px;

11
src/scss/partials/_chatBubble.scss

@ -742,7 +742,7 @@ $bubble-margin: .25rem;
} }
&-ico { &-ico {
font-size: 2.15rem; font-size: 0;
@include respond-to(handhelds) { @include respond-to(handhelds) {
margin-top: 1px; margin-top: 1px;
@ -792,11 +792,6 @@ $bubble-margin: .25rem;
} */ } */
//} //}
.tgico-largeplay:before {
content: $tgico-largeplay;
margin-right: -2px;
}
/* @include respond-to(handhelds) { /* @include respond-to(handhelds) {
.preloader-container .you-spin-me-round { .preloader-container .you-spin-me-round {
margin-top: 1px; margin-top: 1px;
@ -949,6 +944,10 @@ $bubble-margin: .25rem;
font-size: 34px; font-size: 34px;
line-height: 60px; line-height: 60px;
cursor: pointer; cursor: pointer;
@include respond-to(handhelds) {
line-height: unset;
}
} }
&.is-edited.channel-post .time { &.is-edited.channel-post .time {

20
src/scss/partials/_rightSidebar.scss

@ -434,8 +434,8 @@
@include respond-to(handhelds) { @include respond-to(handhelds) {
width: 40px; width: 40px;
height: 40px; height: 40px;
top: 9px; top: 2px;
left: 2px; left: -12px;
} }
@include respond-to(not-handhelds) { @include respond-to(not-handhelds) {
@ -466,10 +466,6 @@
&-ico { &-ico {
width: 48px; width: 48px;
height: 48px; height: 48px;
&.tgico-largeplay:before {
margin-right: -1px;
}
} }
&-download { &-download {
@ -483,8 +479,16 @@
} }
} }
&-toggle, &-download { .part {
font-size: 1.9rem; height: 112px;
width: 112px;
position: absolute;
background-color: white;
@include respond-to(handhelds) {
width: 100px;
height: 100px;
}
} }
&-title { &-title {

Loading…
Cancel
Save