mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-19 12:10:55 +00:00
no message
This commit is contained in:
parent
9e2e55e46c
commit
e2290bbeda
@ -82,6 +82,8 @@ typedef enum
|
|||||||
@property (nonatomic, readonly) bool isZoomAvailable;
|
@property (nonatomic, readonly) bool isZoomAvailable;
|
||||||
@property (nonatomic, assign) CGFloat zoomLevel;
|
@property (nonatomic, assign) CGFloat zoomLevel;
|
||||||
|
|
||||||
|
@property (nonatomic, assign) bool disableResultMirroring;
|
||||||
|
|
||||||
@property (nonatomic, assign) bool disabled;
|
@property (nonatomic, assign) bool disabled;
|
||||||
@property (nonatomic, readonly) bool isCapturing;
|
@property (nonatomic, readonly) bool isCapturing;
|
||||||
@property (nonatomic, readonly) NSTimeInterval videoRecordingDuration;
|
@property (nonatomic, readonly) NSTimeInterval videoRecordingDuration;
|
||||||
|
@ -348,7 +348,7 @@ NSString *const PGCameraAdjustingFocusKey = @"adjustingFocus";
|
|||||||
|
|
||||||
- (void)takePhotoWithCompletion:(void (^)(UIImage *result, PGCameraShotMetadata *metadata))completion
|
- (void)takePhotoWithCompletion:(void (^)(UIImage *result, PGCameraShotMetadata *metadata))completion
|
||||||
{
|
{
|
||||||
bool videoMirrored = _previewView.captureConnection.videoMirrored;
|
bool videoMirrored = !self.disableResultMirroring ? _previewView.captureConnection.videoMirrored : false;
|
||||||
|
|
||||||
[[PGCamera cameraQueue] dispatch:^
|
[[PGCamera cameraQueue] dispatch:^
|
||||||
{
|
{
|
||||||
|
@ -14,7 +14,8 @@ typedef enum {
|
|||||||
TGCameraControllerGenericIntent,
|
TGCameraControllerGenericIntent,
|
||||||
TGCameraControllerPassportIntent,
|
TGCameraControllerPassportIntent,
|
||||||
TGCameraControllerPassportIdIntent,
|
TGCameraControllerPassportIdIntent,
|
||||||
TGCameraControllerAvatarIntent,
|
TGCameraControllerPassportMultipleIntent,
|
||||||
|
TGCameraControllerAvatarIntent
|
||||||
} TGCameraControllerIntent;
|
} TGCameraControllerIntent;
|
||||||
|
|
||||||
@interface TGCameraControllerWindow : TGOverlayControllerWindow
|
@interface TGCameraControllerWindow : TGOverlayControllerWindow
|
||||||
|
@ -1227,8 +1227,8 @@ static CGPoint TGCameraControllerClampPointToScreenSize(__unused id self, __unus
|
|||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
|
|
||||||
bool hasCamera = (_intent == TGCameraControllerGenericIntent && !_shortcut) || (_intent == TGCameraControllerPassportIntent || _intent == TGCameraControllerPassportIdIntent);
|
bool hasCamera = (_intent == TGCameraControllerGenericIntent && !_shortcut) || (_intent == TGCameraControllerPassportMultipleIntent);
|
||||||
TGMediaPickerGalleryModel *model = [[TGMediaPickerGalleryModel alloc] initWithContext:windowContext items:galleryItems focusItem:focusItem selectionContext:_items.count > 1 ? selectionContext : nil editingContext:editingContext hasCaptions:self.allowCaptions allowCaptionEntities:self.allowCaptionEntities hasTimer:self.hasTimer onlyCrop:_intent == TGCameraControllerPassportIntent || _intent == TGCameraControllerPassportIdIntent inhibitDocumentCaptions:self.inhibitDocumentCaptions hasSelectionPanel:true hasCamera:hasCamera recipientName:self.recipientName];
|
TGMediaPickerGalleryModel *model = [[TGMediaPickerGalleryModel alloc] initWithContext:windowContext items:galleryItems focusItem:focusItem selectionContext:_items.count > 1 ? selectionContext : nil editingContext:editingContext hasCaptions:self.allowCaptions allowCaptionEntities:self.allowCaptionEntities hasTimer:self.hasTimer onlyCrop:_intent == TGCameraControllerPassportIntent || _intent == TGCameraControllerPassportIdIntent || _intent == TGCameraControllerPassportMultipleIntent inhibitDocumentCaptions:self.inhibitDocumentCaptions hasSelectionPanel:true hasCamera:hasCamera recipientName:self.recipientName];
|
||||||
model.controller = galleryController;
|
model.controller = galleryController;
|
||||||
model.suggestionContext = self.suggestionContext;
|
model.suggestionContext = self.suggestionContext;
|
||||||
|
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
@property (nonatomic) CGPoint portraitAdjustment;
|
@property (nonatomic) CGPoint portraitAdjustment;
|
||||||
@property (nonatomic) CGPoint landscapeAdjustment;
|
@property (nonatomic) CGPoint landscapeAdjustment;
|
||||||
|
|
||||||
|
@property (nonatomic, strong) UIImage *image;
|
||||||
|
|
||||||
- (instancetype)initWithImage:(UIImage *)image;
|
- (instancetype)initWithImage:(UIImage *)image;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -22,6 +22,18 @@
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (UIImage *)image
|
||||||
|
{
|
||||||
|
return _iconView.image;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setImage:(UIImage *)image
|
||||||
|
{
|
||||||
|
_iconView.image = image;
|
||||||
|
_iconView.frame = CGRectMake(0.0f, 0.0f, image.size.width, image.size.height);
|
||||||
|
[self setNeedsLayout];
|
||||||
|
}
|
||||||
|
|
||||||
- (UIEdgeInsets)alignmentRectInsets
|
- (UIEdgeInsets)alignmentRectInsets
|
||||||
{
|
{
|
||||||
UIEdgeInsets insets = UIEdgeInsetsZero;
|
UIEdgeInsets insets = UIEdgeInsetsZero;
|
||||||
|
@ -715,7 +715,7 @@
|
|||||||
|
|
||||||
- (UIView *)findScrollView:(UIView *)view
|
- (UIView *)findScrollView:(UIView *)view
|
||||||
{
|
{
|
||||||
if (view == nil || [view isKindOfClass:[UIScrollView class]])
|
if (view == nil || ([view isKindOfClass:[UIScrollView class]] && view.tag != 0xbeef))
|
||||||
return view;
|
return view;
|
||||||
|
|
||||||
return [self findScrollView:view.superview];
|
return [self findScrollView:view.superview];
|
||||||
|
@ -51,7 +51,7 @@
|
|||||||
|
|
||||||
__weak TGMenuSheetController *weakController = controller;
|
__weak TGMenuSheetController *weakController = controller;
|
||||||
__weak TGViewController *weakParentController = parentController;
|
__weak TGViewController *weakParentController = parentController;
|
||||||
TGAttachmentCarouselItemView *carouselItem = [[TGAttachmentCarouselItemView alloc] initWithContext:context camera:true selfPortrait:intent == TGPassportAttachIntentSelfie forProfilePhoto:false assetType:TGMediaAssetPhotoType saveEditedPhotos:false allowGrouping:false allowSelection:false allowEditing:true document:true];
|
TGAttachmentCarouselItemView *carouselItem = [[TGAttachmentCarouselItemView alloc] initWithContext:context camera:true selfPortrait:intent == TGPassportAttachIntentSelfie forProfilePhoto:false assetType:TGMediaAssetPhotoType saveEditedPhotos:false allowGrouping:false allowSelection:intent == TGPassportAttachIntentMultiple allowEditing:true document:true];
|
||||||
__weak TGAttachmentCarouselItemView *weakCarouselItem = carouselItem;
|
__weak TGAttachmentCarouselItemView *weakCarouselItem = carouselItem;
|
||||||
carouselItem.onlyCrop = true;
|
carouselItem.onlyCrop = true;
|
||||||
carouselItem.parentController = parentController;
|
carouselItem.parentController = parentController;
|
||||||
@ -75,7 +75,7 @@
|
|||||||
|
|
||||||
__strong TGAttachmentCarouselItemView *strongCarouselItem = weakCarouselItem;
|
__strong TGAttachmentCarouselItemView *strongCarouselItem = weakCarouselItem;
|
||||||
|
|
||||||
uploadAction([TGPassportAttachMenu resultSignalForEditingContext:strongCarouselItem.editingContext currentItem:(id<TGMediaEditableItem>)currentItem],
|
uploadAction([TGPassportAttachMenu resultSignalForEditingContext:strongCarouselItem.editingContext selectionContext:strongCarouselItem.selectionContext currentItem:(id<TGMediaEditableItem>)currentItem],
|
||||||
^{
|
^{
|
||||||
__strong TGMenuSheetController *strongController = weakController;
|
__strong TGMenuSheetController *strongController = weakController;
|
||||||
if (strongController != nil)
|
if (strongController != nil)
|
||||||
@ -223,8 +223,7 @@
|
|||||||
__weak TGMediaAssetsController *weakController = controller;
|
__weak TGMediaAssetsController *weakController = controller;
|
||||||
controller.singleCompletionBlock = ^(id<TGMediaEditableItem> currentItem, TGMediaEditingContext *editingContext)
|
controller.singleCompletionBlock = ^(id<TGMediaEditableItem> currentItem, TGMediaEditingContext *editingContext)
|
||||||
{
|
{
|
||||||
exit(1);
|
uploadAction([TGPassportAttachMenu resultSignalForEditingContext:editingContext selectionContext:nil currentItem:(id<TGMediaEditableItem>)currentItem],
|
||||||
uploadAction([TGPassportAttachMenu resultSignalForEditingContext:editingContext currentItem:(id<TGMediaEditableItem>)currentItem],
|
|
||||||
^{
|
^{
|
||||||
__strong TGMediaAssetsController *strongController = weakController;
|
__strong TGMediaAssetsController *strongController = weakController;
|
||||||
if (strongController != nil && strongController.dismissalBlock != nil)
|
if (strongController != nil && strongController.dismissalBlock != nil)
|
||||||
@ -259,7 +258,7 @@
|
|||||||
legacyCameraController.finishedWithImage = ^(UIImage *image)
|
legacyCameraController.finishedWithImage = ^(UIImage *image)
|
||||||
{
|
{
|
||||||
TGCameraCapturedPhoto *photo = [[TGCameraCapturedPhoto alloc] initWithImage:image metadata:nil];
|
TGCameraCapturedPhoto *photo = [[TGCameraCapturedPhoto alloc] initWithImage:image metadata:nil];
|
||||||
uploadAction([TGPassportAttachMenu resultSignalForEditingContext:nil currentItem:photo], ^
|
uploadAction([TGPassportAttachMenu resultSignalForEditingContext:nil selectionContext:nil currentItem:photo], ^
|
||||||
{
|
{
|
||||||
__strong TGViewController *strongParentController = weakParentController;
|
__strong TGViewController *strongParentController = weakParentController;
|
||||||
if (strongParentController != nil)
|
if (strongParentController != nil)
|
||||||
@ -270,7 +269,7 @@
|
|||||||
[parentController presentViewController:legacyCameraController animated:true completion:nil];
|
[parentController presentViewController:legacyCameraController animated:true completion:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void)_displayCameraWithView:(TGAttachmentCameraView *)cameraView menuController:(TGMenuSheetController *)menuController parentController:(TGViewController *)parentController context:(id<LegacyComponentsContext>)context intent:(bool)intent uploadAction:(void (^)(SSignal *, void (^)(void)))uploadAction
|
+ (void)_displayCameraWithView:(TGAttachmentCameraView *)cameraView menuController:(TGMenuSheetController *)menuController parentController:(TGViewController *)parentController context:(id<LegacyComponentsContext>)context intent:(TGPassportAttachIntent)intent uploadAction:(void (^)(SSignal *, void (^)(void)))uploadAction
|
||||||
{
|
{
|
||||||
if (![[[LegacyComponentsGlobals provider] accessChecker] checkCameraAuthorizationStatusForIntent:TGCameraAccessIntentDefault alertDismissCompletion:nil])
|
if (![[[LegacyComponentsGlobals provider] accessChecker] checkCameraAuthorizationStatusForIntent:TGCameraAccessIntentDefault alertDismissCompletion:nil])
|
||||||
return;
|
return;
|
||||||
@ -290,11 +289,22 @@
|
|||||||
|
|
||||||
id<LegacyComponentsOverlayWindowManager> windowManager = [context makeOverlayWindowManager];
|
id<LegacyComponentsOverlayWindowManager> windowManager = [context makeOverlayWindowManager];
|
||||||
|
|
||||||
if (cameraView.previewView != nil)
|
TGCameraControllerIntent cameraIntent = TGCameraControllerPassportIntent;
|
||||||
controller = [[TGCameraController alloc] initWithContext:[windowManager context] saveEditedPhotos:false saveCapturedMedia:false camera:cameraView.previewView.camera previewView:cameraView.previewView intent:intent == TGPassportAttachIntentIdentityCard ? TGCameraControllerPassportIdIntent : TGCameraControllerPassportIntent];
|
if (intent == TGPassportAttachIntentIdentityCard)
|
||||||
else
|
cameraIntent = TGCameraControllerPassportIdIntent;
|
||||||
controller = [[TGCameraController alloc] initWithContext:[windowManager context] saveEditedPhotos:false saveCapturedMedia:false intent:intent == TGPassportAttachIntentIdentityCard ? TGCameraControllerPassportIdIntent : TGCameraControllerPassportIntent];
|
else if (intent == TGPassportAttachIntentMultiple)
|
||||||
|
cameraIntent = TGCameraControllerPassportMultipleIntent;
|
||||||
|
|
||||||
|
if (cameraView.previewView != nil)
|
||||||
|
{
|
||||||
|
if (intent == TGPassportAttachIntentSelfie)
|
||||||
|
cameraView.previewView.camera.disableResultMirroring = true;
|
||||||
|
controller = [[TGCameraController alloc] initWithContext:[windowManager context] saveEditedPhotos:false saveCapturedMedia:false camera:cameraView.previewView.camera previewView:cameraView.previewView intent:cameraIntent];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
controller = [[TGCameraController alloc] initWithContext:[windowManager context] saveEditedPhotos:false saveCapturedMedia:false intent:cameraIntent];
|
||||||
|
}
|
||||||
controller.shouldStoreCapturedAssets = false;
|
controller.shouldStoreCapturedAssets = false;
|
||||||
|
|
||||||
TGCameraControllerWindow *controllerWindow = [[TGCameraControllerWindow alloc] initWithManager:windowManager parentController:parentController contentController:controller];
|
TGCameraControllerWindow *controllerWindow = [[TGCameraControllerWindow alloc] initWithManager:windowManager parentController:parentController contentController:controller];
|
||||||
@ -359,7 +369,7 @@
|
|||||||
|
|
||||||
[strongMenuController dismissAnimated:false];
|
[strongMenuController dismissAnimated:false];
|
||||||
|
|
||||||
uploadAction([TGPassportAttachMenu resultSignalForEditingContext:editingContext currentItem:(id<TGMediaEditableItem>)currentItem],^
|
uploadAction([TGPassportAttachMenu resultSignalForEditingContext:editingContext selectionContext:selectionContext currentItem:(id<TGMediaEditableItem>)currentItem],^
|
||||||
{
|
{
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -388,19 +398,26 @@
|
|||||||
[parentController presentViewController:controller animated:true completion:nil];
|
[parentController presentViewController:controller animated:true completion:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (SSignal *)resultSignalForEditingContext:(TGMediaEditingContext *)editingContext currentItem:(id<TGMediaEditableItem>)currentItem
|
+ (SSignal *)resultSignalForEditingContext:(TGMediaEditingContext *)editingContext selectionContext:(TGMediaSelectionContext *)selectionContext currentItem:(id<TGMediaEditableItem>)currentItem
|
||||||
|
{
|
||||||
|
SSignal *signal = [SSignal complete];
|
||||||
|
NSMutableArray *selectedItems = selectionContext.selectedItems ? [selectionContext.selectedItems mutableCopy] : [[NSMutableArray alloc] init];
|
||||||
|
if (selectedItems.count == 0 && currentItem != nil)
|
||||||
|
[selectedItems addObject:currentItem];
|
||||||
|
|
||||||
|
for (id<TGMediaEditableItem> item in selectedItems)
|
||||||
{
|
{
|
||||||
SSignal *inlineSignal = nil;
|
SSignal *inlineSignal = nil;
|
||||||
if ([currentItem isKindOfClass:[TGMediaAsset class]])
|
if ([item isKindOfClass:[TGMediaAsset class]])
|
||||||
inlineSignal = [TGMediaAssetImageSignals imageForAsset:(TGMediaAsset *)currentItem imageType:TGMediaAssetImageTypeScreen size:CGSizeMake(2048, 2048) allowNetworkAccess:false];
|
inlineSignal = [TGMediaAssetImageSignals imageForAsset:(TGMediaAsset *)item imageType:TGMediaAssetImageTypeScreen size:CGSizeMake(2048, 2048) allowNetworkAccess:false];
|
||||||
else if ([currentItem isKindOfClass:[TGCameraCapturedPhoto class]])
|
else if ([item isKindOfClass:[TGCameraCapturedPhoto class]])
|
||||||
inlineSignal = [currentItem originalImageSignal:0.0];
|
inlineSignal = [item originalImageSignal:0.0];
|
||||||
|
|
||||||
SSignal *assetSignal = inlineSignal;
|
SSignal *assetSignal = inlineSignal;
|
||||||
SSignal *imageSignal = assetSignal;
|
SSignal *imageSignal = assetSignal;
|
||||||
if (editingContext != nil)
|
if (editingContext != nil)
|
||||||
{
|
{
|
||||||
imageSignal = [[[[[editingContext imageSignalForItem:currentItem withUpdates:true] filter:^bool(id result)
|
imageSignal = [[[[[editingContext imageSignalForItem:item withUpdates:true] filter:^bool(id result)
|
||||||
{
|
{
|
||||||
return result == nil || ([result isKindOfClass:[UIImage class]] && !((UIImage *)result).degraded);
|
return result == nil || ([result isKindOfClass:[UIImage class]] && !((UIImage *)result).degraded);
|
||||||
}] take:1] mapToSignal:^SSignal *(id result)
|
}] take:1] mapToSignal:^SSignal *(id result)
|
||||||
@ -424,7 +441,7 @@
|
|||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
return [[imageSignal catch:^SSignal *(__unused id error)
|
signal = [signal then:[[imageSignal catch:^SSignal *(__unused id error)
|
||||||
{
|
{
|
||||||
return inlineSignal;
|
return inlineSignal;
|
||||||
}] map:^id(UIImage *image)
|
}] map:^id(UIImage *image)
|
||||||
@ -438,7 +455,10 @@
|
|||||||
UIImage *thumbnailImage = TGScaleImageToPixelSize(scaledImage, thumbnailSize);
|
UIImage *thumbnailImage = TGScaleImageToPixelSize(scaledImage, thumbnailSize);
|
||||||
|
|
||||||
return @{ @"image": scaledImage, @"thumbnail": thumbnailImage };
|
return @{ @"image": scaledImage, @"thumbnail": thumbnailImage };
|
||||||
}];
|
}]];
|
||||||
|
}
|
||||||
|
|
||||||
|
return signal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
{
|
{
|
||||||
[_camera startCaptureForResume:false completion:nil];
|
[_camera startCaptureForResume:false completion:nil];
|
||||||
|
|
||||||
_timer = [TGTimerTarget scheduledMainThreadTimerWithTarget:self action:@selector(handleNextFrame) interval:1.0 repeat:false];
|
_timer = [TGTimerTarget scheduledMainThreadTimerWithTarget:self action:@selector(handleNextFrame) interval:0.5 repeat:false];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)stop
|
- (void)stop
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
- (instancetype)initWithString:(NSString *)string {
|
- (instancetype)initWithString:(NSString *)string {
|
||||||
if ([string hasPrefix:@"webdoc"]) {
|
if ([string hasPrefix:@"webdoc"]) {
|
||||||
NSData *data = [[NSData alloc] initWithBase64EncodedString:[string substringFromIndex:6] options:0];
|
NSData *data = iosMajorVersion() >= 7 ? [[NSData alloc] initWithBase64EncodedString:[string substringFromIndex:6] options:NSDataBase64DecodingIgnoreUnknownCharacters] : [[NSData alloc] initWithBase64Encoding:[string substringFromIndex:6]];
|
||||||
if (data != nil) {
|
if (data != nil) {
|
||||||
PSKeyValueDecoder *decoder = [[PSKeyValueDecoder alloc] initWithData:data];
|
PSKeyValueDecoder *decoder = [[PSKeyValueDecoder alloc] initWithData:data];
|
||||||
return [[TGWebDocumentReference alloc] initWithKeyValueCoder:decoder];
|
return [[TGWebDocumentReference alloc] initWithKeyValueCoder:decoder];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user