mirror of
https://github.com/TelegramMessenger/Telegram-iOS.git
synced 2026-07-05 19:28:46 +02:00
Postbox -> TelegramEngine waves 107-137 (squashed)
31 waves of consumer-side migration from `import Postbox` to TelegramEngine typealiases. Net: 173 import drops + 39 BUILD-dep drops + 1 new typealias (`EngineStoryId = StoryId`, wave 113). Wave shapes used: - Orphan-import sweeps (107, 108, 128): drop `import Postbox` from files whose only Postbox-symbol reference was the import line itself, then resolve build failures. Methodology requires token-level (`grep -oE`) filtering, not line-level, to avoid masking real Postbox usage on lines that also contain `Namespaces.X` references. - Identifier-swap mini-waves (109-127, 129-134, 136-137): rename Postbox-typealiased identifiers to engine equivalents (PeerId -> EnginePeer.Id, MessageId -> EngineMessage.Id, MediaId -> EngineMedia.Id, MessageIndex -> EngineMessage.Index, StoryId -> EngineStoryId, ItemCollectionId -> EngineItemCollectionId, PreferencesEntry -> EnginePreferencesEntry, FetchResourceSourceType/Error -> EngineFetchResourceSourceType/Error, MemoryBuffer -> EngineMemoryBuffer, MessageTags -> EngineMessage.Tags, MessageAttribute -> EngineMessage.Attribute, TempBox -> EngineTempBox). - Asset-string FP-only orphans (124). - Typealias addition + drain (113): added `EngineStoryId` typealias to TelegramCore, then drained 3+11 consumer sites. Hard blockers identified during these waves (must restore `import Postbox` when present): MediaResource[A-Za-z]* (any suffix -- the literal `MediaResource` matches don't catch MediaResourceData/MediaResourceId/etc.), Postbox/MediaBox/MediaResource raw types, PostboxCoding/PostboxEncoder/ PostboxDecoder, TempBoxFile, ValueBoxKey, PostboxView, combinedView, HashFunctions, postboxLog, openPostbox, declareEncodable, PeerView, MessageHistoryView, MessageHistoryThreadData, CachedPeerData, RenderedPeer, SelectivePrivacyPeer, SimpleDictionary, ItemCollectionInfosView, ItemCollectionItem, ItemCollectionItemIndex, ItemCollectionViewEntryIndex, ChatListIndex, ChatListEntrySummaryComponents, CodableEntry, MessageHistoryThread, MessageHistoryAnchorIndex, MessageHistoryEntryLocation, PeerStoryStats, PeerNameIndex, PeerSummaryCounterTags, ChatListTotalUnreadStateCategory/Stats, arePeersEqual. Protocol-shape blockers: bare `Peer`/`Message`/`Media` in function signatures, generic args, enum-case payloads, or dict value types (e.g., `[PeerId: Peer]`, `case messages([Message])`, `Signal<(Peer?, ...), NoError>`). `replace_all PeerId -> EnginePeer.Id` is dangerous: mangles compound names like `failedPeerId`, `ContactListPeerId`, `nextRemoteMediaId`, `replyToMessageId`. Pre-flight grep `\b[a-z][a-zA-Z]*PeerId\b` and only replace_all if 0 matches. Also removes unneeded design/plan docs from a separate (link-highlighting) feature branch: - docs/superpowers/plans/2026-05-02-link-highlighting-modern-path-fixes.md - docs/superpowers/specs/2026-05-02-link-highlighting-modern-path-fixes-design.md Squashed commits: 6d82c2980d..e6de5d53a3 (59 commits, including per-wave content commits and per-wave CLAUDE.md bumps). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
b1aab0839c
commit
86d1456552
209 changed files with 337 additions and 785 deletions
|
|
@ -41,7 +41,7 @@ A gradual migration is underway to eliminate direct `import Postbox` from consum
|
|||
|
||||
**Historical record:** Wave-by-wave outcomes, the running tally of Postbox-free modules, and full verbose forms of the guidance subsections below live in [`docs/superpowers/postbox-refactor-log.md`](docs/superpowers/postbox-refactor-log.md). Read that file when you need wave-specific context, a full worked example of a pattern, or the history of a particular module's migration.
|
||||
|
||||
Waves landed so far (as of 2026-04-24): 45 waves plus standalone cleanups. See the log file for per-wave detail; the list of still-open migration opportunities lives in the `project_postbox_refactor_next_wave.md` memory file.
|
||||
Waves landed so far (as of 2026-05-02): 137 waves plus standalone cleanups. See the log file for per-wave detail; the list of still-open migration opportunities lives in the `project_postbox_refactor_next_wave.md` memory file.
|
||||
|
||||
### Rules that apply to every wave
|
||||
|
||||
|
|
@ -74,6 +74,7 @@ AdaptedPostboxDecoder → EngineAdaptedPostboxDecoder (added 2026-04)
|
|||
ItemCollectionId → EngineItemCollectionId (added 2026-04-20)
|
||||
FetchResourceSourceType → EngineFetchResourceSourceType (added 2026-04-20)
|
||||
FetchResourceError → EngineFetchResourceError (added 2026-04-20)
|
||||
StoryId → EngineStoryId (added 2026-05-02)
|
||||
```
|
||||
|
||||
For the `MediaResource` Postbox protocol, prefer the TelegramCore subtype `TelegramMediaResource` when the consumer's usage allows (note: `EngineMediaResource` is a wrapper **class**, not a typealias, so it is not interchangeable with the protocol).
|
||||
|
|
|
|||
|
|
@ -1,217 +0,0 @@
|
|||
# Modern Path Link-Highlighting Fixes Implementation Plan
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Fix two correctness bugs in `LinkHighlightingNode`'s modern path branch — issue #3 (X-edge snap unreachable after midY snap) and issue #7 (zero-radius arcs from `floor` rounding).
|
||||
|
||||
**Architecture:** Two single-token edits in `submodules/Display/Source/LinkHighlightingNode.swift`, each landed as its own commit. Final validation by full project build (no unit tests in this repo per CLAUDE.md).
|
||||
|
||||
**Tech Stack:** Swift, Bazel via `Make.py`, iOS simulator (`debug_sim_arm64`).
|
||||
|
||||
**Spec:** `docs/superpowers/specs/2026-05-02-link-highlighting-modern-path-fixes-design.md`
|
||||
|
||||
---
|
||||
|
||||
## File map
|
||||
|
||||
- Modify: `submodules/Display/Source/LinkHighlightingNode.swift` — two single-line edits inside the `useModernPathCalculation` branch of `drawRectsImageContent`. No new files, no signature changes, no callers affected.
|
||||
|
||||
---
|
||||
|
||||
## Task 1: Fix issue #3 — X-edge snap inset direction
|
||||
|
||||
The X-snap guard currently uses `insetBy(dx: 0.0, dy: 1.0)`, which *shrinks* `rects[i]` by 1 px on each Y edge. After the preceding midY snap, `rects[i].maxY == rects[i+1].minY`; shrinking then makes them not intersect (`CGRect.intersects` requires positive-area overlap), so the guard is unreachable for the canonical multi-line link case. The fix is to flip the direction so the rect *grows*, producing the 1-px overlap the guard needs.
|
||||
|
||||
**Files:**
|
||||
- Modify: `submodules/Display/Source/LinkHighlightingNode.swift:85`
|
||||
|
||||
- [ ] **Step 1: Inspect the target line**
|
||||
|
||||
Run:
|
||||
```bash
|
||||
sed -n '85p' submodules/Display/Source/LinkHighlightingNode.swift
|
||||
```
|
||||
|
||||
Expected:
|
||||
```
|
||||
if rects[i].maxY >= rects[i + 1].minY && rects[i].insetBy(dx: 0.0, dy: 1.0).intersects(rects[i + 1]) {
|
||||
```
|
||||
|
||||
If the line content differs, stop and re-read the file — line numbers may have shifted.
|
||||
|
||||
- [ ] **Step 2: Apply the edit**
|
||||
|
||||
In `submodules/Display/Source/LinkHighlightingNode.swift`, replace the X-snap guard with a negative-dy inset so the temp rect grows by 1 px on each Y edge:
|
||||
|
||||
```swift
|
||||
if rects[i].maxY >= rects[i + 1].minY && rects[i].insetBy(dx: 0.0, dy: -1.0).intersects(rects[i + 1]) {
|
||||
```
|
||||
|
||||
The change is a single character: `dy: 1.0` → `dy: -1.0`. No other lines change.
|
||||
|
||||
- [ ] **Step 3: Verify the change**
|
||||
|
||||
Run:
|
||||
```bash
|
||||
sed -n '85p' submodules/Display/Source/LinkHighlightingNode.swift
|
||||
```
|
||||
|
||||
Expected:
|
||||
```
|
||||
if rects[i].maxY >= rects[i + 1].minY && rects[i].insetBy(dx: 0.0, dy: -1.0).intersects(rects[i + 1]) {
|
||||
```
|
||||
|
||||
- [ ] **Step 4: Commit**
|
||||
|
||||
```bash
|
||||
git add submodules/Display/Source/LinkHighlightingNode.swift
|
||||
git commit -m "$(cat <<'EOF'
|
||||
LinkHighlightingNode: fix X-edge snap unreachable after midY snap
|
||||
|
||||
In drawRectsImageContent's modern path the snap loop runs midY
|
||||
trimming first, leaving rects[i].maxY == rects[i+1].minY for
|
||||
adjacent line rects. The X-edge snap guard then evaluated
|
||||
rects[i].insetBy(dx: 0.0, dy: 1.0).intersects(rects[i+1]) — but
|
||||
positive dy shrinks the rect, so after the trim the guarded
|
||||
rectangle no longer intersects its neighbor (CGRect.intersects
|
||||
requires positive-area overlap). Flip dy to -1.0 so the temp
|
||||
rect grows and touching neighbors satisfy the guard.
|
||||
|
||||
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
||||
EOF
|
||||
)"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task 2: Fix issue #7 — replace `floor` with `ceil` in nextRadius/prevRadius
|
||||
|
||||
`nextRadius` (line 127) and `prevRadius` (line 154) compute the corner-fillet radius for stair-step joins between adjacent line rects: `min(outerRadius, floor(abs(...) * 0.5))`. When `|Δx| < 2`, `floor` produces 0 and the subsequent `addArc(... radius: 0)` is a no-op (the corner stays unsmoothed). After Task 1's fix, the X-snap will catch most `|Δx| < 2` cases — but residual fractional-pixel deltas can still hit floor=0. Switching to `ceil` clamps any non-zero gap up to ≥ 1 px, which is what the corner needs visually. Subpixel `Δx == 0` is not affected because the `else` branch at lines 124 and 151 handles exact equality with a straight `addLine`.
|
||||
|
||||
**Files:**
|
||||
- Modify: `submodules/Display/Source/LinkHighlightingNode.swift:127`
|
||||
- Modify: `submodules/Display/Source/LinkHighlightingNode.swift:154`
|
||||
|
||||
- [ ] **Step 1: Inspect both target lines**
|
||||
|
||||
Run:
|
||||
```bash
|
||||
sed -n '127p;154p' submodules/Display/Source/LinkHighlightingNode.swift
|
||||
```
|
||||
|
||||
Expected:
|
||||
```
|
||||
let nextRadius = min(outerRadius, floor(abs(rect.maxX - next.maxX) * 0.5))
|
||||
let prevRadius = min(outerRadius, floor(abs(rect.minX - prev.minX) * 0.5))
|
||||
```
|
||||
|
||||
If either line content differs, stop and re-read the file.
|
||||
|
||||
- [ ] **Step 2: Apply edit on line 127**
|
||||
|
||||
In `submodules/Display/Source/LinkHighlightingNode.swift`, change:
|
||||
```swift
|
||||
let nextRadius = min(outerRadius, floor(abs(rect.maxX - next.maxX) * 0.5))
|
||||
```
|
||||
to:
|
||||
```swift
|
||||
let nextRadius = min(outerRadius, ceil(abs(rect.maxX - next.maxX) * 0.5))
|
||||
```
|
||||
|
||||
- [ ] **Step 3: Apply edit on line 154**
|
||||
|
||||
In the same file, change:
|
||||
```swift
|
||||
let prevRadius = min(outerRadius, floor(abs(rect.minX - prev.minX) * 0.5))
|
||||
```
|
||||
to:
|
||||
```swift
|
||||
let prevRadius = min(outerRadius, ceil(abs(rect.minX - prev.minX) * 0.5))
|
||||
```
|
||||
|
||||
- [ ] **Step 4: Verify both changes**
|
||||
|
||||
Run:
|
||||
```bash
|
||||
sed -n '127p;154p' submodules/Display/Source/LinkHighlightingNode.swift
|
||||
```
|
||||
|
||||
Expected:
|
||||
```
|
||||
let nextRadius = min(outerRadius, ceil(abs(rect.maxX - next.maxX) * 0.5))
|
||||
let prevRadius = min(outerRadius, ceil(abs(rect.minX - prev.minX) * 0.5))
|
||||
```
|
||||
|
||||
- [ ] **Step 5: Confirm no other `floor(abs(` patterns remain in the modern branch**
|
||||
|
||||
Run:
|
||||
```bash
|
||||
grep -n "floor(abs(" submodules/Display/Source/LinkHighlightingNode.swift
|
||||
```
|
||||
|
||||
Expected: no matches (the only remaining `floor` should be on line 79, the midY snap, which is intentional).
|
||||
|
||||
- [ ] **Step 6: Commit**
|
||||
|
||||
```bash
|
||||
git add submodules/Display/Source/LinkHighlightingNode.swift
|
||||
git commit -m "$(cat <<'EOF'
|
||||
LinkHighlightingNode: ceil instead of floor for stair-step radii
|
||||
|
||||
drawRectsImageContent's modern path computed nextRadius and
|
||||
prevRadius as min(outerRadius, floor(|Δx| * 0.5)). When |Δx| < 2
|
||||
the floor produces 0 and the addArc call becomes a no-op,
|
||||
leaving an unsmoothed corner at the stair-step. Replace floor
|
||||
with ceil so any non-zero edge mismatch rounds up to at least
|
||||
1 px. Exact-equality cases (Δx == 0) are unaffected — they take
|
||||
the else branch with a straight addLine.
|
||||
|
||||
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
||||
EOF
|
||||
)"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task 3: Validate with full project build
|
||||
|
||||
The Display module (and most of the chat UI submodules) depend on `LinkHighlightingNode.swift`, so a clean build of the umbrella `Telegram/Telegram` target validates that the edits are syntactically and semantically valid. There are no unit tests in this repo. CLAUDE.md notes that `TELEGRAM_CODESIGNING_GIT_PASSWORD` lives in `~/.zshrc` and must be sourced explicitly because Bash here doesn't read shell config.
|
||||
|
||||
**Files:**
|
||||
- None (build-only validation).
|
||||
|
||||
- [ ] **Step 1: Run full project build**
|
||||
|
||||
Run from the repo root:
|
||||
```bash
|
||||
source ~/.zshrc 2>/dev/null; python3 build-system/Make/Make.py --overrideXcodeVersion \
|
||||
--cacheDir ~/telegram-bazel-cache \
|
||||
build \
|
||||
--configurationPath build-system/appstore-configuration.json \
|
||||
--gitCodesigningRepository git@gitlab.com:peter-iakovlev/fastlanematch.git \
|
||||
--gitCodesigningType development --gitCodesigningUseCurrent --buildNumber=1 --configuration=debug_sim_arm64
|
||||
```
|
||||
|
||||
Expected: build succeeds (exit code 0). The build is multi-minute; tail the output and confirm completion.
|
||||
|
||||
- [ ] **Step 2: If build fails**
|
||||
|
||||
If the build fails on `LinkHighlightingNode.swift`:
|
||||
- A failure on line 85 means the inset edit was malformed — re-check the syntax.
|
||||
- A failure on lines 127 or 154 means the `floor → ceil` swap introduced a typo.
|
||||
- A failure elsewhere is unrelated to these edits — investigate before continuing.
|
||||
|
||||
If the failure is on `LinkHighlightingNode.swift`, revert the failing commit (`git reset --hard HEAD~1`), re-apply the edit using the `Edit` tool with exact matching strings, and rerun the build.
|
||||
|
||||
- [ ] **Step 3: Visual check (manual, optional)**
|
||||
|
||||
If the simulator is launched, send a chat message with a long URL that wraps across multiple lines and tap-and-hold to invoke the link highlight. The stair-step joins between line rects should now show smooth fillets where adjacent X edges differ by less than 2 px (previously unsmoothed). This step is informational — the build success is the gating signal for the plan.
|
||||
|
||||
---
|
||||
|
||||
## Self-Review
|
||||
|
||||
- **Spec coverage:** Issue #3 → Task 1. Issue #7 → Task 2. Validation paragraph → Task 3. Out-of-scope items (#1, #2, #5, #6, #8) explicitly excluded — covered by spec, not by tasks.
|
||||
- **Placeholder scan:** No "TBD" / "TODO" / "similar to" / vague-error-handling. All edits show exact before/after code.
|
||||
- **Type consistency:** No new symbols introduced; existing `outerRadius`, `nextRadius`, `prevRadius`, `rects[i]`, `CGRect.insetBy(dx:dy:)`, `CGRect.intersects(_:)` all already in scope at the edit sites.
|
||||
- **Line-number drift:** Each edit task starts with a `sed -n` inspection that bails out if the line content differs from the expected string — protects against drift if the file is touched between plan-write and plan-execute.
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
# Modern path calculation fixes — issues #3 and #7
|
||||
|
||||
`submodules/Display/Source/LinkHighlightingNode.swift`, in the `useModernPathCalculation` branch of `drawRectsImageContent`.
|
||||
|
||||
## Issue #3 — X-edge snap never fires after the midY snap
|
||||
|
||||
The snap loop at lines 75–113 has two passes per `i`:
|
||||
1. midY snap (lines 78–84) — splits any vertically-overlapping rects at `midY`, leaving `rects[i].maxY == rects[i+1].minY`.
|
||||
2. X-edge snap (lines 85–108) — guards on `rects[i].insetBy(dx: 0.0, dy: 1.0).intersects(rects[i+1])`. With positive `dy`, this *shrinks* `rects[i]`, so after the midY snap they no longer intersect — the guard is unreachable for the canonical multi-line link case.
|
||||
|
||||
**Fix:** flip the inset to `dy: -1.0` so the guard *grows* `rects[i]` by 1 px on each Y edge. After the midY snap the touching edges are at the same y; growing rect[i] by 1 makes it overlap rect[i+1] by 1 px, satisfying `CGRect.intersects` (which requires positive-area intersection). The X-snap then runs on every adjacent pair the algorithm intended to handle.
|
||||
|
||||
Why `-1.0` and not `0.0`: `CGRect.intersects` returns `false` for shared-edge-only contact, so a non-zero grow is required.
|
||||
|
||||
## Issue #7 — `nextRadius`/`prevRadius` can be 0 when X edges differ by less than 2 px
|
||||
|
||||
Line 127: `nextRadius = min(outerRadius, floor(abs(rect.maxX - next.maxX) * 0.5))`. When `|Δx| < 2`, `floor` produces 0 and the call to `addArc` is a no-op (the corner stays unsmoothed). Same pattern at line 154 for `prevRadius` on the left edge.
|
||||
|
||||
**Fix:** replace `floor` with `ceil`, and keep `min(outerRadius, …)` as the upper bound. With `ceil`, any non-zero gap rounds up to at least 1 px, which is what the corner needs visually. (Subpixel `Δx == 0` is the "edges already aligned" case and the unmodified `else` branch above each conditional already handles it with a straight `addLine`.)
|
||||
|
||||
After fixing #3, the typical multi-line case should snap edges to common min/max when `|Δx| < minRadius (= 2.0)`, so #7 mostly handles the residual fractional-pixel case post-snap and any case where `|Δx| ≥ minRadius` but the floor would still drop to 0 (only possible at exactly `|Δx| = 2`, where `floor(1.0) = 1` is already fine — so #7 primarily covers `|Δx|` in `(0, 2)` *not* caught by snap, e.g., when `minX` and `maxX` deltas have different sub-pixel splits across an adjacent pair).
|
||||
|
||||
## Out of scope
|
||||
|
||||
- Issue #1 (single-rect path ignores `inset`) — separate change.
|
||||
- Issues #2, #4 (innerRadius, dy direction in the *same* line as #3 — note: #3's fix IS the dy direction change, so #4 is subsumed), #5 (no closePath), #6 (.copy blend mode), #8 (snap loop bound).
|
||||
|
||||
## Validation
|
||||
|
||||
No tests exist in this repo (per CLAUDE.md). Validation is by full project build (`Make.py … --configuration=debug_sim_arm64`) and visual inspection of multi-line link highlights in chat — exercised by the change just made to `ChatMessageRichDataBubbleContentNode` (which now sets `useModernPathCalculation = true`).
|
||||
|
||||
## Risk
|
||||
|
||||
`drawRectsImageContent`'s modern branch is reachable from many call sites (`ChatMessageUnlockMediaNode`, `ChatEmptyNode`, `ShimmeringLinkNode`, `ChatListItem`, `TextLoadingEffect` once it's uncommented, etc.). The fix only changes how multi-rect highlights look — single-rect is untouched. Typical visual change: cleaner stair-step joins between adjacent line rects with near-aligned X edges.
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
import Foundation
|
||||
import Display
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
|
||||
|
|
@ -47,7 +46,7 @@ public struct ContactListAdditionalOption: Equatable {
|
|||
}
|
||||
|
||||
public enum ContactListPeerId: Hashable {
|
||||
case peer(PeerId)
|
||||
case peer(EnginePeer.Id)
|
||||
case deviceContact(DeviceContactStableId)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import LegacyComponents
|
|||
import ProgressNavigationButtonNode
|
||||
import ImageCompression
|
||||
import LegacyMediaPickerUI
|
||||
import Postbox
|
||||
import TextFormat
|
||||
import MoreButtonNode
|
||||
import ContextUI
|
||||
|
|
@ -272,9 +271,9 @@ final class AuthorizationSequenceSignUpController: ViewController {
|
|||
|
||||
if let name = name {
|
||||
self.signUpWithName?(name.0, name.1, self.controllerNode.currentPhoto.flatMap({ image in
|
||||
let tempFile = TempBox.shared.tempFile(fileName: "file")
|
||||
let tempFile = EngineTempBox.shared.tempFile(fileName: "file")
|
||||
let result = compressImageToJPEG(image, quality: 0.7, tempFilePath: tempFile.path)
|
||||
TempBox.shared.dispose(tempFile)
|
||||
EngineTempBox.shared.dispose(tempFile)
|
||||
return result
|
||||
}), self.avatarAsset, self.avatarAdjustments, self.announceSignUp)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import SwiftSignalKit
|
||||
import Display
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import ComponentFlow
|
||||
|
|
@ -1583,7 +1582,7 @@ public class BrowserScreen: ViewController, MinimizableController {
|
|||
case pdfDocument(file: FileMediaReference, canShare: Bool)
|
||||
case markdownDocument(file: FileMediaReference, canShare: Bool)
|
||||
|
||||
public var fileId: MediaId? {
|
||||
public var fileId: EngineMedia.Id? {
|
||||
switch self {
|
||||
case let .document(file, _), let .pdfDocument(file, _), let .markdownDocument(file, _):
|
||||
return file.media.fileId
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import SwiftSignalKit
|
|||
import AnimationCache
|
||||
import MultiAnimationRenderer
|
||||
import TelegramCore
|
||||
import Postbox
|
||||
import ChatListHeaderComponent
|
||||
import ActionPanelComponent
|
||||
import ChatFolderLinkPreviewScreen
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import Display
|
||||
import AsyncDisplayKit
|
||||
import Display
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import SwiftSignalKit
|
||||
import TelegramPresentationData
|
||||
|
|
@ -31,8 +30,8 @@ final class ChatListSearchMessageSelectionPanelNode: ASDisplayNode {
|
|||
|
||||
private var validLayout: ContainerViewLayout?
|
||||
|
||||
var chatAvailableMessageActions: ((Set<MessageId>) -> Signal<ChatAvailableMessageActions, NoError>)?
|
||||
var selectedMessages = Set<MessageId>() {
|
||||
var chatAvailableMessageActions: ((Set<EngineMessage.Id>) -> Signal<ChatAvailableMessageActions, NoError>)?
|
||||
var selectedMessages = Set<EngineMessage.Id>() {
|
||||
didSet {
|
||||
if oldValue != self.selectedMessages {
|
||||
self.forwardButton.isEnabled = self.selectedMessages.count != 0
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
import Foundation
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramUIPreferences
|
||||
|
||||
|
|
@ -22,27 +21,27 @@ public enum ChatMediaInputGifMode: Equatable {
|
|||
}
|
||||
|
||||
public final class ChatMediaInputNodeInteraction {
|
||||
public let navigateToCollectionId: (ItemCollectionId) -> Void
|
||||
public let navigateToCollectionId: (EngineItemCollectionId) -> Void
|
||||
public let navigateBackToStickers: () -> Void
|
||||
public let setGifMode: (ChatMediaInputGifMode) -> Void
|
||||
public let openSettings: () -> Void
|
||||
public let openTrending: (ItemCollectionId?) -> Void
|
||||
public let dismissTrendingPacks: ([ItemCollectionId]) -> Void
|
||||
public let openTrending: (EngineItemCollectionId?) -> Void
|
||||
public let dismissTrendingPacks: ([EngineItemCollectionId]) -> Void
|
||||
public let toggleSearch: (Bool, ChatMediaInputSearchMode?, String) -> Void
|
||||
public let openPeerSpecificSettings: () -> Void
|
||||
public let dismissPeerSpecificSettings: () -> Void
|
||||
public let clearRecentlyUsedStickers: () -> Void
|
||||
|
||||
public var stickerSettings: ChatInterfaceStickerSettings?
|
||||
public var highlightedStickerItemCollectionId: ItemCollectionId?
|
||||
public var highlightedItemCollectionId: ItemCollectionId?
|
||||
public var highlightedStickerEngineItemCollectionId: EngineItemCollectionId?
|
||||
public var highlightedEngineItemCollectionId: EngineItemCollectionId?
|
||||
public var highlightedGifMode: ChatMediaInputGifMode = .recent
|
||||
public var previewedStickerPackItemFile: TelegramMediaFile?
|
||||
public var appearanceTransition: CGFloat = 1.0
|
||||
public var displayStickerPlaceholder = true
|
||||
public var displayStickerPackManageControls = true
|
||||
|
||||
public init(navigateToCollectionId: @escaping (ItemCollectionId) -> Void, navigateBackToStickers: @escaping () -> Void, setGifMode: @escaping (ChatMediaInputGifMode) -> Void, openSettings: @escaping () -> Void, openTrending: @escaping (ItemCollectionId?) -> Void, dismissTrendingPacks: @escaping ([ItemCollectionId]) -> Void, toggleSearch: @escaping (Bool, ChatMediaInputSearchMode?, String) -> Void, openPeerSpecificSettings: @escaping () -> Void, dismissPeerSpecificSettings: @escaping () -> Void, clearRecentlyUsedStickers: @escaping () -> Void) {
|
||||
public init(navigateToCollectionId: @escaping (EngineItemCollectionId) -> Void, navigateBackToStickers: @escaping () -> Void, setGifMode: @escaping (ChatMediaInputGifMode) -> Void, openSettings: @escaping () -> Void, openTrending: @escaping (EngineItemCollectionId?) -> Void, dismissTrendingPacks: @escaping ([EngineItemCollectionId]) -> Void, toggleSearch: @escaping (Bool, ChatMediaInputSearchMode?, String) -> Void, openPeerSpecificSettings: @escaping () -> Void, dismissPeerSpecificSettings: @escaping () -> Void, clearRecentlyUsedStickers: @escaping () -> Void) {
|
||||
self.navigateToCollectionId = navigateToCollectionId
|
||||
self.navigateBackToStickers = navigateBackToStickers
|
||||
self.setGifMode = setGifMode
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import UIKit
|
|||
import AsyncDisplayKit
|
||||
import Display
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import ComponentFlow
|
||||
import ComponentDisplayAdapters
|
||||
|
||||
|
|
@ -12,11 +12,11 @@ public final class GalleryControllerInteraction {
|
|||
public let pushController: (ViewController) -> Void
|
||||
public let dismissController: () -> Void
|
||||
public let replaceRootController: (ViewController, Promise<Bool>?) -> Void
|
||||
public let editMedia: (MessageId) -> Void
|
||||
public let editMedia: (EngineMessage.Id) -> Void
|
||||
public let controller: () -> ViewController?
|
||||
public let currentItemNode: () -> GalleryItemNode?
|
||||
|
||||
public init(presentController: @escaping (ViewController, ViewControllerPresentationArguments?) -> Void, pushController: @escaping (ViewController) -> Void, dismissController: @escaping () -> Void, replaceRootController: @escaping (ViewController, Promise<Bool>?) -> Void, editMedia: @escaping (MessageId) -> Void, controller: @escaping () -> ViewController?, currentItemNode: @escaping () -> GalleryItemNode?) {
|
||||
public init(presentController: @escaping (ViewController, ViewControllerPresentationArguments?) -> Void, pushController: @escaping (ViewController) -> Void, dismissController: @escaping () -> Void, replaceRootController: @escaping (ViewController, Promise<Bool>?) -> Void, editMedia: @escaping (EngineMessage.Id) -> Void, controller: @escaping () -> ViewController?, currentItemNode: @escaping () -> GalleryItemNode?) {
|
||||
self.presentController = presentController
|
||||
self.pushController = pushController
|
||||
self.dismissController = dismissController
|
||||
|
|
|
|||
|
|
@ -1,23 +1,22 @@
|
|||
import Foundation
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import SwiftSignalKit
|
||||
import TelegramUIPreferences
|
||||
|
||||
private struct HashtagSearchRecentQueryItemId {
|
||||
public let rawValue: MemoryBuffer
|
||||
public let rawValue: EngineMemoryBuffer
|
||||
|
||||
var value: String {
|
||||
return String(data: self.rawValue.makeData(), encoding: .utf8) ?? ""
|
||||
}
|
||||
|
||||
init(_ rawValue: MemoryBuffer) {
|
||||
init(_ rawValue: EngineMemoryBuffer) {
|
||||
self.rawValue = rawValue
|
||||
}
|
||||
|
||||
init?(_ value: String) {
|
||||
if let data = value.data(using: .utf8) {
|
||||
self.rawValue = MemoryBuffer(data: data)
|
||||
self.rawValue = EngineMemoryBuffer(data: data)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ swift_library(
|
|||
],
|
||||
deps = [
|
||||
"//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit",
|
||||
"//submodules/Postbox:Postbox",
|
||||
"//submodules/TelegramCore:TelegramCore",
|
||||
"//submodules/TelegramStringFormatting:TelegramStringFormatting",
|
||||
"//submodules/TelegramUIPreferences:TelegramUIPreferences",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import TelegramCore
|
||||
import SyncCore
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
|
||||
func loadLegacyUser(database: SqliteInterface, id: Int32) -> (TelegramUser, TelegramUserPresence)? {
|
||||
var result: (TelegramUser, TelegramUserPresence)?
|
||||
|
|
@ -24,7 +23,7 @@ func loadLegacyUser(database: SqliteInterface, id: Int32) -> (TelegramUser, Tele
|
|||
photo.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 600, height: 600), resource: resource, progressiveSizes: []))
|
||||
}
|
||||
|
||||
let user = TelegramUser(id: PeerId(namespace: Namespaces.Peer.CloudUser, id: cursor.getInt32(at: 0)), accessHash: accessHash == 0 ? nil : .personal(accessHash), firstName: firstName.isEmpty ? nil : firstName, lastName: lastName.isEmpty ? nil : lastName, username: username.isEmpty ? nil : username, phone: phone.isEmpty ? nil : phone, photo: photo, botInfo: nil, restrictionInfo: nil, flags: [])
|
||||
let user = TelegramUser(id: EnginePeer.Id(namespace: Namespaces.Peer.CloudUser, id: cursor.getInt32(at: 0)), accessHash: accessHash == 0 ? nil : .personal(accessHash), firstName: firstName.isEmpty ? nil : firstName, lastName: lastName.isEmpty ? nil : lastName, username: username.isEmpty ? nil : username, phone: phone.isEmpty ? nil : phone, photo: photo, botInfo: nil, restrictionInfo: nil, flags: [])
|
||||
|
||||
let status: UserPresenceStatus
|
||||
let lastSeen = cursor.getInt32(at: 7)
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import Display
|
||||
import SwiftSignalKit
|
||||
import TelegramCore
|
||||
import Postbox
|
||||
import SSignalKit
|
||||
import TelegramPresentationData
|
||||
import AccountContext
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import Display
|
||||
import AsyncDisplayKit
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import TextFormat
|
||||
|
|
@ -19,7 +18,7 @@ public enum SecureIdRequestResult: String {
|
|||
case error = "error"
|
||||
}
|
||||
|
||||
public func secureIdCallbackUrl(with baseUrl: String, peerId: PeerId, result: SecureIdRequestResult, parameters: [String : String]) -> String {
|
||||
public func secureIdCallbackUrl(with baseUrl: String, peerId: EnginePeer.Id, result: SecureIdRequestResult, parameters: [String : String]) -> String {
|
||||
var query = (parameters.compactMap({ (key, value) -> String in
|
||||
return "\(key)=\(value)"
|
||||
}) as Array).joined(separator: "&")
|
||||
|
|
@ -64,7 +63,7 @@ final class SecureIdAuthControllerInteraction {
|
|||
}
|
||||
|
||||
public enum SecureIdAuthControllerMode {
|
||||
case form(peerId: PeerId, scope: String, publicKey: String, callbackUrl: String?, opaquePayload: Data, opaqueNonce: Data)
|
||||
case form(peerId: EnginePeer.Id, scope: String, publicKey: String, callbackUrl: String?, opaquePayload: Data, opaqueNonce: Data)
|
||||
case list
|
||||
}
|
||||
|
||||
|
|
@ -174,7 +173,7 @@ public final class SecureIdAuthController: ViewController, StandalonePresentable
|
|||
}
|
||||
}))
|
||||
|
||||
let handleError: (Any, String?, PeerId?) -> Void = { [weak self] error, callbackUrl, peerId in
|
||||
let handleError: (Any, String?, EnginePeer.Id?) -> Void = { [weak self] error, callbackUrl, peerId in
|
||||
if let strongSelf = self {
|
||||
var passError: String?
|
||||
var appUpdateRequired = false
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
import Foundation
|
||||
import UIKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
|
||||
struct SecureIdEncryptedFormData {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ import PhoneNumberFormat
|
|||
import UndoUI
|
||||
import GalleryUI
|
||||
import PeerAvatarGalleryUI
|
||||
import Postbox
|
||||
import ContextUI
|
||||
|
||||
private enum DeviceContactInfoAction {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import Display
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import ItemListUI
|
||||
|
|
@ -117,7 +116,7 @@ private func groupPreHistorySetupEntries(isSupergroup: Bool, presentationData: P
|
|||
return entries
|
||||
}
|
||||
|
||||
public func groupPreHistorySetupController(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peerId: PeerId, upgradedToSupergroup: @escaping (PeerId, @escaping () -> Void) -> Void) -> ViewController {
|
||||
public func groupPreHistorySetupController(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peerId: EnginePeer.Id, upgradedToSupergroup: @escaping (EnginePeer.Id, @escaping () -> Void) -> Void) -> ViewController {
|
||||
let statePromise = ValuePromise(GroupPreHistorySetupState(), ignoreRepeated: true)
|
||||
let stateValue = Atomic(value: GroupPreHistorySetupState())
|
||||
let updateState: ((GroupPreHistorySetupState) -> GroupPreHistorySetupState) -> Void = { f in
|
||||
|
|
@ -163,12 +162,12 @@ public func groupPreHistorySetupController(context: AccountContext, updatedPrese
|
|||
if let value = value, value != defaultValue {
|
||||
if peerId.namespace == Namespaces.Peer.CloudGroup {
|
||||
let signal = context.engine.peers.convertGroupToSupergroup(peerId: peerId)
|
||||
|> mapToSignal { upgradedPeerId -> Signal<PeerId?, ConvertGroupToSupergroupError> in
|
||||
|> mapToSignal { upgradedPeerId -> Signal<EnginePeer.Id?,ConvertGroupToSupergroupError> in
|
||||
return context.engine.peers.updateChannelHistoryAvailabilitySettingsInteractively(peerId: upgradedPeerId, historyAvailableForNewMembers: value)
|
||||
|> `catch` { _ -> Signal<Void, NoError> in
|
||||
return .complete()
|
||||
}
|
||||
|> mapToSignal { _ -> Signal<PeerId?, NoError> in
|
||||
|> mapToSignal { _ -> Signal<EnginePeer.Id?,NoError> in
|
||||
return .complete()
|
||||
}
|
||||
|> then(.single(upgradedPeerId))
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import Display
|
|||
import AsyncDisplayKit
|
||||
import ComponentFlow
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import ItemListUI
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import SwiftSignalKit
|
||||
import AsyncDisplayKit
|
||||
import Display
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import TelegramUIPreferences
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import Display
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import TelegramUIPreferences
|
||||
|
|
@ -467,7 +466,7 @@ private func fetchDomainExceptionInfo(context: AccountContext, url: String) -> S
|
|||
let resource = LocalFileMediaResource(fileId: Int64.random(in: Int64.min ... Int64.max))
|
||||
context.sharedContext.accountManager.resources.storeResourceData(id: EngineMediaResource.Id(resource.id), data: imageData)
|
||||
image = TelegramMediaImage(
|
||||
imageId: MediaId(namespace: Namespaces.Media.LocalImage, id: Int64.random(in: Int64.min ... Int64.max)),
|
||||
imageId: EngineMedia.Id(namespace: Namespaces.Media.LocalImage, id: Int64.random(in: Int64.min ... Int64.max)),
|
||||
representations: [
|
||||
TelegramMediaImageRepresentation(
|
||||
dimensions: PixelDimensions(width: Int32(parsedImage.size.width), height: Int32(parsedImage.size.height)),
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import Display
|
||||
import AsyncDisplayKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import SwiftSignalKit
|
||||
import TelegramPresentationData
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import Display
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import TelegramUIPreferences
|
||||
|
|
@ -15,12 +14,12 @@ import ItemListPeerActionItem
|
|||
private final class BlockedPeersControllerArguments {
|
||||
let context: AccountContext
|
||||
|
||||
let setPeerIdWithRevealedOptions: (PeerId?, PeerId?) -> Void
|
||||
let setPeerIdWithRevealedOptions: (EnginePeer.Id?, EnginePeer.Id?) -> Void
|
||||
let addPeer: () -> Void
|
||||
let removePeer: (PeerId) -> Void
|
||||
let removePeer: (EnginePeer.Id) -> Void
|
||||
let openPeer: (EnginePeer) -> Void
|
||||
|
||||
init(context: AccountContext, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, addPeer: @escaping () -> Void, removePeer: @escaping (PeerId) -> Void, openPeer: @escaping (EnginePeer) -> Void) {
|
||||
init(context: AccountContext, setPeerIdWithRevealedOptions: @escaping (EnginePeer.Id?, EnginePeer.Id?) -> Void, addPeer: @escaping () -> Void, removePeer: @escaping (EnginePeer.Id) -> Void, openPeer: @escaping (EnginePeer) -> Void) {
|
||||
self.context = context
|
||||
self.setPeerIdWithRevealedOptions = setPeerIdWithRevealedOptions
|
||||
self.addPeer = addPeer
|
||||
|
|
@ -36,7 +35,7 @@ private enum BlockedPeersSection: Int32 {
|
|||
|
||||
private enum BlockedPeersEntryStableId: Hashable {
|
||||
case add
|
||||
case peer(PeerId)
|
||||
case peer(EnginePeer.Id)
|
||||
}
|
||||
|
||||
private enum BlockedPeersEntry: ItemListNodeEntry {
|
||||
|
|
@ -145,8 +144,8 @@ private enum BlockedPeersEntry: ItemListNodeEntry {
|
|||
|
||||
private struct BlockedPeersControllerState: Equatable {
|
||||
let editing: Bool
|
||||
let peerIdWithRevealedOptions: PeerId?
|
||||
let removingPeerId: PeerId?
|
||||
let peerIdWithRevealedOptions: EnginePeer.Id?
|
||||
let removingPeerId: EnginePeer.Id?
|
||||
|
||||
init() {
|
||||
self.editing = false
|
||||
|
|
@ -154,7 +153,7 @@ private struct BlockedPeersControllerState: Equatable {
|
|||
self.removingPeerId = nil
|
||||
}
|
||||
|
||||
init(editing: Bool, peerIdWithRevealedOptions: PeerId?, removingPeerId: PeerId?) {
|
||||
init(editing: Bool, peerIdWithRevealedOptions: EnginePeer.Id?, removingPeerId: EnginePeer.Id?) {
|
||||
self.editing = editing
|
||||
self.peerIdWithRevealedOptions = peerIdWithRevealedOptions
|
||||
self.removingPeerId = removingPeerId
|
||||
|
|
@ -178,11 +177,11 @@ private struct BlockedPeersControllerState: Equatable {
|
|||
return BlockedPeersControllerState(editing: editing, peerIdWithRevealedOptions: self.peerIdWithRevealedOptions, removingPeerId: self.removingPeerId)
|
||||
}
|
||||
|
||||
func withUpdatedPeerIdWithRevealedOptions(_ peerIdWithRevealedOptions: PeerId?) -> BlockedPeersControllerState {
|
||||
func withUpdatedPeerIdWithRevealedOptions(_ peerIdWithRevealedOptions: EnginePeer.Id?) -> BlockedPeersControllerState {
|
||||
return BlockedPeersControllerState(editing: self.editing, peerIdWithRevealedOptions: peerIdWithRevealedOptions, removingPeerId: self.removingPeerId)
|
||||
}
|
||||
|
||||
func withUpdatedRemovingPeerId(_ removingPeerId: PeerId?) -> BlockedPeersControllerState {
|
||||
func withUpdatedRemovingPeerId(_ removingPeerId: EnginePeer.Id?) -> BlockedPeersControllerState {
|
||||
return BlockedPeersControllerState(editing: self.editing, peerIdWithRevealedOptions: self.peerIdWithRevealedOptions, removingPeerId: removingPeerId)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import Display
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import LegacyComponents
|
||||
import LocalAuthentication
|
||||
|
|
|
|||
|
|
@ -1,12 +1,11 @@
|
|||
import Foundation
|
||||
import UIKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import SwiftSignalKit
|
||||
import TelegramUIPreferences
|
||||
|
||||
private struct SettingsSearchRecentQueryItemId {
|
||||
public let rawValue: MemoryBuffer
|
||||
public let rawValue: EngineMemoryBuffer
|
||||
|
||||
var value: Int64 {
|
||||
return self.rawValue.makeData().withUnsafeBytes { buffer -> Int64 in
|
||||
|
|
@ -17,13 +16,13 @@ private struct SettingsSearchRecentQueryItemId {
|
|||
}
|
||||
}
|
||||
|
||||
init(_ rawValue: MemoryBuffer) {
|
||||
init(_ rawValue: EngineMemoryBuffer) {
|
||||
self.rawValue = rawValue
|
||||
}
|
||||
|
||||
init(_ value: Int64) {
|
||||
var value = value
|
||||
self.rawValue = MemoryBuffer(data: Data(bytes: &value, count: MemoryLayout.size(ofValue: value)))
|
||||
self.rawValue = EngineMemoryBuffer(data: Data(bytes: &value, count: MemoryLayout.size(ofValue: value)))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -42,7 +41,7 @@ func addRecentSettingsSearchItem(engine: TelegramEngine, item: AnyHashable) {
|
|||
guard let id = item.base as? String, let data = id.data(using: .ascii) else {
|
||||
return
|
||||
}
|
||||
let itemId = MemoryBuffer(data: data)
|
||||
let itemId = EngineMemoryBuffer(data: data)
|
||||
let _ = engine.orderedLists.addOrMoveToFirstPosition(collectionId: ApplicationSpecificOrderedItemListCollectionId.settingsSearchRecentItems, id: itemId, item: RecentSettingsSearchQueryItem(), removeTailIfCountExceeds: 100).start()
|
||||
}
|
||||
|
||||
|
|
@ -50,7 +49,7 @@ func removeRecentSettingsSearchItem(engine: TelegramEngine, item: AnyHashable) {
|
|||
guard let id = item.base as? String, let data = id.data(using: .ascii) else {
|
||||
return
|
||||
}
|
||||
let itemId = MemoryBuffer(data: data)
|
||||
let itemId = EngineMemoryBuffer(data: data)
|
||||
let _ = engine.orderedLists.removeItem(collectionId: ApplicationSpecificOrderedItemListCollectionId.settingsSearchRecentItems, id: itemId).start()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import Display
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import TelegramUIPreferences
|
||||
|
|
@ -303,7 +302,7 @@ private func editThemeControllerEntries(presentationData: PresentationData, stat
|
|||
return entries
|
||||
}
|
||||
|
||||
public func editThemeController(context: AccountContext, mode: EditThemeControllerMode, navigateToChat: ((PeerId) -> Void)? = nil, completion: ((PresentationThemeReference) -> Void)? = nil) -> ViewController {
|
||||
public func editThemeController(context: AccountContext, mode: EditThemeControllerMode, navigateToChat: ((EnginePeer.Id) -> Void)? = nil, completion: ((PresentationThemeReference) -> Void)? = nil) -> ViewController {
|
||||
let initialState: EditThemeControllerState
|
||||
let previewThemePromise = Promise<PresentationTheme>()
|
||||
let settingsPromise = Promise<TelegramThemeSettings?>(nil)
|
||||
|
|
@ -538,7 +537,7 @@ public func editThemeController(context: AccountContext, mode: EditThemeControll
|
|||
let _ = (combineLatest(queue: Queue.mainQueue(), previewThemePromise.get(), settingsPromise.get())
|
||||
|> take(1)).start(next: { previewTheme, settings in
|
||||
let saveThemeTemplateFile: (String, LocalFileMediaResource, @escaping () -> Void) -> Void = { title, resource, completion in
|
||||
let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: resource.fileId), partialReference: nil, resource: resource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "application/x-tgtheme-ios", size: nil, attributes: [.FileName(fileName: "\(title).tgios-theme")], alternativeRepresentations: [])
|
||||
let file = TelegramMediaFile(fileId: EngineMedia.Id(namespace: Namespaces.Media.LocalFile, id: resource.fileId), partialReference: nil, resource: resource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "application/x-tgtheme-ios", size: nil, attributes: [.FileName(fileName: "\(title).tgios-theme")], alternativeRepresentations: [])
|
||||
let message = EnqueueMessage.message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: file), threadId: nil, replyToMessageId: nil, replyToStoryId: nil, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: [])
|
||||
|
||||
let _ = enqueueMessages(account: context.account, peerId: context.account.peerId, messages: [message]).start()
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
import Foundation
|
||||
import UIKit
|
||||
import Display
|
||||
import Postbox
|
||||
import SwiftSignalKit
|
||||
import AsyncDisplayKit
|
||||
import TelegramCore
|
||||
|
|
@ -411,7 +410,7 @@ public final class ThemePreviewController: ViewController {
|
|||
|
||||
var themeSpecificChatWallpapers = updatedSettings.themeSpecificChatWallpapers
|
||||
themeSpecificChatWallpapers[updatedTheme.index] = nil
|
||||
return PreferencesEntry(updatedSettings.withUpdatedThemeSpecificChatWallpapers(themeSpecificChatWallpapers).withUpdatedThemeSpecificAccentColors(themeSpecificAccentColors))
|
||||
return EnginePreferencesEntry(updatedSettings.withUpdatedThemeSpecificChatWallpapers(themeSpecificChatWallpapers).withUpdatedThemeSpecificAccentColors(themeSpecificAccentColors))
|
||||
})
|
||||
return previousDefaultTheme
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ swift_library(
|
|||
]),
|
||||
deps = [
|
||||
"//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit",
|
||||
"//submodules/Postbox:Postbox",
|
||||
"//submodules/SyncCore:SyncCore",
|
||||
"//submodules/TelegramCore:TelegramCore",
|
||||
"//submodules/Display:Display",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import Display
|
||||
import SwiftSignalKit
|
||||
import AsyncDisplayKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import TelegramUIPreferences
|
||||
|
|
@ -510,7 +509,7 @@ public func messageStatsController(context: AccountContext, updatedPresentationD
|
|||
})
|
||||
}
|
||||
openStoryImpl = { [weak controller] peerId, story, sourceView in
|
||||
let storyContent = SingleStoryContentContextImpl(context: context, storyId: StoryId(peerId: peerId, id: story.id), storyItem: story, readGlobally: false)
|
||||
let storyContent = SingleStoryContentContextImpl(context: context, storyId: EngineStoryId(peerId: peerId, id: story.id), storyItem: story, readGlobally: false)
|
||||
let _ = (storyContent.state
|
||||
|> take(1)
|
||||
|> deliverOnMainQueue).startStandalone(next: { [weak controller, weak sourceView] _ in
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import Display
|
|||
import TelegramCore
|
||||
import SwiftSignalKit
|
||||
import AsyncDisplayKit
|
||||
import Postbox
|
||||
import StickerResources
|
||||
import AccountContext
|
||||
import AnimatedStickerNode
|
||||
|
|
@ -16,7 +15,7 @@ import TextFormat
|
|||
|
||||
final class StickerPackPreviewInteraction {
|
||||
var previewedItem: StickerPreviewPeekItem?
|
||||
var reorderingFileId: MediaId?
|
||||
var reorderingFileId: EngineMedia.Id?
|
||||
var playAnimatedStickers: Bool
|
||||
|
||||
let addStickerPack: (StickerPackCollectionInfo, [StickerPackItem]) -> Void
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import AsyncDisplayKit
|
|||
import Display
|
||||
import TelegramCore
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramPresentationData
|
||||
import TelegramUIPreferences
|
||||
import UniversalMediaPlayer
|
||||
|
|
@ -14,7 +13,7 @@ import PresentationDataUtils
|
|||
import TelegramCallsUI
|
||||
import UndoUI
|
||||
|
||||
private func presentLiveLocationController(context: AccountContext, peerId: PeerId, controller: ViewController) {
|
||||
private func presentLiveLocationController(context: AccountContext, peerId: EnginePeer.Id, controller: ViewController) {
|
||||
let presentImpl: (EngineMessage?) -> Void = { [weak controller] message in
|
||||
if let message = message, let strongController = controller {
|
||||
let _ = context.sharedContext.openChatMessage(OpenChatMessageParams(context: context, chatLocation: nil, chatFilterTag: nil, chatLocationContextHolder: nil, message: message._asMessage(), standalone: false, reverseMessageGalleryOrder: false, navigationController: strongController.navigationController as? NavigationController, modal: true, dismissInput: {
|
||||
|
|
@ -189,7 +188,7 @@ open class TelegramBaseController: ViewController, KeyShortcutResponder {
|
|||
})]
|
||||
}
|
||||
|
||||
open func joinGroupCall(peerId: PeerId, invite: String?, activeCall: EngineGroupCallDescription) {
|
||||
open func joinGroupCall(peerId: EnginePeer.Id, invite: String?, activeCall: EngineGroupCallDescription) {
|
||||
let context = self.context
|
||||
let presentationData = self.context.sharedContext.currentPresentationData.with { $0 }
|
||||
|
||||
|
|
@ -224,7 +223,7 @@ open class TelegramBaseController: ViewController, KeyShortcutResponder {
|
|||
return
|
||||
}
|
||||
|
||||
let defaultJoinAsPeerId: PeerId? = callJoinAsPeerId
|
||||
let defaultJoinAsPeerId: EnginePeer.Id? = callJoinAsPeerId
|
||||
|
||||
if peers.count == 1, let peer = peers.first {
|
||||
completion(peer.peer.id)
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import SwiftSignalKit
|
|||
import AsyncDisplayKit
|
||||
import Display
|
||||
import ComponentFlow
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import TelegramVoip
|
||||
|
|
@ -12,14 +11,14 @@ import AccountContext
|
|||
import AlertComponent
|
||||
|
||||
func rateCallAndSendLogs(engine: TelegramEngine, callId: CallId, starsCount: Int, comment: String, userInitiated: Bool, includeLogs: Bool) -> Signal<Void, NoError> {
|
||||
let peerId = PeerId(namespace: Namespaces.Peer.CloudUser, id: PeerId.Id._internalFromInt64Value(4244000))
|
||||
let peerId = EnginePeer.Id(namespace: Namespaces.Peer.CloudUser, id: EnginePeer.Id.Id._internalFromInt64Value(4244000))
|
||||
|
||||
let rate = engine.calls.rateCall(callId: callId, starsCount: Int32(starsCount), comment: comment, userInitiated: userInitiated)
|
||||
if includeLogs {
|
||||
let id = Int64.random(in: Int64.min ... Int64.max)
|
||||
let name = "\(callId.id)_\(callId.accessHash).log.json"
|
||||
let path = callLogsPath(account: engine.account) + "/" + name
|
||||
let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: id), partialReference: nil, resource: LocalFileReferenceMediaResource(localFilePath: path, randomId: id), previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "application/text", size: nil, attributes: [.FileName(fileName: name)], alternativeRepresentations: [])
|
||||
let file = TelegramMediaFile(fileId: EngineMedia.Id(namespace: Namespaces.Media.LocalFile, id: id), partialReference: nil, resource: LocalFileReferenceMediaResource(localFilePath: path, randomId: id), previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "application/text", size: nil, attributes: [.FileName(fileName: name)], alternativeRepresentations: [])
|
||||
let message = EnqueueMessage.message(text: comment, attributes: [], inlineStickers: [:], mediaReference: .standalone(media: file), threadId: nil, replyToMessageId: nil, replyToStoryId: nil, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: [])
|
||||
return rate
|
||||
|> then(enqueueMessages(account: engine.account, peerId: peerId, messages: [message])
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import Display
|
|||
import UIKit
|
||||
import ComponentFlow
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import AvatarNode
|
||||
import GlassBackgroundComponent
|
||||
|
|
@ -89,7 +88,7 @@ final class MessageItemComponent: Component {
|
|||
weak var standaloneReactionAnimation: StandaloneReactionAnimation?
|
||||
|
||||
private var cachedEntities: [MessageTextEntity]?
|
||||
private var entityFiles: [MediaId: TelegramMediaFile] = [:]
|
||||
private var entityFiles: [EngineMedia.Id: TelegramMediaFile] = [:]
|
||||
|
||||
private var component: MessageItemComponent?
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
import Foundation
|
||||
import UIKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import SwiftSignalKit
|
||||
import Display
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import Display
|
||||
import AsyncDisplayKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import SwiftSignalKit
|
||||
import TelegramPresentationData
|
||||
|
|
@ -22,7 +21,7 @@ public final class VoiceChatJoinScreen: ViewController {
|
|||
private var animatedIn = false
|
||||
|
||||
private let context: AccountContext
|
||||
private let peerId: PeerId
|
||||
private let peerId: EnginePeer.Id
|
||||
private let invite: String?
|
||||
private var join: (CachedChannelData.ActiveCall) -> Void
|
||||
|
||||
|
|
@ -30,7 +29,7 @@ public final class VoiceChatJoinScreen: ViewController {
|
|||
|
||||
private let disposable = MetaDisposable()
|
||||
|
||||
public init(context: AccountContext, peerId: PeerId, invite: String?, join: @escaping (CachedChannelData.ActiveCall) -> Void) {
|
||||
public init(context: AccountContext, peerId: EnginePeer.Id, invite: String?, join: @escaping (CachedChannelData.ActiveCall) -> Void) {
|
||||
self.context = context
|
||||
self.peerId = peerId
|
||||
self.invite = invite
|
||||
|
|
@ -132,7 +131,7 @@ public final class VoiceChatJoinScreen: ViewController {
|
|||
return
|
||||
}
|
||||
|
||||
let defaultJoinAsPeerId: PeerId? = callJoinAsPeerId
|
||||
let defaultJoinAsPeerId: EnginePeer.Id? = callJoinAsPeerId
|
||||
|
||||
let activeCall = CachedChannelData.ActiveCall(id: call.info.id, accessHash: call.info.accessHash, title: call.info.title, scheduleTimestamp: call.info.scheduleTimestamp, subscribedToScheduled: call.info.subscribedToScheduled, isStream: call.info.isStream)
|
||||
if availablePeers.count > 0 && defaultJoinAsPeerId == nil {
|
||||
|
|
@ -682,7 +681,7 @@ final class VoiceChatPreviewContentNode: ASDisplayNode, ShareContentContainerNod
|
|||
func deactivate() {
|
||||
}
|
||||
|
||||
func setEnsurePeerVisibleOnLayout(_ peerId: PeerId?) {
|
||||
func setEnsurePeerVisibleOnLayout(_ peerId: EnginePeer.Id?) {
|
||||
}
|
||||
|
||||
func setDidBeginDragging(_ f: (() -> Void)?) {
|
||||
|
|
|
|||
|
|
@ -5,5 +5,6 @@ public typealias EnginePostboxDecoder = PostboxDecoder
|
|||
public typealias EnginePostboxEncoder = PostboxEncoder
|
||||
public typealias EngineAdaptedPostboxDecoder = AdaptedPostboxDecoder
|
||||
public typealias EngineItemCollectionId = ItemCollectionId
|
||||
public typealias EngineStoryId = StoryId
|
||||
public typealias EngineFetchResourceSourceType = FetchResourceSourceType
|
||||
public typealias EngineFetchResourceError = FetchResourceError
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
import Foundation
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import TelegramUIPreferences
|
||||
|
|
@ -285,7 +284,7 @@ public func messageTextWithAttributes(message: EngineMessage) -> NSAttributedStr
|
|||
|
||||
let currentDict = updatedString.attributes(at: range.lowerBound, effectiveRange: nil)
|
||||
var updatedAttributes: [NSAttributedString.Key: Any] = currentDict
|
||||
updatedAttributes[ChatTextInputAttributes.customEmoji] = ChatTextInputTextCustomEmojiAttribute(interactivelySelectedFromPackId: nil, fileId: fileId, file: message.associatedMedia[MediaId(namespace: Namespaces.Media.CloudFile, id: fileId)] as? TelegramMediaFile)
|
||||
updatedAttributes[ChatTextInputAttributes.customEmoji] = ChatTextInputTextCustomEmojiAttribute(interactivelySelectedFromPackId: nil, fileId: fileId, file: message.associatedMedia[EngineMedia.Id(namespace: Namespaces.Media.CloudFile, id: fileId)] as? TelegramMediaFile)
|
||||
|
||||
let insertString = NSAttributedString(string: updatedString.attributedSubstring(from: range).string, attributes: updatedAttributes)
|
||||
updatedString.replaceCharacters(in: range, with: insertString)
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ swift_library(
|
|||
"//submodules/TelegramPresentationData",
|
||||
"//submodules/AccountContext",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/TelegramUIPreferences",
|
||||
"//submodules/StickerResources",
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import Display
|
||||
import AsyncDisplayKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import SwiftSignalKit
|
||||
import TelegramPresentationData
|
||||
|
|
@ -252,7 +251,7 @@ final class ChatAdPanelNode: ASDisplayNode {
|
|||
return panelHeight
|
||||
}
|
||||
|
||||
private func enqueueTransition(width: CGFloat, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition, animation: PinnedMessageAnimation?, message: EngineMessage, theme: PresentationTheme, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, dateTimeFormat: PresentationDateTimeFormat, accountPeerId: PeerId, firstTime: Bool, isReplyThread: Bool, translateToLanguage: String?) -> CGFloat {
|
||||
private func enqueueTransition(width: CGFloat, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition, animation: PinnedMessageAnimation?, message: EngineMessage, theme: PresentationTheme, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, dateTimeFormat: PresentationDateTimeFormat, accountPeerId: EnginePeer.Id, firstTime: Bool, isReplyThread: Bool, translateToLanguage: String?) -> CGFloat {
|
||||
var animationTransition: ContainedViewLayoutTransition = .immediate
|
||||
|
||||
if let animation = animation {
|
||||
|
|
@ -313,7 +312,7 @@ final class ChatAdPanelNode: ASDisplayNode {
|
|||
} else if let paidContent = media as? TelegramMediaPaidContent, let firstMedia = paidContent.extendedMedia.first {
|
||||
switch firstMedia {
|
||||
case let .preview(dimensions, immediateThumbnailData, _):
|
||||
let thumbnailMedia = TelegramMediaImage(imageId: MediaId(namespace: 0, id: 0), representations: [], immediateThumbnailData: immediateThumbnailData, reference: nil, partialReference: nil, flags: [])
|
||||
let thumbnailMedia = TelegramMediaImage(imageId: EngineMedia.Id(namespace: 0, id: 0), representations: [], immediateThumbnailData: immediateThumbnailData, reference: nil, partialReference: nil, flags: [])
|
||||
if let dimensions {
|
||||
imageDimensions = dimensions.cgSize
|
||||
}
|
||||
|
|
@ -353,7 +352,7 @@ final class ChatAdPanelNode: ASDisplayNode {
|
|||
}
|
||||
|
||||
var updateImageSignal: Signal<(TransformImageArguments) -> DrawingContext?, NoError>?
|
||||
var updatedFetchMediaSignal: Signal<FetchResourceSourceType, FetchResourceError>?
|
||||
var updatedFetchMediaSignal: Signal<EngineFetchResourceSourceType, EngineFetchResourceError>?
|
||||
if mediaUpdated {
|
||||
if let updatedMediaReference = updatedMediaReference, imageDimensions != nil {
|
||||
if let imageReference = updatedMediaReference.concrete(TelegramMediaImage.self) {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import Display
|
||||
import ComponentFlow
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import SwiftSignalKit
|
||||
import AccountContext
|
||||
|
|
@ -145,7 +144,7 @@ final class CameraLiveStreamComponent: Component {
|
|||
|
||||
if let story = component.story {
|
||||
if self.storyContentDisposable == nil {
|
||||
let storyContent = SingleStoryContentContextImpl(context: component.context, storyId: StoryId(peerId: component.peerId, id: story.id), storyItem: story, readGlobally: false)
|
||||
let storyContent = SingleStoryContentContextImpl(context: component.context, storyId: EngineStoryId(peerId: component.peerId, id: story.id), storyItem: story, readGlobally: false)
|
||||
self.storyContent = storyContent
|
||||
self.storyContentDisposable = (storyContent.state
|
||||
|> deliverOnMainQueue).start(next: { [weak self] state in
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ swift_library(
|
|||
"//submodules/Display",
|
||||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/TelegramPresentationData",
|
||||
"//submodules/TextFormat",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import Display
|
||||
import AsyncDisplayKit
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import TextFormat
|
||||
|
|
@ -150,7 +149,7 @@ public final class ChatBotInfoItemNode: ListViewItemNode {
|
|||
}
|
||||
|
||||
let videoContent = NativeVideoContent(
|
||||
id: .message(0, MediaId(namespace: 0, id: Int64.random(in: 0..<Int64.max))),
|
||||
id: .message(0, EngineMedia.Id(namespace: 0, id: Int64.random(in: 0..<Int64.max))),
|
||||
userLocation: .other,
|
||||
fileReference: .standalone(media: file),
|
||||
streamVideo: .none,
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ swift_library(
|
|||
deps = [
|
||||
"//submodules/Display",
|
||||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
"//submodules/PhotoResources",
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import Display
|
||||
import AsyncDisplayKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import SwiftSignalKit
|
||||
import AVFoundation
|
||||
|
|
@ -134,7 +133,7 @@ private final class ChatContextResultPeekNode: ASDisplayNode, PeekControllerCont
|
|||
imageDimensions = externalReference.content?.dimensions?.cgSize
|
||||
if let content = externalReference.content, externalReference.type == "gif", let thumbnailResource = imageResource
|
||||
, let dimensions = content.dimensions {
|
||||
videoFileReference = .standalone(media: TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: 0), partialReference: nil, resource: content.resource, previewRepresentations: [TelegramMediaImageRepresentation(dimensions: dimensions, resource: thumbnailResource, progressiveSizes: [], immediateThumbnailData: nil, hasVideo: false, isPersonal: false)], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "video/mp4", size: nil, attributes: [.Animated, .Video(duration: 0, size: dimensions, flags: [], preloadSize: nil, coverTime: nil, videoCodec: nil)], alternativeRepresentations: []))
|
||||
videoFileReference = .standalone(media: TelegramMediaFile(fileId: EngineMedia.Id(namespace: Namespaces.Media.LocalFile, id: 0), partialReference: nil, resource: content.resource, previewRepresentations: [TelegramMediaImageRepresentation(dimensions: dimensions, resource: thumbnailResource, progressiveSizes: [], immediateThumbnailData: nil, hasVideo: false, isPersonal: false)], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "video/mp4", size: nil, attributes: [.Animated, .Video(duration: 0, size: dimensions, flags: [], preloadSize: nil, coverTime: nil, videoCodec: nil)], alternativeRepresentations: []))
|
||||
imageResource = nil
|
||||
}
|
||||
case let .internalReference(internalReference):
|
||||
|
|
@ -197,7 +196,7 @@ private final class ChatContextResultPeekNode: ASDisplayNode, PeekControllerCont
|
|||
if updatedImageResource {
|
||||
if let imageResource = imageResource {
|
||||
let tmpRepresentation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: Int32(fittedImageDimensions.width * 2.0), height: Int32(fittedImageDimensions.height * 2.0)), resource: imageResource, progressiveSizes: [], immediateThumbnailData: nil, hasVideo: false, isPersonal: false)
|
||||
let tmpImage = TelegramMediaImage(imageId: MediaId(namespace: 0, id: 0), representations: [tmpRepresentation], immediateThumbnailData: nil, reference: nil, partialReference: nil, flags: [])
|
||||
let tmpImage = TelegramMediaImage(imageId: EngineMedia.Id(namespace: 0, id: 0), representations: [tmpRepresentation], immediateThumbnailData: nil, reference: nil, partialReference: nil, flags: [])
|
||||
updateImageSignal = chatMessagePhoto(postbox: self.context.account.postbox, userLocation: .other, photoReference: .standalone(media: tmpImage))
|
||||
} else {
|
||||
updateImageSignal = .complete()
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ swift_library(
|
|||
"-warnings-as-errors",
|
||||
],
|
||||
deps = [
|
||||
"//submodules/Postbox",
|
||||
"//submodules/Display",
|
||||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
import Foundation
|
||||
import UIKit
|
||||
import Postbox
|
||||
import Display
|
||||
import AsyncDisplayKit
|
||||
import SwiftSignalKit
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ swift_library(
|
|||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/Display",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/TelegramPresentationData",
|
||||
"//submodules/AvatarNode",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import AsyncDisplayKit
|
||||
import Display
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import AvatarNode
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import Foundation
|
||||
import UIKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import AsyncDisplayKit
|
||||
import Display
|
||||
import SwiftSignalKit
|
||||
|
|
@ -13,14 +13,14 @@ import ChatMessageItemCommon
|
|||
private let titleFont = UIFont.systemFont(ofSize: 13.0)
|
||||
|
||||
public class ChatReplyCountItem: ListViewItem {
|
||||
public let index: MessageIndex
|
||||
public let index: EngineMessage.Index
|
||||
public let isComments: Bool
|
||||
public let count: Int
|
||||
public let presentationData: ChatPresentationData
|
||||
public let header: ChatMessageDateHeader
|
||||
public let controllerInteraction: ChatControllerInteraction
|
||||
|
||||
public init(index: MessageIndex, isComments: Bool, count: Int, presentationData: ChatPresentationData, context: AccountContext, controllerInteraction: ChatControllerInteraction) {
|
||||
public init(index: EngineMessage.Index, isComments: Bool, count: Int, presentationData: ChatPresentationData, context: AccountContext, controllerInteraction: ChatControllerInteraction) {
|
||||
self.index = index
|
||||
self.isComments = isComments
|
||||
self.count = count
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import Foundation
|
||||
import UIKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import AsyncDisplayKit
|
||||
import Display
|
||||
import SwiftSignalKit
|
||||
|
|
@ -13,12 +13,12 @@ import ChatMessageItemCommon
|
|||
private let titleFont = UIFont.systemFont(ofSize: 13.0)
|
||||
|
||||
public class ChatUnreadItem: ListViewItem {
|
||||
public let index: MessageIndex
|
||||
public let index: EngineMessage.Index
|
||||
public let presentationData: ChatPresentationData
|
||||
public let controllerInteraction: ChatControllerInteraction
|
||||
public let header: ChatMessageDateHeader
|
||||
|
||||
public init(index: MessageIndex, presentationData: ChatPresentationData, controllerInteraction: ChatControllerInteraction, context: AccountContext) {
|
||||
public init(index: EngineMessage.Index, presentationData: ChatPresentationData, controllerInteraction: ChatControllerInteraction, context: AccountContext) {
|
||||
self.index = index
|
||||
self.presentationData = presentationData
|
||||
self.controllerInteraction = controllerInteraction
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ swift_library(
|
|||
"//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit",
|
||||
"//submodules/AsyncDisplayKit:AsyncDisplayKit",
|
||||
"//submodules/Display:Display",
|
||||
"//submodules/Postbox:Postbox",
|
||||
"//submodules/TelegramCore:TelegramCore",
|
||||
"//submodules/AccountContext:AccountContext",
|
||||
"//submodules/TelegramPresentationData:TelegramPresentationData",
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import AsyncDisplayKit
|
|||
import Display
|
||||
import ComponentFlow
|
||||
import ComponentDisplayAdapters
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import TelegramUIPreferences
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ swift_library(
|
|||
"-warnings-as-errors",
|
||||
],
|
||||
deps = [
|
||||
"//submodules/Postbox",
|
||||
"//submodules/Display",
|
||||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
import Foundation
|
||||
import UIKit
|
||||
import Postbox
|
||||
import Display
|
||||
import AsyncDisplayKit
|
||||
import SwiftSignalKit
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ swift_library(
|
|||
deps = [
|
||||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/Display",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
"//submodules/TelegramPresentationData",
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import AsyncDisplayKit
|
||||
import Display
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import SwiftSignalKit
|
||||
import TelegramPresentationData
|
||||
|
|
@ -211,7 +210,7 @@ public final class ChatMessageSelectionInputPanelNode: ChatInputPanelNode {
|
|||
|
||||
private let canDeleteMessagesDisposable = MetaDisposable()
|
||||
|
||||
public var selectedMessages = Set<MessageId>() {
|
||||
public var selectedMessages = Set<EngineMessage.Id>() {
|
||||
didSet {
|
||||
if oldValue != self.selectedMessages {
|
||||
self.updateActions()
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ swift_library(
|
|||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/Display",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/TextFormat",
|
||||
"//submodules/UrlEscaping",
|
||||
"//submodules/TelegramUniversalVideoContent",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import AsyncDisplayKit
|
||||
import Display
|
||||
import TelegramCore
|
||||
import Postbox
|
||||
import TextFormat
|
||||
import UrlEscaping
|
||||
import TelegramUniversalVideoContent
|
||||
|
|
@ -654,7 +653,7 @@ public class ChatMessageTextBubbleContentNode: ChatMessageBubbleContentNode {
|
|||
|
||||
let currentDict = updatedString.attributes(at: range.lowerBound, effectiveRange: nil)
|
||||
var updatedAttributes: [NSAttributedString.Key: Any] = currentDict
|
||||
updatedAttributes[ChatTextInputAttributes.customEmoji] = ChatTextInputTextCustomEmojiAttribute(interactivelySelectedFromPackId: nil, fileId: fileId, file: item.message.associatedMedia[MediaId(namespace: Namespaces.Media.CloudFile, id: fileId)] as? TelegramMediaFile)
|
||||
updatedAttributes[ChatTextInputAttributes.customEmoji] = ChatTextInputTextCustomEmojiAttribute(interactivelySelectedFromPackId: nil, fileId: fileId, file: item.message.associatedMedia[EngineMedia.Id(namespace: Namespaces.Media.CloudFile, id: fileId)] as? TelegramMediaFile)
|
||||
|
||||
let insertString = NSAttributedString(string: updatedString.attributedSubstring(from: range).string, attributes: updatedAttributes)
|
||||
updatedString.replaceCharacters(in: range, with: insertString)
|
||||
|
|
@ -1419,7 +1418,7 @@ public class ChatMessageTextBubbleContentNode: ChatMessageBubbleContentNode {
|
|||
}
|
||||
}
|
||||
|
||||
override public func updateSearchTextHighlightState(text: String?, messages: [MessageIndex]?) {
|
||||
override public func updateSearchTextHighlightState(text: String?, messages: [EngineMessage.Index]?) {
|
||||
guard let item = self.item else {
|
||||
return
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import Display
|
||||
import AsyncDisplayKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import SwiftSignalKit
|
||||
import AccountContext
|
||||
|
|
@ -233,7 +232,7 @@ private final class ChatRankInfoSheetContent: CombinedComponent {
|
|||
|
||||
let listItemParams = ListViewItemLayoutParams(width: previewWidth, leftInset: 0.0, rightInset: 0.0, availableHeight: 10000.0, isStandalone: true)
|
||||
|
||||
let emptyUser = TelegramUser(id: PeerId(namespace: Namespaces.Peer.CloudUser, id: ._internalFromInt64Value(0)), accessHash: nil, firstName: "A", lastName: "", username: "", phone: "", photo: [], botInfo: nil, restrictionInfo: nil, flags: [], emojiStatus: nil, usernames: [], storiesHidden: nil, nameColor: nil, backgroundEmojiId: nil, profileColor: nil, profileBackgroundEmojiId: nil, subscriberCount: nil, verificationIconFileId: nil)
|
||||
let emptyUser = TelegramUser(id: EnginePeer.Id(namespace: Namespaces.Peer.CloudUser, id: ._internalFromInt64Value(0)), accessHash: nil, firstName: "A", lastName: "", username: "", phone: "", photo: [], botInfo: nil, restrictionInfo: nil, flags: [], emojiStatus: nil, usernames: [], storiesHidden: nil, nameColor: nil, backgroundEmojiId: nil, profileColor: nil, profileBackgroundEmojiId: nil, subscriberCount: nil, verificationIconFileId: nil)
|
||||
|
||||
let memberMessageItem = RankChatPreviewItem.MessageItem(
|
||||
peer: .user(emptyUser),
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import Display
|
||||
import TelegramCore
|
||||
import Postbox
|
||||
import SwiftSignalKit
|
||||
import TelegramPresentationData
|
||||
import TelegramBaseController
|
||||
|
|
@ -21,7 +20,7 @@ public final class ChatRecentActionsController: TelegramBaseController {
|
|||
|
||||
private let context: AccountContext
|
||||
private let peer: EnginePeer
|
||||
private let initialAdminPeerId: PeerId?
|
||||
private let initialAdminPeerId: EnginePeer.Id?
|
||||
let starsState: StarsRevenueStats?
|
||||
|
||||
private var presentationData: PresentationData
|
||||
|
|
@ -39,7 +38,7 @@ public final class ChatRecentActionsController: TelegramBaseController {
|
|||
|
||||
private var adminsDisposable: Disposable?
|
||||
|
||||
public init(context: AccountContext, peer: EnginePeer, adminPeerId: PeerId?, starsState: StarsRevenueStats?) {
|
||||
public init(context: AccountContext, peer: EnginePeer, adminPeerId: EnginePeer.Id?, starsState: StarsRevenueStats?) {
|
||||
self.context = context
|
||||
self.peer = peer
|
||||
self.initialAdminPeerId = adminPeerId
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ swift_library(
|
|||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
"//submodules/TelegramPresentationData",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/AppBundle",
|
||||
"//submodules/ContextUI",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import Display
|
||||
import AsyncDisplayKit
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import AppBundle
|
||||
|
|
@ -16,14 +15,14 @@ import ContextControllerImpl
|
|||
|
||||
public final class ChatSendAsPeerListContextItem: ContextMenuCustomItem {
|
||||
let context: AccountContext
|
||||
let chatPeerId: PeerId
|
||||
let chatPeerId: EnginePeer.Id
|
||||
let peers: [SendAsPeer]
|
||||
let selectedPeerId: PeerId?
|
||||
let selectedPeerId: EnginePeer.Id?
|
||||
let isPremium: Bool
|
||||
let action: (EnginePeer) -> Void
|
||||
let presentToast: (EnginePeer) -> Void
|
||||
|
||||
public init(context: AccountContext, chatPeerId: PeerId, peers: [SendAsPeer], selectedPeerId: PeerId?, isPremium: Bool, action: @escaping (EnginePeer) -> Void, presentToast: @escaping (EnginePeer) -> Void) {
|
||||
public init(context: AccountContext, chatPeerId: EnginePeer.Id, peers: [SendAsPeer], selectedPeerId: EnginePeer.Id?, isPremium: Bool, action: @escaping (EnginePeer) -> Void, presentToast: @escaping (EnginePeer) -> Void) {
|
||||
self.context = context
|
||||
self.chatPeerId = chatPeerId
|
||||
self.peers = peers
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ swift_library(
|
|||
],
|
||||
deps = [
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/Display",
|
||||
"//submodules/AsyncDisplayKit",
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
import Foundation
|
||||
import UIKit
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import Display
|
||||
import AsyncDisplayKit
|
||||
|
|
@ -1535,7 +1534,7 @@ public final class ChatSideTopicsPanel: Component {
|
|||
public func topicIndex(threadId: Int64?) -> Int? {
|
||||
if let threadId {
|
||||
if let value = self.rawItems.firstIndex(where: { item in
|
||||
if item.id == .chatList(PeerId(threadId)) {
|
||||
if item.id == .chatList(EnginePeer.Id(threadId)) {
|
||||
return true
|
||||
} else if item.id == .forum(threadId) {
|
||||
return true
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ swift_library(
|
|||
"//submodules/Display",
|
||||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/TelegramPresentationData",
|
||||
"//submodules/TextFormat",
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import UIKit
|
|||
import Display
|
||||
import AsyncDisplayKit
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import MobileCoreServices
|
||||
import TelegramPresentationData
|
||||
|
|
@ -4253,19 +4252,19 @@ public class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDeleg
|
|||
let _ = file
|
||||
let _ = itemLayer
|
||||
|
||||
var collectionId: ItemCollectionId?
|
||||
var collectionId: EngineItemCollectionId?
|
||||
for attribute in file.attributes {
|
||||
if case let .CustomEmoji(_, _, _, packReference) = attribute {
|
||||
switch packReference {
|
||||
case let .id(id, _):
|
||||
collectionId = ItemCollectionId(namespace: Namespaces.ItemCollection.CloudEmojiPacks, id: id)
|
||||
collectionId = EngineItemCollectionId(namespace: Namespaces.ItemCollection.CloudEmojiPacks, id: id)
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var bubbleUpEmojiOrStickersets: [ItemCollectionId] = []
|
||||
var bubbleUpEmojiOrStickersets: [EngineItemCollectionId] = []
|
||||
if let collectionId {
|
||||
bubbleUpEmojiOrStickersets.append(collectionId)
|
||||
}
|
||||
|
|
@ -4322,9 +4321,9 @@ public class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDeleg
|
|||
case let .CustomEmoji(_, _, displayText, stickerPackReference):
|
||||
text = displayText
|
||||
|
||||
var packId: ItemCollectionId?
|
||||
var packId: EngineItemCollectionId?
|
||||
if case let .id(id, _) = stickerPackReference {
|
||||
packId = ItemCollectionId(namespace: Namespaces.ItemCollection.CloudEmojiPacks, id: id)
|
||||
packId = EngineItemCollectionId(namespace: Namespaces.ItemCollection.CloudEmojiPacks, id: id)
|
||||
}
|
||||
emojiAttribute = ChatTextInputTextCustomEmojiAttribute(interactivelySelectedFromPackId: packId, fileId: file.fileId.id, file: file)
|
||||
break loop
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ swift_library(
|
|||
"//submodules/Display",
|
||||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/TelegramPresentationData",
|
||||
"//submodules/TextFormat",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import Display
|
||||
import AsyncDisplayKit
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import TextFormat
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ swift_library(
|
|||
deps = [
|
||||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/Display",
|
||||
"//submodules/TelegramPresentationData",
|
||||
|
|
|
|||
|
|
@ -4,16 +4,15 @@ import AsyncDisplayKit
|
|||
import Display
|
||||
import SwiftSignalKit
|
||||
import TelegramPresentationData
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import AvatarNode
|
||||
import AccountContext
|
||||
|
||||
private enum PeerAvatarReference: Equatable {
|
||||
case letters(PeerId, PeerColor?, [String])
|
||||
case letters(EnginePeer.Id, PeerColor?, [String])
|
||||
case image(PeerReference, TelegramMediaImageRepresentation)
|
||||
|
||||
var peerId: PeerId {
|
||||
var peerId: EnginePeer.Id {
|
||||
switch self {
|
||||
case let .letters(value, _, _):
|
||||
return value
|
||||
|
|
@ -35,13 +34,13 @@ private extension PeerAvatarReference {
|
|||
|
||||
private final class MergedAvatarsNodeArguments: NSObject {
|
||||
let peers: [PeerAvatarReference]
|
||||
let images: [PeerId: UIImage]
|
||||
let images: [EnginePeer.Id: UIImage]
|
||||
let imageSize: CGFloat
|
||||
let imageSpacing: CGFloat
|
||||
let borderWidth: CGFloat
|
||||
let avatarFontSize: CGFloat
|
||||
|
||||
init(peers: [PeerAvatarReference], images: [PeerId: UIImage], imageSize: CGFloat, imageSpacing: CGFloat, borderWidth: CGFloat, avatarFontSize: CGFloat) {
|
||||
init(peers: [PeerAvatarReference], images: [EnginePeer.Id: UIImage], imageSize: CGFloat, imageSpacing: CGFloat, borderWidth: CGFloat, avatarFontSize: CGFloat) {
|
||||
self.peers = peers
|
||||
self.images = images
|
||||
self.imageSize = imageSize
|
||||
|
|
@ -62,8 +61,8 @@ public final class MergedAvatarsNode: ASDisplayNode {
|
|||
public static let defaultAvatarFontSize: CGFloat = 8.0
|
||||
|
||||
private var peers: [PeerAvatarReference] = []
|
||||
private var images: [PeerId: UIImage] = [:]
|
||||
private var disposables: [PeerId: Disposable] = [:]
|
||||
private var images: [EnginePeer.Id: UIImage] = [:]
|
||||
private var disposables: [EnginePeer.Id: Disposable] = [:]
|
||||
private let buttonNode: HighlightTrackingButtonNode
|
||||
private var imageSize: CGFloat = defaultMergedImageSize
|
||||
private var imageSpacing: CGFloat = defaultMergedImageSpacing
|
||||
|
|
@ -110,20 +109,20 @@ public final class MergedAvatarsNode: ASDisplayNode {
|
|||
if filteredPeers != self.peers {
|
||||
self.peers = filteredPeers
|
||||
|
||||
var validImageIds: [PeerId] = []
|
||||
var validImageIds: [EnginePeer.Id] = []
|
||||
for peer in filteredPeers {
|
||||
if case .image = peer {
|
||||
validImageIds.append(peer.peerId)
|
||||
}
|
||||
}
|
||||
|
||||
var removedImageIds: [PeerId] = []
|
||||
var removedImageIds: [EnginePeer.Id] = []
|
||||
for (id, _) in self.images {
|
||||
if !validImageIds.contains(id) {
|
||||
removedImageIds.append(id)
|
||||
}
|
||||
}
|
||||
var removedDisposableIds: [PeerId] = []
|
||||
var removedDisposableIds: [EnginePeer.Id] = []
|
||||
for (id, disposable) in self.disposables {
|
||||
if !validImageIds.contains(id) {
|
||||
disposable.dispose()
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ swift_library(
|
|||
deps = [
|
||||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
"//submodules/Display",
|
||||
"//submodules/TelegramPresentationData",
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import AsyncDisplayKit
|
||||
import TelegramCore
|
||||
import Postbox
|
||||
import SwiftSignalKit
|
||||
import Display
|
||||
import TelegramPresentationData
|
||||
|
|
@ -24,7 +23,7 @@ import CompositeTextNode
|
|||
public final class ReplyAccessoryPanelNode: AccessoryPanelNode {
|
||||
private let messageDisposable = MetaDisposable()
|
||||
public let chatPeerId: EnginePeer.Id
|
||||
public let messageId: MessageId
|
||||
public let messageId: EngineMessage.Id
|
||||
public let quote: EngineMessageReplyQuote?
|
||||
public let innerSubject: EngineMessageReplyInnerSubject?
|
||||
|
||||
|
|
@ -47,7 +46,7 @@ public final class ReplyAccessoryPanelNode: AccessoryPanelNode {
|
|||
|
||||
private var validLayout: (size: CGSize, inset: CGFloat, interfaceState: ChatPresentationInterfaceState)?
|
||||
|
||||
public init(context: AccountContext, chatPeerId: EnginePeer.Id, messageId: MessageId, quote: EngineMessageReplyQuote?, innerSubject: EngineMessageReplyInnerSubject?, theme: PresentationTheme, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, dateTimeFormat: PresentationDateTimeFormat, animationCache: AnimationCache?, animationRenderer: MultiAnimationRenderer?) {
|
||||
public init(context: AccountContext, chatPeerId: EnginePeer.Id, messageId: EngineMessage.Id, quote: EngineMessageReplyQuote?, innerSubject: EngineMessageReplyInnerSubject?, theme: PresentationTheme, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, dateTimeFormat: PresentationDateTimeFormat, animationCache: AnimationCache?, animationRenderer: MultiAnimationRenderer?) {
|
||||
self.chatPeerId = chatPeerId
|
||||
self.messageId = messageId
|
||||
self.quote = quote
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import AsyncDisplayKit
|
||||
import Display
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import AccountContext
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import Display
|
|||
import ComponentFlow
|
||||
import SearchBarNode
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import AccountContext
|
||||
|
|
@ -185,7 +184,7 @@ public final class PaneSearchContainerNode: ASDisplayNode, EntitySearchContainer
|
|||
for attribute in file.attributes {
|
||||
if case let .Sticker(_, packReference, _) = attribute {
|
||||
if case let .id(id, _) = packReference {
|
||||
groupId = AnyHashable(ItemCollectionId(namespace: Namespaces.ItemCollection.CloudStickerPacks, id: id))
|
||||
groupId = AnyHashable(EngineItemCollectionId(namespace: Namespaces.ItemCollection.CloudStickerPacks, id: id))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ swift_library(
|
|||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/Display",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/AccountContext",
|
||||
"//submodules/ComponentFlow",
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import ComponentFlow
|
|||
import TelegramPresentationData
|
||||
import AccountContext
|
||||
import TelegramUIPreferences
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import PeerPresenceStatusManager
|
||||
import ChatTitleActivityNode
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import Display
|
||||
import AccountContext
|
||||
import TelegramCore
|
||||
import Postbox
|
||||
import SwiftSignalKit
|
||||
import TelegramPresentationData
|
||||
import LegacyComponents
|
||||
|
|
@ -170,7 +169,7 @@ public func presentPollAttachmentScreen(
|
|||
attributes.append(.Audio(isVoice: false, duration: audioMetadata.duration, title: audioMetadata.title, performer: audioMetadata.performer, waveform: nil))
|
||||
}
|
||||
|
||||
let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: fileId), partialReference: nil, resource: ICloudFileResource(urlData: item.urlData, thumbnail: false), previewRepresentations: previewRepresentations, videoThumbnails: [], immediateThumbnailData: nil, mimeType: mimeType, size: Int64(item.fileSize), attributes: attributes, alternativeRepresentations: [])
|
||||
let file = TelegramMediaFile(fileId: EngineMedia.Id(namespace: Namespaces.Media.LocalFile, id: fileId), partialReference: nil, resource: ICloudFileResource(urlData: item.urlData, thumbnail: false), previewRepresentations: previewRepresentations, videoThumbnails: [], immediateThumbnailData: nil, mimeType: mimeType, size: Int64(item.fileSize), attributes: attributes, alternativeRepresentations: [])
|
||||
completion(.standalone(media: file))
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import Display
|
||||
import AccountContext
|
||||
import TelegramCore
|
||||
import Postbox
|
||||
import SwiftSignalKit
|
||||
import TelegramPresentationData
|
||||
import ComponentFlow
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ swift_library(
|
|||
deps = [
|
||||
"//submodules/AsyncDisplayKit:AsyncDisplayKit",
|
||||
"//submodules/Display:Display",
|
||||
"//submodules/Postbox:Postbox",
|
||||
"//submodules/TelegramCore:TelegramCore",
|
||||
"//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit",
|
||||
"//submodules/ComponentFlow:ComponentFlow",
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ import TextFormat
|
|||
import AppBundle
|
||||
import GZip
|
||||
import EmojiStatusComponent
|
||||
import Postbox
|
||||
import TelegramNotices
|
||||
|
||||
private func randomGenericReactionEffect(context: AccountContext) -> Signal<String?, NoError> {
|
||||
|
|
@ -439,7 +438,7 @@ public final class EmojiStatusSelectionController: ViewController {
|
|||
openSearch: {
|
||||
},
|
||||
addGroupAction: { groupId, isPremiumLocked, _ in
|
||||
guard let strongSelf = self, let collectionId = groupId.base as? ItemCollectionId else {
|
||||
guard let strongSelf = self, let collectionId = groupId.base as? EngineItemCollectionId else {
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -550,7 +549,7 @@ public final class EmojiStatusSelectionController: ViewController {
|
|||
|> map { foundEmoji, foundPacks -> (groups: [EmojiPagerContentComponent.ItemGroup], canLoadMore: Bool, isSearching: Bool, searchContext: EmojiSearchContext?) in
|
||||
var items: [EmojiPagerContentComponent.Item] = []
|
||||
|
||||
var existingIds = Set<MediaId>()
|
||||
var existingIds = Set<EngineMedia.Id>()
|
||||
for itemFile in foundEmoji.items {
|
||||
if existingIds.contains(itemFile.fileId) {
|
||||
continue
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import ComponentFlow
|
|||
import PagerComponent
|
||||
import TelegramPresentationData
|
||||
import TelegramCore
|
||||
import Postbox
|
||||
import MultiAnimationRenderer
|
||||
import AnimationCache
|
||||
import AccountContext
|
||||
|
|
@ -38,8 +37,8 @@ public struct EmojiComponentReactionItem: Equatable {
|
|||
|
||||
public final class EntityKeyboardAnimationData: Equatable {
|
||||
public enum Id: Hashable {
|
||||
case file(MediaId)
|
||||
case stickerPackThumbnail(ItemCollectionId)
|
||||
case file(EngineMedia.Id)
|
||||
case stickerPackThumbnail(EngineItemCollectionId)
|
||||
case gift(String)
|
||||
}
|
||||
|
||||
|
|
@ -267,7 +266,7 @@ public final class EmojiPagerContentComponent: Component {
|
|||
public let externalCancel: (() -> Void)?
|
||||
public let onScroll: () -> Void
|
||||
public let loadMore: (() -> Void)?
|
||||
public let chatPeerId: PeerId?
|
||||
public let chatPeerId: EnginePeer.Id?
|
||||
public let peekBehavior: EmojiContentPeekBehavior?
|
||||
public let customLayout: CustomLayout?
|
||||
public let externalBackground: ExternalBackground?
|
||||
|
|
@ -298,7 +297,7 @@ public final class EmojiPagerContentComponent: Component {
|
|||
externalCancel: (() -> Void)? = nil,
|
||||
onScroll: @escaping () -> Void,
|
||||
loadMore: (() -> Void)? = nil,
|
||||
chatPeerId: PeerId?,
|
||||
chatPeerId: EnginePeer.Id?,
|
||||
peekBehavior: EmojiContentPeekBehavior?,
|
||||
customLayout: CustomLayout?,
|
||||
externalBackground: ExternalBackground?,
|
||||
|
|
@ -729,7 +728,7 @@ public final class EmojiPagerContentComponent: Component {
|
|||
)
|
||||
}
|
||||
|
||||
public func withSelectedItems(_ selectedItems: Set<MediaId>) -> EmojiPagerContentComponent {
|
||||
public func withSelectedItems(_ selectedItems: Set<EngineMedia.Id>) -> EmojiPagerContentComponent {
|
||||
return EmojiPagerContentComponent(
|
||||
id: self.id,
|
||||
context: self.context,
|
||||
|
|
@ -1746,7 +1745,7 @@ public final class EmojiPagerContentComponent: Component {
|
|||
}
|
||||
}
|
||||
|
||||
public func animateInReactionSelection(sourceItems: [MediaId: (frame: CGRect, cornerRadius: CGFloat, frameIndex: Int, placeholder: UIImage)]) {
|
||||
public func animateInReactionSelection(sourceItems: [EngineMedia.Id: (frame: CGRect, cornerRadius: CGFloat, frameIndex: Int, placeholder: UIImage)]) {
|
||||
guard let component = self.component, let itemLayout = self.itemLayout else {
|
||||
return
|
||||
}
|
||||
|
|
@ -3858,7 +3857,7 @@ public final class EmojiPagerContentComponent: Component {
|
|||
}
|
||||
var removedItemSelectionLayerIds: [EmojiKeyboardItemLayer.Key] = []
|
||||
for (id, itemSelectionLayer) in self.visibleItemSelectionLayers {
|
||||
var fileId: MediaId?
|
||||
var fileId: EngineMedia.Id?
|
||||
switch id.itemId {
|
||||
case let .animation(id):
|
||||
switch id {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import Display
|
|||
import ComponentFlow
|
||||
import TelegramPresentationData
|
||||
import TelegramCore
|
||||
import Postbox
|
||||
import AnimationCache
|
||||
import MultiAnimationRenderer
|
||||
import AccountContext
|
||||
|
|
@ -42,7 +41,7 @@ public final class EmojiSearchContent: ASDisplayNode, EntitySearchContainerNode
|
|||
|
||||
private let context: AccountContext
|
||||
private let forceTheme: PresentationTheme?
|
||||
private var initialFocusId: ItemCollectionId?
|
||||
private var initialFocusId: EngineItemCollectionId?
|
||||
private let hasPremiumForUse: Bool
|
||||
private let hasPremiumForInstallation: Bool
|
||||
private let parentInputInteraction: EmojiPagerContentComponent.InputInteraction
|
||||
|
|
@ -73,7 +72,7 @@ public final class EmojiSearchContent: ASDisplayNode, EntitySearchContainerNode
|
|||
context: AccountContext,
|
||||
forceTheme: PresentationTheme?,
|
||||
items: [FeaturedStickerPackItem],
|
||||
initialFocusId: ItemCollectionId?,
|
||||
initialFocusId: EngineItemCollectionId?,
|
||||
hasPremiumForUse: Bool,
|
||||
hasPremiumForInstallation: Bool,
|
||||
parentInputInteraction: EmojiPagerContentComponent.InputInteraction
|
||||
|
|
@ -263,7 +262,7 @@ public final class EmojiSearchContent: ASDisplayNode, EntitySearchContainerNode
|
|||
|
||||
var items: [EmojiPagerContentComponent.Item] = []
|
||||
|
||||
var existingIds = Set<MediaId>()
|
||||
var existingIds = Set<EngineMedia.Id>()
|
||||
for item in result {
|
||||
if let itemFile = item.1 {
|
||||
if existingIds.contains(itemFile.fileId) {
|
||||
|
|
@ -321,7 +320,7 @@ public final class EmojiSearchContent: ASDisplayNode, EntitySearchContainerNode
|
|||
|> mapToSignal { files, isFinalResult -> Signal<(items: [EmojiPagerContentComponent.ItemGroup], isFinalResult: Bool), NoError> in
|
||||
var items: [EmojiPagerContentComponent.Item] = []
|
||||
|
||||
var existingIds = Set<MediaId>()
|
||||
var existingIds = Set<EngineMedia.Id>()
|
||||
for itemFile in files {
|
||||
if existingIds.contains(itemFile.fileId) {
|
||||
continue
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import ComponentFlow
|
|||
import PagerComponent
|
||||
import TelegramPresentationData
|
||||
import TelegramCore
|
||||
import Postbox
|
||||
import BundleIconComponent
|
||||
import AudioToolbox
|
||||
import SwiftSignalKit
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import ComponentFlow
|
|||
import PagerComponent
|
||||
import TelegramPresentationData
|
||||
import TelegramCore
|
||||
import Postbox
|
||||
import AnimationCache
|
||||
import MultiAnimationRenderer
|
||||
import AccountContext
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import ComponentFlow
|
|||
import PagerComponent
|
||||
import TelegramPresentationData
|
||||
import TelegramCore
|
||||
import Postbox
|
||||
import MultiAnimationRenderer
|
||||
import AnimationCache
|
||||
import AccountContext
|
||||
|
|
@ -248,7 +247,7 @@ public final class GifPagerContentComponent: Component {
|
|||
}
|
||||
|
||||
fileprivate enum ItemKey: Hashable {
|
||||
case media(MediaId)
|
||||
case media(EngineMedia.Id)
|
||||
case placeholder(Int)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -126,7 +126,7 @@ public func paneGifSearchForQuery(context: AccountContext, query: String, offset
|
|||
))
|
||||
}
|
||||
}
|
||||
let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: uniqueId ?? 0), partialReference: nil, resource: resource, previewRepresentations: previews, videoThumbnails: videoThumbnails, immediateThumbnailData: nil, mimeType: "video/mp4", size: nil, attributes: [.Animated, .Video(duration: 0, size: dimensions, flags: [], preloadSize: nil, coverTime: nil, videoCodec: nil)], alternativeRepresentations: [])
|
||||
let file = TelegramMediaFile(fileId: EngineMedia.Id(namespace: Namespaces.Media.LocalFile, id: uniqueId ?? 0), partialReference: nil, resource: resource, previewRepresentations: previews, videoThumbnails: videoThumbnails, immediateThumbnailData: nil, mimeType: "video/mp4", size: nil, attributes: [.Animated, .Video(duration: 0, size: dimensions, flags: [], preloadSize: nil, coverTime: nil, videoCodec: nil)], alternativeRepresentations: [])
|
||||
references.append(MultiplexedVideoNodeFile(file: FileMediaReference.standalone(media: file), contextResult: (collection, result)))
|
||||
}
|
||||
case let .internalReference(internalReference):
|
||||
|
|
@ -339,7 +339,7 @@ public final class GifContext {
|
|||
gifItems = combineLatest(hasRecentGifs, paneGifSearchForQuery(context: context, query: query.joined(separator: ""), offset: token, incompleteResults: true, staleCachedResults: true, delayRequest: false, updateActivity: nil), searchCategories)
|
||||
|> map { hasRecentGifs, result, searchCategories -> EntityKeyboardGifContent in
|
||||
var items: [GifPagerContentComponent.Item] = []
|
||||
var existingIds = Set<MediaId>()
|
||||
var existingIds = Set<EngineMedia.Id>()
|
||||
for item in componentValue.component.items {
|
||||
items.append(item)
|
||||
existingIds.insert(item.file.media.fileId)
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ swift_library(
|
|||
deps = [
|
||||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/Display",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
"//submodules/TelegramPresentationData",
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import Photos
|
|||
import Display
|
||||
import AsyncDisplayKit
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import TelegramUIPreferences
|
||||
|
|
@ -205,7 +204,7 @@ final class ForumSettingsScreenComponent: Component {
|
|||
return context.engine.peers.setChannelForumMode(id: upgradedPeerId, isForum: true, displayForumAsTabs: mode == .tabs)
|
||||
})
|
||||
|> map(Optional.init)
|
||||
|> `catch` { [weak self] error -> Signal<PeerId?, NoError> in
|
||||
|> `catch` { [weak self] error -> Signal<EnginePeer.Id?, NoError> in
|
||||
guard let self, let controller = self.environment?.controller() else {
|
||||
return .single(nil)
|
||||
}
|
||||
|
|
@ -221,7 +220,7 @@ final class ForumSettingsScreenComponent: Component {
|
|||
}
|
||||
return .single(nil)
|
||||
}
|
||||
|> mapToSignal { upgradedPeerId -> Signal<PeerId?, NoError> in
|
||||
|> mapToSignal { upgradedPeerId -> Signal<EnginePeer.Id?, NoError> in
|
||||
guard let upgradedPeerId = upgradedPeerId else {
|
||||
return .single(nil)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ swift_library(
|
|||
deps = [
|
||||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/Display",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
"//submodules/TelegramPresentationData",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import Display
|
||||
import ComponentFlow
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import AppBundle
|
||||
import LocalMediaResources
|
||||
|
|
@ -367,7 +366,7 @@ private final class CraftGiftPageContent: Component {
|
|||
|
||||
let anvilPath = getAppBundle().url(forResource: "Anvil", withExtension: "tgs")?.path ?? ""
|
||||
let anvilFile = TelegramMediaFile(
|
||||
fileId: MediaId(namespace: Namespaces.Media.CloudFile, id: -123456789),
|
||||
fileId: EngineMedia.Id(namespace: Namespaces.Media.CloudFile, id: -123456789),
|
||||
partialReference: nil,
|
||||
resource: BundleResource(name: "Anvil", path: anvilPath),
|
||||
previewRepresentations: [],
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ swift_library(
|
|||
deps = [
|
||||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/Display",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
"//submodules/ComponentFlow",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import Display
|
||||
import AsyncDisplayKit
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import TelegramUIPreferences
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import Display
|
||||
import AsyncDisplayKit
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import TelegramUIPreferences
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import Display
|
||||
import AsyncDisplayKit
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import TelegramPresentationData
|
||||
import TelegramUIPreferences
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import Display
|
||||
import AsyncDisplayKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import SwiftSignalKit
|
||||
import AccountContext
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import Foundation
|
|||
import UIKit
|
||||
import Display
|
||||
import AsyncDisplayKit
|
||||
import Postbox
|
||||
import TelegramCore
|
||||
import SwiftSignalKit
|
||||
import AccountContext
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ swift_library(
|
|||
"//submodules/TelegramPresentationData",
|
||||
"//submodules/AccountContext",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/Components/ComponentDisplayAdapters",
|
||||
"//submodules/TelegramUIPreferences",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import AsyncDisplayKit
|
||||
import Display
|
||||
import TelegramCore
|
||||
import Postbox
|
||||
import TelegramPresentationData
|
||||
import TelegramUIPreferences
|
||||
import TelegramStringFormatting
|
||||
|
|
@ -102,7 +101,7 @@ final class GroupCallNavigationAccessoryPanel: ASDisplayNode {
|
|||
private let avatarsContext: AnimatedAvatarSetContext
|
||||
private var avatarsContent: AnimatedAvatarSetContext.Content?
|
||||
private let avatarsNode: AnimatedAvatarSetNode
|
||||
private var audioLevelGenerators: [PeerId: FakeAudioLevelGenerator] = [:]
|
||||
private var audioLevelGenerators: [EnginePeer.Id: FakeAudioLevelGenerator] = [:]
|
||||
private var audioLevelGeneratorTimer: SwiftSignalKit.Timer?
|
||||
|
||||
private let backgroundNode: ASDisplayNode
|
||||
|
|
@ -546,7 +545,7 @@ final class GroupCallNavigationAccessoryPanel: ASDisplayNode {
|
|||
self.audioLevelGenerators[peerId] = FakeAudioLevelGenerator()
|
||||
}
|
||||
}
|
||||
var removeGenerators: [PeerId] = []
|
||||
var removeGenerators: [EnginePeer.Id] = []
|
||||
for peerId in self.audioLevelGenerators.keys {
|
||||
if !data.activeSpeakers.contains(peerId) {
|
||||
removeGenerators.append(peerId)
|
||||
|
|
@ -571,7 +570,7 @@ final class GroupCallNavigationAccessoryPanel: ASDisplayNode {
|
|||
}
|
||||
|
||||
private func sampleAudioGenerators() {
|
||||
var levels: [PeerId: Float] = [:]
|
||||
var levels: [EnginePeer.Id: Float] = [:]
|
||||
for (peerId, generator) in self.audioLevelGenerators {
|
||||
levels[peerId] = generator.get()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ swift_library(
|
|||
"//submodules/AsyncDisplayKit",
|
||||
"//submodules/Display",
|
||||
"//submodules/TelegramCore",
|
||||
"//submodules/Postbox",
|
||||
"//submodules/SSignalKit/SwiftSignalKit",
|
||||
"//submodules/TelegramPresentationData",
|
||||
"//submodules/MediaResources",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import UIKit
|
|||
import AsyncDisplayKit
|
||||
import Display
|
||||
import TelegramCore
|
||||
import Postbox
|
||||
import SwiftSignalKit
|
||||
import TelegramPresentationData
|
||||
import MediaResources
|
||||
|
|
@ -133,7 +132,7 @@ public func legacyInputMicPalette(from theme: PresentationTheme) -> TGModernConv
|
|||
return TGModernConversationInputMicPallete(dark: theme.overallDarkAppearance, buttonColor: inputPanelTheme.actionControlFillColor, iconColor: inputPanelTheme.actionControlForegroundColor, backgroundColor: theme.rootController.navigationBar.opaqueBackgroundColor, borderColor: inputPanelTheme.panelSeparatorColor, lock: inputPanelTheme.panelControlAccentColor, textColor: inputPanelTheme.primaryTextColor, secondaryTextColor: inputPanelTheme.secondaryTextColor, recording: inputPanelTheme.mediaRecordingDotColor)
|
||||
}
|
||||
|
||||
public func legacyInstantVideoController(theme: PresentationTheme, forStory: Bool, panelFrame: CGRect, context: AccountContext, peerId: PeerId, slowmodeState: ChatSlowmodeState?, hasSchedule: Bool, send: @escaping (InstantVideoController, EnqueueMessage?) -> Void, displaySlowmodeTooltip: @escaping (UIView, CGRect) -> Void, presentSchedulePicker: @escaping (@escaping (Int32, Bool) -> Void) -> Void) -> InstantVideoController {
|
||||
public func legacyInstantVideoController(theme: PresentationTheme, forStory: Bool, panelFrame: CGRect, context: AccountContext, peerId: EnginePeer.Id, slowmodeState: ChatSlowmodeState?, hasSchedule: Bool, send: @escaping (InstantVideoController, EnqueueMessage?) -> Void, displaySlowmodeTooltip: @escaping (UIView, CGRect) -> Void, presentSchedulePicker: @escaping (@escaping (Int32, Bool) -> Void) -> Void) -> InstantVideoController {
|
||||
let isSecretChat = peerId.namespace == Namespaces.Peer.SecretChat
|
||||
|
||||
let legacyController = InstantVideoController(presentation: .custom, theme: theme)
|
||||
|
|
@ -203,8 +202,8 @@ public func legacyInstantVideoController(theme: PresentationTheme, forStory: Boo
|
|||
}
|
||||
|
||||
if let dict = adjustments.dictionary(), let data = try? NSKeyedArchiver.archivedData(withRootObject: dict, requiringSecureCoding: false) {
|
||||
let adjustmentsData = MemoryBuffer(data: data)
|
||||
let digest = MemoryBuffer(data: adjustmentsData.md5Digest())
|
||||
let adjustmentsData = EngineMemoryBuffer(data: data)
|
||||
let digest = EngineMemoryBuffer(data: adjustmentsData.md5Digest())
|
||||
resourceAdjustments = VideoMediaResourceAdjustments(data: adjustmentsData, digest: digest, isStory: false)
|
||||
}
|
||||
}
|
||||
|
|
@ -222,16 +221,16 @@ public func legacyInstantVideoController(theme: PresentationTheme, forStory: Boo
|
|||
}
|
||||
|
||||
if let previewImage = previewImage {
|
||||
let tempFile = TempBox.shared.tempFile(fileName: "file")
|
||||
let tempFile = EngineTempBox.shared.tempFile(fileName: "file")
|
||||
defer {
|
||||
TempBox.shared.dispose(tempFile)
|
||||
EngineTempBox.shared.dispose(tempFile)
|
||||
}
|
||||
if let data = compressImageToJPEG(previewImage, quality: 0.7, tempFilePath: tempFile.path) {
|
||||
context.account.postbox.mediaBox.storeCachedResourceRepresentation(resource, representation: CachedVideoFirstFrameRepresentation(), data: data)
|
||||
}
|
||||
}
|
||||
|
||||
let media = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: Int64.random(in: Int64.min ... Int64.max)), partialReference: nil, resource: resource, previewRepresentations: previewRepresentations, videoThumbnails: [], immediateThumbnailData: nil, mimeType: "video/mp4", size: nil, attributes: [.FileName(fileName: "video.mp4"), .Video(duration: finalDuration, size: PixelDimensions(finalDimensions), flags: [.instantRoundVideo], preloadSize: nil, coverTime: nil, videoCodec: nil)], alternativeRepresentations: [])
|
||||
let media = TelegramMediaFile(fileId: EngineMedia.Id(namespace: Namespaces.Media.LocalFile, id: Int64.random(in: Int64.min ... Int64.max)), partialReference: nil, resource: resource, previewRepresentations: previewRepresentations, videoThumbnails: [], immediateThumbnailData: nil, mimeType: "video/mp4", size: nil, attributes: [.FileName(fileName: "video.mp4"), .Video(duration: finalDuration, size: PixelDimensions(finalDimensions), flags: [.instantRoundVideo], preloadSize: nil, coverTime: nil, videoCodec: nil)], alternativeRepresentations: [])
|
||||
var message: EnqueueMessage = .message(text: "", attributes: [], inlineStickers: [:], mediaReference: .standalone(media: media), threadId: nil, replyToMessageId: nil, replyToStoryId: nil, localGroupingKey: nil, correlationId: nil, bubbleUpEmojiOrStickersets: [])
|
||||
|
||||
let scheduleTime: Int32? = scheduleTimestamp > 0 ? scheduleTimestamp : nil
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue