no message

This commit is contained in:
Ilya Laktyushin 2018-06-07 17:28:41 +03:00
parent 9e2e55e46c
commit e2290bbeda
10 changed files with 99 additions and 62 deletions

View File

@ -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;

View File

@ -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:^
{ {

View File

@ -14,7 +14,8 @@ typedef enum {
TGCameraControllerGenericIntent, TGCameraControllerGenericIntent,
TGCameraControllerPassportIntent, TGCameraControllerPassportIntent,
TGCameraControllerPassportIdIntent, TGCameraControllerPassportIdIntent,
TGCameraControllerAvatarIntent, TGCameraControllerPassportMultipleIntent,
TGCameraControllerAvatarIntent
} TGCameraControllerIntent; } TGCameraControllerIntent;
@interface TGCameraControllerWindow : TGOverlayControllerWindow @interface TGCameraControllerWindow : TGOverlayControllerWindow

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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];

View File

@ -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,57 +398,67 @@
[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 *inlineSignal = nil; SSignal *signal = [SSignal complete];
if ([currentItem isKindOfClass:[TGMediaAsset class]]) NSMutableArray *selectedItems = selectionContext.selectedItems ? [selectionContext.selectedItems mutableCopy] : [[NSMutableArray alloc] init];
inlineSignal = [TGMediaAssetImageSignals imageForAsset:(TGMediaAsset *)currentItem imageType:TGMediaAssetImageTypeScreen size:CGSizeMake(2048, 2048) allowNetworkAccess:false]; if (selectedItems.count == 0 && currentItem != nil)
else if ([currentItem isKindOfClass:[TGCameraCapturedPhoto class]]) [selectedItems addObject:currentItem];
inlineSignal = [currentItem originalImageSignal:0.0];
for (id<TGMediaEditableItem> item in selectedItems)
SSignal *assetSignal = inlineSignal;
SSignal *imageSignal = assetSignal;
if (editingContext != nil)
{ {
imageSignal = [[[[[editingContext imageSignalForItem:currentItem withUpdates:true] filter:^bool(id result) SSignal *inlineSignal = nil;
if ([item isKindOfClass:[TGMediaAsset class]])
inlineSignal = [TGMediaAssetImageSignals imageForAsset:(TGMediaAsset *)item imageType:TGMediaAssetImageTypeScreen size:CGSizeMake(2048, 2048) allowNetworkAccess:false];
else if ([item isKindOfClass:[TGCameraCapturedPhoto class]])
inlineSignal = [item originalImageSignal:0.0];
SSignal *assetSignal = inlineSignal;
SSignal *imageSignal = assetSignal;
if (editingContext != nil)
{ {
return result == nil || ([result isKindOfClass:[UIImage class]] && !((UIImage *)result).degraded); imageSignal = [[[[[editingContext imageSignalForItem:item withUpdates:true] filter:^bool(id result)
}] take:1] mapToSignal:^SSignal *(id result) {
return result == nil || ([result isKindOfClass:[UIImage class]] && !((UIImage *)result).degraded);
}] take:1] mapToSignal:^SSignal *(id result)
{
if (result == nil)
{
return [SSignal fail:nil];
}
else if ([result isKindOfClass:[UIImage class]])
{
UIImage *image = (UIImage *)result;
image.edited = true;
return [SSignal single:image];
}
return [SSignal complete];
}] onCompletion:^
{
__strong TGMediaEditingContext *strongEditingContext = editingContext;
[strongEditingContext description];
}];
}
signal = [signal then:[[imageSignal catch:^SSignal *(__unused id error)
{ {
if (result == nil) return inlineSignal;
{ }] map:^id(UIImage *image)
return [SSignal fail:nil]; {
} CGFloat maxSide = 2048.0f;
else if ([result isKindOfClass:[UIImage class]]) CGSize imageSize = TGFitSize(image.size, CGSizeMake(maxSide, maxSide));
{ UIImage *scaledImage = MAX(image.size.width, image.size.height) > maxSide ? TGScaleImageToPixelSize(image, imageSize) : image;
UIImage *image = (UIImage *)result;
image.edited = true;
return [SSignal single:image];
}
return [SSignal complete]; CGFloat thumbnailSide = 60.0f * TGScreenScaling();
}] onCompletion:^ CGSize thumbnailSize = TGFitSize(scaledImage.size, CGSizeMake(thumbnailSide, thumbnailSide));
{ UIImage *thumbnailImage = TGScaleImageToPixelSize(scaledImage, thumbnailSize);
__strong TGMediaEditingContext *strongEditingContext = editingContext;
[strongEditingContext description]; return @{ @"image": scaledImage, @"thumbnail": thumbnailImage };
}]; }]];
} }
return [[imageSignal catch:^SSignal *(__unused id error) return signal;
{
return inlineSignal;
}] map:^id(UIImage *image)
{
CGFloat maxSide = 2048.0f;
CGSize imageSize = TGFitSize(image.size, CGSizeMake(maxSide, maxSide));
UIImage *scaledImage = MAX(image.size.width, image.size.height) > maxSide ? TGScaleImageToPixelSize(image, imageSize) : image;
CGFloat thumbnailSide = 60.0f * TGScreenScaling();
CGSize thumbnailSize = TGFitSize(scaledImage.size, CGSizeMake(thumbnailSide, thumbnailSide));
UIImage *thumbnailImage = TGScaleImageToPixelSize(scaledImage, thumbnailSize);
return @{ @"image": scaledImage, @"thumbnail": thumbnailImage };
}];
} }
@end @end

View File

@ -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

View File

@ -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];