mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-11-07 01:10:09 +00:00
Various fixes
This commit is contained in:
parent
3caedf5670
commit
ab9bb767c2
@ -783,8 +783,6 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode {
|
|||||||
private let hasExpandedCaptionPromise = Promise<Bool>()
|
private let hasExpandedCaptionPromise = Promise<Bool>()
|
||||||
private var hideControlsDisposable: Disposable?
|
private var hideControlsDisposable: Disposable?
|
||||||
|
|
||||||
private var scrubbing = false
|
|
||||||
|
|
||||||
var playbackCompleted: (() -> Void)?
|
var playbackCompleted: (() -> Void)?
|
||||||
|
|
||||||
private var customUnembedWhenPortrait: ((OverlayMediaItemNode) -> Bool)?
|
private var customUnembedWhenPortrait: ((OverlayMediaItemNode) -> Bool)?
|
||||||
@ -1064,28 +1062,21 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode {
|
|||||||
|
|
||||||
strongSelf.isInteractingPromise.set(timecode != nil)
|
strongSelf.isInteractingPromise.set(timecode != nil)
|
||||||
|
|
||||||
if let timecode = timecode {
|
if let videoFramePreview = strongSelf.videoFramePreview {
|
||||||
strongSelf.videoNode?.pause()
|
if let timecode = timecode {
|
||||||
strongSelf.videoNode?.seek(timecode)
|
if !strongSelf.scrubbingFrames {
|
||||||
} else {
|
strongSelf.scrubbingFrames = true
|
||||||
strongSelf.videoNode?.play()
|
strongSelf.scrubbingFrame.set(videoFramePreview.generatedFrames
|
||||||
|
|> map(Optional.init))
|
||||||
|
}
|
||||||
|
videoFramePreview.generateFrame(at: timecode)
|
||||||
|
} else {
|
||||||
|
strongSelf.isInteractingPromise.set(false)
|
||||||
|
strongSelf.scrubbingFrame.set(.single(nil))
|
||||||
|
videoFramePreview.cancelPendingFrames()
|
||||||
|
strongSelf.scrubbingFrames = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if let videoFramePreview = strongSelf.videoFramePreview {
|
|
||||||
// if let timecode = timecode {
|
|
||||||
// if !strongSelf.scrubbingFrames {
|
|
||||||
// strongSelf.scrubbingFrames = true
|
|
||||||
// strongSelf.scrubbingFrame.set(videoFramePreview.generatedFrames
|
|
||||||
// |> map(Optional.init))
|
|
||||||
// }
|
|
||||||
// videoFramePreview.generateFrame(at: timecode)
|
|
||||||
// } else {
|
|
||||||
// strongSelf.isInteractingPromise.set(false)
|
|
||||||
// strongSelf.scrubbingFrame.set(.single(nil))
|
|
||||||
// videoFramePreview.cancelPendingFrames()
|
|
||||||
// strongSelf.scrubbingFrames = false
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
self.footerContentNode.scrubberView = scrubberView
|
self.footerContentNode.scrubberView = scrubberView
|
||||||
|
|
||||||
|
|||||||
@ -33,6 +33,7 @@
|
|||||||
@property (nonatomic) bool hasSilentPosting;
|
@property (nonatomic) bool hasSilentPosting;
|
||||||
@property (nonatomic) bool hasSchedule;
|
@property (nonatomic) bool hasSchedule;
|
||||||
@property (nonatomic) bool reminder;
|
@property (nonatomic) bool reminder;
|
||||||
|
@property (nonatomic) bool forum;
|
||||||
@property (nonatomic, copy) void (^presentScheduleController)(bool, void (^)(int32_t));
|
@property (nonatomic, copy) void (^presentScheduleController)(bool, void (^)(int32_t));
|
||||||
@property (nonatomic, copy) void (^presentTimerController)(void (^)(int32_t));
|
@property (nonatomic, copy) void (^presentTimerController)(void (^)(int32_t));
|
||||||
|
|
||||||
|
|||||||
@ -27,7 +27,7 @@ typedef void (^TGMediaAvatarPresentImpl)(id<LegacyComponentsContext>, void (^)(U
|
|||||||
|
|
||||||
- (instancetype)initWithContext:(id<LegacyComponentsContext>)context parentController:(TGViewController *)parentController hasDeleteButton:(bool)hasDeleteButton saveEditedPhotos:(bool)saveEditedPhotos saveCapturedMedia:(bool)saveCapturedMedia;
|
- (instancetype)initWithContext:(id<LegacyComponentsContext>)context parentController:(TGViewController *)parentController hasDeleteButton:(bool)hasDeleteButton saveEditedPhotos:(bool)saveEditedPhotos saveCapturedMedia:(bool)saveCapturedMedia;
|
||||||
- (instancetype)initWithContext:(id<LegacyComponentsContext>)context parentController:(TGViewController *)parentController hasDeleteButton:(bool)hasDeleteButton personalPhoto:(bool)personalPhoto saveEditedPhotos:(bool)saveEditedPhotos saveCapturedMedia:(bool)saveCapturedMedia;
|
- (instancetype)initWithContext:(id<LegacyComponentsContext>)context parentController:(TGViewController *)parentController hasDeleteButton:(bool)hasDeleteButton personalPhoto:(bool)personalPhoto saveEditedPhotos:(bool)saveEditedPhotos saveCapturedMedia:(bool)saveCapturedMedia;
|
||||||
- (instancetype)initWithContext:(id<LegacyComponentsContext>)context parentController:(TGViewController *)parentController hasSearchButton:(bool)hasSearchButton hasDeleteButton:(bool)hasDeleteButton hasViewButton:(bool)hasViewButton personalPhoto:(bool)personalPhoto isVideo:(bool)isVideo saveEditedPhotos:(bool)saveEditedPhotos saveCapturedMedia:(bool)saveCapturedMedia signup:(bool)signup;
|
- (instancetype)initWithContext:(id<LegacyComponentsContext>)context parentController:(TGViewController *)parentController hasSearchButton:(bool)hasSearchButton hasDeleteButton:(bool)hasDeleteButton hasViewButton:(bool)hasViewButton personalPhoto:(bool)personalPhoto isVideo:(bool)isVideo saveEditedPhotos:(bool)saveEditedPhotos saveCapturedMedia:(bool)saveCapturedMedia signup:(bool)signup forum:(bool)forum;
|
||||||
- (TGMenuSheetController *)present;
|
- (TGMenuSheetController *)present;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
@property (nonatomic, readonly) bool isTracking;
|
@property (nonatomic, readonly) bool isTracking;
|
||||||
@property (nonatomic, readonly) bool isAnimating;
|
@property (nonatomic, readonly) bool isAnimating;
|
||||||
|
|
||||||
- (instancetype)initWithOriginalSize:(CGSize)originalSize screenSize:(CGSize)screenSize fullPreviewView:(PGPhotoEditorView *)fullPreviewView fullPaintingView:(UIImageView *)fullPaintingView fullEntitiesView:(TGPhotoEntitiesContainerView *)fullEntitiesView;
|
- (instancetype)initWithOriginalSize:(CGSize)originalSize screenSize:(CGSize)screenSize fullPreviewView:(PGPhotoEditorView *)fullPreviewView fullPaintingView:(UIImageView *)fullPaintingView fullEntitiesView:(TGPhotoEntitiesContainerView *)fullEntitiesView square:(bool)square;
|
||||||
|
|
||||||
- (void)setSnapshotImage:(UIImage *)image;
|
- (void)setSnapshotImage:(UIImage *)image;
|
||||||
- (void)setSnapshotView:(UIView *)snapshotView;
|
- (void)setSnapshotView:(UIView *)snapshotView;
|
||||||
@ -56,7 +56,7 @@
|
|||||||
- (UIImage *)croppedImageWithMaxSize:(CGSize)maxSize;
|
- (UIImage *)croppedImageWithMaxSize:(CGSize)maxSize;
|
||||||
- (UIView *)cropSnapshotView;
|
- (UIView *)cropSnapshotView;
|
||||||
|
|
||||||
- (void)updateCircleImageWithReferenceSize:(CGSize)referenceSize;
|
- (void)updateCircleImageWithReferenceSize:(CGSize)referenceSize square:(bool)square;
|
||||||
|
|
||||||
+ (CGSize)areaInsetSize;
|
+ (CGSize)areaInsetSize;
|
||||||
|
|
||||||
|
|||||||
@ -20,7 +20,8 @@ typedef enum {
|
|||||||
TGPhotoEditorControllerSignupAvatarIntent = (1 << 1),
|
TGPhotoEditorControllerSignupAvatarIntent = (1 << 1),
|
||||||
TGPhotoEditorControllerFromCameraIntent = (1 << 2),
|
TGPhotoEditorControllerFromCameraIntent = (1 << 2),
|
||||||
TGPhotoEditorControllerWebIntent = (1 << 3),
|
TGPhotoEditorControllerWebIntent = (1 << 3),
|
||||||
TGPhotoEditorControllerVideoIntent = (1 << 4)
|
TGPhotoEditorControllerVideoIntent = (1 << 4),
|
||||||
|
TGPhotoEditorControllerForumAvatarIntent = (1 << 5)
|
||||||
} TGPhotoEditorControllerIntent;
|
} TGPhotoEditorControllerIntent;
|
||||||
|
|
||||||
@interface TGPhotoEditorController : TGOverlayController
|
@interface TGPhotoEditorController : TGOverlayController
|
||||||
|
|||||||
@ -908,7 +908,15 @@ const NSUInteger TGAttachmentDisplayedAssetLimit = 500;
|
|||||||
editableItem = [[TGCameraCapturedVideo alloc] initWithAsset:asset livePhoto:false];
|
editableItem = [[TGCameraCapturedVideo alloc] initWithAsset:asset livePhoto:false];
|
||||||
}
|
}
|
||||||
|
|
||||||
TGPhotoEditorController *controller = [[TGPhotoEditorController alloc] initWithContext:[windowManager context] item:editableItem intent:_disableStickers ? TGPhotoEditorControllerSignupAvatarIntent : TGPhotoEditorControllerAvatarIntent adjustments:nil caption:nil screenImage:thumbnailImage availableTabs:[TGPhotoEditorController defaultTabsForAvatarIntent] selectedTab:TGPhotoEditorCropTab];
|
TGPhotoEditorControllerIntent intent = TGPhotoEditorControllerAvatarIntent;
|
||||||
|
if (_disableStickers) {
|
||||||
|
intent = TGPhotoEditorControllerSignupAvatarIntent;
|
||||||
|
}
|
||||||
|
if (_forum) {
|
||||||
|
intent |= TGPhotoEditorControllerForumAvatarIntent;
|
||||||
|
}
|
||||||
|
|
||||||
|
TGPhotoEditorController *controller = [[TGPhotoEditorController alloc] initWithContext:[windowManager context] item:editableItem intent:intent adjustments:nil caption:nil screenImage:thumbnailImage availableTabs:[TGPhotoEditorController defaultTabsForAvatarIntent] selectedTab:TGPhotoEditorCropTab];
|
||||||
controller.editingContext = _editingContext;
|
controller.editingContext = _editingContext;
|
||||||
controller.stickersContext = _stickersContext;
|
controller.stickersContext = _stickersContext;
|
||||||
controller.dontHideStatusBar = true;
|
controller.dontHideStatusBar = true;
|
||||||
|
|||||||
@ -26,6 +26,7 @@
|
|||||||
bool _saveEditedPhotos;
|
bool _saveEditedPhotos;
|
||||||
bool _signup;
|
bool _signup;
|
||||||
bool _isVideo;
|
bool _isVideo;
|
||||||
|
bool _forum;
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@ -38,10 +39,10 @@
|
|||||||
|
|
||||||
- (instancetype)initWithContext:(id<LegacyComponentsContext>)context parentController:(TGViewController *)parentController hasDeleteButton:(bool)hasDeleteButton personalPhoto:(bool)personalPhoto saveEditedPhotos:(bool)saveEditedPhotos saveCapturedMedia:(bool)saveCapturedMedia
|
- (instancetype)initWithContext:(id<LegacyComponentsContext>)context parentController:(TGViewController *)parentController hasDeleteButton:(bool)hasDeleteButton personalPhoto:(bool)personalPhoto saveEditedPhotos:(bool)saveEditedPhotos saveCapturedMedia:(bool)saveCapturedMedia
|
||||||
{
|
{
|
||||||
return [self initWithContext:context parentController:parentController hasSearchButton:false hasDeleteButton:hasDeleteButton hasViewButton:false personalPhoto:personalPhoto isVideo:false saveEditedPhotos:saveEditedPhotos saveCapturedMedia:saveCapturedMedia signup:false];
|
return [self initWithContext:context parentController:parentController hasSearchButton:false hasDeleteButton:hasDeleteButton hasViewButton:false personalPhoto:personalPhoto isVideo:false saveEditedPhotos:saveEditedPhotos saveCapturedMedia:saveCapturedMedia signup:false forum: false];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithContext:(id<LegacyComponentsContext>)context parentController:(TGViewController *)parentController hasSearchButton:(bool)hasSearchButton hasDeleteButton:(bool)hasDeleteButton hasViewButton:(bool)hasViewButton personalPhoto:(bool)personalPhoto isVideo:(bool)isVideo saveEditedPhotos:(bool)saveEditedPhotos saveCapturedMedia:(bool)saveCapturedMedia signup:(bool)signup
|
- (instancetype)initWithContext:(id<LegacyComponentsContext>)context parentController:(TGViewController *)parentController hasSearchButton:(bool)hasSearchButton hasDeleteButton:(bool)hasDeleteButton hasViewButton:(bool)hasViewButton personalPhoto:(bool)personalPhoto isVideo:(bool)isVideo saveEditedPhotos:(bool)saveEditedPhotos saveCapturedMedia:(bool)saveCapturedMedia signup:(bool)signup forum:(bool)forum
|
||||||
{
|
{
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self != nil)
|
if (self != nil)
|
||||||
@ -56,6 +57,7 @@
|
|||||||
_personalPhoto = personalPhoto;
|
_personalPhoto = personalPhoto;
|
||||||
_isVideo = isVideo;
|
_isVideo = isVideo;
|
||||||
_signup = signup;
|
_signup = signup;
|
||||||
|
_forum = forum;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@ -91,6 +93,7 @@
|
|||||||
NSMutableArray *itemViews = [[NSMutableArray alloc] init];
|
NSMutableArray *itemViews = [[NSMutableArray alloc] init];
|
||||||
|
|
||||||
TGAttachmentCarouselItemView *carouselItem = [[TGAttachmentCarouselItemView alloc] initWithContext:_context camera:true selfPortrait:_personalPhoto forProfilePhoto:true assetType:_signup ? TGMediaAssetPhotoType : TGMediaAssetAnyType saveEditedPhotos:_saveEditedPhotos allowGrouping:false];
|
TGAttachmentCarouselItemView *carouselItem = [[TGAttachmentCarouselItemView alloc] initWithContext:_context camera:true selfPortrait:_personalPhoto forProfilePhoto:true assetType:_signup ? TGMediaAssetPhotoType : TGMediaAssetAnyType saveEditedPhotos:_saveEditedPhotos allowGrouping:false];
|
||||||
|
carouselItem.forum = _forum;
|
||||||
carouselItem.stickersContext = _stickersContext;
|
carouselItem.stickersContext = _stickersContext;
|
||||||
carouselItem.parentController = _parentController;
|
carouselItem.parentController = _parentController;
|
||||||
carouselItem.openEditor = true;
|
carouselItem.openEditor = true;
|
||||||
|
|||||||
@ -52,7 +52,7 @@ const CGFloat TGPhotoAvatarCropViewCurtainMargin = 200;
|
|||||||
|
|
||||||
@implementation TGPhotoAvatarCropView
|
@implementation TGPhotoAvatarCropView
|
||||||
|
|
||||||
- (instancetype)initWithOriginalSize:(CGSize)originalSize screenSize:(CGSize)screenSize fullPreviewView:(PGPhotoEditorView *)fullPreviewView fullPaintingView:(UIImageView *)fullPaintingView fullEntitiesView:(TGPhotoEntitiesContainerView *)fullEntitiesView
|
- (instancetype)initWithOriginalSize:(CGSize)originalSize screenSize:(CGSize)screenSize fullPreviewView:(PGPhotoEditorView *)fullPreviewView fullPaintingView:(UIImageView *)fullPaintingView fullEntitiesView:(TGPhotoEntitiesContainerView *)fullEntitiesView square:(bool)square
|
||||||
{
|
{
|
||||||
self = [super initWithFrame:CGRectZero];
|
self = [super initWithFrame:CGRectZero];
|
||||||
if (self != nil)
|
if (self != nil)
|
||||||
@ -142,7 +142,7 @@ const CGFloat TGPhotoAvatarCropViewCurtainMargin = 200;
|
|||||||
_areaMaskView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
_areaMaskView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
||||||
[self addSubview:_areaMaskView];
|
[self addSubview:_areaMaskView];
|
||||||
|
|
||||||
[self updateCircleImageWithReferenceSize:screenSize];
|
[self updateCircleImageWithReferenceSize:screenSize square:square];
|
||||||
|
|
||||||
UITapGestureRecognizer *tapRecognier = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
|
UITapGestureRecognizer *tapRecognier = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
|
||||||
[_wrapperView addGestureRecognizer:tapRecognier];
|
[_wrapperView addGestureRecognizer:tapRecognier];
|
||||||
@ -169,7 +169,7 @@ const CGFloat TGPhotoAvatarCropViewCurtainMargin = 200;
|
|||||||
self.tapped();
|
self.tapped();
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)updateCircleImageWithReferenceSize:(CGSize)referenceSize
|
- (void)updateCircleImageWithReferenceSize:(CGSize)referenceSize square:(bool)square
|
||||||
{
|
{
|
||||||
CGFloat shortSide = MIN(referenceSize.width, referenceSize.height);
|
CGFloat shortSide = MIN(referenceSize.width, referenceSize.height);
|
||||||
CGFloat diameter = shortSide - [TGPhotoAvatarCropView areaInsetSize].width * 2;
|
CGFloat diameter = shortSide - [TGPhotoAvatarCropView areaInsetSize].width * 2;
|
||||||
@ -183,7 +183,12 @@ const CGFloat TGPhotoAvatarCropViewCurtainMargin = 200;
|
|||||||
CGContextRef context = UIGraphicsGetCurrentContext();
|
CGContextRef context = UIGraphicsGetCurrentContext();
|
||||||
CGContextSetFillColorWithColor(context, [TGPhotoEditorInterfaceAssets cropTransparentOverlayColor].CGColor);
|
CGContextSetFillColorWithColor(context, [TGPhotoEditorInterfaceAssets cropTransparentOverlayColor].CGColor);
|
||||||
|
|
||||||
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, diameter, diameter)];
|
UIBezierPath *path;
|
||||||
|
if (square) {
|
||||||
|
path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, diameter, diameter) cornerRadius:diameter * 0.25];
|
||||||
|
} else {
|
||||||
|
path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, diameter, diameter)];
|
||||||
|
}
|
||||||
[path appendPath:[UIBezierPath bezierPathWithRect:CGRectMake(0, 0, diameter, diameter)]];
|
[path appendPath:[UIBezierPath bezierPathWithRect:CGRectMake(0, 0, diameter, diameter)]];
|
||||||
path.usesEvenOddFillRule = true;
|
path.usesEvenOddFillRule = true;
|
||||||
[path fill];
|
[path fill];
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
@property (nonatomic, weak) TGPhotoEntitiesContainerView *fullEntitiesView;
|
@property (nonatomic, weak) TGPhotoEntitiesContainerView *fullEntitiesView;
|
||||||
@property (nonatomic, weak) TGMediaPickerGalleryVideoScrubber *scrubberView;
|
@property (nonatomic, weak) TGMediaPickerGalleryVideoScrubber *scrubberView;
|
||||||
|
|
||||||
- (instancetype)initWithContext:(id<LegacyComponentsContext>)context photoEditor:(PGPhotoEditor *)photoEditor previewView:(TGPhotoEditorPreviewView *)previewView;
|
- (instancetype)initWithContext:(id<LegacyComponentsContext>)context photoEditor:(PGPhotoEditor *)photoEditor previewView:(TGPhotoEditorPreviewView *)previewView isForum:(bool)isForum;
|
||||||
|
|
||||||
- (void)setImage:(UIImage *)image;
|
- (void)setImage:(UIImage *)image;
|
||||||
- (void)setSnapshotImage:(UIImage *)snapshotImage;
|
- (void)setSnapshotImage:(UIImage *)snapshotImage;
|
||||||
|
|||||||
@ -47,6 +47,8 @@ const CGFloat TGPhotoAvatarPreviewLandscapePanelSize = TGPhotoAvatarPreviewPanel
|
|||||||
bool _wasPlayingBeforeCropping;
|
bool _wasPlayingBeforeCropping;
|
||||||
|
|
||||||
bool _scheduledTransitionIn;
|
bool _scheduledTransitionIn;
|
||||||
|
|
||||||
|
bool _isForum;
|
||||||
}
|
}
|
||||||
|
|
||||||
@property (nonatomic, weak) PGPhotoEditor *photoEditor;
|
@property (nonatomic, weak) PGPhotoEditor *photoEditor;
|
||||||
@ -56,12 +58,13 @@ const CGFloat TGPhotoAvatarPreviewLandscapePanelSize = TGPhotoAvatarPreviewPanel
|
|||||||
|
|
||||||
@implementation TGPhotoAvatarPreviewController
|
@implementation TGPhotoAvatarPreviewController
|
||||||
|
|
||||||
- (instancetype)initWithContext:(id<LegacyComponentsContext>)context photoEditor:(PGPhotoEditor *)photoEditor previewView:(TGPhotoEditorPreviewView *)previewView {
|
- (instancetype)initWithContext:(id<LegacyComponentsContext>)context photoEditor:(PGPhotoEditor *)photoEditor previewView:(TGPhotoEditorPreviewView *)previewView isForum:(bool)isForum {
|
||||||
self = [super initWithContext:context];
|
self = [super initWithContext:context];
|
||||||
if (self != nil)
|
if (self != nil)
|
||||||
{
|
{
|
||||||
self.photoEditor = photoEditor;
|
self.photoEditor = photoEditor;
|
||||||
self.previewView = previewView;
|
self.previewView = previewView;
|
||||||
|
_isForum = isForum;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@ -104,7 +107,7 @@ const CGFloat TGPhotoAvatarPreviewLandscapePanelSize = TGPhotoAvatarPreviewPanel
|
|||||||
};
|
};
|
||||||
|
|
||||||
PGPhotoEditor *photoEditor = self.photoEditor;
|
PGPhotoEditor *photoEditor = self.photoEditor;
|
||||||
TGPhotoAvatarCropView *cropView = [[TGPhotoAvatarCropView alloc] initWithOriginalSize:photoEditor.originalSize screenSize:[self referenceViewSize] fullPreviewView:_fullPreviewView fullPaintingView:_fullPaintingView fullEntitiesView:_fullEntitiesView];
|
TGPhotoAvatarCropView *cropView = [[TGPhotoAvatarCropView alloc] initWithOriginalSize:photoEditor.originalSize screenSize:[self referenceViewSize] fullPreviewView:_fullPreviewView fullPaintingView:_fullPaintingView fullEntitiesView:_fullEntitiesView square:_isForum];
|
||||||
_cropView = cropView;
|
_cropView = cropView;
|
||||||
[_cropView setCropRect:photoEditor.cropRect];
|
[_cropView setCropRect:photoEditor.cropRect];
|
||||||
[_cropView setCropOrientation:photoEditor.cropOrientation];
|
[_cropView setCropOrientation:photoEditor.cropOrientation];
|
||||||
@ -816,7 +819,7 @@ const CGFloat TGPhotoAvatarPreviewLandscapePanelSize = TGPhotoAvatarPreviewPanel
|
|||||||
|
|
||||||
CGSize referenceSize = [self referenceViewSize];
|
CGSize referenceSize = [self referenceViewSize];
|
||||||
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
|
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
|
||||||
[_cropView updateCircleImageWithReferenceSize:referenceSize];
|
[_cropView updateCircleImageWithReferenceSize:referenceSize square:_isForum];
|
||||||
|
|
||||||
CGFloat screenSide = MAX(referenceSize.width, referenceSize.height);
|
CGFloat screenSide = MAX(referenceSize.width, referenceSize.height);
|
||||||
_wrapperView.frame = CGRectMake((referenceSize.width - screenSide) / 2, (referenceSize.height - screenSide) / 2, screenSide, screenSide);
|
_wrapperView.frame = CGRectMake((referenceSize.width - screenSide) / 2, (referenceSize.height - screenSide) / 2, screenSide, screenSide);
|
||||||
|
|||||||
@ -1138,6 +1138,11 @@
|
|||||||
return _intent & (TGPhotoEditorControllerAvatarIntent | TGPhotoEditorControllerSignupAvatarIntent);
|
return _intent & (TGPhotoEditorControllerAvatarIntent | TGPhotoEditorControllerSignupAvatarIntent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (bool)presentedForForumAvatarCreation
|
||||||
|
{
|
||||||
|
return _intent & (TGPhotoEditorControllerForumAvatarIntent);
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - Transition
|
#pragma mark - Transition
|
||||||
|
|
||||||
- (void)transitionIn
|
- (void)transitionIn
|
||||||
@ -1325,7 +1330,7 @@
|
|||||||
{
|
{
|
||||||
bool skipInitialTransition = (![self presentedFromCamera] && self.navigationController != nil) || self.skipInitialTransition;
|
bool skipInitialTransition = (![self presentedFromCamera] && self.navigationController != nil) || self.skipInitialTransition;
|
||||||
|
|
||||||
TGPhotoAvatarPreviewController *cropController = [[TGPhotoAvatarPreviewController alloc] initWithContext:_context photoEditor:_photoEditor previewView:_previewView];
|
TGPhotoAvatarPreviewController *cropController = [[TGPhotoAvatarPreviewController alloc] initWithContext:_context photoEditor:_photoEditor previewView:_previewView isForum:[self presentedForForumAvatarCreation]];
|
||||||
cropController.scrubberView = _scrubberView;
|
cropController.scrubberView = _scrubberView;
|
||||||
cropController.dotImageView = _dotImageView;
|
cropController.dotImageView = _dotImageView;
|
||||||
cropController.dotMarkerView = _dotMarkerView;
|
cropController.dotMarkerView = _dotMarkerView;
|
||||||
|
|||||||
@ -58,7 +58,7 @@ public enum LegacyAttachmentMenuMediaEditing {
|
|||||||
case file
|
case file
|
||||||
}
|
}
|
||||||
|
|
||||||
public func legacyMediaEditor(context: AccountContext, peer: Peer, media: AnyMediaReference, initialCaption: NSAttributedString, snapshots: [UIView], transitionCompletion: (() -> Void)?, presentStickers: @escaping (@escaping (TelegramMediaFile, Bool, UIView, CGRect) -> Void) -> TGPhotoPaintStickersScreen?, getCaptionPanelView: @escaping () -> TGCaptionPanelView?, sendMessagesWithSignals: @escaping ([Any]?, Bool, Int32) -> Void, present: @escaping (ViewController, Any?) -> Void) {
|
public func legacyMediaEditor(context: AccountContext, peer: Peer, threadTitle: String?, media: AnyMediaReference, initialCaption: NSAttributedString, snapshots: [UIView], transitionCompletion: (() -> Void)?, presentStickers: @escaping (@escaping (TelegramMediaFile, Bool, UIView, CGRect) -> Void) -> TGPhotoPaintStickersScreen?, getCaptionPanelView: @escaping () -> TGCaptionPanelView?, sendMessagesWithSignals: @escaping ([Any]?, Bool, Int32) -> Void, present: @escaping (ViewController, Any?) -> Void) {
|
||||||
let _ = (fetchMediaData(context: context, postbox: context.account.postbox, mediaReference: media)
|
let _ = (fetchMediaData(context: context, postbox: context.account.postbox, mediaReference: media)
|
||||||
|> deliverOnMainQueue).start(next: { (value, isImage) in
|
|> deliverOnMainQueue).start(next: { (value, isImage) in
|
||||||
guard case let .data(data) = value, data.complete else {
|
guard case let .data(data) = value, data.complete else {
|
||||||
@ -85,7 +85,16 @@ public func legacyMediaEditor(context: AccountContext, peer: Peer, media: AnyMed
|
|||||||
}
|
}
|
||||||
|
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||||
let recipientName = EnginePeer(peer).displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
let recipientName: String
|
||||||
|
if let threadTitle {
|
||||||
|
recipientName = threadTitle
|
||||||
|
} else {
|
||||||
|
if peer.id == context.account.peerId {
|
||||||
|
recipientName = presentationData.strings.DialogList_SavedMessages
|
||||||
|
} else {
|
||||||
|
recipientName = EnginePeer(peer).displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let legacyController = LegacyController(presentation: .custom, theme: presentationData.theme, initialLayout: nil)
|
let legacyController = LegacyController(presentation: .custom, theme: presentationData.theme, initialLayout: nil)
|
||||||
legacyController.blocksBackgroundWhenInOverlay = true
|
legacyController.blocksBackgroundWhenInOverlay = true
|
||||||
@ -123,11 +132,22 @@ public func legacyMediaEditor(context: AccountContext, peer: Peer, media: AnyMed
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public func legacyAttachmentMenu(context: AccountContext, peer: Peer, chatLocation: ChatLocation, editMediaOptions: LegacyAttachmentMenuMediaEditing?, saveEditedPhotos: Bool, allowGrouping: Bool, hasSchedule: Bool, canSendPolls: Bool, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>), parentController: LegacyController, recentlyUsedInlineBots: [Peer], initialCaption: NSAttributedString, openGallery: @escaping () -> Void, openCamera: @escaping (TGAttachmentCameraView?, TGMenuSheetController?) -> Void, openFileGallery: @escaping () -> Void, openWebSearch: @escaping () -> Void, openMap: @escaping () -> Void, openContacts: @escaping () -> Void, openPoll: @escaping () -> Void, presentSelectionLimitExceeded: @escaping () -> Void, presentCantSendMultipleFiles: @escaping () -> Void, presentJpegConversionAlert: @escaping (@escaping (Bool) -> Void) -> Void, presentSchedulePicker: @escaping (Bool, @escaping (Int32) -> Void) -> Void, presentTimerPicker: @escaping (@escaping (Int32) -> Void) -> Void, sendMessagesWithSignals: @escaping ([Any]?, Bool, Int32, ((String) -> UIView?)?, @escaping () -> Void) -> Void, selectRecentlyUsedInlineBot: @escaping (Peer) -> Void, presentStickers: @escaping (@escaping (TelegramMediaFile, Bool, UIView, CGRect) -> Void) -> TGPhotoPaintStickersScreen?, getCaptionPanelView: @escaping () -> TGCaptionPanelView?, present: @escaping (ViewController, Any?) -> Void) -> TGMenuSheetController {
|
public func legacyAttachmentMenu(context: AccountContext, peer: Peer, threadTitle: String?, chatLocation: ChatLocation, editMediaOptions: LegacyAttachmentMenuMediaEditing?, saveEditedPhotos: Bool, allowGrouping: Bool, hasSchedule: Bool, canSendPolls: Bool, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>), parentController: LegacyController, recentlyUsedInlineBots: [Peer], initialCaption: NSAttributedString, openGallery: @escaping () -> Void, openCamera: @escaping (TGAttachmentCameraView?, TGMenuSheetController?) -> Void, openFileGallery: @escaping () -> Void, openWebSearch: @escaping () -> Void, openMap: @escaping () -> Void, openContacts: @escaping () -> Void, openPoll: @escaping () -> Void, presentSelectionLimitExceeded: @escaping () -> Void, presentCantSendMultipleFiles: @escaping () -> Void, presentJpegConversionAlert: @escaping (@escaping (Bool) -> Void) -> Void, presentSchedulePicker: @escaping (Bool, @escaping (Int32) -> Void) -> Void, presentTimerPicker: @escaping (@escaping (Int32) -> Void) -> Void, sendMessagesWithSignals: @escaping ([Any]?, Bool, Int32, ((String) -> UIView?)?, @escaping () -> Void) -> Void, selectRecentlyUsedInlineBot: @escaping (Peer) -> Void, presentStickers: @escaping (@escaping (TelegramMediaFile, Bool, UIView, CGRect) -> Void) -> TGPhotoPaintStickersScreen?, getCaptionPanelView: @escaping () -> TGCaptionPanelView?, present: @escaping (ViewController, Any?) -> Void) -> TGMenuSheetController {
|
||||||
let defaultVideoPreset = defaultVideoPresetForContext(context)
|
let defaultVideoPreset = defaultVideoPresetForContext(context)
|
||||||
UserDefaults.standard.set(defaultVideoPreset.rawValue as NSNumber, forKey: "TG_preferredVideoPreset_v0")
|
UserDefaults.standard.set(defaultVideoPreset.rawValue as NSNumber, forKey: "TG_preferredVideoPreset_v0")
|
||||||
|
|
||||||
let presentationData = updatedPresentationData.initial
|
let presentationData = updatedPresentationData.initial
|
||||||
|
let recipientName: String
|
||||||
|
if let threadTitle {
|
||||||
|
recipientName = threadTitle
|
||||||
|
} else {
|
||||||
|
if peer.id == context.account.peerId {
|
||||||
|
recipientName = presentationData.strings.DialogList_SavedMessages
|
||||||
|
} else {
|
||||||
|
recipientName = EnginePeer(peer).displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let actionSheetTheme = ActionSheetControllerTheme(presentationData: presentationData)
|
let actionSheetTheme = ActionSheetControllerTheme(presentationData: presentationData)
|
||||||
let fontSize = floor(actionSheetTheme.baseFontSize * 20.0 / 17.0)
|
let fontSize = floor(actionSheetTheme.baseFontSize * 20.0 / 17.0)
|
||||||
|
|
||||||
@ -187,7 +207,7 @@ public func legacyAttachmentMenu(context: AccountContext, peer: Peer, chatLocati
|
|||||||
let carouselItem = TGAttachmentCarouselItemView(context: parentController.context, camera: PGCamera.cameraAvailable(), selfPortrait: false, forProfilePhoto: false, assetType: TGMediaAssetAnyType, saveEditedPhotos: !isSecretChat && saveEditedPhotos, allowGrouping: editMediaOptions == nil && allowGrouping, allowSelection: editMediaOptions == nil, allowEditing: true, document: false, selectionLimit: selectionLimit)!
|
let carouselItem = TGAttachmentCarouselItemView(context: parentController.context, camera: PGCamera.cameraAvailable(), selfPortrait: false, forProfilePhoto: false, assetType: TGMediaAssetAnyType, saveEditedPhotos: !isSecretChat && saveEditedPhotos, allowGrouping: editMediaOptions == nil && allowGrouping, allowSelection: editMediaOptions == nil, allowEditing: true, document: false, selectionLimit: selectionLimit)!
|
||||||
carouselItemView = carouselItem
|
carouselItemView = carouselItem
|
||||||
carouselItem.stickersContext = paintStickersContext
|
carouselItem.stickersContext = paintStickersContext
|
||||||
carouselItem.recipientName = EnginePeer(peer).displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
carouselItem.recipientName = recipientName
|
||||||
var openedCamera = false
|
var openedCamera = false
|
||||||
controller.willDismiss = { [weak carouselItem] _ in
|
controller.willDismiss = { [weak carouselItem] _ in
|
||||||
if let carouselItem = carouselItem, !openedCamera {
|
if let carouselItem = carouselItem, !openedCamera {
|
||||||
|
|||||||
@ -19,7 +19,7 @@ public func presentLegacyAvatarPicker(holder: Atomic<NSObject?>, signup: Bool, t
|
|||||||
|
|
||||||
present(legacyController, nil)
|
present(legacyController, nil)
|
||||||
|
|
||||||
let mixin = TGMediaAvatarMenuMixin(context: legacyController.context, parentController: emptyController, hasSearchButton: false, hasDeleteButton: false, hasViewButton: openCurrent != nil, personalPhoto: true, isVideo: false, saveEditedPhotos: false, saveCapturedMedia: false, signup: signup)!
|
let mixin = TGMediaAvatarMenuMixin(context: legacyController.context, parentController: emptyController, hasSearchButton: false, hasDeleteButton: false, hasViewButton: openCurrent != nil, personalPhoto: true, isVideo: false, saveEditedPhotos: false, saveCapturedMedia: false, signup: signup, forum: false)!
|
||||||
let _ = holder.swap(mixin)
|
let _ = holder.swap(mixin)
|
||||||
mixin.didFinishWithImage = { image in
|
mixin.didFinishWithImage = { image in
|
||||||
guard let image = image else {
|
guard let image = image else {
|
||||||
|
|||||||
@ -125,9 +125,20 @@ public class LegacyAssetPickerContext: AttachmentMediaPickerContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public func legacyAssetPicker(context: AccountContext, presentationData: PresentationData, editingMedia: Bool, fileMode: Bool, peer: Peer?, saveEditedPhotos: Bool, allowGrouping: Bool, selectionLimit: Int) -> Signal<(LegacyComponentsContext) -> TGMediaAssetsController, Void> {
|
public func legacyAssetPicker(context: AccountContext, presentationData: PresentationData, editingMedia: Bool, fileMode: Bool, peer: Peer?, threadTitle: String?, saveEditedPhotos: Bool, allowGrouping: Bool, selectionLimit: Int) -> Signal<(LegacyComponentsContext) -> TGMediaAssetsController, Void> {
|
||||||
let isSecretChat = (peer?.id.namespace._internalGetInt32Value() ?? 0) == Namespaces.Peer.SecretChat._internalGetInt32Value()
|
let isSecretChat = (peer?.id.namespace._internalGetInt32Value() ?? 0) == Namespaces.Peer.SecretChat._internalGetInt32Value()
|
||||||
|
|
||||||
|
let recipientName: String?
|
||||||
|
if let threadTitle {
|
||||||
|
recipientName = threadTitle
|
||||||
|
} else {
|
||||||
|
if peer?.id == context.account.peerId {
|
||||||
|
recipientName = presentationData.strings.DialogList_SavedMessages
|
||||||
|
} else {
|
||||||
|
recipientName = peer.flatMap(EnginePeer.init)?.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return Signal { subscriber in
|
return Signal { subscriber in
|
||||||
let intent = fileMode ? TGMediaAssetsControllerSendFileIntent : TGMediaAssetsControllerSendMediaIntent
|
let intent = fileMode ? TGMediaAssetsControllerSendFileIntent : TGMediaAssetsControllerSendMediaIntent
|
||||||
let defaultVideoPreset = defaultVideoPresetForContext(context)
|
let defaultVideoPreset = defaultVideoPresetForContext(context)
|
||||||
@ -146,7 +157,7 @@ public func legacyAssetPicker(context: AccountContext, presentationData: Present
|
|||||||
} else {
|
} else {
|
||||||
Queue.mainQueue().async {
|
Queue.mainQueue().async {
|
||||||
subscriber.putNext({ context in
|
subscriber.putNext({ context in
|
||||||
let controller = TGMediaAssetsController(context: context, assetGroup: group, intent: intent, recipientName: peer.flatMap(EnginePeer.init)?.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder), saveEditedPhotos: !isSecretChat && saveEditedPhotos, allowGrouping: allowGrouping, inhibitSelection: editingMedia, selectionLimit: Int32(selectionLimit))
|
let controller = TGMediaAssetsController(context: context, assetGroup: group, intent: intent, recipientName: recipientName, saveEditedPhotos: !isSecretChat && saveEditedPhotos, allowGrouping: allowGrouping, inhibitSelection: editingMedia, selectionLimit: Int32(selectionLimit))
|
||||||
return controller!
|
return controller!
|
||||||
})
|
})
|
||||||
subscriber.putCompletion()
|
subscriber.putCompletion()
|
||||||
@ -155,7 +166,7 @@ public func legacyAssetPicker(context: AccountContext, presentationData: Present
|
|||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
subscriber.putNext({ context in
|
subscriber.putNext({ context in
|
||||||
let controller = TGMediaAssetsController(context: context, assetGroup: nil, intent: intent, recipientName: peer.flatMap(EnginePeer.init)?.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder), saveEditedPhotos: !isSecretChat && saveEditedPhotos, allowGrouping: allowGrouping, inhibitSelection: editingMedia, selectionLimit: Int32(selectionLimit))
|
let controller = TGMediaAssetsController(context: context, assetGroup: nil, intent: intent, recipientName: recipientName, saveEditedPhotos: !isSecretChat && saveEditedPhotos, allowGrouping: allowGrouping, inhibitSelection: editingMedia, selectionLimit: Int32(selectionLimit))
|
||||||
return controller!
|
return controller!
|
||||||
})
|
})
|
||||||
subscriber.putCompletion()
|
subscriber.putCompletion()
|
||||||
|
|||||||
@ -100,7 +100,7 @@ enum LegacyMediaPickerGallerySource {
|
|||||||
case selection(item: TGMediaSelectableItem)
|
case selection(item: TGMediaSelectableItem)
|
||||||
}
|
}
|
||||||
|
|
||||||
func presentLegacyMediaPickerGallery(context: AccountContext, peer: EnginePeer?, chatLocation: ChatLocation?, presentationData: PresentationData, source: LegacyMediaPickerGallerySource, immediateThumbnail: UIImage?, selectionContext: TGMediaSelectionContext?, editingContext: TGMediaEditingContext, hasSilentPosting: Bool, hasSchedule: Bool, hasTimer: Bool, updateHiddenMedia: @escaping (String?) -> Void, initialLayout: ContainerViewLayout?, transitionHostView: @escaping () -> UIView?, transitionView: @escaping (String) -> UIView?, completed: @escaping (TGMediaSelectableItem & TGMediaEditableItem, Bool, Int32?, @escaping () -> Void) -> Void, presentStickers: ((@escaping (TelegramMediaFile, Bool, UIView, CGRect) -> Void) -> TGPhotoPaintStickersScreen?)?, presentSchedulePicker: @escaping (Bool, @escaping (Int32) -> Void) -> Void, presentTimerPicker: @escaping (@escaping (Int32) -> Void) -> Void, getCaptionPanelView: @escaping () -> TGCaptionPanelView?, present: @escaping (ViewController, Any?) -> Void, finishedTransitionIn: @escaping () -> Void, willTransitionOut: @escaping () -> Void, dismissAll: @escaping () -> Void) -> TGModernGalleryController {
|
func presentLegacyMediaPickerGallery(context: AccountContext, peer: EnginePeer?, threadTitle: String?, chatLocation: ChatLocation?, presentationData: PresentationData, source: LegacyMediaPickerGallerySource, immediateThumbnail: UIImage?, selectionContext: TGMediaSelectionContext?, editingContext: TGMediaEditingContext, hasSilentPosting: Bool, hasSchedule: Bool, hasTimer: Bool, updateHiddenMedia: @escaping (String?) -> Void, initialLayout: ContainerViewLayout?, transitionHostView: @escaping () -> UIView?, transitionView: @escaping (String) -> UIView?, completed: @escaping (TGMediaSelectableItem & TGMediaEditableItem, Bool, Int32?, @escaping () -> Void) -> Void, presentStickers: ((@escaping (TelegramMediaFile, Bool, UIView, CGRect) -> Void) -> TGPhotoPaintStickersScreen?)?, presentSchedulePicker: @escaping (Bool, @escaping (Int32) -> Void) -> Void, presentTimerPicker: @escaping (@escaping (Int32) -> Void) -> Void, getCaptionPanelView: @escaping () -> TGCaptionPanelView?, present: @escaping (ViewController, Any?) -> Void, finishedTransitionIn: @escaping () -> Void, willTransitionOut: @escaping () -> Void, dismissAll: @escaping () -> Void) -> TGModernGalleryController {
|
||||||
let reminder = peer?.id == context.account.peerId
|
let reminder = peer?.id == context.account.peerId
|
||||||
let hasSilentPosting = hasSilentPosting && peer?.id != context.account.peerId
|
let hasSilentPosting = hasSilentPosting && peer?.id != context.account.peerId
|
||||||
|
|
||||||
@ -136,10 +136,14 @@ func presentLegacyMediaPickerGallery(context: AccountContext, peer: EnginePeer?,
|
|||||||
}
|
}
|
||||||
|
|
||||||
let recipientName: String?
|
let recipientName: String?
|
||||||
if peer?.id == context.account.peerId {
|
if let threadTitle {
|
||||||
recipientName = presentationData.strings.DialogList_SavedMessages
|
recipientName = threadTitle
|
||||||
} else {
|
} else {
|
||||||
recipientName = peer?.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
if peer?.id == context.account.peerId {
|
||||||
|
recipientName = presentationData.strings.DialogList_SavedMessages
|
||||||
|
} else {
|
||||||
|
recipientName = peer?.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let model = TGMediaPickerGalleryModel(context: legacyController.context, items: items, focus: focusItem, selectionContext: selectionContext, editingContext: editingContext, hasCaptions: true, allowCaptionEntities: true, hasTimer: hasTimer, onlyCrop: false, inhibitDocumentCaptions: false, hasSelectionPanel: true, hasCamera: false, recipientName: recipientName)!
|
let model = TGMediaPickerGalleryModel(context: legacyController.context, items: items, focus: focusItem, selectionContext: selectionContext, editingContext: editingContext, hasCaptions: true, allowCaptionEntities: true, hasTimer: hasTimer, onlyCrop: false, inhibitDocumentCaptions: false, hasSelectionPanel: true, hasCamera: false, recipientName: recipientName)!
|
||||||
|
|||||||
@ -139,6 +139,7 @@ public final class MediaPickerScreen: ViewController, AttachmentContainable {
|
|||||||
fileprivate var interaction: MediaPickerInteraction?
|
fileprivate var interaction: MediaPickerInteraction?
|
||||||
|
|
||||||
private let peer: EnginePeer?
|
private let peer: EnginePeer?
|
||||||
|
private let threadTitle: String?
|
||||||
private let chatLocation: ChatLocation?
|
private let chatLocation: ChatLocation?
|
||||||
private let bannedSendMedia: (Int32, Bool)?
|
private let bannedSendMedia: (Int32, Bool)?
|
||||||
private let subject: Subject
|
private let subject: Subject
|
||||||
@ -670,7 +671,7 @@ public final class MediaPickerScreen: ViewController, AttachmentContainable {
|
|||||||
reversed = false
|
reversed = false
|
||||||
}
|
}
|
||||||
let index = reversed ? fetchResult.count - index - 1 : index
|
let index = reversed ? fetchResult.count - index - 1 : index
|
||||||
self.currentGalleryController = presentLegacyMediaPickerGallery(context: controller.context, peer: controller.peer, chatLocation: controller.chatLocation, presentationData: self.presentationData, source: .fetchResult(fetchResult: fetchResult, index: index, reversed: reversed), immediateThumbnail: immediateThumbnail, selectionContext: interaction.selectionState, editingContext: interaction.editingState, hasSilentPosting: true, hasSchedule: hasSchedule, hasTimer: hasTimer, updateHiddenMedia: { [weak self] id in
|
self.currentGalleryController = presentLegacyMediaPickerGallery(context: controller.context, peer: controller.peer, threadTitle: controller.threadTitle, chatLocation: controller.chatLocation, presentationData: self.presentationData, source: .fetchResult(fetchResult: fetchResult, index: index, reversed: reversed), immediateThumbnail: immediateThumbnail, selectionContext: interaction.selectionState, editingContext: interaction.editingState, hasSilentPosting: true, hasSchedule: hasSchedule, hasTimer: hasTimer, updateHiddenMedia: { [weak self] id in
|
||||||
self?.hiddenMediaId.set(.single(id))
|
self?.hiddenMediaId.set(.single(id))
|
||||||
}, initialLayout: layout, transitionHostView: { [weak self] in
|
}, initialLayout: layout, transitionHostView: { [weak self] in
|
||||||
return self?.gridNode.view
|
return self?.gridNode.view
|
||||||
@ -706,7 +707,7 @@ public final class MediaPickerScreen: ViewController, AttachmentContainable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.openingMedia = true
|
self.openingMedia = true
|
||||||
self.currentGalleryController = presentLegacyMediaPickerGallery(context: controller.context, peer: controller.peer, chatLocation: controller.chatLocation, presentationData: self.presentationData, source: .selection(item: item), immediateThumbnail: immediateThumbnail, selectionContext: interaction.selectionState, editingContext: interaction.editingState, hasSilentPosting: true, hasSchedule: true, hasTimer: hasTimer, updateHiddenMedia: { [weak self] id in
|
self.currentGalleryController = presentLegacyMediaPickerGallery(context: controller.context, peer: controller.peer, threadTitle: controller.threadTitle, chatLocation: controller.chatLocation, presentationData: self.presentationData, source: .selection(item: item), immediateThumbnail: immediateThumbnail, selectionContext: interaction.selectionState, editingContext: interaction.editingState, hasSilentPosting: true, hasSchedule: true, hasTimer: hasTimer, updateHiddenMedia: { [weak self] id in
|
||||||
self?.hiddenMediaId.set(.single(id))
|
self?.hiddenMediaId.set(.single(id))
|
||||||
}, initialLayout: layout, transitionHostView: { [weak self] in
|
}, initialLayout: layout, transitionHostView: { [weak self] in
|
||||||
return self?.selectionNode?.view
|
return self?.selectionNode?.view
|
||||||
@ -1131,13 +1132,14 @@ public final class MediaPickerScreen: ViewController, AttachmentContainable {
|
|||||||
|
|
||||||
private var isDismissing = false
|
private var isDismissing = false
|
||||||
|
|
||||||
public init(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peer: EnginePeer?, chatLocation: ChatLocation?, bannedSendMedia: (Int32, Bool)?, subject: Subject, editingContext: TGMediaEditingContext? = nil, selectionContext: TGMediaSelectionContext? = nil, saveEditedPhotos: Bool = false) {
|
public init(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peer: EnginePeer?, threadTitle: String?, chatLocation: ChatLocation?, bannedSendMedia: (Int32, Bool)?, subject: Subject, editingContext: TGMediaEditingContext? = nil, selectionContext: TGMediaSelectionContext? = nil, saveEditedPhotos: Bool = false) {
|
||||||
self.context = context
|
self.context = context
|
||||||
|
|
||||||
let presentationData = updatedPresentationData?.initial ?? context.sharedContext.currentPresentationData.with { $0 }
|
let presentationData = updatedPresentationData?.initial ?? context.sharedContext.currentPresentationData.with { $0 }
|
||||||
self.presentationData = presentationData
|
self.presentationData = presentationData
|
||||||
self.updatedPresentationData = updatedPresentationData
|
self.updatedPresentationData = updatedPresentationData
|
||||||
self.peer = peer
|
self.peer = peer
|
||||||
|
self.threadTitle = threadTitle
|
||||||
self.chatLocation = chatLocation
|
self.chatLocation = chatLocation
|
||||||
self.bannedSendMedia = bannedSendMedia
|
self.bannedSendMedia = bannedSendMedia
|
||||||
self.subject = subject
|
self.subject = subject
|
||||||
@ -1494,7 +1496,7 @@ public final class MediaPickerScreen: ViewController, AttachmentContainable {
|
|||||||
self.requestAttachmentMenuExpansion()
|
self.requestAttachmentMenuExpansion()
|
||||||
self.presentWebSearch(MediaGroupsScreen(context: self.context, updatedPresentationData: self.updatedPresentationData, mediaAssetsContext: self.controllerNode.mediaAssetsContext, openGroup: { [weak self] collection in
|
self.presentWebSearch(MediaGroupsScreen(context: self.context, updatedPresentationData: self.updatedPresentationData, mediaAssetsContext: self.controllerNode.mediaAssetsContext, openGroup: { [weak self] collection in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
let mediaPicker = MediaPickerScreen(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, peer: strongSelf.peer, chatLocation: strongSelf.chatLocation, bannedSendMedia: strongSelf.bannedSendMedia, subject: .assets(collection), editingContext: strongSelf.interaction?.editingState, selectionContext: strongSelf.interaction?.selectionState)
|
let mediaPicker = MediaPickerScreen(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, peer: strongSelf.peer, threadTitle: strongSelf.threadTitle, chatLocation: strongSelf.chatLocation, bannedSendMedia: strongSelf.bannedSendMedia, subject: .assets(collection), editingContext: strongSelf.interaction?.editingState, selectionContext: strongSelf.interaction?.selectionState)
|
||||||
|
|
||||||
mediaPicker.presentStickers = strongSelf.presentStickers
|
mediaPicker.presentStickers = strongSelf.presentStickers
|
||||||
mediaPicker.presentSchedulePicker = strongSelf.presentSchedulePicker
|
mediaPicker.presentSchedulePicker = strongSelf.presentSchedulePicker
|
||||||
|
|||||||
@ -6165,7 +6165,7 @@ public final class VoiceChatControllerImpl: ViewController, VoiceChatController
|
|||||||
// return controller
|
// return controller
|
||||||
// }
|
// }
|
||||||
|
|
||||||
let mixin = TGMediaAvatarMenuMixin(context: legacyController.context, parentController: emptyController, hasSearchButton: true, hasDeleteButton: hasPhotos && !fromGallery, hasViewButton: false, personalPhoto: peerId.namespace == Namespaces.Peer.CloudUser, isVideo: false, saveEditedPhotos: false, saveCapturedMedia: false, signup: false)!
|
let mixin = TGMediaAvatarMenuMixin(context: legacyController.context, parentController: emptyController, hasSearchButton: true, hasDeleteButton: hasPhotos && !fromGallery, hasViewButton: false, personalPhoto: peerId.namespace == Namespaces.Peer.CloudUser, isVideo: false, saveEditedPhotos: false, saveCapturedMedia: false, signup: false, forum: false)!
|
||||||
mixin.forceDark = true
|
mixin.forceDark = true
|
||||||
mixin.stickersContext = paintStickersContext
|
mixin.stickersContext = paintStickersContext
|
||||||
let _ = strongSelf.currentAvatarMixin.swap(mixin)
|
let _ = strongSelf.currentAvatarMixin.swap(mixin)
|
||||||
|
|||||||
@ -204,6 +204,20 @@ private final class TitleFieldComponent: Component {
|
|||||||
self.placeholderView.view?.isHidden = !text.isEmpty
|
self.placeholderView.view?.isHidden = !text.isEmpty
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
||||||
|
let newText = ((textField.text ?? "") as NSString).replacingCharacters(in: range, with: string)
|
||||||
|
if newText.count > 128 {
|
||||||
|
textField.layer.addShakeAnimation()
|
||||||
|
let hapticFeedback = HapticFeedback()
|
||||||
|
hapticFeedback.error()
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1.0, execute: {
|
||||||
|
let _ = hapticFeedback
|
||||||
|
})
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func update(component: TitleFieldComponent, availableSize: CGSize, state: EmptyComponentState, environment: Environment<EnvironmentType>, transition: Transition) -> CGSize {
|
func update(component: TitleFieldComponent, availableSize: CGSize, state: EmptyComponentState, environment: Environment<EnvironmentType>, transition: Transition) -> CGSize {
|
||||||
self.textField.textColor = component.textColor
|
self.textField.textColor = component.textColor
|
||||||
self.textField.text = component.text
|
self.textField.text = component.text
|
||||||
|
|||||||
@ -440,7 +440,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
private weak var sendMessageActionsController: ChatSendMessageActionSheetController?
|
private weak var sendMessageActionsController: ChatSendMessageActionSheetController?
|
||||||
private var searchResultsController: ChatSearchResultsController?
|
private var searchResultsController: ChatSearchResultsController?
|
||||||
|
|
||||||
private weak var themeSceen: ChatThemeScreen?
|
private weak var themeScreen: ChatThemeScreen?
|
||||||
|
|
||||||
private weak var currentPinchController: PinchController?
|
private weak var currentPinchController: PinchController?
|
||||||
private weak var currentPinchSourceItemNode: ListViewItemNode?
|
private weak var currentPinchSourceItemNode: ListViewItemNode?
|
||||||
@ -967,7 +967,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let mediaReference = mediaReference, let peer = message.peers[message.id.peerId] {
|
if let mediaReference = mediaReference, let peer = message.peers[message.id.peerId] {
|
||||||
legacyMediaEditor(context: strongSelf.context, peer: peer, media: mediaReference, initialCaption: NSAttributedString(), snapshots: snapshots, transitionCompletion: {
|
legacyMediaEditor(context: strongSelf.context, peer: peer, threadTitle: strongSelf.threadInfo?.title, media: mediaReference, initialCaption: NSAttributedString(), snapshots: snapshots, transitionCompletion: {
|
||||||
transitionCompletion()
|
transitionCompletion()
|
||||||
}, presentStickers: { [weak self] completion in
|
}, presentStickers: { [weak self] completion in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
@ -3757,7 +3757,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let mediaReference = mediaReference, let peer = message.peers[message.id.peerId] {
|
if let mediaReference = mediaReference, let peer = message.peers[message.id.peerId] {
|
||||||
legacyMediaEditor(context: strongSelf.context, peer: peer, media: mediaReference, initialCaption: NSAttributedString(string: message.text), snapshots: [], transitionCompletion: nil, presentStickers: { [weak self] completion in
|
legacyMediaEditor(context: strongSelf.context, peer: peer, threadTitle: strongSelf.threadInfo?.title, media: mediaReference, initialCaption: NSAttributedString(string: message.text), snapshots: [], transitionCompletion: nil, presentStickers: { [weak self] completion in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
let controller = DrawingStickersScreen(context: strongSelf.context, selectSticker: { fileReference, view, rect in
|
let controller = DrawingStickersScreen(context: strongSelf.context, selectSticker: { fileReference, view, rect in
|
||||||
completion(fileReference.media, fileReference.media.isAnimatedSticker || fileReference.media.isVideoSticker, view, rect)
|
completion(fileReference.media, fileReference.media.isAnimatedSticker || fileReference.media.isVideoSticker, view, rect)
|
||||||
@ -10489,7 +10489,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
self.dismissAllTooltips()
|
self.dismissAllTooltips()
|
||||||
|
|
||||||
self.sendMessageActionsController?.dismiss()
|
self.sendMessageActionsController?.dismiss()
|
||||||
self.themeSceen?.dismiss()
|
self.themeScreen?.dismiss()
|
||||||
|
|
||||||
self.attachmentController?.dismiss()
|
self.attachmentController?.dismiss()
|
||||||
|
|
||||||
@ -12458,7 +12458,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
slowModeEnabled = true
|
slowModeEnabled = true
|
||||||
}
|
}
|
||||||
|
|
||||||
let controller = legacyAttachmentMenu(context: strongSelf.context, peer: peer, chatLocation: strongSelf.chatLocation, editMediaOptions: menuEditMediaOptions, saveEditedPhotos: settings.storeEditedPhotos, allowGrouping: true, hasSchedule: strongSelf.presentationInterfaceState.subject != .scheduledMessages && peer.id.namespace != Namespaces.Peer.SecretChat, canSendPolls: canSendPolls, updatedPresentationData: strongSelf.updatedPresentationData, parentController: legacyController, recentlyUsedInlineBots: strongSelf.recentlyUsedInlineBotsValue, initialCaption: inputText, openGallery: {
|
let controller = legacyAttachmentMenu(context: strongSelf.context, peer: peer, threadTitle: strongSelf.threadInfo?.title, chatLocation: strongSelf.chatLocation, editMediaOptions: menuEditMediaOptions, saveEditedPhotos: settings.storeEditedPhotos, allowGrouping: true, hasSchedule: strongSelf.presentationInterfaceState.subject != .scheduledMessages && peer.id.namespace != Namespaces.Peer.SecretChat, canSendPolls: canSendPolls, updatedPresentationData: strongSelf.updatedPresentationData, parentController: legacyController, recentlyUsedInlineBots: strongSelf.recentlyUsedInlineBotsValue, initialCaption: inputText, openGallery: {
|
||||||
self?.presentOldMediaPicker(fileMode: false, editingMedia: editMediaOptions != nil, present: { [weak self] c, _ in
|
self?.presentOldMediaPicker(fileMode: false, editingMedia: editMediaOptions != nil, present: { [weak self] c, _ in
|
||||||
self?.effectiveNavigationController?.pushViewController(c)
|
self?.effectiveNavigationController?.pushViewController(c)
|
||||||
}, completion: { signals, silentPosting, scheduleTime in
|
}, completion: { signals, silentPosting, scheduleTime in
|
||||||
@ -12797,7 +12797,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
guard let peer = self.presentationInterfaceState.renderedPeer?.peer else {
|
guard let peer = self.presentationInterfaceState.renderedPeer?.peer else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let controller = MediaPickerScreen(context: self.context, updatedPresentationData: self.updatedPresentationData, peer: EnginePeer(peer), chatLocation: self.chatLocation, bannedSendMedia: bannedSendMedia, subject: subject, saveEditedPhotos: saveEditedPhotos)
|
let controller = MediaPickerScreen(context: self.context, updatedPresentationData: self.updatedPresentationData, peer: EnginePeer(peer), threadTitle: self.threadInfo?.title, chatLocation: self.chatLocation, bannedSendMedia: bannedSendMedia, subject: subject, saveEditedPhotos: saveEditedPhotos)
|
||||||
let mediaPickerContext = controller.mediaPickerContext
|
let mediaPickerContext = controller.mediaPickerContext
|
||||||
controller.openCamera = { [weak self] cameraView in
|
controller.openCamera = { [weak self] cameraView in
|
||||||
self?.openCamera(cameraView: cameraView)
|
self?.openCamera(cameraView: cameraView)
|
||||||
@ -12885,7 +12885,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
slowModeEnabled = true
|
slowModeEnabled = true
|
||||||
}
|
}
|
||||||
|
|
||||||
let _ = legacyAssetPicker(context: strongSelf.context, presentationData: strongSelf.presentationData, editingMedia: editingMedia, fileMode: fileMode, peer: peer, saveEditedPhotos: settings.storeEditedPhotos, allowGrouping: true, selectionLimit: selectionLimit).start(next: { generator in
|
let _ = legacyAssetPicker(context: strongSelf.context, presentationData: strongSelf.presentationData, editingMedia: editingMedia, fileMode: fileMode, peer: peer, threadTitle: strongSelf.threadInfo?.title, saveEditedPhotos: settings.storeEditedPhotos, allowGrouping: true, selectionLimit: selectionLimit).start(next: { generator in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
let legacyController = LegacyController(presentation: fileMode ? .navigation : .custom, theme: strongSelf.presentationData.theme, initialLayout: strongSelf.validLayout)
|
let legacyController = LegacyController(presentation: fileMode ? .navigation : .custom, theme: strongSelf.presentationData.theme, initialLayout: strongSelf.validLayout)
|
||||||
legacyController.navigationPresentation = .modal
|
legacyController.navigationPresentation = .modal
|
||||||
@ -17474,7 +17474,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
controller?.dimTapped()
|
controller?.dimTapped()
|
||||||
}
|
}
|
||||||
strongSelf.present(controller, in: .window(.root))
|
strongSelf.present(controller, in: .window(.root))
|
||||||
strongSelf.themeSceen = controller
|
strongSelf.themeScreen = controller
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -454,7 +454,7 @@ public func createChannelController(context: AccountContext) -> ViewController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mixin = TGMediaAvatarMenuMixin(context: legacyController.context, parentController: emptyController, hasSearchButton: true, hasDeleteButton: stateValue.with({ $0.avatar }) != nil, hasViewButton: false, personalPhoto: false, isVideo: false, saveEditedPhotos: false, saveCapturedMedia: false, signup: false)!
|
let mixin = TGMediaAvatarMenuMixin(context: legacyController.context, parentController: emptyController, hasSearchButton: true, hasDeleteButton: stateValue.with({ $0.avatar }) != nil, hasViewButton: false, personalPhoto: false, isVideo: false, saveEditedPhotos: false, saveCapturedMedia: false, signup: false, forum: false)!
|
||||||
let _ = currentAvatarMixin.swap(mixin)
|
let _ = currentAvatarMixin.swap(mixin)
|
||||||
mixin.requestSearchController = { assetsController in
|
mixin.requestSearchController = { assetsController in
|
||||||
let controller = WebSearchController(context: context, peer: peer, chatLocation: nil, configuration: searchBotsConfiguration, mode: .avatar(initialQuery: title, completion: { result in
|
let controller = WebSearchController(context: context, peer: peer, chatLocation: nil, configuration: searchBotsConfiguration, mode: .avatar(initialQuery: title, completion: { result in
|
||||||
|
|||||||
@ -723,7 +723,7 @@ public func createGroupControllerImpl(context: AccountContext, peerIds: [PeerId]
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mixin = TGMediaAvatarMenuMixin(context: legacyController.context, parentController: emptyController, hasSearchButton: true, hasDeleteButton: stateValue.with({ $0.avatar }) != nil, hasViewButton: false, personalPhoto: false, isVideo: false, saveEditedPhotos: false, saveCapturedMedia: false, signup: false)!
|
let mixin = TGMediaAvatarMenuMixin(context: legacyController.context, parentController: emptyController, hasSearchButton: true, hasDeleteButton: stateValue.with({ $0.avatar }) != nil, hasViewButton: false, personalPhoto: false, isVideo: false, saveEditedPhotos: false, saveCapturedMedia: false, signup: false, forum: false)!
|
||||||
let _ = currentAvatarMixin.swap(mixin)
|
let _ = currentAvatarMixin.swap(mixin)
|
||||||
mixin.requestSearchController = { assetsController in
|
mixin.requestSearchController = { assetsController in
|
||||||
let controller = WebSearchController(context: context, peer: peer, chatLocation: nil, configuration: searchBotsConfiguration, mode: .avatar(initialQuery: title, completion: { result in
|
let controller = WebSearchController(context: context, peer: peer, chatLocation: nil, configuration: searchBotsConfiguration, mode: .avatar(initialQuery: title, completion: { result in
|
||||||
|
|||||||
@ -3805,7 +3805,7 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewDelegate
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let mediaReference = mediaReference, let peer = message.peers[message.id.peerId] {
|
if let mediaReference = mediaReference, let peer = message.peers[message.id.peerId] {
|
||||||
legacyMediaEditor(context: strongSelf.context, peer: peer, media: mediaReference, initialCaption: NSAttributedString(), snapshots: snapshots, transitionCompletion: {
|
legacyMediaEditor(context: strongSelf.context, peer: peer, threadTitle: message.associatedThreadInfo?.title, media: mediaReference, initialCaption: NSAttributedString(), snapshots: snapshots, transitionCompletion: {
|
||||||
transitionCompletion()
|
transitionCompletion()
|
||||||
}, presentStickers: { [weak self] completion in
|
}, presentStickers: { [weak self] completion in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
@ -6905,7 +6905,12 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewDelegate
|
|||||||
return controller
|
return controller
|
||||||
}
|
}
|
||||||
|
|
||||||
let mixin = TGMediaAvatarMenuMixin(context: legacyController.context, parentController: emptyController, hasSearchButton: true, hasDeleteButton: hasPhotos && !fromGallery, hasViewButton: false, personalPhoto: strongSelf.isSettings, isVideo: currentIsVideo, saveEditedPhotos: false, saveCapturedMedia: false, signup: false)!
|
var isForum = false
|
||||||
|
if let peer = strongSelf.data?.peer as? TelegramChannel, peer.flags.contains(.isForum) {
|
||||||
|
isForum = true
|
||||||
|
}
|
||||||
|
|
||||||
|
let mixin = TGMediaAvatarMenuMixin(context: legacyController.context, parentController: emptyController, hasSearchButton: true, hasDeleteButton: hasPhotos && !fromGallery, hasViewButton: false, personalPhoto: strongSelf.isSettings, isVideo: currentIsVideo, saveEditedPhotos: false, saveCapturedMedia: false, signup: false, forum: isForum)!
|
||||||
mixin.stickersContext = paintStickersContext
|
mixin.stickersContext = paintStickersContext
|
||||||
let _ = strongSelf.currentAvatarMixin.swap(mixin)
|
let _ = strongSelf.currentAvatarMixin.swap(mixin)
|
||||||
mixin.requestSearchController = { [weak self] assetsController in
|
mixin.requestSearchController = { [weak self] assetsController in
|
||||||
|
|||||||
@ -312,10 +312,21 @@ private func galleryItems(account: Account, results: [ChatContextResult], curren
|
|||||||
return (galleryItems, focusItem)
|
return (galleryItems, focusItem)
|
||||||
}
|
}
|
||||||
|
|
||||||
func presentLegacyWebSearchGallery(context: AccountContext, peer: EnginePeer?, chatLocation: ChatLocation?, presentationData: PresentationData, results: [ChatContextResult], current: ChatContextResult, selectionContext: TGMediaSelectionContext?, editingContext: TGMediaEditingContext, updateHiddenMedia: @escaping (String?) -> Void, initialLayout: ContainerViewLayout?, transitionHostView: @escaping () -> UIView?, transitionView: @escaping (ChatContextResult) -> UIView?, completed: @escaping (ChatContextResult) -> Void, presentStickers: ((@escaping (TelegramMediaFile, Bool, UIView, CGRect) -> Void) -> TGPhotoPaintStickersScreen?)?, getCaptionPanelView: @escaping () -> TGCaptionPanelView?, present: (ViewController, Any?) -> Void) {
|
func presentLegacyWebSearchGallery(context: AccountContext, peer: EnginePeer?, threadTitle: String?, chatLocation: ChatLocation?, presentationData: PresentationData, results: [ChatContextResult], current: ChatContextResult, selectionContext: TGMediaSelectionContext?, editingContext: TGMediaEditingContext, updateHiddenMedia: @escaping (String?) -> Void, initialLayout: ContainerViewLayout?, transitionHostView: @escaping () -> UIView?, transitionView: @escaping (ChatContextResult) -> UIView?, completed: @escaping (ChatContextResult) -> Void, presentStickers: ((@escaping (TelegramMediaFile, Bool, UIView, CGRect) -> Void) -> TGPhotoPaintStickersScreen?)?, getCaptionPanelView: @escaping () -> TGCaptionPanelView?, present: (ViewController, Any?) -> Void) {
|
||||||
let legacyController = LegacyController(presentation: .custom, theme: presentationData.theme, initialLayout: nil)
|
let legacyController = LegacyController(presentation: .custom, theme: presentationData.theme, initialLayout: nil)
|
||||||
legacyController.statusBar.statusBarStyle = presentationData.theme.rootController.statusBarStyle.style
|
legacyController.statusBar.statusBarStyle = presentationData.theme.rootController.statusBarStyle.style
|
||||||
|
|
||||||
|
let recipientName: String?
|
||||||
|
if let threadTitle {
|
||||||
|
recipientName = threadTitle
|
||||||
|
} else {
|
||||||
|
if peer?.id == context.account.peerId {
|
||||||
|
recipientName = presentationData.strings.DialogList_SavedMessages
|
||||||
|
} else {
|
||||||
|
recipientName = peer?.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let paintStickersContext = LegacyPaintStickersContext(context: context)
|
let paintStickersContext = LegacyPaintStickersContext(context: context)
|
||||||
paintStickersContext.captionPanelView = {
|
paintStickersContext.captionPanelView = {
|
||||||
return getCaptionPanelView()
|
return getCaptionPanelView()
|
||||||
@ -338,7 +349,7 @@ func presentLegacyWebSearchGallery(context: AccountContext, peer: EnginePeer?, c
|
|||||||
|
|
||||||
let (items, focusItem) = galleryItems(account: context.account, results: results, current: current, selectionContext: selectionContext, editingContext: editingContext)
|
let (items, focusItem) = galleryItems(account: context.account, results: results, current: current, selectionContext: selectionContext, editingContext: editingContext)
|
||||||
|
|
||||||
let model = TGMediaPickerGalleryModel(context: legacyController.context, items: items, focus: focusItem, selectionContext: selectionContext, editingContext: editingContext, hasCaptions: false, allowCaptionEntities: true, hasTimer: false, onlyCrop: false, inhibitDocumentCaptions: false, hasSelectionPanel: false, hasCamera: false, recipientName: peer?.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder))!
|
let model = TGMediaPickerGalleryModel(context: legacyController.context, items: items, focus: focusItem, selectionContext: selectionContext, editingContext: editingContext, hasCaptions: false, allowCaptionEntities: true, hasTimer: false, onlyCrop: false, inhibitDocumentCaptions: false, hasSelectionPanel: false, hasCamera: false, recipientName: recipientName)!
|
||||||
model.stickersContext = paintStickersContext
|
model.stickersContext = paintStickersContext
|
||||||
controller.model = model
|
controller.model = model
|
||||||
model.controller = controller
|
model.controller = controller
|
||||||
|
|||||||
@ -733,7 +733,7 @@ class WebSearchControllerNode: ASDisplayNode {
|
|||||||
if self.controllerInteraction.selectionState != nil {
|
if self.controllerInteraction.selectionState != nil {
|
||||||
if let state = self.webSearchInterfaceState.state, state.scope == .images {
|
if let state = self.webSearchInterfaceState.state, state.scope == .images {
|
||||||
if let results = self.currentProcessedResults?.results {
|
if let results = self.currentProcessedResults?.results {
|
||||||
presentLegacyWebSearchGallery(context: self.context, peer: self.peer, chatLocation: self.chatLocation, presentationData: self.presentationData, results: results, current: currentResult, selectionContext: self.controllerInteraction.selectionState, editingContext: self.controllerInteraction.editingState, updateHiddenMedia: { [weak self] id in
|
presentLegacyWebSearchGallery(context: self.context, peer: self.peer, threadTitle: nil, chatLocation: self.chatLocation, presentationData: self.presentationData, results: results, current: currentResult, selectionContext: self.controllerInteraction.selectionState, editingContext: self.controllerInteraction.editingState, updateHiddenMedia: { [weak self] id in
|
||||||
self?.hiddenMediaId.set(.single(id))
|
self?.hiddenMediaId.set(.single(id))
|
||||||
}, initialLayout: self.containerLayout?.0, transitionHostView: { [weak self] in
|
}, initialLayout: self.containerLayout?.0, transitionHostView: { [weak self] in
|
||||||
return self?.gridNode.view
|
return self?.gridNode.view
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user