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