Telegram Web K with changes to work inside I2P
https://web.telegram.i2p/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
326 lines
8.0 KiB
326 lines
8.0 KiB
/* |
|
* https://github.com/morethanwords/tweb |
|
* Copyright (C) 2019-2021 Eduard Kuzmenko |
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE |
|
*/ |
|
|
|
import type {LiteModeKey} from '../helpers/liteMode'; |
|
import type {AppMediaPlaybackController} from '../components/appMediaPlaybackController'; |
|
import type {TopPeerType, MyTopPeer} from '../lib/appManagers/appUsersManager'; |
|
import type {AutoDownloadSettings, BaseTheme, NotifyPeer, PeerNotifySettings, Theme, ThemeSettings, WallPaper} from '../layer'; |
|
import type DialogsStorage from '../lib/storages/dialogs'; |
|
import type FiltersStorage from '../lib/storages/filters'; |
|
import type {AuthState, Modify} from '../types'; |
|
import {IS_MOBILE} from '../environment/userAgent'; |
|
import getTimeFormat from '../helpers/getTimeFormat'; |
|
import {nextRandomUint} from '../helpers/random'; |
|
import App from './app'; |
|
|
|
const STATE_VERSION = App.version; |
|
const BUILD = App.build; |
|
|
|
// ! DEPRECATED |
|
export type Background = { |
|
type?: 'color' | 'image' | 'default', // ! DEPRECATED |
|
blur: boolean, |
|
highlightningColor?: string, |
|
color?: string, |
|
slug?: string, // image slug |
|
intensity?: number, // pattern intensity |
|
id: string | number, // wallpaper id |
|
}; |
|
|
|
export type AppTheme = Modify<Theme, { |
|
name: 'day' | 'night' | 'system', |
|
settings?: Modify<ThemeSettings, { |
|
highlightningColor: string |
|
}> |
|
}>; |
|
|
|
export type AutoDownloadPeerTypeSettings = { |
|
contacts: boolean, |
|
private: boolean, |
|
groups: boolean, |
|
channels: boolean |
|
}; |
|
|
|
export type State = { |
|
allDialogsLoaded: DialogsStorage['allDialogsLoaded'], |
|
pinnedOrders: DialogsStorage['pinnedOrders'], |
|
// contactsList: UserId[], |
|
contactsListCachedTime: number, |
|
updates: Partial<{ |
|
seq: number, |
|
pts: number, |
|
date: number |
|
}>, |
|
// filters?: FiltersStorage['filters'], // ! DEPRECATED |
|
filtersArr?: FiltersStorage['filtersArr'], |
|
maxSeenMsgId: number, |
|
stateCreatedTime: number, |
|
recentEmoji: string[], |
|
recentCustomEmoji: DocId[], |
|
topPeersCache: { |
|
[type in TopPeerType]?: { |
|
peers: MyTopPeer[], |
|
cachedTime: number |
|
} |
|
}, |
|
recentSearch: PeerId[], |
|
version: typeof STATE_VERSION, |
|
build: typeof BUILD, |
|
authState: AuthState, |
|
hiddenPinnedMessages: {[peerId: PeerId]: number}, |
|
settings: { |
|
messagesTextSize: number, |
|
distanceUnit: 'kilometers' | 'miles', |
|
sendShortcut: 'enter' | 'ctrlEnter', |
|
animationsEnabled?: boolean, // ! DEPRECATED |
|
autoDownload: { |
|
contacts?: boolean, // ! DEPRECATED |
|
private?: boolean, // ! DEPRECATED |
|
groups?: boolean, // ! DEPRECATED |
|
channels?: boolean, // ! DEPRECATED |
|
photo: AutoDownloadPeerTypeSettings, |
|
video: AutoDownloadPeerTypeSettings, |
|
file: AutoDownloadPeerTypeSettings |
|
}, |
|
autoDownloadNew: AutoDownloadSettings, |
|
autoPlay?: { // ! DEPRECATED |
|
gifs: boolean, |
|
videos: boolean |
|
}, |
|
stickers: { |
|
suggest: 'all' | 'installed' | 'none', |
|
dynamicPackOrder: boolean, |
|
loop: boolean |
|
}, |
|
emoji: { |
|
suggest: boolean, |
|
big: boolean |
|
}, |
|
background?: Background, // ! DEPRECATED |
|
themes: AppTheme[], |
|
theme: AppTheme['name'], |
|
notifications: { |
|
sound: boolean |
|
}, |
|
nightTheme?: boolean, // ! DEPRECATED |
|
timeFormat: 'h12' | 'h23', |
|
liteMode: {[key in LiteModeKey]: boolean} |
|
}, |
|
playbackParams: ReturnType<AppMediaPlaybackController['getPlaybackParams']>, |
|
keepSigned: boolean, |
|
chatContextMenuHintWasShown: boolean, |
|
stateId: number, |
|
notifySettings: {[k in Exclude<NotifyPeer['_'], 'notifyPeer'>]?: PeerNotifySettings.peerNotifySettings}, |
|
confirmedWebViews: BotId[] |
|
}; |
|
|
|
// 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_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: '', |
|
title: '', |
|
emoticon: 'π ', |
|
pFlags: {default: true} |
|
}; |
|
|
|
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 = { |
|
allDialogsLoaded: {}, |
|
pinnedOrders: {}, |
|
// contactsList: [], |
|
contactsListCachedTime: 0, |
|
updates: {}, |
|
filtersArr: [], |
|
maxSeenMsgId: 0, |
|
stateCreatedTime: Date.now(), |
|
recentEmoji: [], |
|
recentCustomEmoji: [], |
|
topPeersCache: {}, |
|
recentSearch: [], |
|
version: STATE_VERSION, |
|
build: BUILD, |
|
authState: { |
|
_: IS_MOBILE ? 'authStateSignIn' : 'authStateSignQr' |
|
}, |
|
hiddenPinnedMessages: {}, |
|
settings: { |
|
messagesTextSize: 16, |
|
distanceUnit: 'kilometers', |
|
sendShortcut: 'enter', |
|
autoDownload: { |
|
photo: { |
|
contacts: true, |
|
private: true, |
|
groups: true, |
|
channels: true |
|
}, |
|
video: { |
|
contacts: true, |
|
private: true, |
|
groups: true, |
|
channels: true |
|
}, |
|
file: { |
|
contacts: true, |
|
private: true, |
|
groups: true, |
|
channels: true |
|
} |
|
}, |
|
autoDownloadNew: { |
|
_: 'autoDownloadSettings', |
|
file_size_max: 3145728, |
|
pFlags: { |
|
video_preload_large: true, |
|
audio_preload_next: true |
|
}, |
|
photo_size_max: 1048576, |
|
video_size_max: 15728640, |
|
video_upload_maxbitrate: 100 |
|
}, |
|
stickers: { |
|
suggest: 'all', |
|
dynamicPackOrder: true, |
|
loop: true |
|
}, |
|
emoji: { |
|
suggest: true, |
|
big: true |
|
}, |
|
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 |
|
}, |
|
timeFormat: getTimeFormat(), |
|
liteMode: { |
|
all: false, |
|
animations: false, |
|
chat: false, |
|
chat_background: false, |
|
chat_spoilers: false, |
|
effects: false, |
|
effects_premiumstickers: false, |
|
effects_reactions: false, |
|
effects_emoji: false, |
|
emoji: false, |
|
emoji_messages: false, |
|
emoji_panel: false, |
|
gif: false, |
|
stickers: false, |
|
stickers_chat: false, |
|
stickers_panel: false, |
|
video: false |
|
} |
|
}, |
|
playbackParams: { |
|
volume: 1, |
|
muted: false, |
|
playbackRate: 1, |
|
playbackRates: { |
|
voice: 1, |
|
video: 1, |
|
audio: 1 |
|
}, |
|
loop: false, |
|
round: false |
|
}, |
|
keepSigned: true, |
|
chatContextMenuHintWasShown: false, |
|
stateId: nextRandomUint(32), |
|
notifySettings: {}, |
|
confirmedWebViews: [] |
|
};
|
|
|