forked from TelegramMessenger/Telegram-iOS
-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fixes fix localeWithStrings globally (#30) Fix badge on zoomed devices. closes #9 Hide channel bottom panel closes #27 Another attempt to fix badge on some Zoomed devices Force System Share sheet tg://sg/debug fixes for device badge New Crowdin updates (#34) * New translations sglocalizable.strings (Chinese Traditional) * New translations sglocalizable.strings (Chinese Simplified) * New translations sglocalizable.strings (Chinese Traditional) Fix input panel hidden on selection (#31) * added if check for selectionState != nil * same order of subnodes Revert "Fix input panel hidden on selection (#31)" This reverts commit e8a8bb1. Fix input panel for channels Closes #37 Quickly share links with system's share menu force tabbar when editing increase height for correct animation New translations sglocalizable.strings (Ukrainian) (#38) Hide Post Story button Fix 10.15.1 Fix archive option for long-tap Enable in-app Safari Disable some unsupported purchases disableDeleteChatSwipeOption + refactor restart alert Hide bot in suggestions list Fix merge v11.0 Fix exceptions for safari webview controller New Crowdin updates (#47) * New translations sglocalizable.strings (Romanian) * New translations sglocalizable.strings (French) * New translations sglocalizable.strings (Spanish) * New translations sglocalizable.strings (Afrikaans) * New translations sglocalizable.strings (Arabic) * New translations sglocalizable.strings (Catalan) * New translations sglocalizable.strings (Czech) * New translations sglocalizable.strings (Danish) * New translations sglocalizable.strings (German) * New translations sglocalizable.strings (Greek) * New translations sglocalizable.strings (Finnish) * New translations sglocalizable.strings (Hebrew) * New translations sglocalizable.strings (Hungarian) * New translations sglocalizable.strings (Italian) * New translations sglocalizable.strings (Japanese) * New translations sglocalizable.strings (Korean) * New translations sglocalizable.strings (Dutch) * New translations sglocalizable.strings (Norwegian) * New translations sglocalizable.strings (Polish) * New translations sglocalizable.strings (Portuguese) * New translations sglocalizable.strings (Serbian (Cyrillic)) * New translations sglocalizable.strings (Swedish) * New translations sglocalizable.strings (Turkish) * New translations sglocalizable.strings (Vietnamese) * New translations sglocalizable.strings (Indonesian) * New translations sglocalizable.strings (Hindi) * New translations sglocalizable.strings (Uzbek) New Crowdin updates (#49) * New translations sglocalizable.strings (Arabic) * New translations sglocalizable.strings (Arabic) New translations sglocalizable.strings (Russian) (#51) Call confirmation WIP Settings search Settings Search Localize placeholder Update AccountUtils.swift mark mutual contact Align back context action to left New Crowdin updates (#54) * New translations sglocalizable.strings (Chinese Simplified) * New translations sglocalizable.strings (Chinese Traditional) * New translations sglocalizable.strings (Ukrainian) Independent Playground app for simulator New translations sglocalizable.strings (Ukrainian) (#55) Playground UIKit base and controllers Inject SwiftUI view with overflow to AsyncDisplayKit Launch Playgound project on simulator Create .swiftformat Move Playground to example Update .swiftformat Init SwiftUIViewController wip New translations sglocalizable.strings (Chinese Traditional) (#57) Xcode 16 fixes Fix New translations sglocalizable.strings (Italian) (#59) New translations sglocalizable.strings (Chinese Simplified) (#63) Force disable CallKit integration due to missing NSE Entitlement Fix merge Fix whole chat translator Sweetpad config Bump version 11.3.1 fixes Mutual contact placement fix Disable Video PIP swipe Update versions.json Fix PIP crash
- Loading branch information
1 parent
9a46522
commit 84ba543
Showing
660 changed files
with
32,686 additions
and
1,271 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,8 @@ | ||
name: CI | ||
|
||
on: | ||
push: | ||
branches: [ master ] | ||
# push: | ||
# branches: [ master ] | ||
|
||
workflow_dispatch: | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"sweetpad.build.xcodeWorkspacePath": "Telegram/Swiftgram.xcodeproj/project.xcworkspace" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,16 @@ | ||
# Swiftgram | ||
|
||
Supercharged Telegram fork for iOS | ||
|
||
[<img src="https://developer.apple.com/assets/elements/badges/download-on-the-app-store.svg" height="50">](https://apps.apple.com/app/apple-store/id6471879502?pt=126511626&ct=gh&mt=8) | ||
|
||
- Download: [App Store](https://apps.apple.com/app/apple-store/id6471879502?pt=126511626&ct=gh&mt=8) | ||
- Telegram channel: https://t.me/swiftgram | ||
- Telegram chat: https://t.me/swiftgramchat | ||
- TestFlight beta, local chats, translations and other [@SwiftgramLinks](https://t.me/s/SwiftgramLinks) | ||
|
||
Swiftgram's compilation steps are the same as for the official app. Below you'll find a complete compilation guide based on the official app. | ||
|
||
# Telegram iOS Source Code Compilation Guide | ||
|
||
We welcome all developers to use our API and source code to create applications on our platform. | ||
|
@@ -16,7 +29,7 @@ There are several things we require from **all developers** for the moment. | |
## Get the Code | ||
|
||
``` | ||
git clone --recursive -j8 https://github.com/TelegramMessenger/Telegram-iOS.git | ||
git clone --recursive -j8 https://github.com/Swiftgram/Telegram-iOS.git | ||
``` | ||
|
||
## Setup Xcode | ||
|
@@ -29,7 +42,7 @@ Install Xcode (directly from https://developer.apple.com/download/applications o | |
``` | ||
openssl rand -hex 8 | ||
``` | ||
2. Create a new Xcode project. Use `Telegram` as the Product Name. Use `org.{identifier from step 1}` as the Organization Identifier. | ||
2. Create a new Xcode project. Use `Swiftgram` as the Product Name. Use `org.{identifier from step 1}` as the Organization Identifier. | ||
3. Open `Keychain Access` and navigate to `Certificates`. Locate `Apple Development: [email protected] (XXXXXXXXXX)` and double tap the certificate. Under `Details`, locate `Organizational Unit`. This is the Team ID. | ||
4. Edit `build-system/template_minimal_development_configuration.json`. Use data from the previous steps. | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
filegroup( | ||
name = "AppleStyleFolders", | ||
srcs = glob([ | ||
"Sources/**/*.swift", | ||
]), | ||
visibility = [ | ||
"//visibility:public", | ||
], | ||
) |
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
filegroup( | ||
name = "ChatControllerImplExtension", | ||
srcs = glob([ | ||
"Sources/**/*.swift", | ||
]), | ||
visibility = [ | ||
"//visibility:public", | ||
], | ||
) |
225 changes: 225 additions & 0 deletions
225
Swiftgram/ChatControllerImplExtension/Sources/ChatControllerImplExtension.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,225 @@ | ||
import SGSimpleSettings | ||
import Foundation | ||
import UIKit | ||
import Postbox | ||
import SwiftSignalKit | ||
import Display | ||
import AsyncDisplayKit | ||
import TelegramCore | ||
import SafariServices | ||
import MobileCoreServices | ||
import Intents | ||
import LegacyComponents | ||
import TelegramPresentationData | ||
import TelegramUIPreferences | ||
import DeviceAccess | ||
import TextFormat | ||
import TelegramBaseController | ||
import AccountContext | ||
import TelegramStringFormatting | ||
import OverlayStatusController | ||
import DeviceLocationManager | ||
import ShareController | ||
import UrlEscaping | ||
import ContextUI | ||
import ComposePollUI | ||
import AlertUI | ||
import PresentationDataUtils | ||
import UndoUI | ||
import TelegramCallsUI | ||
import TelegramNotices | ||
import GameUI | ||
import ScreenCaptureDetection | ||
import GalleryUI | ||
import OpenInExternalAppUI | ||
import LegacyUI | ||
import InstantPageUI | ||
import LocationUI | ||
import BotPaymentsUI | ||
import DeleteChatPeerActionSheetItem | ||
import HashtagSearchUI | ||
import LegacyMediaPickerUI | ||
import Emoji | ||
import PeerAvatarGalleryUI | ||
import PeerInfoUI | ||
import RaiseToListen | ||
import UrlHandling | ||
import AvatarNode | ||
import AppBundle | ||
import LocalizedPeerData | ||
import PhoneNumberFormat | ||
import SettingsUI | ||
import UrlWhitelist | ||
import TelegramIntents | ||
import TooltipUI | ||
import StatisticsUI | ||
import MediaResources | ||
import GalleryData | ||
import ChatInterfaceState | ||
import InviteLinksUI | ||
import Markdown | ||
import TelegramPermissionsUI | ||
import Speak | ||
import TranslateUI | ||
import UniversalMediaPlayer | ||
import WallpaperBackgroundNode | ||
import ChatListUI | ||
import CalendarMessageScreen | ||
import ReactionSelectionNode | ||
import ReactionListContextMenuContent | ||
import AttachmentUI | ||
import AttachmentTextInputPanelNode | ||
import MediaPickerUI | ||
import ChatPresentationInterfaceState | ||
import Pasteboard | ||
import ChatSendMessageActionUI | ||
import ChatTextLinkEditUI | ||
import WebUI | ||
import PremiumUI | ||
import ImageTransparency | ||
import StickerPackPreviewUI | ||
import TextNodeWithEntities | ||
import EntityKeyboard | ||
import ChatTitleView | ||
import EmojiStatusComponent | ||
import ChatTimerScreen | ||
import MediaPasteboardUI | ||
import ChatListHeaderComponent | ||
import ChatControllerInteraction | ||
import FeaturedStickersScreen | ||
import ChatEntityKeyboardInputNode | ||
import StorageUsageScreen | ||
import AvatarEditorScreen | ||
import ChatScheduleTimeController | ||
import ICloudResources | ||
import StoryContainerScreen | ||
import MoreHeaderButton | ||
import VolumeButtons | ||
import ChatAvatarNavigationNode | ||
import ChatContextQuery | ||
import PeerReportScreen | ||
import PeerSelectionController | ||
import SaveToCameraRoll | ||
import ChatMessageDateAndStatusNode | ||
import ReplyAccessoryPanelNode | ||
import TextSelectionNode | ||
import ChatMessagePollBubbleContentNode | ||
import ChatMessageItem | ||
import ChatMessageItemImpl | ||
import ChatMessageItemView | ||
import ChatMessageItemCommon | ||
import ChatMessageAnimatedStickerItemNode | ||
import ChatMessageBubbleItemNode | ||
import ChatNavigationButton | ||
import WebsiteType | ||
import ChatQrCodeScreen | ||
import PeerInfoScreen | ||
import MediaEditorScreen | ||
import WallpaperGalleryScreen | ||
import WallpaperGridScreen | ||
import VideoMessageCameraScreen | ||
import TopMessageReactions | ||
import AudioWaveform | ||
import PeerNameColorScreen | ||
import ChatEmptyNode | ||
import ChatMediaInputStickerGridItem | ||
import AdsInfoScreen | ||
|
||
extension ChatControllerImpl { | ||
|
||
func forwardMessagesToCloud(messageIds: [MessageId], removeNames: Bool, openCloud: Bool, resetCurrent: Bool = false) { | ||
let _ = (self.context.engine.data.get(EngineDataMap( | ||
messageIds.map(TelegramEngine.EngineData.Item.Messages.Message.init) | ||
)) | ||
|> deliverOnMainQueue).startStandalone(next: { [weak self] messages in | ||
guard let strongSelf = self else { | ||
return | ||
} | ||
|
||
if resetCurrent { | ||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: true, { $0.updatedInterfaceState({ $0.withUpdatedForwardMessageIds(nil).withUpdatedForwardOptionsState(nil).withoutSelectionState() }) }) | ||
} | ||
|
||
let sortedMessages = messages.values.compactMap { $0?._asMessage() }.sorted { lhs, rhs in | ||
return lhs.id < rhs.id | ||
} | ||
|
||
var attributes: [MessageAttribute] = [] | ||
if removeNames { | ||
attributes.append(ForwardOptionsMessageAttribute(hideNames: true, hideCaptions: false)) | ||
} | ||
|
||
if !openCloud { | ||
Queue.mainQueue().after(0.88) { | ||
strongSelf.chatDisplayNode.hapticFeedback.success() | ||
} | ||
|
||
let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 } | ||
strongSelf.present(UndoOverlayController(presentationData: presentationData, content: .forward(savedMessages: true, text: messages.count == 1 ? presentationData.strings.Conversation_ForwardTooltip_SavedMessages_One : presentationData.strings.Conversation_ForwardTooltip_SavedMessages_Many), elevatedLayout: false, animateInAsReplacement: true, action: { [weak self] value in | ||
if case .info = value, let strongSelf = self { | ||
let _ = (strongSelf.context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: strongSelf.context.account.peerId)) | ||
|> deliverOnMainQueue).startStandalone(next: { peer in | ||
guard let strongSelf = self, let peer = peer, let navigationController = strongSelf.effectiveNavigationController else { | ||
return | ||
} | ||
|
||
strongSelf.context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: strongSelf.context, chatLocation: .peer(peer), keepStack: .always, purposefulAction: {}, peekData: nil)) | ||
}) | ||
return true | ||
} | ||
return false | ||
}), in: .current) | ||
} | ||
|
||
let _ = (enqueueMessages(account: strongSelf.context.account, peerId: strongSelf.context.account.peerId, messages: sortedMessages.map { message -> EnqueueMessage in | ||
return .forward(source: message.id, threadId: nil, grouping: .auto, attributes: attributes, correlationId: nil) | ||
}) | ||
|> deliverOnMainQueue).startStandalone(next: { messageIds in | ||
guard openCloud else { | ||
return | ||
} | ||
if let strongSelf = self { | ||
let signals: [Signal<Bool, NoError>] = messageIds.compactMap({ id -> Signal<Bool, NoError>? in | ||
guard let id = id else { | ||
return nil | ||
} | ||
return strongSelf.context.account.pendingMessageManager.pendingMessageStatus(id) | ||
|> mapToSignal { status, _ -> Signal<Bool, NoError> in | ||
if status != nil { | ||
return .never() | ||
} else { | ||
return .single(true) | ||
} | ||
} | ||
|> take(1) | ||
}) | ||
if strongSelf.shareStatusDisposable == nil { | ||
strongSelf.shareStatusDisposable = MetaDisposable() | ||
} | ||
strongSelf.shareStatusDisposable?.set((combineLatest(signals) | ||
|> deliverOnMainQueue).startStrict(next: { [weak strongSelf] _ in | ||
guard let strongSelf = strongSelf else { | ||
return | ||
} | ||
strongSelf.chatDisplayNode.hapticFeedback.success() | ||
let _ = (strongSelf.context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: strongSelf.context.account.peerId)) | ||
|> deliverOnMainQueue).startStandalone(next: { [weak strongSelf] peer in | ||
guard let strongSelf = strongSelf, let peer = peer, let navigationController = strongSelf.effectiveNavigationController else { | ||
return | ||
} | ||
|
||
var navigationSubject: ChatControllerSubject? = nil | ||
for messageId in messageIds { | ||
if let messageId = messageId { | ||
navigationSubject = .message(id: .id(messageId), highlight: ChatControllerSubject.MessageHighlight(quote: nil), timecode: nil, setupReply: false) | ||
break | ||
} | ||
} | ||
strongSelf.context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: strongSelf.context, chatLocation: .peer(peer), subject: navigationSubject, keepStack: .always, purposefulAction: {}, peekData: nil)) | ||
}) | ||
} )) | ||
} | ||
}) | ||
}) | ||
} | ||
} |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
objc_library( | ||
name = "FLEX", | ||
module_name = "FLEX", | ||
srcs = glob( | ||
["Classes/**/*"], | ||
exclude = [ | ||
"Classes/Info.plist", | ||
"Classes/Utility/APPLE_LICENSE", | ||
"Classes/Network/OSCache/LICENSE.md", | ||
"Classes/Network/PonyDebugger/LICENSE", | ||
"Classes/GlobalStateExplorers/DatabaseBrowser/LICENSE", | ||
"Classes/GlobalStateExplorers/Keychain/SSKeychain_LICENSE", | ||
"Classes/GlobalStateExplorers/SystemLog/LLVM_LICENSE.TXT", | ||
] | ||
), | ||
hdrs = glob([ | ||
"Classes/**/*.h" | ||
]), | ||
includes = [ | ||
"Classes", | ||
"Classes/Core", | ||
"Classes/Core/Controllers", | ||
"Classes/Core/Views", | ||
"Classes/Core/Views/Cells", | ||
"Classes/Core/Views/Carousel", | ||
"Classes/ObjectExplorers", | ||
"Classes/ObjectExplorers/Sections", | ||
"Classes/ObjectExplorers/Sections/Shortcuts", | ||
"Classes/Network", | ||
"Classes/Network/PonyDebugger", | ||
"Classes/Network/OSCache", | ||
"Classes/Toolbar", | ||
"Classes/Manager", | ||
"Classes/Manager/Private", | ||
"Classes/Editing", | ||
"Classes/Editing/ArgumentInputViews", | ||
"Classes/Headers", | ||
"Classes/ExplorerInterface", | ||
"Classes/ExplorerInterface/Tabs", | ||
"Classes/ExplorerInterface/Bookmarks", | ||
"Classes/GlobalStateExplorers", | ||
"Classes/GlobalStateExplorers/Globals", | ||
"Classes/GlobalStateExplorers/Keychain", | ||
"Classes/GlobalStateExplorers/FileBrowser", | ||
"Classes/GlobalStateExplorers/SystemLog", | ||
"Classes/GlobalStateExplorers/DatabaseBrowser", | ||
"Classes/GlobalStateExplorers/RuntimeBrowser", | ||
"Classes/GlobalStateExplorers/RuntimeBrowser/DataSources", | ||
"Classes/ViewHierarchy", | ||
"Classes/ViewHierarchy/SnapshotExplorer", | ||
"Classes/ViewHierarchy/SnapshotExplorer/Scene", | ||
"Classes/ViewHierarchy/TreeExplorer", | ||
"Classes/Utility", | ||
"Classes/Utility/Runtime", | ||
"Classes/Utility/Runtime/Objc", | ||
"Classes/Utility/Runtime/Objc/Reflection", | ||
"Classes/Utility/Categories", | ||
"Classes/Utility/Categories/Private", | ||
"Classes/Utility/Keyboard" | ||
], | ||
copts = [ | ||
"-Wno-deprecated-declarations", | ||
"-Wno-strict-prototypes", | ||
"-Wno-unsupported-availability-guard", | ||
], | ||
deps = [], | ||
visibility = ["//visibility:public"], | ||
) |
Oops, something went wrong.