@@ -137,7 +137,7 @@ - (void) dealloc {
137137
138138- (DPIRKitDevice *) deviceForServiceId : (NSString *)serviceId {
139139 @synchronized (_devices) {
140- return [ _devices objectForKey: serviceId];
140+ return _devices[ serviceId];
141141 }
142142}
143143
@@ -248,29 +248,37 @@ - (void) sendDeviceDetectionEventWithDevice:(DPIRKitDevice *)device online:(BOOL
248248 if (virtuals.count > 0 ) {
249249 for (DPIRKitVirtualDevice *virtual in virtuals) {
250250 NSRange range = [virtual.serviceId rangeOfString: device.name];
251- if (range.location != NSNotFound
252- && [ self existIRForServiceId: virtual.serviceId]) {
253- if (online ) {
251+ if (range.location != NSNotFound ) {
252+
253+ if ([ self existIRForServiceId: virtual.serviceId] ) {
254254 // オンライン遷移の場合、デバイスが未登録なら登録し、登録済ならフラグをオンラインにする
255255 NSString *serviceId = virtual.serviceId ;
256256 if ([self .serviceProvider service: serviceId]) {
257257 DConnectService *service = [self .serviceProvider service: serviceId];
258- [service setOnline: YES ];
258+ [service setOnline: online ];
259259 } else {
260- NSString *profileName = virtual.categoryName ;
261260 DPIRKitVirtualService *service = [[DPIRKitVirtualService alloc ] initWithServiceId: serviceId
262261 name: virtual.deviceName
263262 plugin: self
264- profileName: profileName];
263+ profileName: virtual.categoryName];
264+ [service setOnline: online];
265265 [self .serviceProvider addService: service bundle: DPIRBundle ()];
266- [service setOnline: YES ];
266+
267267 }
268268 } else {
269269 // オフライン遷移の場合、デバイスが登録済ならフラグをオフラインにする
270270 NSString *serviceId = virtual.serviceId ;
271271 DConnectService *service = [self .serviceProvider service: serviceId];
272272 if (service) {
273273 [service setOnline: NO ];
274+ [self .serviceProvider addService: service bundle: DPIRBundle ()];
275+ } else {
276+ service = [[DPIRKitVirtualService alloc ] initWithServiceId: serviceId
277+ name: virtual.deviceName
278+ plugin: self
279+ profileName: virtual.categoryName];
280+ [service setOnline: NO ];
281+ [self .serviceProvider addService: service bundle: DPIRBundle ()];
274282 }
275283 }
276284
@@ -340,24 +348,16 @@ - (UIViewController *) profile:(DConnectSystemProfile *)sender
340348 DConnectServiceListViewController *serviceListViewController = (DConnectServiceListViewController *) top.viewControllers [0 ];
341349 serviceListViewController.delegate = self;
342350 return top;
343- /*
344- NSBundle *bundle = DPIRBundle();
345-
346- // iphoneとipadでストーリーボードを切り替える
347- UIStoryboard *storyBoard;
348- if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
349- storyBoard = [UIStoryboard storyboardWithName:[NSString stringWithFormat:@"%@iPhone", DPIRKitStoryBoardName]
350- bundle:bundle];
351- } else{
352- storyBoard = [UIStoryboard storyboardWithName:[NSString stringWithFormat:@"%@iPad", DPIRKitStoryBoardName]
353- bundle:bundle];
354- }
355- UINavigationController *viewController = [storyBoard instantiateInitialViewController];
356- return viewController;
357- */
358351}
359-
360- - (void )didSelectService : (DConnectService *)service {
352+ - (void )didRemoveService : (DConnectService *)service
353+ {
354+ // サービス一覧画面で仮想デバイスが削除されたら、DBからも仮想デバイスを削除する。
355+ DPIRKitDBManager *mgr = [DPIRKitDBManager sharedInstance ];
356+ [mgr deleteVirtualDevice: service.serviceId];
357+ [mgr deleteRESTfulRequestForServiceId: service.serviceId];
358+ }
359+ - (void )didSelectService : (DConnectService *)service
360+ {
361361
362362 // サービスが選択されたら、仮想デバイス一覧画面を表示する
363363
@@ -373,42 +373,28 @@ - (void)didSelectService:(DConnectService *)service {
373373 }
374374 UINavigationController *top = [storyBoard instantiateViewControllerWithIdentifier: @" virtualDeviceList" ];
375375
376-
377376 UIViewController *rootView;
378377 DCPutPresentedViewController (rootView);
379378 DPIRKitVirtualDeviceViewController *view = (DPIRKitVirtualDeviceViewController*) top.viewControllers [0 ];
380- DPIRKitDevice *irkit = _devices[service.serviceId];
381-
382- if (irkit) {
383- [view setDetailItem: irkit];
384- [rootView presentViewController: top animated: YES completion: nil ];
385- } else {
386- NSString *title = nil ;
387- NSString *message = nil ;
388- DConnectService *service_ = [self .serviceProvider service: service.serviceId];
389- if (service_) {
390- if ([service_ isMemberOfClass: [DPIRKitService class ]] ) {
391- if (!service_.online ) {
392- title = @" オフライン" ;
393- message = @" このデバイスはオフラインです" ;
394- }
395- } else if ([service_ isMemberOfClass: [DPIRKitVirtualService class ]] ) {
396- if (!service_.online ) {
397- title = @" 仮想デバイス" ;
398- message = @" このデバイスは仮想デバイスです" ;
399- }
400- }
401- } else {
402- title = @" 認識されていないデバイス" ;
403- message = @" このデバイスは認識されていません" ;
404- }
405- if (!title) {
406- title = @" 不明なデバイス" ;
407- message = @" このデバイスは不明です" ;
379+ if (service.serviceId ) {
380+ // IRKitのServiceIdに.がある場合は仮想デバイスとみなす
381+ NSRange range = [service.serviceId rangeOfString: @" ." ];
382+ if (range.location != NSNotFound ) {
383+ UIAlertController *alertController = [UIAlertController alertControllerWithTitle: @" 仮想デバイス"
384+ message: @" このデバイスは仮想デバイスのため、さらに仮想デバイスを作ることはできません。"
385+ preferredStyle: UIAlertControllerStyleAlert];
386+ [alertController addAction: [UIAlertAction actionWithTitle: @" OK" style: UIAlertActionStyleDefault handler: nil ]];
387+ [rootView presentViewController: alertController animated: YES completion: nil ];
388+ return ;
408389 }
409390
410- UIAlertController *alertController = [UIAlertController alertControllerWithTitle: title
411- message: message
391+
392+ [view setDetailName: service.serviceId];
393+ [view setProvider: super .serviceProvider];
394+ [rootView presentViewController: top animated: YES completion: nil ];
395+ } else {
396+ UIAlertController *alertController = [UIAlertController alertControllerWithTitle: @" 不明なデバイス"
397+ message: @" このデバイスは不明です"
412398 preferredStyle: UIAlertControllerStyleAlert];
413399 [alertController addAction: [UIAlertAction actionWithTitle: @" OK" style: UIAlertActionStyleDefault handler: nil ]];
414400 [rootView presentViewController: alertController animated: YES completion: nil ];
@@ -441,20 +427,8 @@ - (UIViewController *)settingViewController {
441427 bundle: bundle];
442428 }
443429 UINavigationController *top = [storyBoard instantiateViewControllerWithIdentifier: @" setting" ];
444- return top;
445- }
446430
447- - (NSArray *) displayServiceFilter : (NSArray *)services {
448-
449- NSMutableArray *filterServices = [NSMutableArray array ];
450-
451- // 仮想デバイスを表示しないので、それを除いたservicesを作成して返す
452- for (DConnectService *service in services) {
453- if (![service isMemberOfClass: [DPIRKitVirtualService class ]]) {
454- [filterServices addObject: service];
455- }
456- }
457- return filterServices;
431+ return top;
458432}
459433
460434#pragma mark DConnectInformationProfileDataSource
@@ -466,7 +440,7 @@ - (DConnectServiceInformationProfileConnectState) profile:(DConnectServiceInform
466440 DConnectServiceInformationProfileConnectState state = DConnectServiceInformationProfileConnectStateOff;
467441 @synchronized (_devices) {
468442 if (_devices.count > 0 ) {
469- DPIRKitDevice *device = [ _devices objectForKey: serviceId];
443+ DPIRKitDevice *device = _devices[ serviceId];
470444 if (device) {
471445 state = DConnectServiceInformationProfileConnectStateOn;
472446 }
0 commit comments