Skip to content

Commit 363ab10

Browse files
Previewが停止できない件の修正。デバイス操作の許可が取れていない場合は、エラーメッセージを返すように修正。
1 parent f463082 commit 363ab10

5 files changed

Lines changed: 299 additions & 181 deletions

File tree

dConnectDevicePlugin/dConnectDeviceHost/dConnectDeviceHost/Classes/profile/DPHostMediaStreamRecording/DPHostMediaStreamRecordingProfile.m

Lines changed: 129 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ @interface DPHostMediaStreamRecordingProfile ()
2323

2424
@implementation DPHostMediaStreamRecordingProfile
2525

26+
27+
2628
- (instancetype)init
2729
{
2830
self = [super init];
@@ -95,18 +97,21 @@ - (instancetype)init
9597
[response setErrorToInvalidRequestParameterWithMessage:@"target is invalid."];
9698
return YES;
9799
}
98-
[recorder takePhotoWithSuccessCompletion:^(NSURL *assetURL) {
99-
[DConnectMediaStreamRecordingProfile setUri:assetURL.absoluteString target:response];
100-
[DConnectMediaStreamRecordingProfile setPath:assetURL.path target:response];
101-
NSString *mimeType = [DConnectFileManager searchMimeTypeForExtension:@"jpg"];
102-
[DConnectMediaStreamRecordingProfile setMIMEType:mimeType target:response];
103-
[response setResult:DConnectMessageResultTypeOk];
104-
[[DConnectManager sharedManager] sendResponse:response];
105-
[weakSelf sendOnPhotoEventWithPath:assetURL.absoluteString mimeType:mimeType];
106-
} failCompletion:^(NSString *errorMessage) {
107-
[response setErrorToUnknownWithMessage:errorMessage];
108-
[[DConnectManager sharedManager] sendResponse:response];
109-
}];
100+
void (^block) (void) = ^(void) {
101+
[recorder takePhotoWithSuccessCompletion:^(NSURL *assetURL) {
102+
[DConnectMediaStreamRecordingProfile setUri:assetURL.absoluteString target:response];
103+
[DConnectMediaStreamRecordingProfile setPath:assetURL.path target:response];
104+
NSString *mimeType = [DConnectFileManager searchMimeTypeForExtension:@"jpg"];
105+
[DConnectMediaStreamRecordingProfile setMIMEType:mimeType target:response];
106+
[response setResult:DConnectMessageResultTypeOk];
107+
[[DConnectManager sharedManager] sendResponse:response];
108+
[weakSelf sendOnPhotoEventWithPath:assetURL.absoluteString mimeType:mimeType];
109+
} failCompletion:^(NSString *errorMessage) {
110+
[response setErrorToIllegalDeviceStateWithMessage:errorMessage];
111+
[[DConnectManager sharedManager] sendResponse:response];
112+
}];
113+
};
114+
[weakSelf requestAuthorizedAfterRunBlock:block response:response];
110115
return NO;
111116
}];
112117

@@ -139,15 +144,18 @@ - (instancetype)init
139144
usedRecorderName]];
140145
return YES;
141146
}
142-
[recorder startRecordingWithSuccessCompletion:^(DPHostStreamRecorder *recorder, NSString *fileName) {
143-
[response setResult:DConnectMessageResultTypeOk];
144-
[weakSelf sendOnRecordingChangeEventWithStatus:DConnectMediaStreamRecordingProfileRecordingStateRecording
145-
path:fileName mimeType:recorder.mimeType errorMessage:nil];
146-
[[DConnectManager sharedManager] sendResponse:response];
147-
} failCompletion:^(DPHostStreamRecorder *recorder, NSString *errorMessage) {
148-
[response setErrorToIllegalDeviceStateWithMessage:errorMessage];
149-
[[DConnectManager sharedManager] sendResponse:response];
150-
}];
147+
void (^block) (void) = ^(void) {
148+
[recorder startRecordingWithSuccessCompletion:^(DPHostStreamRecorder *recorder, NSString *fileName) {
149+
[response setResult:DConnectMessageResultTypeOk];
150+
[weakSelf sendOnRecordingChangeEventWithStatus:DConnectMediaStreamRecordingProfileRecordingStateRecording
151+
path:fileName mimeType:recorder.mimeType errorMessage:nil];
152+
[[DConnectManager sharedManager] sendResponse:response];
153+
} failCompletion:^(DPHostStreamRecorder *recorder, NSString *errorMessage) {
154+
[response setErrorToIllegalDeviceStateWithMessage:errorMessage];
155+
[[DConnectManager sharedManager] sendResponse:response];
156+
}];
157+
};
158+
[weakSelf requestAuthorizedAfterRunBlock:block response:response];
151159
return NO;
152160

