From cd4e124fbbcfb2370f55e858ebd88d4f18c77a2e Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Wed, 5 Jul 2023 13:14:32 +0200 Subject: [PATCH] Electron: Add /get page --- .eslintignore | 5 +- public/get/apple-logo.svg | 4 + public/get/icon-electron-macos.png | Bin 0 -> 9453 bytes public/get/index.css | 137 +++++++++++++++++++++++++++++ public/get/index.html | 23 +++++ public/get/index.js | 131 +++++++++++++++++++++++++++ public/get/mac.html | 34 +++++++ public/get/unsupported.html | 24 +++++ src/util/windowEnvironment.ts | 33 ++++--- 9 files changed, 372 insertions(+), 19 deletions(-) create mode 100644 public/get/apple-logo.svg create mode 100644 public/get/icon-electron-macos.png create mode 100644 public/get/index.css create mode 100644 public/get/index.html create mode 100644 public/get/index.js create mode 100644 public/get/mac.html create mode 100644 public/get/unsupported.html diff --git a/.eslintignore b/.eslintignore index 0538e65d3..c4eb0fbcd 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,6 +1,6 @@ src/lib/rlottie/rlottie-wasm.js src/lib/video-preview/libav* -src/lib/video-preview/polyfill/* +src/lib/video-preview/polyfill src/lib/webp/webp_wasm.js src/lib/fasttextweb/fasttext-wasm.js @@ -17,6 +17,7 @@ jest.config.js src/lib/secret-sauce/ playwright.config.ts -dist/* +dist +public deploy/update_version.js diff --git a/public/get/apple-logo.svg b/public/get/apple-logo.svg new file mode 100644 index 000000000..3f06156a4 --- /dev/null +++ b/public/get/apple-logo.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/get/icon-electron-macos.png b/public/get/icon-electron-macos.png new file mode 100644 index 0000000000000000000000000000000000000000..92dfcdca20373d491500debd828f0429f3d7c4e6 GIT binary patch literal 9453 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 aKZFJNq3BzDQ4vo6j1IO=HkH*)AVBK? literal 0 HcmV?d00001 diff --git a/public/get/index.css b/public/get/index.css new file mode 100644 index 000000000..7917ccf43 --- /dev/null +++ b/public/get/index.css @@ -0,0 +1,137 @@ +body { + display: flex; + align-items: center; + justify-content: center; + + height: 100vh; + margin: 0; + + font-family: 'Arial', sans-serif; + color: #222222; + + background-color: white; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.container { + min-width: 200px; + max-width: 330px; + padding: 40px 40px 16px 40px; + + text-align: center; + + background-color: rgba(255, 255, 255, 0.95); + border-radius: 10px; +} + +.logo-container { + display: flex; + gap: 5px; + align-items: center; + justify-content: center; + + margin-bottom: 20px; +} + +.logo { + width: 90px; + height: 90px; + + background-repeat: no-repeat; + background-position: center; + background-size: cover; +} + +.telegram-logo { + background-image: url('./icon-electron-macos.png'); +} + +.apple-logo { + background-image: url('./apple-logo.svg'); + background-size: auto 80%; +} + +.container h1 { + margin-bottom: 10px; + + font-size: 24px; +} + +.select-model { + margin-top: 36px; + margin-bottom: 16px; + + color: #444444; +} + +.info { + margin-top: 28px; + margin-bottom: 36px; + + line-height: 1.25rem; + color: #444444; +} + +.download-container { + display: flex; + gap: 20px; + align-items: center; + justify-content: center; +} + +.download-block { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + margin-bottom: 36px; +} + +.caption { + font-size: 14px; + color: #777; +} + +.download-btn { + display: inline-block; + + margin: 10px; + padding: 8px 20px; + + font-size: 16px; + color: #FFF; + text-decoration: none; + + background-color: #007BFF; + border-radius: 5px; + + transition: background-color 150ms; +} + +.download-btn:hover { + background-color: rgba(0, 123, 255, 0.9); +} + +.download-btn.single { + display: block; + + margin: 32px 0; +} + +.footer { + font-size: small; + color: #A9A9A9; +} + +.footer a { + display: inline-block; + + color: #A9A9A9; +} + +a:hover { + text-decoration: none; +} diff --git a/public/get/index.html b/public/get/index.html new file mode 100644 index 000000000..1e9601297 --- /dev/null +++ b/public/get/index.html @@ -0,0 +1,23 @@ + + + + + + Telegram A Desktop + + + + +
+
+ +
+

Telegram A

+ Download + +
+ + diff --git a/public/get/index.js b/public/get/index.js new file mode 100644 index 000000000..0a99da8cc --- /dev/null +++ b/public/get/index.js @@ -0,0 +1,131 @@ +const REPO = 'Ajaxy/telegram-tt'; +const LATEST_RELEASE_API_URL = `https://api.github.com/repos/${REPO}/releases/latest`; +const LATEST_RELEASE_WEB_URL = `https://github.com/${REPO}/releases/latest`; +const WEB_APP_URL = location.pathname.startsWith('/a/') ? '/a/' : '/'; + +const platform = getPlatform(); +const currentPage = location.href.includes('mac.html') + ? 'mac' + : location.href.includes('unsupported.html') + ? 'unsupported' + : 'index'; + +// Request the latest release information from GitHub +const packagesPromise = fetch(LATEST_RELEASE_API_URL) + .then(response => response.json()) + .then(data => { + return data.assets.reduce((acc, { + name, + browser_download_url, + }) => { + if (name.endsWith('.exe')) { + acc['win'] = browser_download_url; + } else if (name.endsWith('.AppImage')) { + acc['linux'] = browser_download_url; + } else if (name.endsWith('.dmg')) { + acc[`mac-${name.includes('arm') ? 'arm' : 'x64'}`] = browser_download_url; + } + + return acc; + }, { + $version: data.name, + }); + }) + .catch((error) => { + console.error('Error:', error); + }); + +(function init() { + if (platform === 'Windows' || platform === 'Linux') { + if (currentPage === 'index') { + setupDownloadButton(); + setupVersion(); + } + } else if (platform === 'macOS') { + if (currentPage !== 'mac') { + redirectToMac(); + } else { + setupVersion(); + } + } else if (currentPage !== 'unsupported') { + redirectToUnsupported(); + } +}()); + +function getPlatform() { + const { + userAgent, + platform, + } = window.navigator; + + const iosPlatforms = ['iPhone', 'iPad', 'iPod']; + if ( + iosPlatforms.indexOf(platform) !== -1 + // For new IPads with M1 chip and IPadOS platform returns "MacIntel" + || (platform === 'MacIntel' && ('maxTouchPoints' in navigator && navigator.maxTouchPoints > 2)) + ) { + return 'iOS'; + } + + const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K']; + if (macosPlatforms.indexOf(platform) !== -1) return 'macOS'; + + const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE']; + if (windowsPlatforms.indexOf(platform) !== -1) return 'Windows'; + + if (/Android/.test(userAgent)) return 'Android'; + + if (/Linux/.test(platform)) return 'Linux'; + + return undefined; +} + +function setupDownloadButton() { + document.addEventListener('DOMContentLoaded', () => { + const downloadBtn = document.querySelector('.download-btn'); + downloadBtn.innerHTML += ` for ${platform}`; + }); +} + +function setupVersion() { + document.addEventListener('DOMContentLoaded', () => { + packagesPromise.then((packages) => { + const versionEl = document.querySelector('.version'); + versionEl.innerHTML = `v. ${packages.$version} ยท `; + }); + }); +} + +function redirectToMac() { + location.href = './mac.html'; +} + +function redirectToUnsupported() { + location.href = './unsupported.html'; +} + +function redirectToWeb() { + location.href = WEB_APP_URL; +} + +function redirectToFullList() { + location.href = LATEST_RELEASE_WEB_URL; +} + +function downloadDefault() { + if (platform === 'Windows') { + download('win'); + } else if (platform === 'Linux') { + download('linux'); + } else if (platform === 'macOS') { + redirectToMac(); + } else { + redirectToUnsupported(); + } +} + +function download(platform) { + packagesPromise.then((packages) => { + location.href = packages[platform]; + }); +} diff --git a/public/get/mac.html b/public/get/mac.html new file mode 100644 index 000000000..000869a37 --- /dev/null +++ b/public/get/mac.html @@ -0,0 +1,34 @@ + + + + + + Telegram A for Mac + + + + +
+
+ + +
+

Telegram A for your Mac

+
Select your device model
+
+
+ Newer Mac +
M1 and later
+
+
+ Older Mac +
2019 and earlier
+
+
+ +
+ + diff --git a/public/get/unsupported.html b/public/get/unsupported.html new file mode 100644 index 000000000..4f4e9f350 --- /dev/null +++ b/public/get/unsupported.html @@ -0,0 +1,24 @@ + + + + + + Telegram A Desktop + + + + +
+
+ +
+

Telegram A for Desktop

+
Open this page from Mac, PC or Linux
to install Telegram A.
+ Open Web Version + +
+ + diff --git a/src/util/windowEnvironment.ts b/src/util/windowEnvironment.ts index b725a94b9..ff067f4ce 100644 --- a/src/util/windowEnvironment.ts +++ b/src/util/windowEnvironment.ts @@ -11,26 +11,25 @@ export * from './environmentWebp'; export function getPlatform() { const { userAgent, platform } = window.navigator; - const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K']; - const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE']; + const iosPlatforms = ['iPhone', 'iPad', 'iPod']; - let os: 'macOS' | 'iOS' | 'Windows' | 'Android' | 'Linux' | undefined; - - if (iosPlatforms.indexOf(platform) !== -1 + if ( + iosPlatforms.indexOf(platform) !== -1 // For new IPads with M1 chip and IPadOS platform returns "MacIntel" - || (platform === 'MacIntel' && ('maxTouchPoints' in navigator && navigator.maxTouchPoints > 2))) { - os = 'iOS'; - } else if (macosPlatforms.indexOf(platform) !== -1) { - os = 'macOS'; - } else if (windowsPlatforms.indexOf(platform) !== -1) { - os = 'Windows'; - } else if (/Android/.test(userAgent)) { - os = 'Android'; - } else if (/Linux/.test(platform)) { - os = 'Linux'; - } + || (platform === 'MacIntel' && ('maxTouchPoints' in navigator && navigator.maxTouchPoints > 2)) + ) return 'iOS'; - return os; + const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K']; + if (macosPlatforms.indexOf(platform) !== -1) return 'macOS'; + + const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE']; + if (windowsPlatforms.indexOf(platform) !== -1) return 'Windows'; + + if (/Android/.test(userAgent)) return 'Android'; + + if (/Linux/.test(platform)) return 'Linux'; + + return undefined; } export const IS_PRODUCTION_HOST = window.location.host === PRODUCTION_HOSTNAME;