mdriver: StorageDriverInternal & SupportingBatchOperations, _ folder: FolderItem) -> Observable<GroupStorageTask<StorageItem>> { return Observable .from(items) .flatMap { self.resolve(item: $0) } .toArray() .flatMap { mdriver.copy(items: $0, to: folder) } .map { $0.result } .filterNil() .flatMap { items -> Observable<StorageTask<StorageItem>> in let result = items .map { StorageTask<StorageItem>(item: $0, progress: 1.0, result: $0) } .map { Observable.just($0) } return Observable.from(result).concat() } .scan(GroupStorageTask(count: items.count)) { group, task in return group.updated(with: task) } }