153161
}];
@@ -163,17 +171,20 @@ - (instancetype)init
163171
[response setErrorToInvalidRequestParameterWithMessage:@"target is invalid."];
164172
return YES;
165173
}
166-
[recorder stopRecordingWithSuccessCompletion:^(DPHostStreamRecorder *recorder, NSString *fileName) {
167-
[response setResult:DConnectMessageResultTypeOk];
168-
[DConnectMediaStreamRecordingProfile setUri:fileName target:response];
169-
[weakSelf sendOnRecordingChangeEventWithStatus:DConnectMediaStreamRecordingProfileRecordingStateStop
170-
path:fileName mimeType:recorder.mimeType errorMessage:nil];
171-
[[DConnectManager sharedManager] sendResponse:response];
172-
173-
} failCompletion:^(DPHostStreamRecorder *recorder, NSString *errorMessage) {
174-
[response setErrorToIllegalDeviceStateWithMessage:errorMessage];
175-
[[DConnectManager sharedManager] sendResponse:response];
176-
}];
174+
void (^block) (void) = ^(void) {
175+
[recorder stopRecordingWithSuccessCompletion:^(DPHostStreamRecorder *recorder, NSString *fileName) {
176+
[response setResult:DConnectMessageResultTypeOk];
177+
[DConnectMediaStreamRecordingProfile setUri:fileName target:response];
178+
[weakSelf sendOnRecordingChangeEventWithStatus:DConnectMediaStreamRecordingProfileRecordingStateStop
179+
path:fileName mimeType:recorder.mimeType errorMessage:nil];
180+
[[DConnectManager sharedManager] sendResponse:response];
181+
182+
} failCompletion:^(DPHostStreamRecorder *recorder, NSString *errorMessage) {
183+
[response setErrorToIllegalDeviceStateWithMessage:errorMessage];
184+
[[DConnectManager sharedManager] sendResponse:response];
185+
}];
186+
};
187+
[weakSelf requestAuthorizedAfterRunBlock:block response:response];
177188
return NO;
178189
}];
179190
// API登録(didReceivePutPauseRequest相当)
@@ -188,14 +199,16 @@ - (instancetype)init
188199
[response setErrorToInvalidRequestParameterWithMessage:@"target is invalid."];
189200
return YES;
190201
}
191-
192-
[recorder pauseRecordingWithSuccessCompletion:^(DPHostStreamRecorder *recorder) {
193-
[response setResult:DConnectMessageResultTypeOk];
194-
[[DConnectManager sharedManager] sendResponse:response];
195-
} failCompletion:^(DPHostStreamRecorder *recorder, NSString *errorMessage) {
196-
[response setErrorToIllegalDeviceStateWithMessage:errorMessage];
197-
[[DConnectManager sharedManager] sendResponse:response];
198-
}];
202+
void (^block) (void) = ^(void) {
203+
[recorder pauseRecordingWithSuccessCompletion:^(DPHostStreamRecorder *recorder) {
204+
[response setResult:DConnectMessageResultTypeOk];
205+
[[DConnectManager sharedManager] sendResponse:response];
206+
} failCompletion:^(DPHostStreamRecorder *recorder, NSString *errorMessage) {
207+
[response setErrorToIllegalDeviceStateWithMessage:errorMessage];
208+
[[DConnectManager sharedManager] sendResponse:response];
209+
}];
210+
};
211+
[weakSelf requestAuthorizedAfterRunBlock:block response:response];
199212
return NO;
200213
}];
201214

