montana/Russian/Site/messenger/dist/get/index.js
2026-05-18 18:05:32 +03:00

130 lines
3.3 KiB
JavaScript

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') || name.includes('aarch') ? 'arm' : 'x64'}`] = browser_download_url;
}
return acc;
}, {
$version: data.name,
});
})
.catch((error) => {
console.error('Error:', error);
});
(function init() {
if (platform === 'Windows') {
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 === 'macOS') {
redirectToMac();
} else {
redirectToUnsupported();
}
}
function download(platform) {
packagesPromise.then((packages) => {
location.href = packages[platform];
});
}