{"action":"created","comment":{"url":"https://api.github.com/repos/videolan/vlc-ios/pulls/comments/183678754","pull_request_review_id":114715615,"id":183678754,"diff_hunk":"@@ -0,0 +1,257 @@\n+/*****************************************************************************\n+ * VLCRendererDiscovererManager.swift\n+ *\n+ * Copyright © 2018 VLC authors and VideoLAN\n+ * Copyright © 2018 Videolabs\n+ *\n+ * Authors: Soomin Lee <bubu@mikan.io>\n+ *\n+ * Refer to the COPYING file of the official project for license.\n+ *****************************************************************************/\n+\n+class VLCRendererDiscovererManager: NSObject {\n+    @objc static let sharedInstance = VLCRendererDiscovererManager(presentingViewController: nil)\n+\n+    // Array of RendererDiscoverers(Chromecast, UPnP, ...)\n+    @objc dynamic var discoverers: [VLCRendererDiscoverer] = [VLCRendererDiscoverer]()\n+\n+    @objc lazy var actionSheet: VLCActionSheet = {\n+        let actionSheet = VLCActionSheet()\n+        actionSheet.delegate = self\n+        actionSheet.dataSource = self\n+        actionSheet.modalPresentationStyle = .custom\n+        actionSheet.setAction { [weak self] (item) in\n+            if let rendererItem = item as? VLCRendererItem {\n+                self?.setRendererItem(rendererItem: rendererItem)\n+            }\n+        }\n+        return actionSheet\n+    }()\n+\n+    @objc var presentingViewController: UIViewController?\n+\n+    @objc var rendererButtons: [UIButton] = [UIButton]()\n+\n+    fileprivate init(presentingViewController: UIViewController?) {\n+        self.presentingViewController = presentingViewController\n+        super.init()\n+    }\n+\n+    // Returns renderers of *all* discoverers\n+    @objc func getAllRenderers() -> [VLCRendererItem] {\n+        var renderers = [VLCRendererItem]()\n+\n+        for discoverer in discoverers {\n+            renderers += discoverer.renderers\n+        }\n+        return renderers\n+    }\n+\n+    fileprivate func isDuplicateDiscoverer(with description: VLCRendererDiscovererDescription) -> Bool {\n+        for discoverer in discoverers {\n+            if discoverer.name == description.name {\n+                return true\n+            }\n+        }\n+        return false\n+    }\n+\n+    @discardableResult @objc func start() -> Bool {\n+        // Gather potential renderer discoverers\n+        guard let tmpDiscoverers: [VLCRendererDiscovererDescription] = VLCRendererDiscoverer.list() else {\n+            return false\n+        }\n+        for discoverer in tmpDiscoverers {\n+            if !isDuplicateDiscoverer(with: discoverer) {\n+                if let rendererDiscoverer = VLCRendererDiscoverer(name: discoverer.name) {\n+                    if rendererDiscoverer.start() {\n+                        rendererDiscoverer.delegate = self\n+                        discoverers.append(rendererDiscoverer)\n+                    } else {\n+                        print(\"Unable to start renderer discoverer with name: \\(rendererDiscoverer.name)\")\n+                    }\n+                } else {\n+                    print(\"Unable to instanciate renderer discoverer with name: \\(discoverer.name)\")\n+                }\n+            }\n+        }\n+\n+        return true\n+    }\n+\n+    @objc func stop() {\n+        for discoverer in discoverers {\n+            discoverer.stop()\n+        }\n+        discoverers.removeAll()\n+    }\n+\n+    // MARK: VLCActionSheet\n+    @objc fileprivate func displayActionSheet() {\n+        if let presentingViewController = presentingViewController {\n+            // If only one renderer, choose it automatically\n+            if getAllRenderers().count == 1 {\n+                let indexPath = IndexPath(row: 0, section: 0)\n+                if let rendererItem = getAllRenderers().first {\n+                    actionSheet.collectionView.selectItem(at: indexPath, animated: false, scrollPosition: .centeredVertically)\n+                    actionSheet(collectionView: actionSheet.collectionView, didSelectItem: rendererItem, At: indexPath)\n+                    setRendererItem(rendererItem: rendererItem)\n+\n+                    if let movieViewController = presentingViewController as? VLCMovieViewController {\n+                        movieViewController.setupCastWithCurrentRenderer()\n+                    }\n+                }\n+            } else {\n+                presentingViewController.present(actionSheet, animated: false, completion: nil)\n+            }\n+        } else {\n+            print(\"VLCRendererDiscovererManager: Cannot display actionSheet, no viewController setted\")\n+        }\n+    }\n+\n+    fileprivate func setRendererItem(rendererItem: VLCRendererItem) {\n+        let vpcRenderer = VLCPlaybackController.sharedInstance().renderer\n+\n+        if vpcRenderer != rendererItem {\n+            VLCPlaybackController.sharedInstance().renderer = rendererItem\n+            for button in rendererButtons {\n+                button.isSelected = true\n+            }\n+        } else {\n+            // Same renderer selected, removing selection\n+            VLCPlaybackController.sharedInstance().renderer = nil\n+            for button in rendererButtons {\n+                button.isSelected = false\n+            }\n+        }\n+    }\n+\n+    @objc func addSelectionHandler(selectionHandler: ((_ rendererItem: VLCRendererItem) -> Void)?) {\n+        actionSheet.setAction { [weak self] (item) in\n+            if let rendererItem = item as? VLCRendererItem {\n+                self?.setRendererItem(rendererItem: rendererItem)\n+                if let handler = selectionHandler {\n+                    handler(rendererItem)\n+                }\n+            }\n+        }\n+    }\n+\n+    /// Add the given button to VLCRendererDiscovererManager.\n+    /// The button state will be handled by the manager.\n+    ///\n+    /// - Returns: New `UIButton`\n+    @objc func setupRendererButton() -> UIButton {\n+        let button = UIButton()\n+        button.isHidden = getAllRenderers().isEmpty ? true : false\n+        button.setImage(UIImage(named: \"renderer\"), for: .normal)\n+        button.setImage(UIImage(named: \"rendererFull\"), for: .selected)\n+        button.addTarget(self, action: #selector(displayActionSheet), for: .touchUpInside)\n+        button.accessibilityLabel = NSLocalizedString(\"BUTTON_RENDERER\", comment: \"\")\n+        button.accessibilityHint = NSLocalizedString(\"BUTTON_RENDERER_HINT\", comment: \"\")\n+        rendererButtons.append(button)\n+        return button\n+    }\n+}\n+\n+// MARK: VLCRendererDiscovererDelegate\n+extension VLCRendererDiscovererManager: VLCRendererDiscovererDelegate {\n+    func rendererDiscovererItemAdded(_ rendererDiscoverer: VLCRendererDiscoverer, item: VLCRendererItem) {\n+        for button in rendererButtons {\n+            if button.isHidden {\n+                UIView.animate(withDuration: 0.1) {\n+                    button.isHidden = false\n+                }\n+            }\n+        }\n+        actionSheet.collectionView.reloadData()\n+        actionSheet.updateViewConstraints()\n+    }\n+\n+    func rendererDiscovererItemDeleted(_ rendererDiscoverer: VLCRendererDiscoverer, item: VLCRendererItem) {\n+        if let playbackController = VLCPlaybackController.sharedInstance() {\n+            // Current renderer has been removed\n+            if playbackController.renderer == item {\n+                playbackController.renderer = nil\n+                if playbackController.isPlaying {\n+                    // If playing, fall back to local playback\n+                    if let movieViewController = presentingViewController as? VLCMovieViewController {\n+                        movieViewController.playingExternallyView.isHidden = true\n+                    }\n+                    playbackController.mediaPlayerSetRenderer(nil)\n+                }\n+                // Reset buttons state\n+                for button in rendererButtons {\n+                    button.isSelected = false\n+                }\n+            }\n+            actionSheet.collectionView.reloadData()\n+            actionSheet.updateViewConstraints()\n+        }\n+\n+        // No more renderers to show\n+        if getAllRenderers().isEmpty {\n+            for button in rendererButtons {\n+                button.isHidden = true\n+            }\n+        }\n+    }\n+}\n+\n+// MARK: VLCActionSheetDelegate\n+extension VLCRendererDiscovererManager: VLCActionSheetDelegate {\n+    func headerViewTitle() -> String? {\n+        return NSLocalizedString(\"HEADER_TITLE_RENDERER\", comment: \"\")\n+    }\n+\n+    func itemAtIndexPath(_ indexPath: IndexPath) -> Any? {\n+        let renderers = getAllRenderers()\n+        if indexPath.row < renderers.count {\n+            return renderers[indexPath.row]\n+        }\n+        return nil\n+    }\n+\n+    func actionSheet(collectionView: UICollectionView, didSelectItem item: Any, At indexPath: IndexPath) {\n+        guard let renderer = item as? VLCRendererItem,\n+            let cell = collectionView.cellForItem(at: indexPath) as? VLCActionSheetCell else {\n+                return","path":"Sources/VLCRendererDiscovererManager.swift","position":218,"original_position":218,"commit_id":"c7bd25d569a7f9267303ee78b3c9d4e5dfcb808f","original_commit_id":"c7bd25d569a7f9267303ee78b3c9d4e5dfcb808f","user":{"login":"carolanitz","id":2445653,"avatar_url":"https://avatars1.githubusercontent.com/u/2445653?v=4","gravatar_id":"","url":"https://api.github.com/users/carolanitz","html_url":"https://github.com/carolanitz","followers_url":"https://api.github.com/users/carolanitz/followers","following_url":"https://api.github.com/users/carolanitz/following{/other_user}","gists_url":"https://api.github.com/users/carolanitz/gists{/gist_id}","starred_url":"https://api.github.com/users/carolanitz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/carolanitz/subscriptions","organizations_url":"https://api.github.com/users/carolanitz/orgs","repos_url":"https://api.github.com/users/carolanitz/repos","events_url":"https://api.github.com/users/carolanitz/events{/privacy}","received_events_url":"https://api.github.com/users/carolanitz/received_events","type":"User","site_admin":false},"body":"no assert no error ?","created_at":"2018-04-24T10:20:48Z","updated_at":"2018-04-24T10:28:28Z","html_url":"https://github.com/videolan/vlc-ios/pull/44#discussion_r183678754","pull_request_url":"https://api.github.com/repos/videolan/vlc-ios/pulls/44","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/videolan/vlc-ios/pulls/comments/183678754"},"html":{"href":"https://github.com/videolan/vlc-ios/pull/44#discussion_r183678754"},"pull_request":{"href":"https://api.github.com/repos/videolan/vlc-ios/pulls/44"}}},"pull_request":{"url":"https://api.github.com/repos/videolan/vlc-ios/pulls/44","id":183561383,"html_url":"https://github.com/videolan/vlc-ios/pull/44","diff_url":"https://github.com/videolan/vlc-ios/pull/44.diff","patch_url":"https://github.com/videolan/vlc-ios/pull/44.patch","issue_url":"https://api.github.com/repos/videolan/vlc-ios/issues/44","number":44,"state":"open","locked":false,"title":"[WIP]: Chromecast integration","user":{"login":"Mikanbu","id":14984800,"avatar_url":"https://avatars2.githubusercontent.com/u/14984800?v=4","gravatar_id":"","url":"https://api.github.com/users/Mikanbu","html_url":"https://github.com/Mikanbu","followers_url":"https://api.github.com/users/Mikanbu/followers","following_url":"https://api.github.com/users/Mikanbu/following{/other_user}","gists_url":"https://api.github.com/users/Mikanbu/gists{/gist_id}","starred_url":"https://api.github.com/users/Mikanbu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mikanbu/subscriptions","organizations_url":"https://api.github.com/users/Mikanbu/orgs","repos_url":"https://api.github.com/users/Mikanbu/repos","events_url":"https://api.github.com/users/Mikanbu/events{/privacy}","received_events_url":"https://api.github.com/users/Mikanbu/received_events","type":"User","site_admin":false},"body":"<!-- Thanks for contributing to _vlc-ios_! Before you submit your pull request, please make sure to check the following boxes by putting an x in the [ ] (don't: [x ], [ x], do: [x]) -->\r\n\r\n### Checklist\r\n- [x] I've run `bundle exec fastlane test` from the root directory to see all new and existing tests pass\r\n- [x] I've followed the [vlc-ios code style](Docs/CodingStyle.md) and run `bundle exec fastlane lint` to ensure the code style is valid\r\n- [x] I've read the [Contribution Guidelines](https://github.com/videolan/vlc-ios#contribute)\r\n- [x] I've updated the documentation if necessary.\r\n\r\n### Description\r\n<!-- Describe your changes in detail -->\r\n🚧 WIP Chromecast integration 🚧\r\n\r\n~Should~ Include:\r\n- Chromecast selection(MediaVC & MovieVC)\r\n- Chromecast playback\r\n- Chromecast change during playback\r\n- Chromecast background playback\r\n- Network disconnection handling\r\n- Single Chromecast automatic connection on selection\r\n- Audio priority with different apps(can cast and listen to Spotify~)\r\n\r\nStill needs: \r\n- New mockup adaptation\r\n- Plug with `PresentationTheme`\r\n- Further testing with mulitple chromecast UI-wise\r\n- ~Please not a~ Test suite","created_at":"2018-04-23T21:22:07Z","updated_at":"2018-04-24T10:28:28Z","closed_at":null,"merged_at":null,"merge_commit_sha":"87ec975656da07e5dd4e8f1095a4976bd6eac843","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/videolan/vlc-ios/pulls/44/commits","review_comments_url":"https://api.github.com/repos/videolan/vlc-ios/pulls/44/comments","review_comment_url":"https://api.github.com/repos/videolan/vlc-ios/pulls/comments{/number}","comments_url":"https://api.github.com/repos/videolan/vlc-ios/issues/44/comments","statuses_url":"https://api.github.com/repos/videolan/vlc-ios/statuses/c7bd25d569a7f9267303ee78b3c9d4e5dfcb808f","head":{"label":"Mikanbu:chromecast-fixup","ref":"chromecast-fixup","sha":"c7bd25d569a7f9267303ee78b3c9d4e5dfcb808f","user":{"login":"Mikanbu","id":14984800,"avatar_url":"https://avatars2.githubusercontent.com/u/14984800?v=4","gravatar_id":"","url":"https://api.github.com/users/Mikanbu","html_url":"https://github.com/Mikanbu","followers_url":"https://api.github.com/users/Mikanbu/followers","following_url":"https://api.github.com/users/Mikanbu/following{/other_user}","gists_url":"https://api.github.com/users/Mikanbu/gists{/gist_id}","starred_url":"https://api.github.com/users/Mikanbu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mikanbu/subscriptions","organizations_url":"https://api.github.com/users/Mikanbu/orgs","repos_url":"https://api.github.com/users/Mikanbu/repos","events_url":"https://api.github.com/users/Mikanbu/events{/privacy}","received_events_url":"https://api.github.com/users/Mikanbu/received_events","type":"User","site_admin":false},"repo":{"id":123308065,"name":"vlc-ios","full_name":"Mikanbu/vlc-ios","owner":{"login":"Mikanbu","id":14984800,"avatar_url":"https://avatars2.githubusercontent.com/u/14984800?v=4","gravatar_id":"","url":"https://api.github.com/users/Mikanbu","html_url":"https://github.com/Mikanbu","followers_url":"https://api.github.com/users/Mikanbu/followers","following_url":"https://api.github.com/users/Mikanbu/following{/other_user}","gists_url":"https://api.github.com/users/Mikanbu/gists{/gist_id}","starred_url":"https://api.github.com/users/Mikanbu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mikanbu/subscriptions","organizations_url":"https://api.github.com/users/Mikanbu/orgs","repos_url":"https://api.github.com/users/Mikanbu/repos","events_url":"https://api.github.com/users/Mikanbu/events{/privacy}","received_events_url":"https://api.github.com/users/Mikanbu/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Mikanbu/vlc-ios","description":"VLC for iOS official mirror","fork":true,"url":"https://api.github.com/repos/Mikanbu/vlc-ios","forks_url":"https://api.github.com/repos/Mikanbu/vlc-ios/forks","keys_url":"https://api.github.com/repos/Mikanbu/vlc-ios/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Mikanbu/vlc-ios/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Mikanbu/vlc-ios/teams","hooks_url":"https://api.github.com/repos/Mikanbu/vlc-ios/hooks","issue_events_url":"https://api.github.com/repos/Mikanbu/vlc-ios/issues/events{/number}","events_url":"https://api.github.com/repos/Mikanbu/vlc-ios/events","assignees_url":"https://api.github.com/repos/Mikanbu/vlc-ios/assignees{/user}","branches_url":"https://api.github.com/repos/Mikanbu/vlc-ios/branches{/branch}","tags_url":"https://api.github.com/repos/Mikanbu/vlc-ios/tags","blobs_url":"https://api.github.com/repos/Mikanbu/vlc-ios/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Mikanbu/vlc-ios/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Mikanbu/vlc-ios/git/refs{/sha}","trees_url":"https://api.github.com/repos/Mikanbu/vlc-ios/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Mikanbu/vlc-ios/statuses/{sha}","languages_url":"https://api.github.com/repos/Mikanbu/vlc-ios/languages","stargazers_url":"https://api.github.com/repos/Mikanbu/vlc-ios/stargazers","contributors_url":"https://api.github.com/repos/Mikanbu/vlc-ios/contributors","subscribers_url":"https://api.github.com/repos/Mikanbu/vlc-ios/subscribers","subscription_url":"https://api.github.com/repos/Mikanbu/vlc-ios/subscription","commits_url":"https://api.github.com/repos/Mikanbu/vlc-ios/commits{/sha}","git_commits_url":"https://api.github.com/repos/Mikanbu/vlc-ios/git/commits{/sha}","comments_url":"https://api.github.com/repos/Mikanbu/vlc-ios/comments{/number}","issue_comment_url":"https://api.github.com/repos/Mikanbu/vlc-ios/issues/comments{/number}","contents_url":"https://api.github.com/repos/Mikanbu/vlc-ios/contents/{+path}","compare_url":"https://api.github.com/repos/Mikanbu/vlc-ios/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Mikanbu/vlc-ios/merges","archive_url":"https://api.github.com/repos/Mikanbu/vlc-ios/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Mikanbu/vlc-ios/downloads","issues_url":"https://api.github.com/repos/Mikanbu/vlc-ios/issues{/number}","pulls_url":"https://api.github.com/repos/Mikanbu/vlc-ios/pulls{/number}","milestones_url":"https://api.github.com/repos/Mikanbu/vlc-ios/milestones{/number}","notifications_url":"https://api.github.com/repos/Mikanbu/vlc-ios/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Mikanbu/vlc-ios/labels{/name}","releases_url":"https://api.github.com/repos/Mikanbu/vlc-ios/releases{/id}","deployments_url":"https://api.github.com/repos/Mikanbu/vlc-ios/deployments","created_at":"2018-02-28T16:00:50Z","updated_at":"2018-02-28T16:00:54Z","pushed_at":"2018-04-24T09:58:49Z","git_url":"git://github.com/Mikanbu/vlc-ios.git","ssh_url":"git@github.com:Mikanbu/vlc-ios.git","clone_url":"https://github.com/Mikanbu/vlc-ios.git","svn_url":"https://github.com/Mikanbu/vlc-ios","homepage":null,"size":43718,"stargazers_count":0,"watchers_count":0,"language":"Objective-C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"videolan:master","ref":"master","sha":"7f5dd63c8cd648f1a88ec9f78b578e6d8325a812","user":{"login":"videolan","id":1389585,"avatar_url":"https://avatars1.githubusercontent.com/u/1389585?v=4","gravatar_id":"","url":"https://api.github.com/users/videolan","html_url":"https://github.com/videolan","followers_url":"https://api.github.com/users/videolan/followers","following_url":"https://api.github.com/users/videolan/following{/other_user}","gists_url":"https://api.github.com/users/videolan/gists{/gist_id}","starred_url":"https://api.github.com/users/videolan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/videolan/subscriptions","organizations_url":"https://api.github.com/users/videolan/orgs","repos_url":"https://api.github.com/users/videolan/repos","events_url":"https://api.github.com/users/videolan/events{/privacy}","received_events_url":"https://api.github.com/users/videolan/received_events","type":"Organization","site_admin":false},"repo":{"id":120193302,"name":"vlc-ios","full_name":"videolan/vlc-ios","owner":{"login":"videolan","id":1389585,"avatar_url":"https://avatars1.githubusercontent.com/u/1389585?v=4","gravatar_id":"","url":"https://api.github.com/users/videolan","html_url":"https://github.com/videolan","followers_url":"https://api.github.com/users/videolan/followers","following_url":"https://api.github.com/users/videolan/following{/other_user}","gists_url":"https://api.github.com/users/videolan/gists{/gist_id}","starred_url":"https://api.github.com/users/videolan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/videolan/subscriptions","organizations_url":"https://api.github.com/users/videolan/orgs","repos_url":"https://api.github.com/users/videolan/repos","events_url":"https://api.github.com/users/videolan/events{/privacy}","received_events_url":"https://api.github.com/users/videolan/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/videolan/vlc-ios","description":"VLC for iOS official mirror","fork":false,"url":"https://api.github.com/repos/videolan/vlc-ios","forks_url":"https://api.github.com/repos/videolan/vlc-ios/forks","keys_url":"https://api.github.com/repos/videolan/vlc-ios/keys{/key_id}","collaborators_url":"https://api.github.com/repos/videolan/vlc-ios/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/videolan/vlc-ios/teams","hooks_url":"https://api.github.com/repos/videolan/vlc-ios/hooks","issue_events_url":"https://api.github.com/repos/videolan/vlc-ios/issues/events{/number}","events_url":"https://api.github.com/repos/videolan/vlc-ios/events","assignees_url":"https://api.github.com/repos/videolan/vlc-ios/assignees{/user}","branches_url":"https://api.github.com/repos/videolan/vlc-ios/branches{/branch}","tags_url":"https://api.github.com/repos/videolan/vlc-ios/tags","blobs_url":"https://api.github.com/repos/videolan/vlc-ios/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/videolan/vlc-ios/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/videolan/vlc-ios/git/refs{/sha}","trees_url":"https://api.github.com/repos/videolan/vlc-ios/git/trees{/sha}","statuses_url":"https://api.github.com/repos/videolan/vlc-ios/statuses/{sha}","languages_url":"https://api.github.com/repos/videolan/vlc-ios/languages","stargazers_url":"https://api.github.com/repos/videolan/vlc-ios/stargazers","contributors_url":"https://api.github.com/repos/videolan/vlc-ios/contributors","subscribers_url":"https://api.github.com/repos/videolan/vlc-ios/subscribers","subscription_url":"https://api.github.com/repos/videolan/vlc-ios/subscription","commits_url":"https://api.github.com/repos/videolan/vlc-ios/commits{/sha}","git_commits_url":"https://api.github.com/repos/videolan/vlc-ios/git/commits{/sha}","comments_url":"https://api.github.com/repos/videolan/vlc-ios/comments{/number}","issue_comment_url":"https://api.github.com/repos/videolan/vlc-ios/issues/comments{/number}","contents_url":"https://api.github.com/repos/videolan/vlc-ios/contents/{+path}","compare_url":"https://api.github.com/repos/videolan/vlc-ios/compare/{base}...{head}","merges_url":"https://api.github.com/repos/videolan/vlc-ios/merges","archive_url":"https://api.github.com/repos/videolan/vlc-ios/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/videolan/vlc-ios/downloads","issues_url":"https://api.github.com/repos/videolan/vlc-ios/issues{/number}","pulls_url":"https://api.github.com/repos/videolan/vlc-ios/pulls{/number}","milestones_url":"https://api.github.com/repos/videolan/vlc-ios/milestones{/number}","notifications_url":"https://api.github.com/repos/videolan/vlc-ios/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/videolan/vlc-ios/labels{/name}","releases_url":"https://api.github.com/repos/videolan/vlc-ios/releases{/id}","deployments_url":"https://api.github.com/repos/videolan/vlc-ios/deployments","created_at":"2018-02-04T14:44:05Z","updated_at":"2018-04-23T21:30:45Z","pushed_at":"2018-04-24T09:58:50Z","git_url":"git://github.com/videolan/vlc-ios.git","ssh_url":"git@github.com:videolan/vlc-ios.git","clone_url":"https://github.com/videolan/vlc-ios.git","svn_url":"https://github.com/videolan/vlc-ios","homepage":null,"size":43580,"stargazers_count":175,"watchers_count":175,"language":"Objective-C","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":21,"mirror_url":null,"archived":false,"open_issues_count":4,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":21,"open_issues":4,"watchers":175,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/videolan/vlc-ios/pulls/44"},"html":{"href":"https://github.com/videolan/vlc-ios/pull/44"},"issue":{"href":"https://api.github.com/repos/videolan/vlc-ios/issues/44"},"comments":{"href":"https://api.github.com/repos/videolan/vlc-ios/issues/44/comments"},"review_comments":{"href":"https://api.github.com/repos/videolan/vlc-ios/pulls/44/comments"},"review_comment":{"href":"https://api.github.com/repos/videolan/vlc-ios/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/videolan/vlc-ios/pulls/44/commits"},"statuses":{"href":"https://api.github.com/repos/videolan/vlc-ios/statuses/c7bd25d569a7f9267303ee78b3c9d4e5dfcb808f"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"carolanitz"}}