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.
243 lines
5.9 KiB
243 lines
5.9 KiB
/* |
|
* https://github.com/morethanwords/tweb |
|
* Copyright (C) 2019-2021 Eduard Kuzmenko |
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE |
|
*/ |
|
|
|
import { AppMediaPlaybackController } from "../components/appMediaPlaybackController"; |
|
import { IS_MOBILE } from "../environment/userAgent"; |
|
import getTimeFormat from "../helpers/getTimeFormat"; |
|
import { nextRandomUint } from "../helpers/random"; |
|
import { AutoDownloadSettings, NotifyPeer, PeerNotifySettings } 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 App from "./app"; |
|
|
|
const STATE_VERSION = App.version; |
|
const BUILD = App.build; |
|
|
|
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 Theme = { |
|
name: 'day' | 'night' | 'system', |
|
background: Background |
|
}; |
|
|
|
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'], |
|
maxSeenMsgId: number, |
|
stateCreatedTime: number, |
|
recentEmoji: string[], |
|
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, |
|
autoDownload: { |
|
contacts?: boolean, // ! DEPRECATED |
|
private?: boolean, // ! DEPRECATED |
|
groups?: boolean, // ! DEPRECATED |
|
channels?: boolean, // ! DEPRECATED |
|
photo: AutoDownloadPeerTypeSettings, |
|
video: AutoDownloadPeerTypeSettings, |
|
file: AutoDownloadPeerTypeSettings |
|
}, |
|
autoDownloadNew: AutoDownloadSettings, |
|
autoPlay: { |
|
gifs: boolean, |
|
videos: boolean |
|
}, |
|
stickers: { |
|
suggest: boolean, |
|
loop: boolean |
|
}, |
|
emoji: { |
|
suggest: boolean, |
|
big: boolean |
|
}, |
|
background?: Background, // ! DEPRECATED |
|
themes: Theme[], |
|
theme: Theme['name'], |
|
notifications: { |
|
sound: boolean |
|
}, |
|
nightTheme?: boolean, // ! DEPRECATED |
|
timeFormat: 'h12' | 'h23' |
|
}, |
|
playbackParams: ReturnType<AppMediaPlaybackController['getPlaybackParams']>, |
|
keepSigned: boolean, |
|
chatContextMenuHintWasShown: boolean, |
|
stateId: number, |
|
notifySettings: {[k in Exclude<NotifyPeer['_'], 'notifyPeer'>]?: 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_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' |
|
}; |
|
|
|
export const STATE_INIT: State = { |
|
allDialogsLoaded: {}, |
|
pinnedOrders: {}, |
|
// contactsList: [], |
|
contactsListCachedTime: 0, |
|
updates: {}, |
|
filters: {}, |
|
maxSeenMsgId: 0, |
|
stateCreatedTime: Date.now(), |
|
recentEmoji: [], |
|
topPeersCache: {}, |
|
recentSearch: [], |
|
version: STATE_VERSION, |
|
build: BUILD, |
|
authState: { |
|
_: IS_MOBILE ? 'authStateSignIn' : 'authStateSignQr' |
|
}, |
|
hiddenPinnedMessages: {}, |
|
settings: { |
|
messagesTextSize: 16, |
|
distanceUnit: 'kilometers', |
|
sendShortcut: 'enter', |
|
animationsEnabled: true, |
|
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 |
|
}, |
|
autoPlay: { |
|
gifs: true, |
|
videos: true |
|
}, |
|
stickers: { |
|
suggest: true, |
|
loop: true |
|
}, |
|
emoji: { |
|
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 |
|
}], |
|
theme: 'system', |
|
notifications: { |
|
sound: false |
|
}, |
|
timeFormat: getTimeFormat() |
|
}, |
|
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: {} |
|
};
|
|
|