@@ -210,14 +223,16 @@ - (instancetype)init
210223
[response setErrorToInvalidRequestParameterWithMessage:@"target is invalid."];
211224
return YES;
212225
}
213-
214-
[recorder resumeRecordingWithSuccessCompletion:^(DPHostStreamRecorder *recorder) {
215-
[response setResult:DConnectMessageResultTypeOk];
216-
[[DConnectManager sharedManager] sendResponse:response];
217-
} failCompletion:^(DPHostStreamRecorder *recorder, NSString *errorMessage) {
218-
[response setErrorToIllegalDeviceStateWithMessage:errorMessage];
219-
[[DConnectManager sharedManager] sendResponse:response];
220-
}];
226+
void (^block) (void) = ^(void) {
227+
[recorder resumeRecordingWithSuccessCompletion:^(DPHostStreamRecorder *recorder) {
228+
[response setResult:DConnectMessageResultTypeOk];
229+
[[DConnectManager sharedManager] sendResponse:response];
230+
} failCompletion:^(DPHostStreamRecorder *recorder, NSString *errorMessage) {
231+
[response setErrorToIllegalDeviceStateWithMessage:errorMessage];
232+
[[DConnectManager sharedManager] sendResponse:response];
233+
}];
234+
};
235+
[weakSelf requestAuthorizedAfterRunBlock:block response:response];
221236
return NO;
222237
}];
223238

@@ -234,14 +249,16 @@ - (instancetype)init
234249
[response setErrorToInvalidRequestParameterWithMessage:@"target is invalid."];
235250
return YES;
236251
}
237-
238-
[recorder muteRecordingWithSuccessCompletion:^(DPHostStreamRecorder *recorder) {
239-
[response setResult:DConnectMessageResultTypeOk];
240-
[[DConnectManager sharedManager] sendResponse:response];
241-
} failCompletion:^(DPHostStreamRecorder *recorder, NSString *errorMessage) {
242-
[response setErrorToIllegalDeviceStateWithMessage:errorMessage];
243-
[[DConnectManager sharedManager] sendResponse:response];
244-
}];
252+
void (^block) (void) = ^(void) {
253+
[recorder muteRecordingWithSuccessCompletion:^(DPHostStreamRecorder *recorder) {
254+
[response setResult:DConnectMessageResultTypeOk];
255+
[[DConnectManager sharedManager] sendResponse:response];
256+
} failCompletion:^(DPHostStreamRecorder *recorder, NSString *errorMessage) {
257+
[response setErrorToIllegalDeviceStateWithMessage:errorMessage];
258+
[[DConnectManager sharedManager] sendResponse:response];
259+
}];
260+
};
261+
[weakSelf requestAuthorizedAfterRunBlock:block response:response];
245262
return NO;
246263
}];
247264

