Use some methods from lib_base

This commit is contained in:
Ilya Fedin 2020-10-29 23:56:13 +04:00 committed by John Preston
parent df9c7f07a1
commit a38b4f039a
22 changed files with 42 additions and 485 deletions

View file

@ -24,6 +24,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "chat_helpers/emoji_keywords.h"
#include "chat_helpers/stickers_emoji_image_loader.h"
#include "base/platform/base_platform_info.h"
#include "base/platform/base_platform_last_input.h"
#include "platform/platform_specific.h"
#include "mainwindow.h"
#include "dialogs/dialogs_entry.h"
@ -807,7 +808,7 @@ void Application::updateNonIdle() {
crl::time Application::lastNonIdleTime() const {
return std::max(
Platform::LastUserInputTime().value_or(0),
base::Platform::LastUserInputTime().value_or(0),
_lastNonIdleTime);
}

View file

@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "core/file_utilities.h"
#include "storage/localstorage.h"
#include "base/platform/base_platform_file_utilities.h"
#include "platform/platform_file_utilities.h"
#include "core/application.h"
#include "base/unixtime.h"
@ -154,7 +155,7 @@ void Launch(const QString &filepath) {
void ShowInFolder(const QString &filepath) {
crl::on_main([=] {
Ui::PreventDelayedActivation();
Platform::File::UnsafeShowInFolder(filepath);
base::Platform::ShowInFolder(filepath);
});
}

View file

@ -10,6 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "platform/platform_launcher.h"
#include "platform/platform_specific.h"
#include "base/platform/base_platform_info.h"
#include "base/platform/base_platform_file_utilities.h"
#include "ui/main_queue_processor.h"
#include "ui/ui_utility.h"
#include "core/crash_reports.h"
@ -342,7 +343,7 @@ int Launcher::exec() {
if (!UpdaterDisabled() && cRestartingUpdate()) {
DEBUG_LOG(("Sandbox Info: executing updater to install update."));
if (!launchUpdater(UpdaterLaunch::PerformUpdate)) {
psDeleteDir(cWorkingDir() + qsl("tupdates/temp"));
base::Platform::DeleteDirectory(cWorkingDir() + qsl("tupdates/temp"));
}
} else if (cRestarting()) {
DEBUG_LOG(("Sandbox Info: executing Telegram because of restart."));
@ -402,7 +403,7 @@ bool Launcher::customWorkingDir() const {
}
void Launcher::prepareSettings() {
auto path = Platform::CurrentExecutablePath(_argc, _argv);
auto path = base::Platform::CurrentExecutablePath(_argc, _argv);
LOG(("Executable path before check: %1").arg(path));
if (!path.isEmpty()) {
auto info = QFileInfo(path);

View file

@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "core/update_checker.h"
#include "base/platform/base_platform_info.h"
#include "base/platform/base_platform_file_utilities.h"
#include "base/timer.h"
#include "base/bytes.h"
#include "base/unixtime.h"
@ -211,7 +212,7 @@ QString UpdatesFolder() {
}
void ClearAll() {
psDeleteDir(UpdatesFolder());
base::Platform::DeleteDirectory(UpdatesFolder());
}
QString FindUpdateFile() {
@ -270,7 +271,7 @@ bool UnpackUpdate(const QString &filepath) {
input.close();
QString tempDirPath = cWorkingDir() + qsl("tupdates/temp"), readyFilePath = cWorkingDir() + qsl("tupdates/temp/ready");
psDeleteDir(tempDirPath);
base::Platform::DeleteDirectory(tempDirPath);
QDir tempDir(tempDirPath);
if (tempDir.exists() || QFile(readyFilePath).exists()) {
@ -1560,8 +1561,8 @@ bool checkReadyUpdate() {
#endif // Q_OS_UNIX
#ifdef Q_OS_MAC
Platform::RemoveQuarantine(QFileInfo(curUpdater).absolutePath());
Platform::RemoveQuarantine(updater.absolutePath());
base::Platform::RemoveQuarantine(QFileInfo(curUpdater).absolutePath());
base::Platform::RemoveQuarantine(updater.absolutePath());
#endif // Q_OS_MAC
return true;

View file

@ -11,11 +11,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "platform/linux/linux_gdk_helper.h"
#include "platform/linux/linux_desktop_environment.h"
#include "platform/linux/specific_linux.h"
#include "boxes/abstract_box.h"
#include "storage/localstorage.h"
#include "base/platform/base_platform_file_utilities.h"
#include <QtCore/QProcess>
#include <QtGui/QDesktopServices>
extern "C" {
@ -91,12 +88,6 @@ void UnsafeLaunch(const QString &filepath) {
}
}
void UnsafeShowInFolder(const QString &filepath) {
// Hide mediaview to make other apps visible.
Ui::hideLayer(anim::type::instant);
base::Platform::ShowInFolder(filepath);
}
} // namespace File
namespace FileDialog {

View file

@ -174,33 +174,6 @@ QString FlatpakID() {
return Result;
}
QString ProcessNameByPID(const QString &pid) {
constexpr auto kMaxPath = 1024;
char result[kMaxPath] = { 0 };
auto count = readlink("/proc/" + pid.toLatin1() + "/exe", result, kMaxPath);
if (count > 0) {
auto filename = QFile::decodeName(result);
auto deletedPostfix = qstr(" (deleted)");
if (filename.endsWith(deletedPostfix) && !QFileInfo(filename).exists()) {
filename.chop(deletedPostfix.size());
}
return filename;
}
return QString();
}
QString RealExecutablePath(int argc, char *argv[]) {
const auto processName = ProcessNameByPID(qsl("self"));
// Fallback to the first command line argument.
return !processName.isEmpty()
? processName
: argc
? QFile::decodeName(argv[0])
: QString();
}
bool RunShellCommand(const QString &program, const QStringList &arguments) {
const auto result = QProcess::execute(program, arguments);
@ -310,131 +283,6 @@ bool GetImageFromClipboardSupported() {
}
#endif // !TDESKTOP_DISABLE_GTK_INTEGRATION
std::optional<crl::time> XCBLastUserInputTime() {
const auto connection = base::Platform::XCB::GetConnectionFromQt();
if (!connection) {
return std::nullopt;
}
if (!base::Platform::XCB::IsExtensionPresent(
connection,
&xcb_screensaver_id)) {
return std::nullopt;
}
const auto root = base::Platform::XCB::GetRootWindowFromQt();
if (!root.has_value()) {
return std::nullopt;
}
const auto cookie = xcb_screensaver_query_info(
connection,
*root);
auto reply = xcb_screensaver_query_info_reply(
connection,
cookie,
nullptr);
if (!reply) {
return std::nullopt;
}
const auto idle = reply->ms_since_user_input;
free(reply);
return (crl::now() - static_cast<crl::time>(idle));
}
#ifndef DESKTOP_APP_DISABLE_DBUS_INTEGRATION
std::optional<crl::time> FreedesktopDBusLastUserInputTime() {
static auto NotSupported = false;
if (NotSupported) {
return std::nullopt;
}
static const auto Message = QDBusMessage::createMethodCall(
qsl("org.freedesktop.ScreenSaver"),
qsl("/org/freedesktop/ScreenSaver"),
qsl("org.freedesktop.ScreenSaver"),
qsl("GetSessionIdleTime"));
const QDBusReply<uint> reply = QDBusConnection::sessionBus().call(
Message);
static const auto NotSupportedErrors = {
QDBusError::ServiceUnknown,
QDBusError::NotSupported,
};
static const auto NotSupportedErrorsToLog = {
QDBusError::Disconnected,
QDBusError::AccessDenied,
};
if (reply.isValid()) {
return (crl::now() - static_cast<crl::time>(reply.value()));
} else if (ranges::contains(NotSupportedErrors, reply.error().type())) {
NotSupported = true;
} else {
if (ranges::contains(NotSupportedErrorsToLog, reply.error().type())) {
NotSupported = true;
}
LOG(("App Error: Unable to get last user input time "
"from org.freedesktop.ScreenSaver: %1: %2")
.arg(reply.error().name())
.arg(reply.error().message()));
}
return std::nullopt;
}
std::optional<crl::time> MutterDBusLastUserInputTime() {
static auto NotSupported = false;
if (NotSupported) {
return std::nullopt;
}
static const auto Message = QDBusMessage::createMethodCall(
qsl("org.gnome.Mutter.IdleMonitor"),
qsl("/org/gnome/Mutter/IdleMonitor/Core"),
qsl("org.gnome.Mutter.IdleMonitor"),
qsl("GetIdletime"));
const QDBusReply<qulonglong> reply = QDBusConnection::sessionBus().call(
Message);
static const auto NotSupportedErrors = {
QDBusError::ServiceUnknown,
};
static const auto NotSupportedErrorsToLog = {
QDBusError::Disconnected,
QDBusError::AccessDenied,
};
if (reply.isValid()) {
return (crl::now() - static_cast<crl::time>(reply.value()));
} else if (ranges::contains(NotSupportedErrors, reply.error().type())) {
NotSupported = true;
} else {
if (ranges::contains(NotSupportedErrorsToLog, reply.error().type())) {
NotSupported = true;
}
LOG(("App Error: Unable to get last user input time "
"from org.gnome.Mutter.IdleMonitor: %1: %2")
.arg(reply.error().name())
.arg(reply.error().message()));
}
return std::nullopt;
}
#endif // !DESKTOP_APP_DISABLE_DBUS_INTEGRATION
uint XCBMoveResizeFromEdges(Qt::Edges edges) {
if (edges == (Qt::TopEdge | Qt::LeftEdge))
return 0;
@ -682,11 +530,6 @@ bool InSnap() {
return Result;
}
bool InAppImage() {
static const auto Result = qEnvironmentVariableIsSet("APPIMAGE");
return Result;
}
bool IsStaticBinary() {
#ifdef DESKTOP_APP_USE_PACKAGED
return false;
@ -773,25 +616,6 @@ bool CanOpenDirectoryWithPortal() {
return false;
}
QString CurrentExecutablePath(int argc, char *argv[]) {
if (InAppImage()) {
const auto appimagePath = QString::fromUtf8(qgetenv("APPIMAGE"));
const auto appimagePathList = appimagePath.split('/');
if (qEnvironmentVariableIsSet("ARGV0")
&& appimagePathList.size() >= 5
&& appimagePathList[1] == qstr("run")
&& appimagePathList[2] == qstr("user")
&& appimagePathList[4] == qstr("appimagelauncherfs")) {
return QString::fromUtf8(qgetenv("ARGV0"));
}
return appimagePath;
}
return RealExecutablePath(argc, argv);
}
QString AppRuntimeDirectory() {
static const auto Result = [&] {
auto runtimeDir = QStandardPaths::writableLocation(
@ -908,29 +732,6 @@ QImage GetImageFromClipboard() {
return data;
}
std::optional<crl::time> LastUserInputTime() {
if (!IsWayland()) {
const auto xcbResult = XCBLastUserInputTime();
if (xcbResult.has_value()) {
return xcbResult;
}
}
#ifndef DESKTOP_APP_DISABLE_DBUS_INTEGRATION
const auto freedesktopResult = FreedesktopDBusLastUserInputTime();
if (freedesktopResult.has_value()) {
return freedesktopResult;
}
const auto mutterResult = MutterDBusLastUserInputTime();
if (mutterResult.has_value()) {
return mutterResult;
}
#endif // !DESKTOP_APP_DISABLE_DBUS_INTEGRATION
return std::nullopt;
}
std::optional<bool> IsDarkMode() {
#ifndef TDESKTOP_DISABLE_GTK_INTEGRATION
if (Libs::GtkSettingSupported() && Libs::GtkLoaded()) {
@ -1089,41 +890,6 @@ QRect psDesktopRect() {
void psWriteDump() {
}
bool _removeDirectory(const QString &path) { // from http://stackoverflow.com/questions/2256945/removing-a-non-empty-directory-programmatically-in-c-or-c
QByteArray pathRaw = QFile::encodeName(path);
DIR *d = opendir(pathRaw.constData());
if (!d) return false;
while (struct dirent *p = readdir(d)) {
/* Skip the names "." and ".." as we don't want to recurse on them. */
if (!strcmp(p->d_name, ".") || !strcmp(p->d_name, "..")) continue;
QString fname = path + '/' + p->d_name;
QByteArray fnameRaw = QFile::encodeName(fname);
struct stat statbuf;
if (!stat(fnameRaw.constData(), &statbuf)) {
if (S_ISDIR(statbuf.st_mode)) {
if (!_removeDirectory(fname)) {
closedir(d);
return false;
}
} else {
if (unlink(fnameRaw.constData())) {
closedir(d);
return false;
}
}
}
}
closedir(d);
return !rmdir(pathRaw.constData());
}
void psDeleteDir(const QString &dir) {
_removeDirectory(dir);
}
void psActivateProcess(uint64 pid) {
// objc_activateProgram();
}
@ -1444,10 +1210,6 @@ void psNewVersion() {
Platform::RegisterCustomScheme();
}
bool psShowOpenWithMenu(int x, int y, const QString &file) {
return false;
}
void psAutoStart(bool start, bool silent) {
if (InFlatpak()) {
#ifndef DESKTOP_APP_DISABLE_DBUS_INTEGRATION

View file

@ -22,7 +22,6 @@ inline void SetWatchingMediaKeys(bool watching) {
bool InFlatpak();
bool InSnap();
bool InAppImage();
bool IsStaticBinary();
bool UseGtkIntegration();
bool IsGtkIntegrationForced();
@ -55,8 +54,6 @@ inline void psCheckLocalSocket(const QString &serverName) {
void psWriteDump();
void psDeleteDir(const QString &dir);
QStringList psInitLogs();
void psClearInitLogs();

View file

@ -8,7 +8,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "platform/mac/file_utilities_mac.h"
#include "base/platform/mac/base_utilities_mac.h"
#include "base/platform/base_platform_file_utilities.h"
#include "lang/lang_keys.h"
#include "styles/style_window.h"
@ -573,9 +572,5 @@ void UnsafeLaunch(const QString &filepath) {
}
}
void UnsafeShowInFolder(const QString &filepath) {
base::Platform::ShowInFolder(filepath);
}
} // namespace File
} // namespace Platform

View file

@ -10,8 +10,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "core/crash_reports.h"
#include "core/update_checker.h"
#include "base/platform/base_platform_info.h"
#include "base/platform/base_platform_file_utilities.h"
#include "base/platform/mac/base_utilities_mac.h"
#include "platform/platform_specific.h"
#include <Cocoa/Cocoa.h>
#include <CoreFoundation/CFURL.h>
@ -54,7 +54,7 @@ bool Launcher::launchUpdater(UpdaterLaunch action) {
return false;
}
path = [path stringByAppendingString:@"/Contents/Frameworks/Updater"];
RemoveQuarantine(QFile::decodeName([path fileSystemRepresentation]));
base::Platform::RemoveQuarantine(QFile::decodeName([path fileSystemRepresentation]));
NSMutableArray *args = [[NSMutableArray alloc] initWithObjects:@"-workpath", Q2NSString(cWorkingDir()), @"-procid", nil];
[args addObject:[NSString stringWithFormat:@"%d", [[NSProcessInfo processInfo] processIdentifier]]];

View file

@ -16,8 +16,6 @@ class LocationPoint;
namespace Platform {
void RemoveQuarantine(const QString &path);
[[nodiscard]] bool IsDarkMenuBar();
inline QImage GetImageFromClipboard() {
@ -76,8 +74,6 @@ inline void psCheckLocalSocket(const QString &serverName) {
void psWriteDump();
void psDeleteDir(const QString &dir);
QStringList psInitLogs();
void psClearInitLogs();
@ -92,8 +88,6 @@ QRect psDesktopRect();
int psCleanup();
int psFixPrevious();
bool psShowOpenWithMenu(int x, int y, const QString &file);
void psNewVersion();
void psDownloadPathEnableAccess();

View file

@ -65,10 +65,6 @@ void psWriteDump() {
#endif // DESKTOP_APP_DISABLE_CRASH_REPORTS
}
void psDeleteDir(const QString &dir) {
objc_deleteDir(dir);
}
QStringList psInitLogs() {
return _initLogs;
}
@ -118,10 +114,6 @@ void finish() {
objc_finish();
}
QString CurrentExecutablePath(int argc, char *argv[]) {
return NS2QString([[NSBundle mainBundle] bundlePath]);
}
QString SingleInstanceLocalServerName(const QString &hash) {
#ifndef OS_MAC_STORE
return qsl("/tmp/") + hash + '-' + cGUIDStr();
@ -130,14 +122,6 @@ QString SingleInstanceLocalServerName(const QString &hash) {
#endif // OS_MAC_STORE
}
void RemoveQuarantine(const QString &path) {
const auto kQuarantineAttribute = "com.apple.quarantine";
DEBUG_LOG(("Removing quarantine attribute: %1").arg(path));
const auto local = QFile::encodeName(path);
removexattr(local.data(), kQuarantineAttribute, 0);
}
bool IsDarkMenuBar() {
bool result = false;
@autoreleasepool {
@ -234,60 +218,6 @@ bool OpenSystemSettings(SystemSettingsType type) {
return true;
}
// Taken from https://github.com/trueinteractions/tint/issues/53.
std::optional<crl::time> LastUserInputTime() {
CFMutableDictionaryRef properties = 0;
CFTypeRef obj;
mach_port_t masterPort;
io_iterator_t iter;
io_registry_entry_t curObj;
IOMasterPort(MACH_PORT_NULL, &masterPort);
/* Get IOHIDSystem */
IOServiceGetMatchingServices(masterPort, IOServiceMatching("IOHIDSystem"), &iter);
if (iter == 0) {
return std::nullopt;
} else {
curObj = IOIteratorNext(iter);
}
if (IORegistryEntryCreateCFProperties(curObj, &properties, kCFAllocatorDefault, 0) == KERN_SUCCESS && properties != NULL) {
obj = CFDictionaryGetValue(properties, CFSTR("HIDIdleTime"));
CFRetain(obj);
} else {
return std::nullopt;
}
uint64 err = ~0L, idleTime = err;
if (obj) {
CFTypeID type = CFGetTypeID(obj);
if (type == CFDataGetTypeID()) {
CFDataGetBytes((CFDataRef) obj, CFRangeMake(0, sizeof(idleTime)), (UInt8*)&idleTime);
} else if (type == CFNumberGetTypeID()) {
CFNumberGetValue((CFNumberRef)obj, kCFNumberSInt64Type, &idleTime);
} else {
// error
}
CFRelease(obj);
if (idleTime != err) {
idleTime /= 1000000; // return as ms
}
} else {
// error
}
CFRelease((CFTypeRef)properties);
IOObjectRelease(curObj);
IOObjectRelease(iter);
if (idleTime == err) {
return std::nullopt;
}
return (crl::now() - static_cast<crl::time>(idleTime));
}
void IgnoreApplicationActivationRightNow() {
objc_ignoreApplicationActivationRightNow();
}

View file

@ -19,7 +19,6 @@ void objc_finish();
void objc_activateProgram(WId winId);
bool objc_moveFile(const QString &from, const QString &to);
void objc_deleteDir(const QString &dir);
double objc_appkitVersion();

View file

@ -340,14 +340,6 @@ bool objc_moveFile(const QString &from, const QString &to) {
return false;
}
void objc_deleteDir(const QString &dir) {
@autoreleasepool {
[[NSFileManager defaultManager] removeItemAtPath:Q2NSString(dir) error:nil];
}
}
double objc_appkitVersion() {
return NSAppKitVersionNumber;
}

View file

@ -20,7 +20,6 @@ void UnsafeOpenEmailLink(const QString &email);
bool UnsafeShowOpenWithDropdown(const QString &filepath, QPoint menuPosition);
bool UnsafeShowOpenWith(const QString &filepath);
void UnsafeLaunch(const QString &filepath);
void UnsafeShowInFolder(const QString &filepath);
void PostprocessDownloaded(const QString &filepath);

View file

@ -31,24 +31,12 @@ enum class SystemSettingsType {
void SetWatchingMediaKeys(bool watching);
void SetApplicationIcon(const QIcon &icon);
QString CurrentExecutablePath(int argc, char *argv[]);
QString SingleInstanceLocalServerName(const QString &hash);
void RegisterCustomScheme(bool force = false);
PermissionStatus GetPermissionStatus(PermissionType type);
void RequestPermission(PermissionType type, Fn<void(PermissionStatus)> resultCallback);
void OpenSystemSettingsForPermission(PermissionType type);
bool OpenSystemSettings(SystemSettingsType type);
[[nodiscard]] std::optional<crl::time> LastUserInputTime();
[[nodiscard]] inline bool LastUserInputTimeSupported() {
return LastUserInputTime().has_value();
}
[[nodiscard]] std::optional<bool> IsDarkMode();
[[nodiscard]] inline bool IsDarkModeSupported() {
return IsDarkMode().has_value();
}
void IgnoreApplicationActivationRightNow();
bool AutostartSupported();
bool TrayIconSupported();
@ -61,6 +49,11 @@ bool SetWindowExtents(QWindow *window, const QMargins &extents);
bool UnsetWindowExtents(QWindow *window);
Window::ControlsLayout WindowControlsLayout();
[[nodiscard]] std::optional<bool> IsDarkMode();
[[nodiscard]] inline bool IsDarkModeSupported() {
return IsDarkMode().has_value();
}
namespace ThirdParty {
void start();

View file

@ -10,7 +10,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "mainwindow.h"
#include "storage/localstorage.h"
#include "platform/win/windows_dlls.h"
#include "base/platform/base_platform_file_utilities.h"
#include "lang/lang_keys.h"
#include "core/application.h"
#include "core/crash_reports.h"
@ -266,10 +265,6 @@ void UnsafeLaunch(const QString &filepath) {
ShellExecute(0, L"open", wstringPath.c_str(), 0, 0, SW_SHOWNORMAL);
}
void UnsafeShowInFolder(const QString &filepath) {
base::Platform::ShowInFolder(filepath);
}
void PostprocessDownloaded(const QString &filepath) {
auto wstringZoneFile = QDir::toNativeSeparators(filepath).toStdWString() + L":Zone.Identifier";
auto f = CreateFile(wstringZoneFile.c_str(), GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

View file

@ -13,7 +13,7 @@ namespace Platform {
namespace File {
inline QString UrlToLocal(const QUrl &url) {
return url.toLocalFile();
return ::File::internal::UrlToLocalDefault(url);
}
inline void UnsafeOpenUrl(const QString &url) {

View file

@ -70,8 +70,6 @@ using namespace Platform;
namespace {
constexpr auto kRefreshBadLastUserInputTimeout = 10 * crl::time(1000);
QStringList _initLogs;
bool themeInited = false;
@ -87,49 +85,27 @@ public:
};
_PsInitializer _psInitializer;
} // namespace
BOOL CALLBACK _ActivateProcess(HWND hWnd, LPARAM lParam) {
uint64 &processId(*(uint64*)lParam);
void psDeleteDir(const QString &dir) {
std::wstring wDir = QDir::toNativeSeparators(dir).toStdWString();
WCHAR path[4096];
memcpy(path, wDir.c_str(), (wDir.size() + 1) * sizeof(WCHAR));
path[wDir.size() + 1] = 0;
SHFILEOPSTRUCT file_op = {
NULL,
FO_DELETE,
path,
L"",
FOF_NOCONFIRMATION |
FOF_NOERRORUI |
FOF_SILENT,
false,
0,
L""
};
int res = SHFileOperation(&file_op);
}
DWORD dwProcessId;
::GetWindowThreadProcessId(hWnd, &dwProcessId);
namespace {
BOOL CALLBACK _ActivateProcess(HWND hWnd, LPARAM lParam) {
uint64 &processId(*(uint64*)lParam);
DWORD dwProcessId;
::GetWindowThreadProcessId(hWnd, &dwProcessId);
if ((uint64)dwProcessId == processId) { // found top-level window
static const int32 nameBufSize = 1024;
WCHAR nameBuf[nameBufSize];
int32 len = GetWindowText(hWnd, nameBuf, nameBufSize);
if (len && len < nameBufSize) {
if (QRegularExpression(qsl("^Telegram(\\s*\\(\\d+\\))?$")).match(QString::fromStdWString(nameBuf)).hasMatch()) {
BOOL res = ::SetForegroundWindow(hWnd);
::SetFocus(hWnd);
return FALSE;
}
if ((uint64)dwProcessId == processId) { // found top-level window
static const int32 nameBufSize = 1024;
WCHAR nameBuf[nameBufSize];
int32 len = GetWindowText(hWnd, nameBuf, nameBufSize);
if (len && len < nameBufSize) {
if (QRegularExpression(qsl("^Telegram(\\s*\\(\\d+\\))?$")).match(QString::fromStdWString(nameBuf)).hasMatch()) {
BOOL res = ::SetForegroundWindow(hWnd);
::SetFocus(hWnd);
return FALSE;
}
}
return TRUE;
}
return TRUE;
}
}
QStringList psInitLogs() {
@ -312,78 +288,10 @@ void SetApplicationIcon(const QIcon &icon) {
QApplication::setWindowIcon(icon);
}
QString CurrentExecutablePath(int argc, char *argv[]) {
WCHAR result[MAX_PATH + 1] = { 0 };
auto count = GetModuleFileName(nullptr, result, MAX_PATH + 1);
if (count < MAX_PATH + 1) {
auto info = QFileInfo(QDir::fromNativeSeparators(QString::fromWCharArray(result)));
return info.absoluteFilePath();
}
// Fallback to the first command line argument.
auto argsCount = 0;
if (auto args = CommandLineToArgvW(GetCommandLine(), &argsCount)) {
auto info = QFileInfo(QDir::fromNativeSeparators(QString::fromWCharArray(args[0])));
LocalFree(args);
return info.absoluteFilePath();
}
return QString();
}
QString SingleInstanceLocalServerName(const QString &hash) {
return qsl("Global\\") + hash + '-' + cGUIDStr();
}
std::optional<crl::time> LastUserInputTime() {
auto lii = LASTINPUTINFO{ 0 };
lii.cbSize = sizeof(LASTINPUTINFO);
if (!GetLastInputInfo(&lii)) {
return std::nullopt;
}
const auto now = crl::now();
const auto input = crl::time(lii.dwTime);
static auto LastTrackedInput = input;
static auto LastTrackedWhen = now;
const auto ticks32 = crl::time(GetTickCount());
const auto ticks64 = crl::time(GetTickCount64());
const auto elapsed = std::max(ticks32, ticks64) - input;
const auto good = (std::abs(ticks32 - ticks64) <= crl::time(1000))
&& (elapsed >= 0);
if (good) {
LastTrackedInput = input;
LastTrackedWhen = now;
return (now > elapsed) ? (now - elapsed) : crl::time(0);
}
static auto WaitingDelayed = false;
if (!WaitingDelayed) {
WaitingDelayed = true;
base::call_delayed(kRefreshBadLastUserInputTimeout, [=] {
WaitingDelayed = false;
[[maybe_unused]] const auto cheked = LastUserInputTime();
});
}
constexpr auto OverrunLimit = std::numeric_limits<DWORD>::max();
constexpr auto OverrunThreshold = OverrunLimit / 4;
if (LastTrackedInput == input) {
return LastTrackedWhen;
}
const auto guard = gsl::finally([&] {
LastTrackedInput = input;
LastTrackedWhen = now;
});
if (input > LastTrackedInput) {
const auto add = input - LastTrackedInput;
return std::min(LastTrackedWhen + add, now);
} else if (crl::time(OverrunLimit) + input - LastTrackedInput
< crl::time(OverrunThreshold)) {
const auto add = crl::time(OverrunLimit) + input - LastTrackedInput;
return std::min(LastTrackedWhen + add, now);
}
return LastTrackedWhen;
}
std::optional<bool> IsDarkMode() {
static const auto kSystemVersion = QOperatingSystemVersion::current();
static const auto kDarkModeAddedVersion = QOperatingSystemVersion(

View file

@ -65,8 +65,6 @@ inline void psCheckLocalSocket(const QString &) {
void psWriteDump();
void psDeleteDir(const QString &dir);
QStringList psInitLogs();
void psClearInitLogs();

View file

@ -32,7 +32,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "calls/calls_instance.h"
#include "core/core_cloud_password.h"
#include "core/update_checker.h"
#include "platform/platform_specific.h"
#include "base/platform/base_platform_last_input.h"
#include "lang/lang_keys.h"
#include "data/data_session.h"
#include "data/data_chat.h"
@ -288,7 +288,7 @@ void SetupLocalPasscode(
Ui::show(Box<PasscodeBox>(&controller->session(), true));
});
const auto label = Platform::LastUserInputTimeSupported()
const auto label = base::Platform::LastUserInputTimeSupported()
? tr::lng_passcode_autolock_away
: tr::lng_passcode_autolock_inactive;
auto value = PasscodeChanges(

View file

@ -24,7 +24,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "main/main_account.h"
#include "history/history.h"
#include "history/history_item.h"
#include "platform/platform_specific.h"
#include "base/platform/base_platform_last_input.h"
#include "base/call_delayed.h"
#include "facades.h"
#include "app.h"
@ -663,7 +663,7 @@ void Notification::prepareActionsCache() {
bool Notification::checkLastInput(bool hasReplyingNotifications) {
if (!_waitingForInput) return true;
const auto waitForUserInput = Platform::LastUserInputTimeSupported()
const auto waitForUserInput = base::Platform::LastUserInputTimeSupported()
? (Core::App().lastNonIdleTime() <= _started)
: false;
if (!waitForUserInput) {

View file

@ -7,7 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#include "window/notifications_utilities.h"
#include "platform/platform_specific.h"
#include "base/platform/base_platform_file_utilities.h"
#include "core/application.h"
#include "data/data_peer.h"
#include "ui/empty_userpic.h"
@ -36,7 +36,7 @@ CachedUserpics::~CachedUserpics() {
}
// This works about 1200ms on Windows for a folder with one image O_o
// psDeleteDir(cWorkingDir() + qsl("tdata/temp"));
// base::Platform::DeleteDirectory(cWorkingDir() + qsl("tdata/temp"));
}
}