Build and run
2
.gitignore
vendored
@ -61,3 +61,5 @@ bazel-testlogs/*
|
|||||||
*/*.swp
|
*/*.swp
|
||||||
build-input/data
|
build-input/data
|
||||||
build-input/data/*
|
build-input/data/*
|
||||||
|
build-input/gen
|
||||||
|
build-input/gen/*
|
||||||
|
4
Makefile
@ -39,6 +39,7 @@ BUCK_OPTIONS=\
|
|||||||
--config custom.developmentProvisioningProfileWatchExtension="${DEVELOPMENT_PROVISIONING_PROFILE_WATCH_EXTENSION}" \
|
--config custom.developmentProvisioningProfileWatchExtension="${DEVELOPMENT_PROVISIONING_PROFILE_WATCH_EXTENSION}" \
|
||||||
--config custom.distributionProvisioningProfileWatchExtension="${DISTRIBUTION_PROVISIONING_PROFILE_WATCH_EXTENSION}"
|
--config custom.distributionProvisioningProfileWatchExtension="${DISTRIBUTION_PROVISIONING_PROFILE_WATCH_EXTENSION}"
|
||||||
|
|
||||||
|
BAZEL=$(shell which bazel)
|
||||||
|
|
||||||
build_arm64: check_env
|
build_arm64: check_env
|
||||||
$(BUCK) build \
|
$(BUCK) build \
|
||||||
@ -395,3 +396,6 @@ project_buckdebug: check_env kill_xcode
|
|||||||
temp_project: check_env kill_xcode
|
temp_project: check_env kill_xcode
|
||||||
$(BUCK) project //Temp:workspace --config custom.mode=project ${BUCK_OPTIONS} ${BUCK_DEBUG_OPTIONS}
|
$(BUCK) project //Temp:workspace --config custom.mode=project ${BUCK_OPTIONS} ${BUCK_DEBUG_OPTIONS}
|
||||||
open Temp/Telegram_Buck.xcworkspace
|
open Temp/Telegram_Buck.xcworkspace
|
||||||
|
|
||||||
|
tulsi_project:
|
||||||
|
${HOME}/Applications/Tulsi.app/Contents/MacOS/Tulsi -- --verbose --genconfig Telegram/Telegram.tulsiproj:Default --bazel "${BAZEL}" --build-options ${BAZEL_OPTIONS} --startup-options ${BAZEL_OPTIONS}
|
||||||
|
312
Telegram/BUILD
@ -3,16 +3,28 @@ load("@build_bazel_rules_apple//apple:ios.bzl",
|
|||||||
"ios_framework",
|
"ios_framework",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
load("@build_bazel_rules_apple//apple:watchos.bzl",
|
||||||
|
"watchos_application",
|
||||||
|
"watchos_extension",
|
||||||
|
)
|
||||||
|
|
||||||
|
load("@build_bazel_rules_apple//apple:versioning.bzl",
|
||||||
|
"apple_bundle_version",
|
||||||
|
)
|
||||||
|
|
||||||
load("@build_bazel_rules_swift//swift:swift.bzl",
|
load("@build_bazel_rules_swift//swift:swift.bzl",
|
||||||
"swift_library",
|
"swift_library",
|
||||||
)
|
)
|
||||||
|
|
||||||
load("//build-system:defines.bzl",
|
load("//build-system:info_plist_fragment.bzl",
|
||||||
"file_from_define",
|
"info_plist_fragment",
|
||||||
)
|
)
|
||||||
|
|
||||||
load(":telegram_info_plist.bzl",
|
load(
|
||||||
"telegram_info_plist",
|
"//build-input/data:variables.bzl",
|
||||||
|
"telegram_build_number",
|
||||||
|
"telegram_version",
|
||||||
|
"telegram_bundle_id",
|
||||||
)
|
)
|
||||||
|
|
||||||
filegroup(
|
filegroup(
|
||||||
@ -29,6 +41,13 @@ filegroup(
|
|||||||
], exclude = ["Telegram-iOS/*.lproj/**/.*"]),
|
], exclude = ["Telegram-iOS/*.lproj/**/.*"]),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "WatchAppStringResources",
|
||||||
|
srcs = glob([
|
||||||
|
"Telegram-iOS/*.lproj/Localizable.strings",
|
||||||
|
], exclude = ["Telegram-iOS/*.lproj/**/.*"]),
|
||||||
|
)
|
||||||
|
|
||||||
filegroup(
|
filegroup(
|
||||||
name = "AppIntentVocabularyResources",
|
name = "AppIntentVocabularyResources",
|
||||||
srcs = glob([
|
srcs = glob([
|
||||||
@ -46,15 +65,22 @@ filegroup(
|
|||||||
filegroup(
|
filegroup(
|
||||||
name = "Icons",
|
name = "Icons",
|
||||||
srcs = glob([
|
srcs = glob([
|
||||||
"Telegram-iOS/Icons.xcassets",
|
"Telegram-iOS/Icons.xcassets/**/*",
|
||||||
]),
|
], exclude = ["Telegram-iOS/Icons.xcassets/**/.*"]),
|
||||||
)
|
)
|
||||||
|
|
||||||
filegroup(
|
filegroup(
|
||||||
name = "AppIcons",
|
name = "AppIcons",
|
||||||
srcs = glob([
|
srcs = glob([
|
||||||
"Telegram-iOS/AppIcons.xcassets",
|
"Telegram-iOS/AppIcons.xcassets/**/*",
|
||||||
]),
|
], exclude = ["Telegram-iOS/AppIcons.xcassets/**/.*"]),
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "DefaultAppIcon",
|
||||||
|
srcs = glob([
|
||||||
|
"Telegram-iOS/DefaultAppIcon.xcassets/**/*",
|
||||||
|
], exclude = ["Telegram-iOS/DefaultAppIcon.xcassets/**/.*"]),
|
||||||
)
|
)
|
||||||
|
|
||||||
filegroup(
|
filegroup(
|
||||||
@ -84,73 +110,247 @@ swift_library(
|
|||||||
"Telegram-iOS/Application.swift",
|
"Telegram-iOS/Application.swift",
|
||||||
]),
|
]),
|
||||||
data = [
|
data = [
|
||||||
":AppStringResources",
|
":AppResources",
|
||||||
|
":AppIntentVocabularyResources",
|
||||||
|
":InfoPlistStringResources",
|
||||||
],
|
],
|
||||||
deps = [
|
deps = [
|
||||||
"//submodules/GZip:GZip",
|
"//submodules/TelegramUI:TelegramUI",
|
||||||
"//submodules/AsyncDisplayKit:AsyncDisplayKit",
|
|
||||||
"//submodules/SSignalKit/SSignalKit:SSignalKit",
|
|
||||||
"//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit",
|
|
||||||
"//submodules/ObjCRuntimeUtils:ObjCRuntimeUtils",
|
|
||||||
"//submodules/UIKitRuntimeUtils:UIKitRuntimeUtils",
|
|
||||||
"//submodules/Display:Display",
|
|
||||||
"//submodules/AlertUI:AlertUI",
|
|
||||||
"//submodules/ActivityIndicator:ActivityIndicator",
|
|
||||||
"//submodules/OverlayStatusController:OverlayStatusController",
|
|
||||||
"//submodules/openssl:openssl",
|
|
||||||
"//submodules/OpenSSLEncryptionProvider:OpenSSLEncryptionProvider",
|
|
||||||
"//submodules/WalletCore:WalletCore",
|
|
||||||
"//submodules/BuildConfig:BuildConfig",
|
|
||||||
"//submodules/AppBundle:AppBundle",
|
|
||||||
"//submodules/SolidRoundedButtonNode:SolidRoundedButtonNode",
|
|
||||||
"//submodules/Camera:Camera",
|
|
||||||
"//submodules/QrCode:QrCode",
|
|
||||||
"//submodules/MergeLists:MergeLists",
|
|
||||||
"//submodules/GlassButtonNode:GlassButtonNode",
|
|
||||||
"//submodules/UrlEscaping:UrlEscaping",
|
|
||||||
"//submodules/LocalAuth:LocalAuth",
|
|
||||||
"//submodules/ScreenCaptureDetection:ScreenCaptureDetection",
|
|
||||||
"//submodules/WalletUrl:WalletUrl",
|
|
||||||
"//submodules/ProgressNavigationButtonNode:ProgressNavigationButtonNode",
|
|
||||||
"//submodules/Markdown:Markdown",
|
|
||||||
"//submodules/StringPluralization:StringPluralization",
|
|
||||||
"//submodules/YuvConversion:YuvConversion",
|
|
||||||
"//submodules/rlottie:RLottieBinding",
|
|
||||||
"//submodules/AnimatedStickerNode:AnimatedStickerNode",
|
|
||||||
"//submodules/WalletUI:WalletUI",
|
|
||||||
"//submodules/WebsiteType:WebsiteType",
|
|
||||||
"//submodules/MtProtoKit:MtProtoKit",
|
|
||||||
"//submodules/Postbox:Postbox",
|
|
||||||
"//submodules/SyncCore:SyncCore",
|
|
||||||
"//submodules/TelegramCore:TelegramCore",
|
|
||||||
"//submodules/AccountContext:AccountContext",
|
|
||||||
"//submodules/lottie-ios:Lottie",
|
|
||||||
"//submodules/ChatListUI:ChatListUI",
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
additional_info_plist = telegram_info_plist(
|
additional_info_plist = info_plist_fragment(
|
||||||
name = "AdditionalInfoPlist",
|
name = "AdditionalInfoPlist",
|
||||||
app_name = "Telegram",
|
template =
|
||||||
url_scheme = "tg",
|
"""
|
||||||
bundle_id_define = "telegram_bundle_id",
|
<key>CFBundleShortVersionString</key>
|
||||||
app_version_define = "telegram_version",
|
<string>{telegram_version}</string>
|
||||||
build_number_define = "telegram_build_number",
|
<key>CFBundleVersion</key>
|
||||||
|
<string>{telegram_build_number}</string>
|
||||||
|
<key>CFBundleURLTypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
<key>CFBundleURLName</key>
|
||||||
|
<string>{telegram_bundle_id}</string>
|
||||||
|
<key>CFBundleURLSchemes</key>
|
||||||
|
<array>
|
||||||
|
<string>telegram</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
<key>CFBundleURLName</key>
|
||||||
|
<string>{telegram_bundle_id}.ton</string>
|
||||||
|
<key>CFBundleURLSchemes</key>
|
||||||
|
<array>
|
||||||
|
<string>ton</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
<key>CFBundleURLName</key>
|
||||||
|
<string>{telegram_bundle_id}.compatibility</string>
|
||||||
|
<key>CFBundleURLSchemes</key>
|
||||||
|
<array>
|
||||||
|
<string>tg</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
""".format(
|
||||||
|
telegram_version = telegram_version,
|
||||||
|
telegram_build_number = telegram_build_number,
|
||||||
|
telegram_bundle_id = telegram_bundle_id,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "TelegramWatchExtensionResources",
|
||||||
|
srcs = glob([
|
||||||
|
"Watch/Extension/Resources/**/*",
|
||||||
|
], exclude = ["Watch/Extension/Resources/**/.*"]),
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "TelegramWatchAppResources",
|
||||||
|
srcs = glob([
|
||||||
|
"Watch/Extension/Resources/**/*.png",
|
||||||
|
], exclude = ["Watch/Extension/Resources/**/.*"]),
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "TelegramWatchAppAssets",
|
||||||
|
srcs = glob([
|
||||||
|
"Watch/App/Assets.xcassets/**/*",
|
||||||
|
], exclude = ["Watch/App/Assets.xcassets/**/.*"]),
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "TelegramWatchAppInterface",
|
||||||
|
srcs = glob([
|
||||||
|
"Watch/App/Base.lproj/Interface.storyboard",
|
||||||
|
]),
|
||||||
|
)
|
||||||
|
|
||||||
|
objc_library(
|
||||||
|
name = "TelegramWatchLib",
|
||||||
|
srcs = glob([
|
||||||
|
"Watch/Extension/**/*.m",
|
||||||
|
"Watch/SSignalKit/**/*.m",
|
||||||
|
"Watch/Bridge/**/*.m",
|
||||||
|
"Watch/WatchCommonWatch/**/*.m",
|
||||||
|
"Watch/Extension/**/*.h",
|
||||||
|
"Watch/SSignalKit/**/*.h",
|
||||||
|
"Watch/Bridge/**/*.h",
|
||||||
|
"Watch/WatchCommonWatch/**/*.h",
|
||||||
|
]),
|
||||||
|
copts = [
|
||||||
|
"-DTARGET_OS_WATCH=1",
|
||||||
|
"-ITelegram/Watch",
|
||||||
|
"-ITelegram/Watch/Extension",
|
||||||
|
"-ITelegram/Watch/Bridge",
|
||||||
|
],
|
||||||
|
sdk_frameworks = [
|
||||||
|
"WatchKit",
|
||||||
|
"WatchConnectivity",
|
||||||
|
"ClockKit",
|
||||||
|
"UserNotifications",
|
||||||
|
"CoreLocation",
|
||||||
|
"CoreGraphics",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
info_plist_fragment(
|
||||||
|
name = "WatchVersionInfoPlist",
|
||||||
|
template =
|
||||||
|
"""
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>{telegram_version}</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>{telegram_build_number}</string>
|
||||||
|
""".format(
|
||||||
|
telegram_version = telegram_version,
|
||||||
|
telegram_build_number = telegram_build_number,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
info_plist_fragment(
|
||||||
|
name = "WatchAppNameInfoPlist",
|
||||||
|
template =
|
||||||
|
"""
|
||||||
|
<key>CFBundleDisplayName</key>
|
||||||
|
<string>Telegram</string>
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
info_plist_fragment(
|
||||||
|
name = "WatchExtensionNSExtensionInfoPlist",
|
||||||
|
template =
|
||||||
|
"""
|
||||||
|
<key>NSExtension</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSExtensionAttributes</key>
|
||||||
|
<dict>
|
||||||
|
<key>WKAppBundleIdentifier</key>
|
||||||
|
<string>{telegram_bundle_id}.watchkitapp</string>
|
||||||
|
</dict>
|
||||||
|
<key>NSExtensionPointIdentifier</key>
|
||||||
|
<string>com.apple.watchkit</string>
|
||||||
|
</dict>
|
||||||
|
""".format(
|
||||||
|
telegram_bundle_id = telegram_bundle_id,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
info_plist_fragment(
|
||||||
|
name = "WatchAppCompanionInfoPlist",
|
||||||
|
template =
|
||||||
|
"""
|
||||||
|
<key>WKCompanionAppBundleIdentifier</key>
|
||||||
|
<string>{telegram_bundle_id}</string>
|
||||||
|
""".format(
|
||||||
|
telegram_bundle_id = telegram_bundle_id,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
watchos_extension(
|
||||||
|
name = "TelegramWatchExtension",
|
||||||
|
bundle_id = "{telegram_bundle_id}.watchkitapp.watchkitextension".format(
|
||||||
|
telegram_bundle_id = telegram_bundle_id,
|
||||||
|
),
|
||||||
|
bundle_name = "TelegramWatchExtension",
|
||||||
|
infoplists = [
|
||||||
|
"Watch/Extension/Info.plist",
|
||||||
|
":WatchVersionInfoPlist",
|
||||||
|
":WatchAppNameInfoPlist",
|
||||||
|
":WatchExtensionNSExtensionInfoPlist",
|
||||||
|
],
|
||||||
|
minimum_os_version = "5.0",
|
||||||
|
provisioning_profile = "//build-input/data/provisioning-profiles:WatchExtension.mobileprovision",
|
||||||
|
resources = [
|
||||||
|
":TelegramWatchExtensionResources",
|
||||||
|
],
|
||||||
|
strings = [
|
||||||
|
":WatchAppStringResources",
|
||||||
|
],
|
||||||
|
deps = [
|
||||||
|
":TelegramWatchLib",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
watchos_application(
|
||||||
|
name = "TelegramWatchApp",
|
||||||
|
#app_icons = ,
|
||||||
|
bundle_id = "{telegram_bundle_id}.watchkitapp".format(
|
||||||
|
telegram_bundle_id = telegram_bundle_id,
|
||||||
|
),
|
||||||
|
bundle_name = "TelegramWatch",
|
||||||
|
extension = ":TelegramWatchExtension",
|
||||||
|
infoplists = [
|
||||||
|
"Watch/App/Info.plist",
|
||||||
|
":WatchVersionInfoPlist",
|
||||||
|
":WatchAppNameInfoPlist",
|
||||||
|
":WatchAppCompanionInfoPlist",
|
||||||
|
],
|
||||||
|
minimum_os_version = "5.0",
|
||||||
|
provisioning_profile = "//build-input/data/provisioning-profiles:WatchApp.mobileprovision",
|
||||||
|
resources = [
|
||||||
|
":TelegramWatchAppResources",
|
||||||
|
":TelegramWatchAppAssets",
|
||||||
|
],
|
||||||
|
storyboards = [
|
||||||
|
":TelegramWatchAppInterface",
|
||||||
|
],
|
||||||
|
strings = [
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
ios_application(
|
ios_application(
|
||||||
name = "Telegram",
|
name = "Telegram",
|
||||||
bundle_id = "{telegram_bundle_id}",
|
bundle_id = "{telegram_bundle_id}".format(
|
||||||
|
telegram_bundle_id = telegram_bundle_id,
|
||||||
|
),
|
||||||
families = ["iphone", "ipad"],
|
families = ["iphone", "ipad"],
|
||||||
minimum_os_version = "9.0",
|
minimum_os_version = "9.0",
|
||||||
provisioning_profile = "//build-input/data/provisioning-profiles:App.mobileprovision",
|
provisioning_profile = "//build-input/data/provisioning-profiles:Telegram.mobileprovision",
|
||||||
|
entitlements = "Telegram-iOS/Telegram-iOS-Hockeyapp.entitlements",
|
||||||
infoplists = [
|
infoplists = [
|
||||||
"Info.plist",
|
"Info.plist",
|
||||||
":AdditionalInfoPlist",
|
":AdditionalInfoPlist",
|
||||||
],
|
],
|
||||||
|
app_icons = [
|
||||||
|
":DefaultAppIcon",
|
||||||
|
],
|
||||||
frameworks = [
|
frameworks = [
|
||||||
#":AsyncDisplayKitFramework",
|
#":AsyncDisplayKitFramework",
|
||||||
],
|
],
|
||||||
|
strings = [
|
||||||
|
":AppStringResources",
|
||||||
|
],
|
||||||
|
watch_application = ":TelegramWatchApp",
|
||||||
deps = [
|
deps = [
|
||||||
":Main",
|
":Main",
|
||||||
":Lib",
|
":Lib",
|
||||||
|
@ -14,172 +14,6 @@
|
|||||||
<string>${PRODUCT_NAME}</string>
|
<string>${PRODUCT_NAME}</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
<key>CFBundleIcons</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleAlternateIcons</key>
|
|
||||||
<dict>
|
|
||||||
<key>Black</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlackIcon</string>
|
|
||||||
<string>BlackNotificationIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>BlackClassic</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlackClassicIcon</string>
|
|
||||||
<string>BlackClassicNotificationIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>BlackFilled</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlackFilledIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>Blue</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlueIcon</string>
|
|
||||||
<string>BlueNotificationIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>BlueClassic</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlueClassicIcon</string>
|
|
||||||
<string>BlueClassicNotificationIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>BlueFilled</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlueFilledIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>WhiteFilled</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>WhiteFilledIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>CFBundlePrimaryIcon</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconName</key>
|
|
||||||
<string>AppIconLLC</string>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>CFBundleIcons~ipad</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleAlternateIcons</key>
|
|
||||||
<dict>
|
|
||||||
<key>Black</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlackIconIpad</string>
|
|
||||||
<string>BlackIconLargeIpad</string>
|
|
||||||
<string>BlackNotificationIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>BlackClassic</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlackClassicIconIpad</string>
|
|
||||||
<string>BlackClassicIconLargeIpad</string>
|
|
||||||
<string>BlackClassicNotificationIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>BlackFilled</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlackFilledIconIpad</string>
|
|
||||||
<string>BlackFilledIconLargeIpad</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>Blue</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlueIconIpad</string>
|
|
||||||
<string>BlueIconLargeIpad</string>
|
|
||||||
<string>BlueNotificationIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>BlueClassic</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlueClassicIconIpad</string>
|
|
||||||
<string>BlueClassicIconLargeIpad</string>
|
|
||||||
<string>BlueClassicNotificationIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>BlueFilled</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlueFilledIconIpad</string>
|
|
||||||
<string>BlueFilledIconLargeIpad</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>WhiteFilled</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>WhiteFilledIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>CFBundlePrimaryIcon</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconName</key>
|
|
||||||
<string>AppIconLLC</string>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
#import "Attachments.h"
|
#import "Attachments.h"
|
||||||
|
|
||||||
#ifdef BUCK
|
|
||||||
#import <MTProtoKit/MTProtoKit.h>
|
#import <MTProtoKit/MTProtoKit.h>
|
||||||
#else
|
|
||||||
#import <MTProtoKitDynamic/MTProtoKitDynamic.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#import "Api.h"
|
#import "Api.h"
|
||||||
|
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
#ifdef BUCK
|
|
||||||
#import <MTProtoKit/MTProtoKit.h>
|
#import <MTProtoKit/MTProtoKit.h>
|
||||||
#else
|
|
||||||
#import <MTProtoKitDynamic/MTProtoKitDynamic.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
#import "StoredAccountInfos.h"
|
#import "StoredAccountInfos.h"
|
||||||
|
|
||||||
#ifdef BUCK
|
|
||||||
#import <MTProtoKit/MTProtoKit.h>
|
#import <MTProtoKit/MTProtoKit.h>
|
||||||
#else
|
|
||||||
#import <MTProtoKitDynamic/MTProtoKitDynamic.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#import <CommonCrypto/CommonDigest.h>
|
#import <CommonCrypto/CommonDigest.h>
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 665 B After Width: | Height: | Size: 665 B |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 159 KiB After Width: | Height: | Size: 159 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"version" : 1,
|
||||||
|
"author" : "xcode"
|
||||||
|
}
|
||||||
|
}
|
@ -1,104 +0,0 @@
|
|||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"size" : "20x20",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"size" : "20x20",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"size" : "29x29",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"size" : "29x29",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"size" : "40x40",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"size" : "40x40",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "60x60",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "icon@120px.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "60x60",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "icon@180px.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"size" : "20x20",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"size" : "20x20",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"size" : "29x29",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"size" : "29x29",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"size" : "40x40",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"size" : "40x40",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "76x76",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "icon@76px.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "76x76",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "icon@152px.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "83.5x83.5",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "icon@167px.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "1024x1024",
|
|
||||||
"idiom" : "ios-marketing",
|
|
||||||
"filename" : "icon@1024px.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"version" : 1,
|
|
||||||
"author" : "xcode"
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 370 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 6.4 KiB |
@ -14,172 +14,6 @@
|
|||||||
<string>${APP_NAME}</string>
|
<string>${APP_NAME}</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
<key>CFBundleIcons</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleAlternateIcons</key>
|
|
||||||
<dict>
|
|
||||||
<key>Black</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlackIcon</string>
|
|
||||||
<string>BlackNotificationIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>BlackClassic</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlackClassicIcon</string>
|
|
||||||
<string>BlackClassicNotificationIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>BlackFilled</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlackFilledIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>Blue</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlueIcon</string>
|
|
||||||
<string>BlueNotificationIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>BlueClassic</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlueClassicIcon</string>
|
|
||||||
<string>BlueClassicNotificationIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>BlueFilled</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlueFilledIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>WhiteFilled</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>WhiteFilledIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>CFBundlePrimaryIcon</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconName</key>
|
|
||||||
<string>AppIconLLC</string>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>CFBundleIcons~ipad</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleAlternateIcons</key>
|
|
||||||
<dict>
|
|
||||||
<key>Black</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlackIconIpad</string>
|
|
||||||
<string>BlackIconLargeIpad</string>
|
|
||||||
<string>BlackNotificationIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>BlackClassic</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlackClassicIconIpad</string>
|
|
||||||
<string>BlackClassicIconLargeIpad</string>
|
|
||||||
<string>BlackClassicNotificationIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>BlackFilled</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlackFilledIconIpad</string>
|
|
||||||
<string>BlackFilledIconLargeIpad</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>Blue</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlueIconIpad</string>
|
|
||||||
<string>BlueIconLargeIpad</string>
|
|
||||||
<string>BlueNotificationIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>BlueClassic</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlueClassicIconIpad</string>
|
|
||||||
<string>BlueClassicIconLargeIpad</string>
|
|
||||||
<string>BlueClassicNotificationIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>BlueFilled</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>BlueFilledIconIpad</string>
|
|
||||||
<string>BlueFilledIconLargeIpad</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>WhiteFilled</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>WhiteFilledIcon</string>
|
|
||||||
</array>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>CFBundlePrimaryIcon</key>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleIconName</key>
|
|
||||||
<string>AppIconLLC</string>
|
|
||||||
<key>UIPrerenderedIcon</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
@ -34,5 +34,7 @@
|
|||||||
</array>
|
</array>
|
||||||
<key>com.apple.developer.pushkit.unrestricted-voip</key>
|
<key>com.apple.developer.pushkit.unrestricted-voip</key>
|
||||||
<true/>
|
<true/>
|
||||||
|
<key>application-identifier</key>
|
||||||
|
<string>X834Q8SBVP.org.telegram.Telegram-iOS</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
@ -4,8 +4,6 @@
|
|||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
<key>CFBundleDisplayName</key>
|
|
||||||
<string>$(APP_NAME)</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
@ -16,10 +14,6 @@
|
|||||||
<string>$(PRODUCT_NAME)</string>
|
<string>$(PRODUCT_NAME)</string>
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>$(PRODUCT_BUNDLE_SHORT_VERSION)</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>${BUILD_NUMBER}</string>
|
|
||||||
<key>UIDeviceFamily</key>
|
<key>UIDeviceFamily</key>
|
||||||
<array>
|
<array>
|
||||||
<integer>4</integer>
|
<integer>4</integer>
|
||||||
@ -29,8 +23,6 @@
|
|||||||
<string>UIInterfaceOrientationPortrait</string>
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||||
</array>
|
</array>
|
||||||
<key>WKCompanionAppBundleIdentifier</key>
|
|
||||||
<string>$(APP_BUNDLE_ID)</string>
|
|
||||||
<key>WKWatchKitApp</key>
|
<key>WKWatchKitApp</key>
|
||||||
<true/>
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
|
@ -4,8 +4,6 @@
|
|||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
<key>CFBundleDisplayName</key>
|
|
||||||
<string>$(APP_NAME)</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
@ -16,20 +14,6 @@
|
|||||||
<string>$(PRODUCT_NAME)</string>
|
<string>$(PRODUCT_NAME)</string>
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>XPC!</string>
|
<string>XPC!</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>$(PRODUCT_BUNDLE_SHORT_VERSION)</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>${BUILD_NUMBER}</string>
|
|
||||||
<key>NSExtension</key>
|
|
||||||
<dict>
|
|
||||||
<key>NSExtensionAttributes</key>
|
|
||||||
<dict>
|
|
||||||
<key>WKAppBundleIdentifier</key>
|
|
||||||
<string>$(APP_BUNDLE_ID).watchkitapp</string>
|
|
||||||
</dict>
|
|
||||||
<key>NSExtensionPointIdentifier</key>
|
|
||||||
<string>com.apple.watchkit</string>
|
|
||||||
</dict>
|
|
||||||
<key>WKExtensionDelegateClassName</key>
|
<key>WKExtensionDelegateClassName</key>
|
||||||
<string>TGExtensionDelegate</string>
|
<string>TGExtensionDelegate</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
],
|
],
|
||||||
"optionSet" : {
|
"optionSet" : {
|
||||||
"BazelBuildOptionsDebug" : {
|
"BazelBuildOptionsDebug" : {
|
||||||
"p" : "$(inherited) --features=swift.use_global_module_cache --features=swift.swift.no_generated_header --spawn_strategy=standalone --strategy=SwiftCompile=standalone"
|
"p" : "$(inherited) --features=swift.use_global_module_cache --features=swift.swift.no_generated_header --spawn_strategy=standalone --strategy=SwiftCompile=standalone --define=wallet_bundle_id=org.ton.TonWallet-iOS"
|
||||||
},
|
},
|
||||||
"BazelBuildOptionsRelease" : {
|
"BazelBuildOptionsRelease" : {
|
||||||
"p" : "$(inherited)"
|
"p" : "$(inherited)"
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 2e869ab0be373d4bd25f5da92052e3c51434e20f
|
Subproject commit 6e1f592277650a2727b6e84705ec1a2dc17764fa
|
@ -1,12 +1,54 @@
|
|||||||
#!/bin/zsh
|
#!/bin/sh
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if [ "$PROVISIONING_PROFILE_SEARCH_PATH" = "" ]; then
|
if [ "$CODESIGNING_DATA_PATH" = "" ]; then
|
||||||
>&2 echo "PROVISIONING_PROFILE_SEARCH_PATH not defined"
|
>&2 echo "CODESIGNING_DATA_PATH not defined"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
EXPECTED_VARIABLES=(\
|
||||||
|
DEVELOPMENT_PROVISIONING_PROFILE_APP \
|
||||||
|
DEVELOPMENT_PROVISIONING_PROFILE_EXTENSION_SHARE \
|
||||||
|
DEVELOPMENT_PROVISIONING_PROFILE_EXTENSION_WIDGET \
|
||||||
|
DEVELOPMENT_PROVISIONING_PROFILE_EXTENSION_NOTIFICATIONSERVICE \
|
||||||
|
DEVELOPMENT_PROVISIONING_PROFILE_EXTENSION_NOTIFICATIONCONTENT \
|
||||||
|
DEVELOPMENT_PROVISIONING_PROFILE_EXTENSION_INTENTS \
|
||||||
|
DEVELOPMENT_PROVISIONING_PROFILE_WATCH_APP \
|
||||||
|
DEVELOPMENT_PROVISIONING_PROFILE_WATCH_EXTENSION \
|
||||||
|
)
|
||||||
|
|
||||||
|
EXPECTED_VARIABLE_NAMES=(\
|
||||||
|
Telegram \
|
||||||
|
Share \
|
||||||
|
Widget \
|
||||||
|
NotificationService \
|
||||||
|
NotificationContent \
|
||||||
|
Intents \
|
||||||
|
WatchApp \
|
||||||
|
WatchExtension \
|
||||||
|
)
|
||||||
|
|
||||||
|
SEARCH_NAMES=()
|
||||||
|
|
||||||
|
MISSING_VARIABLES="0"
|
||||||
|
for VARIABLE_NAME in ${EXPECTED_VARIABLES[@]}; do
|
||||||
|
if [ "${!VARIABLE_NAME}" = "" ]; then
|
||||||
|
echo "$VARIABLE_NAME not defined"
|
||||||
|
MISSING_VARIABLES="1"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$MISSING_VARIABLES" == "1" ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
VARIABLE_COUNT=${#EXPECTED_VARIABLES[@]}
|
||||||
|
for (( i=0; i<$VARIABLE_COUNT; i=i+1 )); do
|
||||||
|
VARIABLE_NAME="${EXPECTED_VARIABLES[$(($i))]}"
|
||||||
|
SEARCH_NAMES=("${SEARCH_NAMES[@]}" "${EXPECTED_VARIABLE_NAMES[$i]}" "${!VARIABLE_NAME}")
|
||||||
|
done
|
||||||
|
|
||||||
touch "build-input/data/BUILD"
|
touch "build-input/data/BUILD"
|
||||||
|
|
||||||
OUTPUT_DIRECTORY="build-input/data/provisioning-profiles"
|
OUTPUT_DIRECTORY="build-input/data/provisioning-profiles"
|
||||||
@ -18,7 +60,6 @@ touch "$BUILD_PATH"
|
|||||||
|
|
||||||
echo "exports_files([" >> "$BUILD_PATH"
|
echo "exports_files([" >> "$BUILD_PATH"
|
||||||
|
|
||||||
SEARCH_NAMES=($@)
|
|
||||||
ELEMENT_COUNT=${#SEARCH_NAMES[@]}
|
ELEMENT_COUNT=${#SEARCH_NAMES[@]}
|
||||||
REMAINDER=$(($ELEMENT_COUNT % 2))
|
REMAINDER=$(($ELEMENT_COUNT % 2))
|
||||||
|
|
||||||
@ -27,17 +68,16 @@ if [ $REMAINDER != 0 ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
declare -A FOUND_PROFILES
|
for PROFILE in `find "$CODESIGNING_DATA_PATH" -type f -name "*.mobileprovision"`; do
|
||||||
|
|
||||||
for PROFILE in `find "$PROVISIONING_PROFILE_SEARCH_PATH" -type f -name "*.mobileprovision"`; do
|
|
||||||
PROFILE_DATA=$(security cms -D -i "$PROFILE")
|
PROFILE_DATA=$(security cms -D -i "$PROFILE")
|
||||||
PROFILE_NAME=$(/usr/libexec/PlistBuddy -c "Print :Name" /dev/stdin <<< $(echo $PROFILE_DATA))
|
PROFILE_NAME=$(/usr/libexec/PlistBuddy -c "Print :Name" /dev/stdin <<< $(echo $PROFILE_DATA))
|
||||||
for (( i=1; i<$ELEMENT_COUNT+1; i=i+2 )); do
|
for (( i=0; i<$ELEMENT_COUNT; i=i+2 )); do
|
||||||
ID=${SEARCH_NAMES[$i]}
|
ID=${SEARCH_NAMES[$i]}
|
||||||
SEARCH_NAME=${SEARCH_NAMES[$(($i + 1))]}
|
SEARCH_NAME=${SEARCH_NAMES[$(($i + 1))]}
|
||||||
if [ "$PROFILE_NAME" = "$SEARCH_NAME" ]; then
|
if [ "$PROFILE_NAME" = "$SEARCH_NAME" ]; then
|
||||||
if [ "${FOUND_PROFILES[\"$SEARCH_NAME\"]}" = "" ]; then
|
VARIABLE_NAME="FOUND_PROFILE_$ID"
|
||||||
FOUND_PROFILES["$SEARCH_NAME"]="$PROFILE"
|
if [ "${!VARIABLE_NAME}" = "" ]; then
|
||||||
|
eval "FOUND_PROFILE_$ID=\"$PROFILE\""
|
||||||
else
|
else
|
||||||
>&2 echo "Found multiple profiles with name \"$SEARCH_NAME\""
|
>&2 echo "Found multiple profiles with name \"$SEARCH_NAME\""
|
||||||
exit 1
|
exit 1
|
||||||
@ -46,10 +86,11 @@ for PROFILE in `find "$PROVISIONING_PROFILE_SEARCH_PATH" -type f -name "*.mobile
|
|||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
for (( i=1; i<$ELEMENT_COUNT+1; i=i+2 )); do
|
for (( i=0; i<$ELEMENT_COUNT; i=i+2 )); do
|
||||||
ID=${SEARCH_NAMES[$i]}
|
ID=${SEARCH_NAMES[$i]}
|
||||||
SEARCH_NAME=${SEARCH_NAMES[$(($i + 1))]}
|
SEARCH_NAME=${SEARCH_NAMES[$(($i + 1))]}
|
||||||
FOUND_PROFILE="${FOUND_PROFILES[\"$SEARCH_NAME\"]}"
|
VARIABLE_NAME="FOUND_PROFILE_$ID"
|
||||||
|
FOUND_PROFILE="${!VARIABLE_NAME}"
|
||||||
if [ "$FOUND_PROFILE" = "" ]; then
|
if [ "$FOUND_PROFILE" = "" ]; then
|
||||||
>&2 echo "Profile \"$SEARCH_NAME\" not found"
|
>&2 echo "Profile \"$SEARCH_NAME\" not found"
|
||||||
exit 1
|
exit 1
|
||||||
|
93
build-system/generate-xcode-project.sh
Executable file
@ -0,0 +1,93 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
BAZEL="$(which bazel)"
|
||||||
|
if [ "$BAZEL" = "" ]; then
|
||||||
|
echo "bazel not found in PATH"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
EXPECTED_VARIABLES=(\
|
||||||
|
BUILD_NUMBER \
|
||||||
|
APP_VERSION \
|
||||||
|
BUNDLE_ID \
|
||||||
|
API_ID \
|
||||||
|
API_HASH \
|
||||||
|
APP_CENTER_ID \
|
||||||
|
IS_INTERNAL_BUILD \
|
||||||
|
IS_APPSTORE_BUILD \
|
||||||
|
APPSTORE_ID \
|
||||||
|
APP_SPECIFIC_URL_SCHEME \
|
||||||
|
)
|
||||||
|
|
||||||
|
MISSING_VARIABLES="0"
|
||||||
|
for VARIABLE_NAME in ${EXPECTED_VARIABLES[@]}; do
|
||||||
|
if [ "${!VARIABLE_NAME}" = "" ]; then
|
||||||
|
echo "$VARIABLE_NAME not defined"
|
||||||
|
MISSING_VARIABLES="1"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$MISSING_VARIABLES" == "1" ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
VARIABLES_DIRECTORY="build-input/data"
|
||||||
|
mkdir -p "$VARIABLES_DIRECTORY"
|
||||||
|
VARIABLES_PATH="$VARIABLES_DIRECTORY/variables.bzl"
|
||||||
|
rm -f "$VARIABLES_PATH"
|
||||||
|
|
||||||
|
GEN_DIRECTORY="build-input/gen/project"
|
||||||
|
rm -rf "$GEN_DIRECTORY"
|
||||||
|
mkdir -p "$GEN_DIRECTORY"
|
||||||
|
|
||||||
|
echo "telegram_build_number = \"$BUILD_NUMBER\"" >> "$VARIABLES_PATH"
|
||||||
|
echo "telegram_version = \"$APP_VERSION\"" >> "$VARIABLES_PATH"
|
||||||
|
echo "telegram_bundle_id = \"$BUNDLE_ID\"" >> "$VARIABLES_PATH"
|
||||||
|
echo "telegram_api_id = \"$API_ID\"" >> "$VARIABLES_PATH"
|
||||||
|
echo "telegram_api_hash = \"$API_HASH\"" >> "$VARIABLES_PATH"
|
||||||
|
echo "telegram_app_center_id = \"$APP_CENTER_ID\"" >> "$VARIABLES_PATH"
|
||||||
|
echo "telegram_is_internal_build = \"$IS_INTERNAL_BUILD\"" >> "$VARIABLES_PATH"
|
||||||
|
echo "telegram_is_appstore_build = \"$IS_APPSTORE_BUILD\"" >> "$VARIABLES_PATH"
|
||||||
|
echo "telegram_appstore_id = \"$APPSTORE_ID\"" >> "$VARIABLES_PATH"
|
||||||
|
echo "telegram_app_specific_url_scheme = \"$APP_SPECIFIC_URL_SCHEME\"" >> "$VARIABLES_PATH"
|
||||||
|
|
||||||
|
BAZEL_OPTIONS=(\
|
||||||
|
--features=swift.use_global_module_cache \
|
||||||
|
--spawn_strategy=standalone \
|
||||||
|
--strategy=SwiftCompile=standalone \
|
||||||
|
--define=telegram_build_number="$BUILD_NUMBER" \
|
||||||
|
--define=telegram_version="$APP_VERSION" \
|
||||||
|
--define=telegram_bundle_id="$BUNDLE_ID" \
|
||||||
|
--define=telegram_api_id="$API_ID" \
|
||||||
|
--define=telegram_api_hash="$API_HASH" \
|
||||||
|
--define=telegram_app_center_id="$APP_CENTER_ID" \
|
||||||
|
--define=telegram_is_internal_build="$IS_INTERNAL_BUILD" \
|
||||||
|
--define=telegram_is_appstore_build="$IS_APPSTORE_BUILD" \
|
||||||
|
--define=telegram_appstore_id="$APPSTORE_ID" \
|
||||||
|
--define=telegram_app_specific_url_scheme="$APP_SPECIFIC_URL_SCHEME" \
|
||||||
|
)
|
||||||
|
|
||||||
|
$HOME/Applications/Tulsi.app/Contents/MacOS/Tulsi -- \
|
||||||
|
--verbose \
|
||||||
|
--create-tulsiproj Telegram \
|
||||||
|
--workspaceroot ./ \
|
||||||
|
--bazel "$BAZEL" \
|
||||||
|
--outputfolder "$GEN_DIRECTORY" \
|
||||||
|
--target Telegram:Telegram \
|
||||||
|
--target Telegram:Main \
|
||||||
|
--target Telegram:Lib \
|
||||||
|
|
||||||
|
PATCH_OPTIONS="BazelBuildOptionsDebug BazelBuildOptionsRelease"
|
||||||
|
for NAME in $PATCH_OPTIONS; do
|
||||||
|
sed -i "" -e '1h;2,$H;$!d;g' -e 's/\("'"$NAME"'" : {\n[ ]*"p" : "$(inherited)\)/\1'" ${BAZEL_OPTIONS[*]}"'/' "$GEN_DIRECTORY/Telegram.tulsiproj/Configs/Telegram.tulsigen"
|
||||||
|
done
|
||||||
|
|
||||||
|
sed -i "" -e '1h;2,$H;$!d;g' -e 's/\("sourceFilters" : \[\n[ ]*\)"\.\/\.\.\."/\1"Telegram\/...", "submodules\/..."/' "$GEN_DIRECTORY/Telegram.tulsiproj/Configs/Telegram.tulsigen"
|
||||||
|
|
||||||
|
${HOME}/Applications/Tulsi.app/Contents/MacOS/Tulsi -- \
|
||||||
|
--verbose \
|
||||||
|
--genconfig "$GEN_DIRECTORY/Telegram.tulsiproj:Telegram" \
|
||||||
|
--bazel "$BAZEL" \
|
||||||
|
--outputfolder "$GEN_DIRECTORY" \
|
51
build-system/info_plist_fragment.bzl
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
load("//build-system:defines.bzl",
|
||||||
|
"string_value",
|
||||||
|
)
|
||||||
|
|
||||||
|
def _info_plist_fragment(ctx):
|
||||||
|
output = ctx.outputs.out
|
||||||
|
|
||||||
|
found_keys = list()
|
||||||
|
template = ctx.attr.template
|
||||||
|
current_start = 0
|
||||||
|
for i in range(len(template)):
|
||||||
|
start_index = template.find("{", current_start)
|
||||||
|
if start_index == -1:
|
||||||
|
break
|
||||||
|
end_index = template.find("}", start_index + 1)
|
||||||
|
if end_index == -1:
|
||||||
|
fail("Could not find the matching '}' for the '{' at {}".format(start_index))
|
||||||
|
found_keys.append(template[start_index + 1:end_index])
|
||||||
|
current_start = end_index + 1
|
||||||
|
|
||||||
|
resolved_values = dict()
|
||||||
|
for key in found_keys:
|
||||||
|
value = ctx.var.get(key, None)
|
||||||
|
if value == None:
|
||||||
|
fail("Expected value for --define={} was not found".format(key))
|
||||||
|
resolved_values[key] = value
|
||||||
|
|
||||||
|
plist_string = """
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
""" + template.format(**resolved_values) + """
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
"""
|
||||||
|
|
||||||
|
ctx.actions.write(
|
||||||
|
output = output,
|
||||||
|
content = plist_string,
|
||||||
|
)
|
||||||
|
|
||||||
|
info_plist_fragment = rule(
|
||||||
|
implementation = _info_plist_fragment,
|
||||||
|
attrs = {
|
||||||
|
"template": attr.string(mandatory = True),
|
||||||
|
},
|
||||||
|
outputs = {
|
||||||
|
"out": "%{name}.plist"
|
||||||
|
},
|
||||||
|
)
|
@ -9,6 +9,7 @@ import TelegramPresentationData
|
|||||||
import PasscodeUI
|
import PasscodeUI
|
||||||
import TelegramUIPreferences
|
import TelegramUIPreferences
|
||||||
import ImageBlur
|
import ImageBlur
|
||||||
|
import FastBlur
|
||||||
import AppLockState
|
import AppLockState
|
||||||
|
|
||||||
private func isLocked(passcodeSettings: PresentationPasscodeSettings, state: LockState, isApplicationActive: Bool) -> Bool {
|
private func isLocked(passcodeSettings: PresentationPasscodeSettings, state: LockState, isApplicationActive: Bool) -> Bool {
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
load(
|
load(
|
||||||
"@bazel_skylib//rules:common_settings.bzl",
|
"//build-input/data:variables.bzl",
|
||||||
"string_flag",
|
"telegram_api_id",
|
||||||
)
|
"telegram_api_hash",
|
||||||
|
"telegram_app_center_id",
|
||||||
string_flag(
|
"telegram_is_internal_build",
|
||||||
name = "apiId",
|
"telegram_is_appstore_build",
|
||||||
build_setting_default = "",
|
"telegram_appstore_id",
|
||||||
visibility = ["//visibility:public"],
|
"telegram_app_specific_url_scheme",
|
||||||
)
|
)
|
||||||
|
|
||||||
objc_library(
|
objc_library(
|
||||||
@ -17,13 +17,13 @@ objc_library(
|
|||||||
"Sources/*.m",
|
"Sources/*.m",
|
||||||
]),
|
]),
|
||||||
copts = [
|
copts = [
|
||||||
'-DAPP_CONFIG_API_ID=0',
|
"-DAPP_CONFIG_API_ID={}".format(telegram_api_id),
|
||||||
'-DAPP_CONFIG_API_HASH="1"',
|
"-DAPP_CONFIG_API_HASH=\\\"{}\\\"".format(telegram_api_hash),
|
||||||
'-DAPP_CONFIG_APP_CENTER_ID="1"',
|
"-DAPP_CONFIG_APP_CENTER_ID=\\\"{}\\\"".format(telegram_app_center_id),
|
||||||
'-DAPP_CONFIG_IS_INTERNAL_BUILD=false',
|
"-DAPP_CONFIG_IS_INTERNAL_BUILD={}".format(telegram_is_internal_build),
|
||||||
'-DAPP_CONFIG_IS_APPSTORE_BUILD=true',
|
"-DAPP_CONFIG_IS_APPSTORE_BUILD={}".format(telegram_is_appstore_build),
|
||||||
'-DAPP_CONFIG_APPSTORE_ID=0',
|
"-DAPP_CONFIG_APPSTORE_ID={}".format(telegram_appstore_id),
|
||||||
'-DAPP_SPECIFIC_URL_SCHEME="1"',
|
"-DAPP_SPECIFIC_URL_SCHEME=\\\"{}\\\"".format(telegram_app_specific_url_scheme),
|
||||||
],
|
],
|
||||||
hdrs = glob([
|
hdrs = glob([
|
||||||
"Sources/*.h",
|
"Sources/*.h",
|
||||||
|
25
submodules/BuildConfigExtra/BUILD
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
objc_library(
|
||||||
|
name = "BuildConfigExtra",
|
||||||
|
enable_modules = True,
|
||||||
|
module_name = "BuildConfigExtra",
|
||||||
|
srcs = glob([
|
||||||
|
"Sources/**/*.m",
|
||||||
|
"Sources/**/*.h",
|
||||||
|
]),
|
||||||
|
hdrs = glob([
|
||||||
|
"PublicHeaders/**/*.h",
|
||||||
|
]),
|
||||||
|
includes = [
|
||||||
|
"PublicHeaders",
|
||||||
|
],
|
||||||
|
deps = [
|
||||||
|
"//submodules/PKCS:PKCS",
|
||||||
|
],
|
||||||
|
sdk_frameworks = [
|
||||||
|
"Foundation",
|
||||||
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public",
|
||||||
|
],
|
||||||
|
)
|
@ -1,4 +1,4 @@
|
|||||||
#import "BuildConfigExtra.h"
|
#import <BuildConfigExtra/BuildConfigExtra.h>
|
||||||
|
|
||||||
#include <mach-o/arch.h>
|
#include <mach-o/arch.h>
|
||||||
#include <mach-o/loader.h>
|
#include <mach-o/loader.h>
|
||||||
|
@ -4,7 +4,8 @@ objc_library(
|
|||||||
enable_modules = True,
|
enable_modules = True,
|
||||||
module_name = "Crc32",
|
module_name = "Crc32",
|
||||||
srcs = glob([
|
srcs = glob([
|
||||||
"Sources/*.m",
|
"Sources/**/*.m",
|
||||||
|
"Sources/**/*.h",
|
||||||
]),
|
]),
|
||||||
hdrs = glob([
|
hdrs = glob([
|
||||||
"PublicHeaders/**/*.h",
|
"PublicHeaders/**/*.h",
|
||||||
|
@ -26,6 +26,8 @@ public class ImmediateTextNode: TextNode {
|
|||||||
return .byTruncatingMiddle
|
return .byTruncatingMiddle
|
||||||
case .end:
|
case .end:
|
||||||
return .byTruncatingTail
|
return .byTruncatingTail
|
||||||
|
@unknown default:
|
||||||
|
return .byTruncatingTail
|
||||||
}
|
}
|
||||||
} set(value) {
|
} set(value) {
|
||||||
switch value {
|
switch value {
|
||||||
|
@ -132,7 +132,8 @@ public final class TextNodeLayout: NSObject {
|
|||||||
fileprivate let truncationType: CTLineTruncationType
|
fileprivate let truncationType: CTLineTruncationType
|
||||||
fileprivate let backgroundColor: UIColor?
|
fileprivate let backgroundColor: UIColor?
|
||||||
fileprivate let constrainedSize: CGSize
|
fileprivate let constrainedSize: CGSize
|
||||||
fileprivate let alignment: NSTextAlignment
|
fileprivate let explicitAlignment: NSTextAlignment
|
||||||
|
fileprivate let resolvedAlignment: NSTextAlignment
|
||||||
fileprivate let lineSpacing: CGFloat
|
fileprivate let lineSpacing: CGFloat
|
||||||
fileprivate let cutout: TextNodeCutout?
|
fileprivate let cutout: TextNodeCutout?
|
||||||
fileprivate let insets: UIEdgeInsets
|
fileprivate let insets: UIEdgeInsets
|
||||||
@ -147,12 +148,13 @@ public final class TextNodeLayout: NSObject {
|
|||||||
fileprivate let textStroke: (UIColor, CGFloat)?
|
fileprivate let textStroke: (UIColor, CGFloat)?
|
||||||
public let hasRTL: Bool
|
public let hasRTL: Bool
|
||||||
|
|
||||||
fileprivate init(attributedString: NSAttributedString?, maximumNumberOfLines: Int, truncationType: CTLineTruncationType, constrainedSize: CGSize, alignment: NSTextAlignment, lineSpacing: CGFloat, cutout: TextNodeCutout?, insets: UIEdgeInsets, size: CGSize, rawTextSize: CGSize, truncated: Bool, firstLineOffset: CGFloat, lines: [TextNodeLine], blockQuotes: [TextNodeBlockQuote], backgroundColor: UIColor?, lineColor: UIColor?, textShadowColor: UIColor?, textStroke: (UIColor, CGFloat)?) {
|
fileprivate init(attributedString: NSAttributedString?, maximumNumberOfLines: Int, truncationType: CTLineTruncationType, constrainedSize: CGSize, explicitAlignment: NSTextAlignment, resolvedAlignment: NSTextAlignment, lineSpacing: CGFloat, cutout: TextNodeCutout?, insets: UIEdgeInsets, size: CGSize, rawTextSize: CGSize, truncated: Bool, firstLineOffset: CGFloat, lines: [TextNodeLine], blockQuotes: [TextNodeBlockQuote], backgroundColor: UIColor?, lineColor: UIColor?, textShadowColor: UIColor?, textStroke: (UIColor, CGFloat)?) {
|
||||||
self.attributedString = attributedString
|
self.attributedString = attributedString
|
||||||
self.maximumNumberOfLines = maximumNumberOfLines
|
self.maximumNumberOfLines = maximumNumberOfLines
|
||||||
self.truncationType = truncationType
|
self.truncationType = truncationType
|
||||||
self.constrainedSize = constrainedSize
|
self.constrainedSize = constrainedSize
|
||||||
self.alignment = alignment
|
self.explicitAlignment = explicitAlignment
|
||||||
|
self.resolvedAlignment = resolvedAlignment
|
||||||
self.lineSpacing = lineSpacing
|
self.lineSpacing = lineSpacing
|
||||||
self.cutout = cutout
|
self.cutout = cutout
|
||||||
self.insets = insets
|
self.insets = insets
|
||||||
@ -240,7 +242,7 @@ public final class TextNodeLayout: NSObject {
|
|||||||
for line in self.lines {
|
for line in self.lines {
|
||||||
lineIndex += 1
|
lineIndex += 1
|
||||||
var lineFrame = CGRect(origin: CGPoint(x: line.frame.origin.x, y: line.frame.origin.y - line.frame.size.height + self.firstLineOffset), size: line.frame.size)
|
var lineFrame = CGRect(origin: CGPoint(x: line.frame.origin.x, y: line.frame.origin.y - line.frame.size.height + self.firstLineOffset), size: line.frame.size)
|
||||||
switch self.alignment {
|
switch self.resolvedAlignment {
|
||||||
case .center:
|
case .center:
|
||||||
lineFrame.origin.x = floor((self.size.width - lineFrame.size.width) / 2.0)
|
lineFrame.origin.x = floor((self.size.width - lineFrame.size.width) / 2.0)
|
||||||
case .natural:
|
case .natural:
|
||||||
@ -308,7 +310,7 @@ public final class TextNodeLayout: NSObject {
|
|||||||
for line in self.lines {
|
for line in self.lines {
|
||||||
lineIndex += 1
|
lineIndex += 1
|
||||||
var lineFrame = CGRect(origin: CGPoint(x: line.frame.origin.x, y: line.frame.origin.y - line.frame.size.height + self.firstLineOffset), size: line.frame.size)
|
var lineFrame = CGRect(origin: CGPoint(x: line.frame.origin.x, y: line.frame.origin.y - line.frame.size.height + self.firstLineOffset), size: line.frame.size)
|
||||||
switch self.alignment {
|
switch self.resolvedAlignment {
|
||||||
case .center:
|
case .center:
|
||||||
lineFrame.origin.x = floor((self.size.width - lineFrame.size.width) / 2.0)
|
lineFrame.origin.x = floor((self.size.width - lineFrame.size.width) / 2.0)
|
||||||
case .natural:
|
case .natural:
|
||||||
@ -383,7 +385,7 @@ public final class TextNodeLayout: NSObject {
|
|||||||
for line in self.lines {
|
for line in self.lines {
|
||||||
lineIndex += 1
|
lineIndex += 1
|
||||||
var lineFrame = CGRect(origin: CGPoint(x: line.frame.origin.x, y: line.frame.origin.y - line.frame.size.height + self.firstLineOffset), size: line.frame.size)
|
var lineFrame = CGRect(origin: CGPoint(x: line.frame.origin.x, y: line.frame.origin.y - line.frame.size.height + self.firstLineOffset), size: line.frame.size)
|
||||||
switch self.alignment {
|
switch self.resolvedAlignment {
|
||||||
case .center:
|
case .center:
|
||||||
lineFrame.origin.x = floor((self.size.width - lineFrame.size.width) / 2.0)
|
lineFrame.origin.x = floor((self.size.width - lineFrame.size.width) / 2.0)
|
||||||
case .natural:
|
case .natural:
|
||||||
@ -823,17 +825,26 @@ public class TextNode: ASDisplayNode {
|
|||||||
|
|
||||||
private class func calculateLayout(attributedString: NSAttributedString?, minimumNumberOfLines: Int, maximumNumberOfLines: Int, truncationType: CTLineTruncationType, backgroundColor: UIColor?, constrainedSize: CGSize, alignment: NSTextAlignment, lineSpacingFactor: CGFloat, cutout: TextNodeCutout?, insets: UIEdgeInsets, lineColor: UIColor?, textShadowColor: UIColor?, textStroke: (UIColor, CGFloat)?) -> TextNodeLayout {
|
private class func calculateLayout(attributedString: NSAttributedString?, minimumNumberOfLines: Int, maximumNumberOfLines: Int, truncationType: CTLineTruncationType, backgroundColor: UIColor?, constrainedSize: CGSize, alignment: NSTextAlignment, lineSpacingFactor: CGFloat, cutout: TextNodeCutout?, insets: UIEdgeInsets, lineColor: UIColor?, textShadowColor: UIColor?, textStroke: (UIColor, CGFloat)?) -> TextNodeLayout {
|
||||||
if let attributedString = attributedString {
|
if let attributedString = attributedString {
|
||||||
|
|
||||||
let stringLength = attributedString.length
|
let stringLength = attributedString.length
|
||||||
|
|
||||||
let font: CTFont
|
let font: CTFont
|
||||||
|
let resolvedAlignment: NSTextAlignment
|
||||||
|
|
||||||
if stringLength != 0 {
|
if stringLength != 0 {
|
||||||
if let stringFont = attributedString.attribute(NSAttributedString.Key.font, at: 0, effectiveRange: nil) {
|
if let stringFont = attributedString.attribute(NSAttributedString.Key.font, at: 0, effectiveRange: nil) {
|
||||||
font = stringFont as! CTFont
|
font = stringFont as! CTFont
|
||||||
} else {
|
} else {
|
||||||
font = defaultFont
|
font = defaultFont
|
||||||
}
|
}
|
||||||
|
if let paragraphStyle = attributedString.attribute(NSAttributedString.Key.paragraphStyle, at: 0, effectiveRange: nil) as? NSParagraphStyle {
|
||||||
|
resolvedAlignment = paragraphStyle.alignment
|
||||||
|
} else {
|
||||||
|
resolvedAlignment = alignment
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
font = defaultFont
|
font = defaultFont
|
||||||
|
resolvedAlignment = alignment
|
||||||
}
|
}
|
||||||
|
|
||||||
let fontAscent = CTFontGetAscent(font)
|
let fontAscent = CTFontGetAscent(font)
|
||||||
@ -847,7 +858,7 @@ public class TextNode: ASDisplayNode {
|
|||||||
var maybeTypesetter: CTTypesetter?
|
var maybeTypesetter: CTTypesetter?
|
||||||
maybeTypesetter = CTTypesetterCreateWithAttributedString(attributedString as CFAttributedString)
|
maybeTypesetter = CTTypesetterCreateWithAttributedString(attributedString as CFAttributedString)
|
||||||
if maybeTypesetter == nil {
|
if maybeTypesetter == nil {
|
||||||
return TextNodeLayout(attributedString: attributedString, maximumNumberOfLines: maximumNumberOfLines, truncationType: truncationType, constrainedSize: constrainedSize, alignment: alignment, lineSpacing: lineSpacingFactor, cutout: cutout, insets: insets, size: CGSize(), rawTextSize: CGSize(), truncated: false, firstLineOffset: 0.0, lines: [], blockQuotes: [], backgroundColor: backgroundColor, lineColor: lineColor, textShadowColor: textShadowColor, textStroke: textStroke)
|
return TextNodeLayout(attributedString: attributedString, maximumNumberOfLines: maximumNumberOfLines, truncationType: truncationType, constrainedSize: constrainedSize, explicitAlignment: alignment, resolvedAlignment: resolvedAlignment, lineSpacing: lineSpacingFactor, cutout: cutout, insets: insets, size: CGSize(), rawTextSize: CGSize(), truncated: false, firstLineOffset: 0.0, lines: [], blockQuotes: [], backgroundColor: backgroundColor, lineColor: lineColor, textShadowColor: textShadowColor, textStroke: textStroke)
|
||||||
}
|
}
|
||||||
|
|
||||||
let typesetter = maybeTypesetter!
|
let typesetter = maybeTypesetter!
|
||||||
@ -1056,9 +1067,9 @@ public class TextNode: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return TextNodeLayout(attributedString: attributedString, maximumNumberOfLines: maximumNumberOfLines, truncationType: truncationType, constrainedSize: constrainedSize, alignment: alignment, lineSpacing: lineSpacingFactor, cutout: cutout, insets: insets, size: CGSize(width: ceil(layoutSize.width) + insets.left + insets.right, height: ceil(layoutSize.height) + insets.top + insets.bottom), rawTextSize: CGSize(width: ceil(rawLayoutSize.width) + insets.left + insets.right, height: ceil(rawLayoutSize.height) + insets.top + insets.bottom), truncated: truncated, firstLineOffset: firstLineOffset, lines: lines, blockQuotes: blockQuotes, backgroundColor: backgroundColor, lineColor: lineColor, textShadowColor: textShadowColor, textStroke: textStroke)
|
return TextNodeLayout(attributedString: attributedString, maximumNumberOfLines: maximumNumberOfLines, truncationType: truncationType, constrainedSize: constrainedSize, explicitAlignment: alignment, resolvedAlignment: resolvedAlignment, lineSpacing: lineSpacingFactor, cutout: cutout, insets: insets, size: CGSize(width: ceil(layoutSize.width) + insets.left + insets.right, height: ceil(layoutSize.height) + insets.top + insets.bottom), rawTextSize: CGSize(width: ceil(rawLayoutSize.width) + insets.left + insets.right, height: ceil(rawLayoutSize.height) + insets.top + insets.bottom), truncated: truncated, firstLineOffset: firstLineOffset, lines: lines, blockQuotes: blockQuotes, backgroundColor: backgroundColor, lineColor: lineColor, textShadowColor: textShadowColor, textStroke: textStroke)
|
||||||
} else {
|
} else {
|
||||||
return TextNodeLayout(attributedString: attributedString, maximumNumberOfLines: maximumNumberOfLines, truncationType: truncationType, constrainedSize: constrainedSize, alignment: alignment, lineSpacing: lineSpacingFactor, cutout: cutout, insets: insets, size: CGSize(), rawTextSize: CGSize(), truncated: false, firstLineOffset: 0.0, lines: [], blockQuotes: [], backgroundColor: backgroundColor, lineColor: lineColor, textShadowColor: textShadowColor, textStroke: textStroke)
|
return TextNodeLayout(attributedString: attributedString, maximumNumberOfLines: maximumNumberOfLines, truncationType: truncationType, constrainedSize: constrainedSize, explicitAlignment: alignment, resolvedAlignment: alignment, lineSpacing: lineSpacingFactor, cutout: cutout, insets: insets, size: CGSize(), rawTextSize: CGSize(), truncated: false, firstLineOffset: 0.0, lines: [], blockQuotes: [], backgroundColor: backgroundColor, lineColor: lineColor, textShadowColor: textShadowColor, textStroke: textStroke)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1110,7 +1121,7 @@ public class TextNode: ASDisplayNode {
|
|||||||
let textPosition = context.textPosition
|
let textPosition = context.textPosition
|
||||||
context.textMatrix = CGAffineTransform(scaleX: 1.0, y: -1.0)
|
context.textMatrix = CGAffineTransform(scaleX: 1.0, y: -1.0)
|
||||||
|
|
||||||
let alignment = layout.alignment
|
let alignment = layout.resolvedAlignment
|
||||||
let offset = CGPoint(x: layout.insets.left, y: layout.insets.top)
|
let offset = CGPoint(x: layout.insets.left, y: layout.insets.top)
|
||||||
|
|
||||||
for i in 0 ..< layout.lines.count {
|
for i in 0 ..< layout.lines.count {
|
||||||
@ -1187,7 +1198,7 @@ public class TextNode: ASDisplayNode {
|
|||||||
let layout: TextNodeLayout
|
let layout: TextNodeLayout
|
||||||
|
|
||||||
var updated = false
|
var updated = false
|
||||||
if let existingLayout = existingLayout, existingLayout.constrainedSize == arguments.constrainedSize && existingLayout.maximumNumberOfLines == arguments.maximumNumberOfLines && existingLayout.truncationType == arguments.truncationType && existingLayout.cutout == arguments.cutout && existingLayout.alignment == arguments.alignment && existingLayout.lineSpacing.isEqual(to: arguments.lineSpacing) {
|
if let existingLayout = existingLayout, existingLayout.constrainedSize == arguments.constrainedSize && existingLayout.maximumNumberOfLines == arguments.maximumNumberOfLines && existingLayout.truncationType == arguments.truncationType && existingLayout.cutout == arguments.cutout && existingLayout.explicitAlignment == arguments.alignment && existingLayout.lineSpacing.isEqual(to: arguments.lineSpacing) {
|
||||||
let stringMatch: Bool
|
let stringMatch: Bool
|
||||||
|
|
||||||
var colorMatch: Bool = true
|
var colorMatch: Bool = true
|
||||||
|
17
submodules/EncryptionKeyVisualization/BUILD
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")
|
||||||
|
|
||||||
|
swift_library(
|
||||||
|
name = "EncryptionKeyVisualization",
|
||||||
|
module_name = "EncryptionKeyVisualization",
|
||||||
|
srcs = glob([
|
||||||
|
"Sources/**/*.swift",
|
||||||
|
]),
|
||||||
|
deps = [
|
||||||
|
"//submodules/TelegramCore:TelegramCore",
|
||||||
|
"//submodules/SyncCore:SyncCore",
|
||||||
|
"//submodules/EncryptionKeyVisualization/Impl:EncryptionKeyVisualizationImpl",
|
||||||
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public",
|
||||||
|
],
|
||||||
|
)
|
22
submodules/EncryptionKeyVisualization/Impl/BUILD
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
objc_library(
|
||||||
|
name = "EncryptionKeyVisualizationImpl",
|
||||||
|
enable_modules = True,
|
||||||
|
module_name = "EncryptionKeyVisualizationImpl",
|
||||||
|
srcs = glob([
|
||||||
|
"Sources/**/*.m",
|
||||||
|
"Sources/**/*.h",
|
||||||
|
]),
|
||||||
|
hdrs = glob([
|
||||||
|
"PublicHeaders/**/*.h",
|
||||||
|
]),
|
||||||
|
includes = [
|
||||||
|
"PublicHeaders",
|
||||||
|
],
|
||||||
|
sdk_frameworks = [
|
||||||
|
"Foundation",
|
||||||
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public",
|
||||||
|
],
|
||||||
|
)
|
@ -0,0 +1,5 @@
|
|||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
#import <EncryptionKeyVisualizationImpl/SecretChatKeyVisualization.h>
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
#import "SecretChatKeyVisualization.h"
|
#import <EncryptionKeyVisualizationImpl/SecretChatKeyVisualization.h>
|
||||||
|
|
||||||
#import <objc/runtime.h>
|
#import <objc/runtime.h>
|
||||||
|
|
@ -1,11 +0,0 @@
|
|||||||
#import <UIKit/UIKit.h>
|
|
||||||
|
|
||||||
//! Project version number for EncryptionKeyVisualization.
|
|
||||||
FOUNDATION_EXPORT double EncryptionKeyVisualizationVersionNumber;
|
|
||||||
|
|
||||||
//! Project version string for EncryptionKeyVisualization.
|
|
||||||
FOUNDATION_EXPORT const unsigned char EncryptionKeyVisualizationVersionString[];
|
|
||||||
|
|
||||||
#import <EncryptionKeyVisualization/SecretChatKeyVisualization.h>
|
|
||||||
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
import UIKit
|
||||||
import TelegramCore
|
import TelegramCore
|
||||||
import SyncCore
|
import SyncCore
|
||||||
|
import EncryptionKeyVisualizationImpl
|
||||||
|
|
||||||
public func secretChatKeyImage(_ fingerprint: SecretChatKeyFingerprint, size: CGSize) -> UIImage? {
|
public func secretChatKeyImage(_ fingerprint: SecretChatKeyFingerprint, size: CGSize) -> UIImage? {
|
||||||
let keySignatureData = fingerprint.sha1.data()
|
let keySignatureData = fingerprint.sha1.data()
|
||||||
|
@ -7,10 +7,10 @@ swift_library(
|
|||||||
"Sources/**/*.swift",
|
"Sources/**/*.swift",
|
||||||
]),
|
]),
|
||||||
deps = [
|
deps = [
|
||||||
"//submodules/TelegramCore:TelegramCore#shared",
|
"//submodules/TelegramCore:TelegramCore",
|
||||||
"//submodules/SyncCore:SyncCore#shared",
|
"//submodules/SyncCore:SyncCore",
|
||||||
"//submodules/Postbox:Postbox#shared",
|
"//submodules/Postbox:Postbox",
|
||||||
"//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit#shared",
|
"//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit",
|
||||||
"//submodules/TelegramUIPreferences:TelegramUIPreferences",
|
"//submodules/TelegramUIPreferences:TelegramUIPreferences",
|
||||||
"//submodules/PersistentStringHash:PersistentStringHash",
|
"//submodules/PersistentStringHash:PersistentStringHash",
|
||||||
],
|
],
|
||||||
|
23
submodules/LegacyDataImport/BUILD
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")
|
||||||
|
|
||||||
|
swift_library(
|
||||||
|
name = "LegacyDataImport",
|
||||||
|
module_name = "LegacyDataImport",
|
||||||
|
srcs = glob([
|
||||||
|
"Sources/**/*.swift",
|
||||||
|
]),
|
||||||
|
deps = [
|
||||||
|
"//submodules/TelegramCore:TelegramCore",
|
||||||
|
"//submodules/SyncCore:SyncCore",
|
||||||
|
"//submodules/Postbox:Postbox",
|
||||||
|
"//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit",
|
||||||
|
"//submodules/TelegramNotices:TelegramNotices",
|
||||||
|
"//submodules/TelegramUIPreferences:TelegramUIPreferences",
|
||||||
|
"//submodules/RadialStatusNode:RadialStatusNode",
|
||||||
|
"//submodules/LegacyComponents:LegacyComponents",
|
||||||
|
"//submodules/LegacyDataImport/Impl:LegacyDataImportImpl",
|
||||||
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public",
|
||||||
|
],
|
||||||
|
)
|
22
submodules/LegacyDataImport/Impl/BUILD
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
objc_library(
|
||||||
|
name = "LegacyDataImportImpl",
|
||||||
|
enable_modules = True,
|
||||||
|
module_name = "LegacyDataImportImpl",
|
||||||
|
srcs = glob([
|
||||||
|
"Sources/**/*.m",
|
||||||
|
"Sources/**/*.h",
|
||||||
|
]),
|
||||||
|
hdrs = glob([
|
||||||
|
"PublicHeaders/**/*.h",
|
||||||
|
]),
|
||||||
|
includes = [
|
||||||
|
"PublicHeaders",
|
||||||
|
],
|
||||||
|
sdk_frameworks = [
|
||||||
|
"Foundation",
|
||||||
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public",
|
||||||
|
],
|
||||||
|
)
|
@ -0,0 +1,7 @@
|
|||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
#import <LegacyDataImportImpl/TGProxyItem.h>
|
||||||
|
#import <LegacyDataImportImpl/TGAutoDownloadPreferences.h>
|
||||||
|
#import <LegacyDataImportImpl/TGPresentationAutoNightPreferences.h>
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
#import "TGAutoDownloadPreferences.h"
|
#import <LegacyDataImportImpl/TGAutoDownloadPreferences.h>
|
||||||
|
|
||||||
@implementation TGAutoDownloadPreferences
|
@implementation TGAutoDownloadPreferences
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
#import "TGPresentationAutoNightPreferences.h"
|
#import <LegacyDataImportImpl/TGPresentationAutoNightPreferences.h>
|
||||||
|
|
||||||
@implementation TGPresentationAutoNightPreferences
|
@implementation TGPresentationAutoNightPreferences
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
#import "TGProxyItem.h"
|
#import <LegacyDataImportImpl/TGProxyItem.h>
|
||||||
|
|
||||||
static bool TGObjectCompare(id obj1, id obj2) {
|
static bool TGObjectCompare(id obj1, id obj2) {
|
||||||
if (obj1 == nil && obj2 == nil)
|
if (obj1 == nil && obj2 == nil)
|
@ -0,0 +1,250 @@
|
|||||||
|
#import <LegacyDataImportImpl/TGAutoDownloadPreferences.h>
|
||||||
|
|
||||||
|
@implementation TGAutoDownloadPreferences
|
||||||
|
|
||||||
|
- (instancetype)initWithCoder:(NSCoder *)aDecoder
|
||||||
|
{
|
||||||
|
self = [super init];
|
||||||
|
if (self != nil)
|
||||||
|
{
|
||||||
|
_disabled = [aDecoder decodeBoolForKey:@"disabled"];
|
||||||
|
_photos = [aDecoder decodeInt32ForKey:@"photos"];
|
||||||
|
_videos = [aDecoder decodeInt32ForKey:@"videos"];
|
||||||
|
_maximumVideoSize = [aDecoder decodeInt32ForKey:@"maxVideoSize"];
|
||||||
|
_documents = [aDecoder decodeInt32ForKey:@"documents"];
|
||||||
|
_maximumDocumentSize = [aDecoder decodeInt32ForKey:@"maxDocumentSize"];
|
||||||
|
_voiceMessages = [aDecoder decodeInt32ForKey:@"voiceMessages"];
|
||||||
|
_videoMessages = [aDecoder decodeInt32ForKey:@"videoMessages"];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)encodeWithCoder:(NSCoder *)aCoder
|
||||||
|
{
|
||||||
|
[aCoder encodeBool:_disabled forKey:@"disabled"];
|
||||||
|
[aCoder encodeInt32:_photos forKey:@"photos"];
|
||||||
|
[aCoder encodeInt32:_videos forKey:@"videos"];
|
||||||
|
[aCoder encodeInt32:_maximumVideoSize forKey:@"maxVideoSize"];
|
||||||
|
[aCoder encodeInt32:_documents forKey:@"documents"];
|
||||||
|
[aCoder encodeInt32:_maximumDocumentSize forKey:@"maxDocumentSize"];
|
||||||
|
[aCoder encodeInt32:_voiceMessages forKey:@"voiceMessages"];
|
||||||
|
[aCoder encodeInt32:_videoMessages forKey:@"videoMessages"];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (instancetype)defaultPreferences
|
||||||
|
{
|
||||||
|
TGAutoDownloadPreferences *preferences = [[TGAutoDownloadPreferences alloc] init];
|
||||||
|
preferences->_photos = TGAutoDownloadModeAll;
|
||||||
|
preferences->_videos = TGAutoDownloadModeNone;
|
||||||
|
preferences->_maximumVideoSize = 10;
|
||||||
|
preferences->_documents = TGAutoDownloadModeNone;
|
||||||
|
preferences->_maximumDocumentSize = 10;
|
||||||
|
preferences->_voiceMessages = TGAutoDownloadModeAll;
|
||||||
|
preferences->_videoMessages = TGAutoDownloadModeAll;
|
||||||
|
return preferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (instancetype)preferencesWithLegacyDownloadPrivatePhotos:(bool)privatePhotos groupPhotos:(bool)groupPhotos privateVoiceMessages:(bool)privateVoiceMessages groupVoiceMessages:(bool)groupVoiceMessages privateVideoMessages:(bool)privateVideoMessages groupVideoMessages:(bool)groupVideoMessages
|
||||||
|
{
|
||||||
|
TGAutoDownloadPreferences *preferences = [[TGAutoDownloadPreferences alloc] init];
|
||||||
|
|
||||||
|
if (privatePhotos)
|
||||||
|
preferences->_photos |= TGAutoDownloadModeAllPrivateChats;
|
||||||
|
if (groupPhotos)
|
||||||
|
preferences->_photos |= TGAutoDownloadModeAllGroups;
|
||||||
|
|
||||||
|
if (privateVoiceMessages)
|
||||||
|
preferences->_voiceMessages |= TGAutoDownloadModeAllPrivateChats;
|
||||||
|
if (groupVoiceMessages)
|
||||||
|
preferences->_voiceMessages |= TGAutoDownloadModeAllGroups;
|
||||||
|
|
||||||
|
if (privateVideoMessages)
|
||||||
|
preferences->_videoMessages |= TGAutoDownloadModeAllPrivateChats;
|
||||||
|
if (groupVideoMessages)
|
||||||
|
preferences->_videoMessages |= TGAutoDownloadModeAllGroups;
|
||||||
|
|
||||||
|
preferences->_maximumVideoSize = 10;
|
||||||
|
preferences->_maximumDocumentSize = 10;
|
||||||
|
|
||||||
|
return preferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)updateDisabled:(bool)disabled
|
||||||
|
{
|
||||||
|
TGAutoDownloadPreferences *preferences = [[TGAutoDownloadPreferences alloc] init];
|
||||||
|
preferences->_disabled = disabled;
|
||||||
|
preferences->_photos = _photos;
|
||||||
|
preferences->_videos = _videos;
|
||||||
|
preferences->_maximumVideoSize = _maximumVideoSize;
|
||||||
|
preferences->_documents = _documents;
|
||||||
|
preferences->_maximumDocumentSize = _maximumDocumentSize;
|
||||||
|
preferences->_voiceMessages = _voiceMessages;
|
||||||
|
preferences->_videoMessages = _videoMessages;
|
||||||
|
return preferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)updatePhotosMode:(TGAutoDownloadMode)mode
|
||||||
|
{
|
||||||
|
TGAutoDownloadPreferences *preferences = [[TGAutoDownloadPreferences alloc] init];
|
||||||
|
preferences->_photos = mode;
|
||||||
|
preferences->_videos = _videos;
|
||||||
|
preferences->_maximumVideoSize = _maximumVideoSize;
|
||||||
|
preferences->_documents = _documents;
|
||||||
|
preferences->_maximumDocumentSize = _maximumDocumentSize;
|
||||||
|
preferences->_voiceMessages = _voiceMessages;
|
||||||
|
preferences->_videoMessages = _videoMessages;
|
||||||
|
return preferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)updateVideosMode:(TGAutoDownloadMode)mode maximumSize:(int32_t)maximumSize
|
||||||
|
{
|
||||||
|
TGAutoDownloadPreferences *preferences = [[TGAutoDownloadPreferences alloc] init];
|
||||||
|
preferences->_photos = _photos;
|
||||||
|
preferences->_videos = mode;
|
||||||
|
preferences->_maximumVideoSize = maximumSize;
|
||||||
|
preferences->_documents = _documents;
|
||||||
|
preferences->_maximumDocumentSize = _maximumDocumentSize;
|
||||||
|
preferences->_voiceMessages = _voiceMessages;
|
||||||
|
preferences->_videoMessages = _videoMessages;
|
||||||
|
return preferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)updateDocumentsMode:(TGAutoDownloadMode)mode maximumSize:(int32_t)maximumSize
|
||||||
|
{
|
||||||
|
TGAutoDownloadPreferences *preferences = [[TGAutoDownloadPreferences alloc] init];
|
||||||
|
preferences->_photos = _photos;
|
||||||
|
preferences->_videos = _videos;
|
||||||
|
preferences->_maximumVideoSize = _maximumVideoSize;
|
||||||
|
preferences->_documents = mode;
|
||||||
|
preferences->_maximumDocumentSize = maximumSize;
|
||||||
|
preferences->_voiceMessages = _voiceMessages;
|
||||||
|
preferences->_videoMessages = _videoMessages;
|
||||||
|
return preferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)updateVoiceMessagesMode:(TGAutoDownloadMode)mode
|
||||||
|
{
|
||||||
|
TGAutoDownloadPreferences *preferences = [[TGAutoDownloadPreferences alloc] init];
|
||||||
|
preferences->_photos = _photos;
|
||||||
|
preferences->_videos = _videos;
|
||||||
|
preferences->_maximumVideoSize = _maximumVideoSize;
|
||||||
|
preferences->_documents = _documents;
|
||||||
|
preferences->_maximumDocumentSize = _maximumDocumentSize;
|
||||||
|
preferences->_voiceMessages = mode;
|
||||||
|
preferences->_videoMessages = _videoMessages;
|
||||||
|
return preferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)updateVideoMessagesMode:(TGAutoDownloadMode)mode
|
||||||
|
{
|
||||||
|
TGAutoDownloadPreferences *preferences = [[TGAutoDownloadPreferences alloc] init];
|
||||||
|
preferences->_photos = _photos;
|
||||||
|
preferences->_videos = _videos;
|
||||||
|
preferences->_maximumVideoSize = _maximumVideoSize;
|
||||||
|
preferences->_documents = _documents;
|
||||||
|
preferences->_maximumDocumentSize = _maximumDocumentSize;
|
||||||
|
preferences->_voiceMessages = _voiceMessages;
|
||||||
|
preferences->_videoMessages = mode;
|
||||||
|
return preferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (bool)shouldDownload:(TGAutoDownloadMode)mode inChat:(TGAutoDownloadChat)chat networkType:(TGNetworkType)networkType
|
||||||
|
{
|
||||||
|
bool isWiFi = networkType == TGNetworkTypeWiFi;
|
||||||
|
bool isCellular = !isWiFi && networkType != TGNetworkTypeNone;
|
||||||
|
|
||||||
|
bool shouldDownload = false;
|
||||||
|
switch (chat)
|
||||||
|
{
|
||||||
|
case TGAutoDownloadChatContact:
|
||||||
|
if (isCellular)
|
||||||
|
shouldDownload = (mode & TGAutoDownloadModeCellularContacts) != 0;
|
||||||
|
else if (isWiFi)
|
||||||
|
shouldDownload = (mode & TGAutoDownloadModeWifiContacts) != 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TGAutoDownloadChatOtherPrivateChat:
|
||||||
|
if (isCellular)
|
||||||
|
shouldDownload = (mode & TGAutoDownloadModeCellularPrivateChats) != 0;
|
||||||
|
else if (isWiFi)
|
||||||
|
shouldDownload = (mode & TGAutoDownloadModeWifiPrivateChats) != 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TGAutoDownloadChatGroup:
|
||||||
|
if (isCellular)
|
||||||
|
shouldDownload = (mode & TGAutoDownloadModeCellularGroups) != 0;
|
||||||
|
else if (isWiFi)
|
||||||
|
shouldDownload = (mode & TGAutoDownloadModeWifiGroups) != 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TGAutoDownloadChatChannel:
|
||||||
|
if (isCellular)
|
||||||
|
shouldDownload = (mode & TGAutoDownloadModeCellularChannels) != 0;
|
||||||
|
else if (isWiFi)
|
||||||
|
shouldDownload = (mode & TGAutoDownloadModeWifiChannels) != 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return shouldDownload;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (bool)shouldDownloadPhotoInChat:(TGAutoDownloadChat)chat networkType:(TGNetworkType)networkType
|
||||||
|
{
|
||||||
|
if (self.disabled)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return [TGAutoDownloadPreferences shouldDownload:_photos inChat:chat networkType:networkType];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (bool)shouldDownloadVideoInChat:(TGAutoDownloadChat)chat networkType:(TGNetworkType)networkType
|
||||||
|
{
|
||||||
|
if (self.disabled)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return [TGAutoDownloadPreferences shouldDownload:_videos inChat:chat networkType:networkType];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (bool)shouldDownloadDocumentInChat:(TGAutoDownloadChat)chat networkType:(TGNetworkType)networkType
|
||||||
|
{
|
||||||
|
if (self.disabled)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return [TGAutoDownloadPreferences shouldDownload:_documents inChat:chat networkType:networkType];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (bool)shouldDownloadVoiceMessageInChat:(TGAutoDownloadChat)chat networkType:(TGNetworkType)networkType
|
||||||
|
{
|
||||||
|
if (self.disabled)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return [TGAutoDownloadPreferences shouldDownload:_voiceMessages inChat:chat networkType:networkType];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (bool)shouldDownloadVideoMessageInChat:(TGAutoDownloadChat)chat networkType:(TGNetworkType)networkType
|
||||||
|
{
|
||||||
|
if (self.disabled)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return [TGAutoDownloadPreferences shouldDownload:_videoMessages inChat:chat networkType:networkType];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (bool)isDefaultPreferences
|
||||||
|
{
|
||||||
|
return [self isEqual:[TGAutoDownloadPreferences defaultPreferences]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)isEqual:(id)object
|
||||||
|
{
|
||||||
|
if (object == self)
|
||||||
|
return YES;
|
||||||
|
|
||||||
|
if (!object || ![object isKindOfClass:[self class]])
|
||||||
|
return NO;
|
||||||
|
|
||||||
|
TGAutoDownloadPreferences *preferences = (TGAutoDownloadPreferences *)object;
|
||||||
|
return preferences.photos == _photos && preferences.videos == _videos && preferences.documents == _documents && preferences.voiceMessages == _voiceMessages && preferences.videoMessages == _videoMessages && preferences.maximumVideoSize == _maximumVideoSize && preferences.maximumDocumentSize == _maximumDocumentSize && preferences.disabled == _disabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@ -0,0 +1,23 @@
|
|||||||
|
#import <LegacyDataImportImpl/TGPresentationAutoNightPreferences.h>
|
||||||
|
|
||||||
|
@implementation TGPresentationAutoNightPreferences
|
||||||
|
|
||||||
|
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
|
||||||
|
self = [super init];
|
||||||
|
if (self != nil) {
|
||||||
|
_mode = [aDecoder decodeInt32ForKey:@"m"];
|
||||||
|
_brightnessThreshold = [aDecoder decodeDoubleForKey:@"b"];
|
||||||
|
_scheduleStart = [aDecoder decodeInt32ForKey:@"ss"];
|
||||||
|
_scheduleEnd = [aDecoder decodeInt32ForKey:@"se"];
|
||||||
|
_latitude = [aDecoder decodeDoubleForKey:@"lat"];
|
||||||
|
_longitude = [aDecoder decodeDoubleForKey:@"lon"];
|
||||||
|
_cachedLocationName = [aDecoder decodeObjectForKey:@"loc"];
|
||||||
|
_preferredPalette = [aDecoder decodeInt32ForKey:@"p"];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)encodeWithCoder:(NSCoder *)aCoder {
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
73
submodules/LegacyDataImport/Impl/Sources/TGProxyItem.m
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
#import <LegacyDataImportImpl/TGProxyItem.h>
|
||||||
|
|
||||||
|
static bool TGObjectCompare(id obj1, id obj2) {
|
||||||
|
if (obj1 == nil && obj2 == nil)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return [obj1 isEqual:obj2];
|
||||||
|
}
|
||||||
|
|
||||||
|
@implementation TGProxyItem
|
||||||
|
|
||||||
|
- (instancetype)initWithServer:(NSString *)server port:(int16_t)port username:(NSString *)username password:(NSString *)password secret:(NSString *)secret
|
||||||
|
{
|
||||||
|
self = [super init];
|
||||||
|
if (self != nil)
|
||||||
|
{
|
||||||
|
_server = server;
|
||||||
|
_port = port;
|
||||||
|
_username = username;
|
||||||
|
_password = password;
|
||||||
|
_secret = secret;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)initWithCoder:(NSCoder *)aDecoder
|
||||||
|
{
|
||||||
|
return [self initWithServer:[aDecoder decodeObjectForKey:@"server"] port:(int16_t)[aDecoder decodeInt32ForKey:@"port"] username:[aDecoder decodeObjectForKey:@"user"] password:[aDecoder decodeObjectForKey:@"pass"] secret:[aDecoder decodeObjectForKey:@"secret"]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)encodeWithCoder:(NSCoder *)aCoder
|
||||||
|
{
|
||||||
|
[aCoder encodeObject:_server forKey:@"server"];
|
||||||
|
[aCoder encodeInt32:_port forKey:@"port"];
|
||||||
|
[aCoder encodeObject:_username forKey:@"user"];
|
||||||
|
[aCoder encodeObject:_password forKey:@"pass"];
|
||||||
|
[aCoder encodeObject:_secret forKey:@"secret"];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (bool)isMTProxy
|
||||||
|
{
|
||||||
|
return _secret.length > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)isEqual:(id)object
|
||||||
|
{
|
||||||
|
if (object == self)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (!object || ![object isKindOfClass:[self class]])
|
||||||
|
return false;
|
||||||
|
|
||||||
|
TGProxyItem *proxy = (TGProxyItem *)object;
|
||||||
|
|
||||||
|
if (![_server isEqualToString:proxy.server])
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (_port != proxy.port)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!TGObjectCompare(_username ?: @"", proxy.username ?: @""))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!TGObjectCompare(_password ?: @"", proxy.password ?: @""))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!TGObjectCompare(_secret ?: @"", proxy.secret ?: @""))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@ -1,22 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
|
||||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundleName</key>
|
|
||||||
<string>$(PRODUCT_NAME)</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>FMWK</string>
|
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>1.0</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
@ -1,13 +0,0 @@
|
|||||||
#import <UIKit/UIKit.h>
|
|
||||||
|
|
||||||
//! Project version number for LegacyDataImport.
|
|
||||||
FOUNDATION_EXPORT double LegacyDataImportVersionNumber;
|
|
||||||
|
|
||||||
//! Project version string for LegacyDataImport.
|
|
||||||
FOUNDATION_EXPORT const unsigned char LegacyDataImportVersionString[];
|
|
||||||
|
|
||||||
#import <LegacyDataImport/TGProxyItem.h>
|
|
||||||
#import <LegacyDataImport/TGAutoDownloadPreferences.h>
|
|
||||||
#import <LegacyDataImport/TGPresentationAutoNightPreferences.h>
|
|
||||||
|
|
||||||
|
|
@ -4,11 +4,8 @@ import TelegramCore
|
|||||||
import SyncCore
|
import SyncCore
|
||||||
import SwiftSignalKit
|
import SwiftSignalKit
|
||||||
import Postbox
|
import Postbox
|
||||||
#if BUCK
|
|
||||||
import MtProtoKit
|
import MtProtoKit
|
||||||
#else
|
import LegacyDataImportImpl
|
||||||
import MtProtoKitDynamic
|
|
||||||
#endif
|
|
||||||
|
|
||||||
public enum AccountImportError: Error {
|
public enum AccountImportError: Error {
|
||||||
case generic
|
case generic
|
||||||
|
@ -4,14 +4,11 @@ import TelegramCore
|
|||||||
import SyncCore
|
import SyncCore
|
||||||
import SwiftSignalKit
|
import SwiftSignalKit
|
||||||
import Postbox
|
import Postbox
|
||||||
#if BUCK
|
|
||||||
import MtProtoKit
|
import MtProtoKit
|
||||||
#else
|
|
||||||
import MtProtoKitDynamic
|
|
||||||
#endif
|
|
||||||
import TelegramUIPreferences
|
import TelegramUIPreferences
|
||||||
import LegacyComponents
|
import LegacyComponents
|
||||||
import TelegramNotices
|
import TelegramNotices
|
||||||
|
import LegacyDataImportImpl
|
||||||
|
|
||||||
@objc(TGPresentationState) private final class TGPresentationState: NSObject, NSCoding {
|
@objc(TGPresentationState) private final class TGPresentationState: NSObject, NSCoding {
|
||||||
let pallete: Int32
|
let pallete: Int32
|
||||||
|
29
submodules/LegacyMediaPickerUI/BUILD
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")
|
||||||
|
|
||||||
|
swift_library(
|
||||||
|
name = "LegacyMediaPickerUI",
|
||||||
|
module_name = "LegacyMediaPickerUI",
|
||||||
|
srcs = glob([
|
||||||
|
"Sources/**/*.swift",
|
||||||
|
]),
|
||||||
|
deps = [
|
||||||
|
"//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit",
|
||||||
|
"//submodules/AsyncDisplayKit:AsyncDisplayKit",
|
||||||
|
"//submodules/Display:Display",
|
||||||
|
"//submodules/Postbox:Postbox",
|
||||||
|
"//submodules/TelegramCore:TelegramCore",
|
||||||
|
"//submodules/SyncCore:SyncCore",
|
||||||
|
"//submodules/TelegramPresentationData:TelegramPresentationData",
|
||||||
|
"//submodules/AccountContext:AccountContext",
|
||||||
|
"//submodules/LegacyComponents:LegacyComponents",
|
||||||
|
"//submodules/LegacyUI:LegacyUI",
|
||||||
|
"//submodules/MimeTypes:MimeTypes",
|
||||||
|
"//submodules/LocalMediaResources:LocalMediaResources",
|
||||||
|
"//submodules/SearchPeerMembers:SearchPeerMembers",
|
||||||
|
"//submodules/SaveToCameraRoll:SaveToCameraRoll",
|
||||||
|
"//submodules/LegacyMediaPickerUI/LegacyImageProcessors:LegacyImageProcessors",
|
||||||
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public",
|
||||||
|
],
|
||||||
|
)
|
@ -1,22 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
|
||||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundleName</key>
|
|
||||||
<string>$(PRODUCT_NAME)</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>FMWK</string>
|
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>1.0</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
26
submodules/LegacyMediaPickerUI/LegacyImageProcessors/BUILD
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
|
||||||
|
objc_library(
|
||||||
|
name = "LegacyImageProcessors",
|
||||||
|
enable_modules = True,
|
||||||
|
module_name = "LegacyImageProcessors",
|
||||||
|
srcs = glob([
|
||||||
|
"Sources/**/*.m",
|
||||||
|
"Sources/**/*.h",
|
||||||
|
]),
|
||||||
|
hdrs = glob([
|
||||||
|
"PublicHeaders/**/*.h",
|
||||||
|
]),
|
||||||
|
includes = [
|
||||||
|
"PublicHeaders",
|
||||||
|
],
|
||||||
|
deps = [
|
||||||
|
"//submodules/LegacyComponents:LegacyComponents",
|
||||||
|
],
|
||||||
|
sdk_frameworks = [
|
||||||
|
"Foundation",
|
||||||
|
"UIKit",
|
||||||
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public",
|
||||||
|
],
|
||||||
|
)
|
@ -1,4 +1,4 @@
|
|||||||
#import "LegacyImageProcessors.h"
|
#import <LegacyImageProcessors/LegacyImageProcessors.h>
|
||||||
|
|
||||||
#import <LegacyComponents/LegacyComponents.h>
|
#import <LegacyComponents/LegacyComponents.h>
|
||||||
|
|
@ -1,19 +0,0 @@
|
|||||||
//
|
|
||||||
// LegacyMediaPickerUI.h
|
|
||||||
// LegacyMediaPickerUI
|
|
||||||
//
|
|
||||||
// Created by Peter on 8/15/19.
|
|
||||||
// Copyright © 2019 Telegram Messenger LLP. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
|
||||||
|
|
||||||
//! Project version number for LegacyMediaPickerUI.
|
|
||||||
FOUNDATION_EXPORT double LegacyMediaPickerUIVersionNumber;
|
|
||||||
|
|
||||||
//! Project version string for LegacyMediaPickerUI.
|
|
||||||
FOUNDATION_EXPORT const unsigned char LegacyMediaPickerUIVersionString[];
|
|
||||||
|
|
||||||
#import <LegacyMediaPickerUI/LegacyImageProcessors.h>
|
|
||||||
|
|
||||||
|
|
25
submodules/LegacyUI/BUILD
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")
|
||||||
|
|
||||||
|
swift_library(
|
||||||
|
name = "LegacyUI",
|
||||||
|
module_name = "LegacyUI",
|
||||||
|
srcs = glob([
|
||||||
|
"Sources/**/*.swift",
|
||||||
|
]),
|
||||||
|
deps = [
|
||||||
|
"//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit",
|
||||||
|
"//submodules/Postbox:Postbox",
|
||||||
|
"//submodules/TelegramCore:TelegramCore",
|
||||||
|
"//submodules/SyncCore:SyncCore",
|
||||||
|
"//submodules/AsyncDisplayKit:AsyncDisplayKit",
|
||||||
|
"//submodules/Display:Display",
|
||||||
|
"//submodules/AccountContext:AccountContext",
|
||||||
|
"//submodules/TelegramAudio:TelegramAudio",
|
||||||
|
"//submodules/DeviceAccess:DeviceAccess",
|
||||||
|
"//submodules/LegacyComponents:LegacyComponents",
|
||||||
|
"//submodules/StickerResources:StickerResources",
|
||||||
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public",
|
||||||
|
],
|
||||||
|
)
|
@ -1,22 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
|
||||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundleName</key>
|
|
||||||
<string>$(PRODUCT_NAME)</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>FMWK</string>
|
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>1.0</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
@ -1,9 +1,5 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
#if BUCK
|
|
||||||
import MtProtoKit
|
import MtProtoKit
|
||||||
#else
|
|
||||||
import MtProtoKitDynamic
|
|
||||||
#endif
|
|
||||||
|
|
||||||
import LegacyComponents
|
import LegacyComponents
|
||||||
|
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
//
|
|
||||||
// LegacyUI.h
|
|
||||||
// LegacyUI
|
|
||||||
//
|
|
||||||
// Created by Peter on 8/12/19.
|
|
||||||
// Copyright © 2019 Telegram Messenger LLP. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
|
||||||
|
|
||||||
//! Project version number for LegacyUI.
|
|
||||||
FOUNDATION_EXPORT double LegacyUIVersionNumber;
|
|
||||||
|
|
||||||
//! Project version string for LegacyUI.
|
|
||||||
FOUNDATION_EXPORT const unsigned char LegacyUIVersionString[];
|
|
||||||
|
|
||||||
// In this header, you should import all the public headers of your framework using statements like #import <LegacyUI/PublicHeader.h>
|
|
||||||
|
|
||||||
|
|
@ -3,11 +3,7 @@ import UIKit
|
|||||||
import TelegramCore
|
import TelegramCore
|
||||||
import SyncCore
|
import SyncCore
|
||||||
import SwiftSignalKit
|
import SwiftSignalKit
|
||||||
#if BUCK
|
|
||||||
import MtProtoKit
|
import MtProtoKit
|
||||||
#else
|
|
||||||
import MtProtoKitDynamic
|
|
||||||
#endif
|
|
||||||
import Display
|
import Display
|
||||||
import TelegramPresentationData
|
import TelegramPresentationData
|
||||||
import DeviceAccess
|
import DeviceAccess
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
#import <UIKit/UIKit.h>
|
|
||||||
|
|
||||||
//! Project version number for MimeTypes.
|
|
||||||
FOUNDATION_EXPORT double MimeTypesVersionNumber;
|
|
||||||
|
|
||||||
//! Project version string for MimeTypes.
|
|
||||||
FOUNDATION_EXPORT const unsigned char MimeTypesVersionString[];
|
|
||||||
|
|
||||||
#import <MimeTypes/TGMimeTypeMap.h>
|
|
||||||
|
|
||||||
|
|
5
submodules/MimeTypes/PublicHeaders/MimeTypes/MimeTypes.h
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
#import <MimeTypes/TGMimeTypeMap.h>
|
||||||
|
|
||||||
|
|
60
submodules/MtProtoKit/PublicHeaders/MtProtoKit/MtProtoKit.h
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
#import <MtProtoKit/MTDatacenterAuthInfo.h>
|
||||||
|
#import <MtProtoKit/AFHTTPRequestOperation.h>
|
||||||
|
#import <MtProtoKit/AFURLConnectionOperation.h>
|
||||||
|
#import <MtProtoKit/MTApiEnvironment.h>
|
||||||
|
#import <MtProtoKit/MTAtomic.h>
|
||||||
|
#import <MtProtoKit/MTBackupAddressSignals.h>
|
||||||
|
#import <MtProtoKit/MTBag.h>
|
||||||
|
#import <MtProtoKit/MTContext.h>
|
||||||
|
#import <MtProtoKit/MTDatacenterAddress.h>
|
||||||
|
#import <MtProtoKit/MTDatacenterAddressListData.h>
|
||||||
|
#import <MtProtoKit/MTDatacenterAddressSet.h>
|
||||||
|
#import <MtProtoKit/MTDatacenterAuthAction.h>
|
||||||
|
#import <MtProtoKit/MTDatacenterAuthMessageService.h>
|
||||||
|
#import <MtProtoKit/MTDatacenterSaltInfo.h>
|
||||||
|
#import <MtProtoKit/MTDatacenterTransferAuthAction.h>
|
||||||
|
#import <MtProtoKit/MTDatacenterVerificationData.h>
|
||||||
|
#import <MtProtoKit/MTDisposable.h>
|
||||||
|
#import <MtProtoKit/MTDropResponseContext.h>
|
||||||
|
#import <MtProtoKit/MTEncryption.h>
|
||||||
|
#import <MtProtoKit/MTExportedAuthorizationData.h>
|
||||||
|
#import <MtProtoKit/MTFileBasedKeychain.h>
|
||||||
|
#import <MtProtoKit/MTGzip.h>
|
||||||
|
#import <MtProtoKit/MTHttpRequestOperation.h>
|
||||||
|
#import <MtProtoKit/MTIncomingMessage.h>
|
||||||
|
#import <MtProtoKit/MTInputStream.h>
|
||||||
|
#import <MtProtoKit/MTInternalId.h>
|
||||||
|
#import <MtProtoKit/MTKeychain.h>
|
||||||
|
#import <MtProtoKit/MTLogging.h>
|
||||||
|
#import <MtProtoKit/MTMessageEncryptionKey.h>
|
||||||
|
#import <MtProtoKit/MTMessageService.h>
|
||||||
|
#import <MtProtoKit/MTMessageTransaction.h>
|
||||||
|
#import <MtProtoKit/MTNetworkAvailability.h>
|
||||||
|
#import <MtProtoKit/MTNetworkUsageCalculationInfo.h>
|
||||||
|
#import <MtProtoKit/MTNetworkUsageManager.h>
|
||||||
|
#import <MtProtoKit/MTOutgoingMessage.h>
|
||||||
|
#import <MtProtoKit/MTOutputStream.h>
|
||||||
|
#import <MtProtoKit/MTPreparedMessage.h>
|
||||||
|
#import <MtProtoKit/MTProto.h>
|
||||||
|
#import <MtProtoKit/MTProxyConnectivity.h>
|
||||||
|
#import <MtProtoKit/MTQueue.h>
|
||||||
|
#import <MtProtoKit/MTRequest.h>
|
||||||
|
#import <MtProtoKit/MTRequestContext.h>
|
||||||
|
#import <MtProtoKit/MTRequestErrorContext.h>
|
||||||
|
#import <MtProtoKit/MTRequestMessageService.h>
|
||||||
|
#import <MtProtoKit/MTResendMessageService.h>
|
||||||
|
#import <MtProtoKit/MTRpcError.h>
|
||||||
|
#import <MtProtoKit/MTSerialization.h>
|
||||||
|
#import <MtProtoKit/MTSessionInfo.h>
|
||||||
|
#import <MtProtoKit/MTSignal.h>
|
||||||
|
#import <MtProtoKit/MTSubscriber.h>
|
||||||
|
#import <MtProtoKit/MTTcpTransport.h>
|
||||||
|
#import <MtProtoKit/MTTime.h>
|
||||||
|
#import <MtProtoKit/MTTimeFixContext.h>
|
||||||
|
#import <MtProtoKit/MTTimer.h>
|
||||||
|
#import <MtProtoKit/MTTimeSyncMessageService.h>
|
||||||
|
#import <MtProtoKit/MTTransport.h>
|
||||||
|
#import <MtProtoKit/MTTransportScheme.h>
|
||||||
|
#import <MtProtoKit/MTTransportTransaction.h>
|
@ -162,7 +162,7 @@ void MyAesIgeDecrypt(const void *inBytes, int length, void *outBytes, const void
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MyAesCbcDecrypt(const void *inBytes, int length, void *outBytes, const void *key, int keyLength, void *iv) {
|
void MyAesCbcDecrypt(const void *inBytes, int length, void *outBytes, const void *key, int keyLength, void *iv) {
|
||||||
int outLength = 0;
|
size_t outLength = 0;
|
||||||
CCCryptorStatus status = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, 0, key, keyLength, iv, inBytes, length, outBytes, length, &outLength);
|
CCCryptorStatus status = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, 0, key, keyLength, iv, inBytes, length, outBytes, length, &outLength);
|
||||||
assert(status == kCCSuccess);
|
assert(status == kCCSuccess);
|
||||||
assert(outLength == length);
|
assert(outLength == length);
|
||||||
|
@ -769,7 +769,7 @@ static NSData *decrypt_TL_data(id<EncryptionProvider> provider, unsigned char bu
|
|||||||
if ([context modExpInto:y a:x b:rsaKeyE mod:rsaKeyN]) {
|
if ([context modExpInto:y a:x b:rsaKeyE mod:rsaKeyN]) {
|
||||||
NSData *yBytes = [context getBin:y];
|
NSData *yBytes = [context getBin:y];
|
||||||
unsigned l = 256 - (unsigned)yBytes.length;
|
unsigned l = 256 - (unsigned)yBytes.length;
|
||||||
memset(bytes, 0, l);
|
assert(l >= 0);
|
||||||
|
|
||||||
[yBytes getBytes:bytes + l length:256 - l];
|
[yBytes getBytes:bytes + l length:256 - l];
|
||||||
|
|
||||||
@ -781,7 +781,7 @@ static NSData *decrypt_TL_data(id<EncryptionProvider> provider, unsigned char bu
|
|||||||
NSData *keyBytes = [[NSData alloc] initWithBytes:bytes length:32];
|
NSData *keyBytes = [[NSData alloc] initWithBytes:bytes length:32];
|
||||||
|
|
||||||
NSMutableData *decryptedBytes = [[NSMutableData alloc] initWithLength:encryptedBytes.length];
|
NSMutableData *decryptedBytes = [[NSMutableData alloc] initWithLength:encryptedBytes.length];
|
||||||
MyAesCbcDecrypt(encryptedBytes.bytes, encryptedBytes.length, decryptedBytes.mutableBytes, keyBytes.bytes, keyBytes.length, iv.mutableBytes);
|
MyAesCbcDecrypt(encryptedBytes.bytes, (int)encryptedBytes.length, decryptedBytes.mutableBytes, keyBytes.bytes, (int)keyBytes.length, iv.mutableBytes);
|
||||||
|
|
||||||
if (decryptedBytes == nil) {
|
if (decryptedBytes == nil) {
|
||||||
return nil;
|
return nil;
|
||||||
|
@ -1,14 +1,26 @@
|
|||||||
|
|
||||||
objc_library(
|
objc_library(
|
||||||
name = "OpenSSLEncryptionProvider",
|
name = "OpenSSLEncryptionProvider",
|
||||||
|
enable_modules = True,
|
||||||
|
module_name = "OpenSSLEncryptionProvider",
|
||||||
srcs = glob([
|
srcs = glob([
|
||||||
"Sources/**/*.m",
|
"Sources/**/*.m",
|
||||||
]),
|
|
||||||
hdrs = glob([
|
|
||||||
"Sources/**/*.h",
|
"Sources/**/*.h",
|
||||||
]),
|
]),
|
||||||
|
hdrs = glob([
|
||||||
|
"PublicHeaders/**/*.h",
|
||||||
|
]),
|
||||||
|
includes = [
|
||||||
|
"PublicHeaders",
|
||||||
|
],
|
||||||
deps = [
|
deps = [
|
||||||
"//submodules/EncryptionProvider:EncryptionProvider",
|
"//submodules/EncryptionProvider:EncryptionProvider",
|
||||||
"//submodules/openssl:openssl",
|
"//submodules/openssl:openssl",
|
||||||
],
|
],
|
||||||
visibility = ["//visibility:public"],
|
sdk_frameworks = [
|
||||||
|
"Foundation",
|
||||||
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public",
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#import "OpenSSLEncryptionProvider.h"
|
#import <OpenSSLEncryptionProvider/OpenSSLEncryptionProvider.h>
|
||||||
|
|
||||||
#import <openssl/bn.h>
|
#import <openssl/bn.h>
|
||||||
#import <openssl/rsa.h>
|
#import <openssl/rsa.h>
|
||||||
|
31
submodules/OpusBinding/BUILD
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
objc_library(
|
||||||
|
name = "OpusBinding",
|
||||||
|
enable_modules = True,
|
||||||
|
module_name = "OpusBinding",
|
||||||
|
srcs = glob([
|
||||||
|
"Sources/**/*.m",
|
||||||
|
"Sources/**/*.c",
|
||||||
|
"Sources/**/*.h",
|
||||||
|
]),
|
||||||
|
hdrs = glob([
|
||||||
|
"PublicHeaders/**/*.h",
|
||||||
|
]),
|
||||||
|
includes = [
|
||||||
|
"PublicHeaders",
|
||||||
|
],
|
||||||
|
copts = [
|
||||||
|
"-Isubmodules/OpusBinding/Sources",
|
||||||
|
"-Isubmodules/OpusBinding/Sources/opusfile",
|
||||||
|
"-Isubmodules/OpusBinding/PublicHeaders/OpusBinding",
|
||||||
|
],
|
||||||
|
deps = [
|
||||||
|
"//submodules/Opus:opus",
|
||||||
|
],
|
||||||
|
sdk_frameworks = [
|
||||||
|
"Foundation",
|
||||||
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public",
|
||||||
|
],
|
||||||
|
)
|
@ -0,0 +1,5 @@
|
|||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
#import <OpusBinding/OggOpusReader.h>
|
||||||
|
#import <OpusBinding/TGDataItem.h>
|
||||||
|
#import <OpusBinding/TGOggOpusWriter.h>
|