@@ -256,14 +273,16 @@ - (instancetype)init
256273
[response setErrorToInvalidRequestParameterWithMessage:@"target is invalid."];
257274
return YES;
258275
}
259-
260-
[recorder unMuteRecordingWithSuccessCompletion:^(DPHostStreamRecorder *recorder) {
261-
[response setResult:DConnectMessageResultTypeOk];
262-
[[DConnectManager sharedManager] sendResponse:response];
263-
} failCompletion:^(DPHostStreamRecorder *recorder, NSString *errorMessage) {
264-
[response setErrorToIllegalDeviceStateWithMessage:errorMessage];
265-
[[DConnectManager sharedManager] sendResponse:response];
266-
}];
276+
__block void (^block) (void) = ^(void) {
277+
[recorder unMuteRecordingWithSuccessCompletion:^(DPHostStreamRecorder *recorder) {
278+
[response setResult:DConnectMessageResultTypeOk];
279+
[[DConnectManager sharedManager] sendResponse:response];
280+
} failCompletion:^(DPHostStreamRecorder *recorder, NSString *errorMessage) {
281+
[response setErrorToIllegalDeviceStateWithMessage:errorMessage];
282+
[[DConnectManager sharedManager] sendResponse:response];
283+
}];
284+
};
285+
[weakSelf requestAuthorizedAfterRunBlock:block response:response];
267286
return NO;
268287
}];
269288

@@ -320,15 +339,18 @@ - (instancetype)init
320339
[response setErrorToInvalidRequestParameterWithMessage:@"target is invalid."];
321340
return YES;
322341
}
323-
324-
[recorder startWebServerWithSuccessCompletion:^(NSString *uri) {
325-
[response setResult:DConnectMessageResultTypeOk];
326-
[DConnectMediaStreamRecordingProfile setUri:uri target:response];
327-
[[DConnectManager sharedManager] sendResponse:response];
328-
} failCompletion:^(NSString *errorMessage) {
329-
[response setErrorToIllegalDeviceStateWithMessage:errorMessage];
330-
[[DConnectManager sharedManager] sendResponse:response];
331-
}];
342+
void (^block) (void) = ^(void) {
343+
[recorder startWebServerWithSuccessCompletion:^(NSString *uri) {
344+
[response setResult:DConnectMessageResultTypeOk];
345+
[DConnectMediaStreamRecordingProfile setUri:uri target:response];
346+
[[DConnectManager sharedManager] sendResponse:response];
347+
} failCompletion:^(NSString *errorMessage) {
348+
[response setErrorToIllegalDeviceStateWithMessage:errorMessage];
349+
[[DConnectManager sharedManager] sendResponse:response];
350+
}];
351+
};
352+
[weakSelf requestAuthorizedAfterRunBlock:block response:response];
353+
332354
return NO;
333355
}];
334356

@@ -385,15 +407,47 @@ - (instancetype)init
385407
[response setErrorToInvalidRequestParameterWithMessage:@"target is invalid."];
386408
return YES;
387409
}
388-
[recorder stopWebServer];
389-
[response setResult:DConnectMessageResultTypeOk];
410+
void (^block) (void) = ^(void) {
411+
[recorder stopWebServer];
412+
[response setResult:DConnectMessageResultTypeOk];
413+
};
414+
[weakSelf requestAuthorizedAfterRunBlock:block response:response];
390415
return YES;
391416
}];
392417

393418
}
394419
return self;
395420
}
396421

422+
#pragma mark - Private Method
423+
- (void)requestAuthorizedAfterRunBlock:(void (^)(void))block response:(DConnectResponseMessage *)response {
424+
AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
425+
switch (status) {
426+
case AVAuthorizationStatusAuthorized:
427+
default:
428+
break;
429+
case AVAuthorizationStatusDenied:
430+
case AVAuthorizationStatusRestricted:
431+
case AVAuthorizationStatusNotDetermined:
432+
// 初回起動時に許可設定を促すダイアログが表示される
433+
NSLog(@"aaaaa");
434+
dispatch_async(dispatch_get_main_queue(), ^{
435+
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
436+
if (granted) {
437+
block();
438+
} else {
439+
[response setErrorToUnknownWithMessage:@"Not Authorized to take photo."];
440+
[[DConnectManager sharedManager] sendResponse:response];
441+
}
442+
}];
443+
444+
});
445+
return;
446+
}
447+
448+
block();
449+
}
450+
397451

398452
#pragma mark - Send Event
399453

0 commit comments

Comments
 (0)