Commit 96bd7df2 authored by Ilya Fedin's avatar Ilya Fedin
Browse files

kotatogram-desktop{,-with-webkit}: 1.4.9 -> 0-unstable-2024-07-01

Upstream doesn't have enough manpower to do even beta quality releases. Builds from random commits might be more usable for people relying on new Telegram features, at the price of not having various Kotatogram-specific features and having various bugs.
parent 3881b74f
Loading
Loading
Loading
Loading
+50 −72
Original line number Diff line number Diff line
@@ -6,17 +6,18 @@
, cmake
, ninja
, clang
, lld
, python3
, wrapQtAppsHook
, removeReferencesTo
, extra-cmake-modules
, qtbase
, qtimageformats
, qtsvg
, kwayland
, qtwayland
, kcoreaddons
, lz4
, xxHash
, ffmpeg_4
, ffmpeg
, openalSoft
, minizip
, libopus
@@ -25,94 +26,59 @@
, range-v3
, tl-expected
, hunspell
, glibmm
, gobject-introspection
, glibmm_2_68
, jemalloc
, rnnoise
, abseil-cpp
, microsoft-gsl
, boost
, fmt
, wayland
, libicns
, Cocoa
, CoreFoundation
, CoreServices
, CoreText
, CoreGraphics
, CoreMedia
, OpenGL
, AudioUnit
, ApplicationServices
, Foundation
, AGL
, Security
, SystemConfiguration
, Carbon
, AudioToolbox
, VideoToolbox
, VideoDecodeAcceleration
, AVFoundation
, CoreAudio
, CoreVideo
, CoreMediaIO
, QuartzCore
, AppKit
, CoreWLAN
, WebKit
, IOKit
, GSS
, MediaPlayer
, IOSurface
, Metal
, MetalKit
, darwin
}:

let
  tg_owt = callPackage ./tg_owt.nix {
    abseil-cpp = abseil-cpp.override {
      # abseil-cpp should use the same compiler
      inherit stdenv;
      cxxStandard = "20";
    };

    # tg_owt should use the same compiler
    inherit stdenv;

    inherit Cocoa AppKit IOKit IOSurface Foundation AVFoundation CoreMedia VideoToolbox
      CoreGraphics CoreVideo OpenGL Metal MetalKit CoreFoundation ApplicationServices;
  };

  mainProgram = if stdenv.isLinux then "kotatogram-desktop" else "Kotatogram";
in
stdenv.mkDerivation rec {
  pname = "kotatogram-desktop";
  version = "1.4.9";
  version = "0-unstable-2024-07-01";

  src = fetchFromGitHub {
    owner = "kotatogram";
    repo = "kotatogram-desktop";
    rev = "k${version}";
    sha256 = "sha256-6bF/6fr8mJyyVg53qUykysL7chuewtJB8E22kVyxjHw=";
    rev = "fbb22ebd3e39dfa4a036fa79a7a3f78b86b1cea2";
    sha256 = "sha256-ccfmaqapk9ct+5kvBI02xHJ7YCGmm1CcqwM+3hC1bk0=";
    fetchSubmodules = true;
  };

  patches = [
    ./kf594.patch
    ./shortcuts-binary-path.patch
    ./macos.patch
    ./macos-opengl.patch
  ];

  postPatch = lib.optionalString stdenv.isLinux ''
    substituteInPlace Telegram/ThirdParty/libtgvoip/os/linux/AudioInputALSA.cpp \
      --replace '"libasound.so.2"' '"${alsa-lib}/lib/libasound.so.2"'
      --replace-fail '"libasound.so.2"' '"${alsa-lib}/lib/libasound.so.2"'
    substituteInPlace Telegram/ThirdParty/libtgvoip/os/linux/AudioOutputALSA.cpp \
      --replace '"libasound.so.2"' '"${alsa-lib}/lib/libasound.so.2"'
      --replace-fail '"libasound.so.2"' '"${alsa-lib}/lib/libasound.so.2"'
    substituteInPlace Telegram/ThirdParty/libtgvoip/os/linux/AudioPulse.cpp \
      --replace '"libpulse.so.0"' '"${libpulseaudio}/lib/libpulse.so.0"'
      --replace-fail '"libpulse.so.0"' '"${libpulseaudio}/lib/libpulse.so.0"'
  '' + lib.optionalString stdenv.isDarwin ''
    sed -i "13i#import <CoreAudio/CoreAudio.h>" Telegram/lib_webrtc/webrtc/mac/webrtc_media_devices_mac.mm
    substituteInPlace Telegram/CMakeLists.txt \
      --replace 'COMMAND iconutil' 'COMMAND png2icns' \
      --replace '--convert icns' "" \
      --replace '--output AppIcon.icns' 'AppIcon.icns' \
      --replace "\''${appicon_path}" "\''${appicon_path}/icon_16x16.png \''${appicon_path}/icon_32x32.png \''${appicon_path}/icon_128x128.png \''${appicon_path}/icon_256x256.png \''${appicon_path}/icon_512x512.png"
    substituteInPlace Telegram/lib_webrtc/webrtc/platform/mac/webrtc_environment_mac.mm \
      --replace-fail kAudioObjectPropertyElementMain kAudioObjectPropertyElementMaster
  '';

  # Wrapping the inside of the app bundles, avoiding double-wrapping
  dontWrapQtApps = stdenv.isDarwin;

  nativeBuildInputs = [
    pkg-config
    cmake
@@ -123,7 +89,9 @@ stdenv.mkDerivation rec {
  ] ++ lib.optionals stdenv.isLinux [
    # to build bundled libdispatch
    clang
    extra-cmake-modules
    gobject-introspection
  ] ++ lib.optionals stdenv.isDarwin [
    lld
  ];

  buildInputs = [
@@ -132,7 +100,7 @@ stdenv.mkDerivation rec {
    qtsvg
    lz4
    xxHash
    ffmpeg_4
    ffmpeg
    openalSoft
    minizip
    libopus
@@ -141,15 +109,18 @@ stdenv.mkDerivation rec {
    rnnoise
    tg_owt
    microsoft-gsl
    boost
  ] ++ lib.optionals stdenv.isLinux [
    kwayland
    qtwayland
    kcoreaddons
    alsa-lib
    libpulseaudio
    hunspell
    glibmm
    glibmm_2_68
    jemalloc
    fmt
    wayland
  ] ++ lib.optionals stdenv.isDarwin [
  ] ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk_11_0.frameworks; [
    Cocoa
    CoreFoundation
    CoreServices
@@ -180,27 +151,34 @@ stdenv.mkDerivation rec {
    MediaPlayer
    IOSurface
    Metal
    NaturalLanguage
    libicns
  ];
  ]);

  enableParallelBuilding = true;

  env = lib.optionalAttrs stdenv.isDarwin {
    NIX_CFLAGS_LINK = "-fuse-ld=lld";
  };

  cmakeFlags = [
    "-DTDESKTOP_API_TEST=ON"
    "-DDESKTOP_APP_QT6=OFF"
  ];

  installPhase = lib.optionalString stdenv.isDarwin ''
    mkdir -p $out/Applications
    cp -r Kotatogram.app $out/Applications
    ln -s $out/Applications/Kotatogram.app/Contents/MacOS $out/bin
    cp -r ${mainProgram}.app $out/Applications
    ln -s $out/{Applications/${mainProgram}.app/Contents/MacOS,bin}
  '';

  preFixup = ''
    binName=${if stdenv.isLinux then "kotatogram-desktop" else "Kotatogram"}
    remove-references-to -t ${stdenv.cc.cc} $out/bin/$binName
    remove-references-to -t ${microsoft-gsl} $out/bin/$binName
    remove-references-to -t ${tg_owt.dev} $out/bin/$binName
    remove-references-to -t ${stdenv.cc.cc} $out/bin/${mainProgram}
    remove-references-to -t ${microsoft-gsl} $out/bin/${mainProgram}
    remove-references-to -t ${tg_owt.dev} $out/bin/${mainProgram}
  '';

  postFixup = lib.optionalString stdenv.isDarwin ''
    wrapQtApp $out/Applications/${mainProgram}.app/Contents/MacOS/${mainProgram}
  '';

  passthru = {
@@ -208,8 +186,8 @@ stdenv.mkDerivation rec {
  };

  meta = with lib; {
    inherit mainProgram;
    description = "Kotatogram – experimental Telegram Desktop fork";
    mainProgram = "kotatogram-desktop";
    longDescription = ''
      Unofficial desktop client for the Telegram messenger, based on Telegram Desktop.

+0 −57
Original line number Diff line number Diff line
diff --git a/Telegram/SourceFiles/platform/linux/linux_wayland_integration.cpp b/Telegram/SourceFiles/platform/linux/linux_wayland_integration.cpp
index 7641579aa..3c195e397 100644
--- a/Telegram/SourceFiles/platform/linux/linux_wayland_integration.cpp
+++ b/Telegram/SourceFiles/platform/linux/linux_wayland_integration.cpp
@@ -9,10 +9,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 
 #include "base/platform/base_platform_info.h"
 
-#include <connection_thread.h>
-#include <registry.h>
-#include <surface.h>
-#include <plasmashell.h>
+#include <KWayland/Client/connection_thread.h>
+#include <KWayland/Client/registry.h>
+#include <KWayland/Client/surface.h>
+#include <KWayland/Client/plasmashell.h>
 
 using namespace KWayland::Client;
 
Submodule Telegram/lib_base contains modified content
diff --git a/Telegram/lib_base/base/platform/linux/base_linux_wayland_integration.cpp b/Telegram/lib_base/base/platform/linux/base_linux_wayland_integration.cpp
index 32f0de6..30a087f 100644
--- a/Telegram/lib_base/base/platform/linux/base_linux_wayland_integration.cpp
+++ b/Telegram/lib_base/base/platform/linux/base_linux_wayland_integration.cpp
@@ -13,11 +13,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 #include <QtCore/QPointer>
 #include <QtGui/QWindow>
 
-#include <connection_thread.h>
-#include <registry.h>
-#include <surface.h>
-#include <xdgforeign.h>
-#include <idleinhibit.h>
+#include <KWayland/Client/connection_thread.h>
+#include <KWayland/Client/registry.h>
+#include <KWayland/Client/surface.h>
+#include <KWayland/Client/xdgforeign.h>
+#include <KWayland/Client/idleinhibit.h>
 
 using namespace KWayland::Client;
 
Submodule Telegram/lib_ui contains modified content
diff --git a/Telegram/lib_ui/ui/platform/linux/ui_linux_wayland_integration.cpp b/Telegram/lib_ui/ui/platform/linux/ui_linux_wayland_integration.cpp
index 01f1e80..163cb6a 100644
--- a/Telegram/lib_ui/ui/platform/linux/ui_linux_wayland_integration.cpp
+++ b/Telegram/lib_ui/ui/platform/linux/ui_linux_wayland_integration.cpp
@@ -24,8 +24,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 #include <private/qwaylandwindow_p.h>
 #include <private/qwaylandshellsurface_p.h>
 
-#include <connection_thread.h>
-#include <registry.h>
+#include <KWayland/Client/connection_thread.h>
+#include <KWayland/Client/registry.h>
 
 Q_DECLARE_METATYPE(QMargins);
 
+66 −0
Original line number Diff line number Diff line
diff --git a/Telegram/SourceFiles/media/view/media_view_pip.cpp b/Telegram/SourceFiles/media/view/media_view_pip.cpp
index 655e7cf410..c356acbffe 100644
--- a/Telegram/SourceFiles/media/view/media_view_pip.cpp
+++ b/Telegram/SourceFiles/media/view/media_view_pip.cpp
@@ -1333,7 +1333,7 @@ void Pip::setupStreaming() {
 Ui::GL::ChosenRenderer Pip::chooseRenderer(
 		Ui::GL::Capabilities capabilities) {
 	const auto use = Platform::IsMac()
-		? true
+		? false
 		: capabilities.transparency;
 	LOG(("OpenGL: %1 (PipPanel)").arg(Logs::b(use)));
 	if (use) {
Submodule Telegram/lib_ui contains modified content
diff --git a/Telegram/lib_ui/ui/gl/gl_detection.cpp b/Telegram/lib_ui/ui/gl/gl_detection.cpp
index 150eb8b..c7ce9f9 100644
--- a/Telegram/lib_ui/ui/gl/gl_detection.cpp
+++ b/Telegram/lib_ui/ui/gl/gl_detection.cpp
@@ -236,7 +236,7 @@ Capabilities CheckCapabilities(QWidget *widget, bool avoidWidgetCreation) {
 
 Backend ChooseBackendDefault(Capabilities capabilities) {
 	const auto use = ::Platform::IsMac()
-		? true
+		? false
 		: ::Platform::IsWindows()
 		? capabilities.supported
 		: capabilities.transparency;
diff --git a/Telegram/lib_ui/ui/platform/mac/ui_window_mac.mm b/Telegram/lib_ui/ui/platform/mac/ui_window_mac.mm
index 7b29363..22c4fb3 100644
--- a/Telegram/lib_ui/ui/platform/mac/ui_window_mac.mm
+++ b/Telegram/lib_ui/ui/platform/mac/ui_window_mac.mm
@@ -16,7 +16,6 @@
 #include <QtCore/QAbstractNativeEventFilter>
 #include <QtGui/QWindow>
 #include <QtGui/QtEvents>
-#include <QOpenGLWidget>
 #include <Cocoa/Cocoa.h>
 
 @interface WindowObserver : NSObject {
@@ -138,7 +137,6 @@ public:
 
 private:
 	void init();
-	void initOpenGL();
 	void resolveWeakPointers();
 	void revalidateWeakPointers() const;
 	void initCustomTitle();
@@ -272,10 +270,6 @@ void WindowHelper::Private::enforceStyle() {
 	}
 }
 
-void WindowHelper::Private::initOpenGL() {
-	auto forceOpenGL = std::make_unique<QOpenGLWidget>(_owner->window());
-}
-
 void WindowHelper::Private::resolveWeakPointers() {
 	if (!_owner->window()->winId()) {
 		_owner->window()->createWinId();
@@ -338,7 +332,6 @@ void WindowHelper::Private::initCustomTitle() {
 }
 
 void WindowHelper::Private::init() {
-	initOpenGL();
 	resolveWeakPointers();
 	initCustomTitle();
 }
+52 −0
Original line number Diff line number Diff line
Submodule Telegram/lib_base contains modified content
diff --git a/Telegram/lib_base/base/platform/mac/base_battery_saving_mac.mm b/Telegram/lib_base/base/platform/mac/base_battery_saving_mac.mm
index 7ce90d3..dac3c2c 100644
--- a/Telegram/lib_base/base/platform/mac/base_battery_saving_mac.mm
+++ b/Telegram/lib_base/base/platform/mac/base_battery_saving_mac.mm
@@ -138,6 +138,7 @@ BatterySaving::BatterySaving(Fn<void()> changedCallback) {
 	_observer = [[LowPowerModeObserver alloc] initWithCallback:std::move(wrapped)];
 
 	NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+#if 0
 	if (@available(macOS 12.0, *)) {
 		[center
 			addObserver: _observer
@@ -145,6 +146,7 @@ BatterySaving::BatterySaving(Fn<void()> changedCallback) {
 			name: NSProcessInfoPowerStateDidChangeNotification
 			object: nil];
 	}
+#endif
 	[center
 		addObserver: _observer
 		selector: @selector(powerStateChanged:)
@@ -178,11 +180,13 @@ std::optional<bool> BatterySaving::enabled() const {
 		return std::nullopt;
 	}
 	NSProcessInfo *info = [NSProcessInfo processInfo];
+#if 0
 	if (@available(macOS 12.0, *)) {
 		if ([info isLowPowerModeEnabled]) {
 			return true;
 		}
 	}
+#endif
 	const auto state = DetectBatteryState();
 	if (!state.has || !state.draining) {
 		return false;
Submodule Telegram/lib_webview contains modified content
diff --git a/Telegram/lib_webview/webview/platform/mac/webview_mac.mm b/Telegram/lib_webview/webview/platform/mac/webview_mac.mm
index 657c5a4..4bfc097 100644
--- a/Telegram/lib_webview/webview/platform/mac/webview_mac.mm
+++ b/Telegram/lib_webview/webview/platform/mac/webview_mac.mm
@@ -317,9 +317,11 @@ Instance::Instance(Config config) {
 	_dataRequestHandler = std::move(config.dataRequestHandler);
 	[configuration setURLSchemeHandler:_handler forURLScheme:stdToNS(kDataUrlScheme)];
 	_webview = [[WKWebView alloc] initWithFrame:NSZeroRect configuration:configuration];
+#if 0
 	if (@available(macOS 13.3, *)) {
 		_webview.inspectable = config.debug ? YES : NO;
 	}
+#endif
 	[_manager addScriptMessageHandler:_handler name:@"external"];
 	[_webview setNavigationDelegate:_handler];
 	[_webview setUIDelegate:_handler];
+0 −38
Original line number Diff line number Diff line
diff --git a/Telegram/SourceFiles/core/application.cpp b/Telegram/SourceFiles/core/application.cpp
index 2a092c6ea..de46dd269 100644
--- a/Telegram/SourceFiles/core/application.cpp
+++ b/Telegram/SourceFiles/core/application.cpp
@@ -1173,7 +1173,7 @@ void Application::startShortcuts() {
 
 void Application::RegisterUrlScheme() {
 	base::Platform::RegisterUrlScheme(base::Platform::UrlSchemeDescriptor{
-		.executable = cExeDir() + cExeName(),
+		.executable = qsl("kotatogram-desktop"),
 		.arguments = qsl("-workdir \"%1\"").arg(cWorkingDir()),
 		.protocol = qsl("tg"),
 		.protocolName = qsl("Telegram Link"),
diff --git a/Telegram/SourceFiles/platform/linux/specific_linux.cpp b/Telegram/SourceFiles/platform/linux/specific_linux.cpp
index 26168baa7..00d2525a0 100644
--- a/Telegram/SourceFiles/platform/linux/specific_linux.cpp
+++ b/Telegram/SourceFiles/platform/linux/specific_linux.cpp
@@ -303,19 +303,11 @@ bool GenerateDesktopFile(
 
 	QFile target(targetFile);
 	if (target.open(QIODevice::WriteOnly)) {
-		fileText = fileText.replace(
-			QRegularExpression(
-				qsl("^TryExec=.*$"),
-				QRegularExpression::MultilineOption),
-			qsl("TryExec=%1").arg(
-				QString(cExeDir() + cExeName()).replace('\\', "\\\\")));
-
 		fileText = fileText.replace(
 			QRegularExpression(
 				qsl("^Exec=kotatogram-desktop(.*)$"),
 				QRegularExpression::MultilineOption),
-			qsl("Exec=%1 -workdir %2\\1").arg(
-				EscapeShellInLauncher(cExeDir() + cExeName()),
+			qsl("Exec=kotatogram-desktop -workdir %1\\1").arg(
 				EscapeShellInLauncher(cWorkingDir())));
 
 		fileText = fileText.replace(
Loading