{"action":"created","comment":{"url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/pulls/comments/39192510","id":39192510,"diff_hunk":"@@ -0,0 +1,414 @@\n+﻿using System;\n+using System.Collections.Generic;\n+using System.Threading.Tasks;\n+using System.Linq;\n+using Emby.Mobile.Core.Playback;\n+using MediaBrowser.Model.Dto;\n+using Windows.UI.Xaml;\n+using Emby.Mobile.Universal.Services;\n+using MediaBrowser.Model.Session;\n+using MediaBrowser.Model.Dlna;\n+using GalaSoft.MvvmLight.Ioc;\n+using MediaBrowser.Model.ApiClient;\n+using MediaBrowser.ApiInteraction.Playback;\n+using Emby.Mobile.Universal.Core.Helpers;\n+using Emby.Mobile.Core.Interfaces;\n+using Windows.Media.Playback;\n+using Emby.Mobile.Universal.BackgroundAudio.Messages;\n+using Emby.Mobile.Universal.BackgroundAudio;\n+using Emby.Mobile.Core.Helpers;\n+using Windows.ApplicationModel;\n+using System.Threading;\n+using Emby.Mobile.Core.Extensions;\n+\n+namespace Emby.Mobile.Universal.Controls.MediaPlayers\n+{\n+    public class BackgroundAudioPlayer : IMediaPlayer\n+    {\n+        private DispatcherTimer _postionChangedTimer;\n+        private StreamInfo _streamInfo;\n+        private BaseItemDto _item;\n+        private MediaPlayer _player;\n+        private List<PlaylistItem> _playlist;\n+        private bool _isAudioBackgroundTaskRunning = false;\n+        private ManualResetEvent _backgroundTaskStarted = new ManualResetEvent(false);\n+\n+        private bool IsAudioBackgroundTaskRunning\n+        {\n+            get\n+            {\n+                if (_isAudioBackgroundTaskRunning)\n+                    return true;\n+\n+                string value = ApplicationSettingsHelper.ReadAndRemoveSettingsValue(BackgroundAudioConstants.BackgroundAudioTaskState) as string;\n+                if (value == null)\n+                {\n+                    return false;\n+                }\n+                else\n+                {\n+                    try\n+                    {\n+                        _isAudioBackgroundTaskRunning = value.ToEnum<BackgroundTaskState>() == BackgroundTaskState.Running;\n+                    }\n+                    catch (ArgumentException)\n+                    {\n+                        _isAudioBackgroundTaskRunning = false;\n+                    }\n+                    return _isAudioBackgroundTaskRunning;\n+                }\n+            }\n+        }\n+\n+        public bool CanPause => _player?.CanPause == true;\n+        public bool CanSeek => _player?.CanSeek == true;\n+        public Guid Id { get; } = Guid.NewGuid();\n+        public bool IsPlaying => _player?.PlaybackRate > 0;\n+        public PlayerType PlayerType => PlayerType.Audio;\n+        public PlayerState PlayerState { get; private set; } = PlayerState.Unknown;\n+\n+        #region Ctors and LifeCycle management\n+\n+        public BackgroundAudioPlayer()\n+        {\n+            _postionChangedTimer = new DispatcherTimer();\n+            _postionChangedTimer.Interval = TimeSpan.FromSeconds(1);\n+            _postionChangedTimer.Tick += PostionChangedTimer_Tick;\n+\n+            _player = BackgroundMediaPlayer.Current;\n+            _player.CurrentStateChanged += Player_CurrentStateChanged;\n+            _player.MediaOpened += Player_MediaOpened;\n+            _player.MediaEnded += Player_MediaEnded;\n+            _player.MediaFailed += Player_MediaFailed;\n+\n+            AppServices.PlaybackService.RegisterPlayer(this);\n+\n+            Application.Current.Suspending += ForegroundApp_Suspending;\n+            Application.Current.Resuming += ForegroundApp_Resuming;\n+            ApplicationSettingsHelper.SaveSettingsValue(BackgroundAudioConstants.AppState, AppState.Active.ToString());\n+        }\n+\n+        private void ForegroundApp_Resuming(object sender, object e)\n+        {\n+            ApplicationSettingsHelper.SaveSettingsValue(BackgroundAudioConstants.AppState, AppState.Active.ToString());\n+\n+            if (IsAudioBackgroundTaskRunning)\n+            {\n+                AddMediaPlayerEventHandlers();\n+\n+                MessageService.SendMessageToBackground(new AppResumedMessage());\n+                var trackId = GetCurrentTrackIdAfterAppResume();\n+                var playlistItem = _playlist?.FirstOrDefault(t => t.Item.Id == trackId);\n+                if (playlistItem != null)\n+                {\n+                    _item = playlistItem.Item;\n+                }\n+            }\n+        }\n+\n+        private void ForegroundApp_Suspending(object sender, SuspendingEventArgs e)\n+        {\n+            var deferral = e.SuspendingOperation.GetDeferral();\n+\n+            if (IsAudioBackgroundTaskRunning)\n+            {\n+                BackgroundMediaPlayer.Current.CurrentStateChanged -= Player_CurrentStateChanged;\n+                BackgroundMediaPlayer.MessageReceivedFromBackground -= this.BackgroundMediaPlayer_MessageReceivedFromBackground; ;\n+                MessageService.SendMessageToBackground(new AppSuspendedMessage());\n+            }\n+\n+            ApplicationSettingsHelper.SaveSettingsValue(BackgroundAudioConstants.AppState, AppState.Suspended.ToString());\n+            deferral.Complete();\n+        }\n+\n+        private void AddMediaPlayerEventHandlers()\n+        {\n+            BackgroundMediaPlayer.Current.CurrentStateChanged += Player_CurrentStateChanged;\n+            BackgroundMediaPlayer.MessageReceivedFromBackground += BackgroundMediaPlayer_MessageReceivedFromBackground;\n+        }\n+\n+        #endregion\n+\n+        #region Player Eventhandlers\n+\n+        private void Player_MediaFailed(MediaPlayer sender, object args)\n+        {\n+            AppServices.DispatcherService.RunAsync(() =>\n+            {\n+                _postionChangedTimer.Stop();\n+            });\n+        }\n+\n+        private void Player_MediaEnded(MediaPlayer sender, object args)\n+        {\n+            AppServices.DispatcherService.RunAsync(() =>\n+            {\n+                _postionChangedTimer.Stop();\n+                AppServices.PlaybackService.ReportPlaybackStopped(new PlaybackStopInfo\n+                {\n+                    ItemId = _item.Id,\n+                    PositionTicks = _player.Position.Ticks\n+                }, _streamInfo);\n+            });\n+        }\n+\n+        private void Player_MediaOpened(MediaPlayer sender, object args)\n+        {\n+            AppServices.DispatcherService.RunAsync(() =>\n+            {\n+                AppServices.PlaybackService.ReportPlaybackStarted(new PlaybackStartInfo\n+                {\n+                    ItemId = _item.Id,\n+                    CanSeek = CanSeek,\n+                    AudioStreamIndex = null,\n+                    IsPaused = _player.PlaybackRate == 0,\n+                    IsMuted = _player.IsMuted,\n+                    VolumeLevel = Convert.ToInt32(_player.Volume),\n+                    PositionTicks = _player.Position.Ticks\n+                });\n+\n+                _postionChangedTimer.Start();\n+            });\n+        }\n+\n+        private void Player_CurrentStateChanged(MediaPlayer sender, object args)\n+        {\n+            AppServices.DispatcherService.RunAsync(() =>\n+            {\n+                switch (sender.CurrentState)\n+                {\n+                    case MediaPlayerState.Playing:\n+                        PlayerState = PlayerState.Playing;\n+                        AppServices.PlaybackService.ReportPlayerState(PlayerState);\n+                        break;\n+                    case MediaPlayerState.Stopped:\n+                        PlayerState = PlayerState.Stopped;\n+                        AppServices.PlaybackService.ReportPlayerState(PlayerState);\n+                        break;\n+                    case MediaPlayerState.Paused:\n+                        PlayerState = PlayerState.Paused;\n+                        AppServices.PlaybackService.ReportPlayerState(PlayerState);\n+                        break;\n+                }\n+            });\n+        }\n+\n+        #endregion\n+\n+        private void PostionChangedTimer_Tick(object sender, object e)\n+        {\n+            AppServices.PlaybackService.ReportPlaybackProgress(new PlaybackProgressInfo\n+            {\n+                ItemId = _item.Id,\n+                CanSeek = CanSeek,\n+                AudioStreamIndex = null,\n+                IsPaused = _player.PlaybackRate == 0,\n+                IsMuted = _player.IsMuted,\n+                VolumeLevel = Convert.ToInt32(_player.Volume),\n+                PositionTicks = _player.Position.Ticks,\n+                PlayMethod = _streamInfo.PlayMethod\n+            }, _streamInfo);\n+        }\n+\n+        async void BackgroundMediaPlayer_MessageReceivedFromBackground(object sender, MediaPlayerDataReceivedEventArgs e)","path":"Emby.Mobile.Universal/Controls/MediaPlayers/BackgroundAudioPlayer.cs","position":213,"original_position":213,"commit_id":"8e9af035252540da9bea237ed2a5b173cd7a6edd","original_commit_id":"8e9af035252540da9bea237ed2a5b173cd7a6edd","user":{"login":"ScottIsAFool","id":1658896,"avatar_url":"https://avatars.githubusercontent.com/u/1658896?v=3","gravatar_id":"","url":"https://api.github.com/users/ScottIsAFool","html_url":"https://github.com/ScottIsAFool","followers_url":"https://api.github.com/users/ScottIsAFool/followers","following_url":"https://api.github.com/users/ScottIsAFool/following{/other_user}","gists_url":"https://api.github.com/users/ScottIsAFool/gists{/gist_id}","starred_url":"https://api.github.com/users/ScottIsAFool/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ScottIsAFool/subscriptions","organizations_url":"https://api.github.com/users/ScottIsAFool/orgs","repos_url":"https://api.github.com/users/ScottIsAFool/repos","events_url":"https://api.github.com/users/ScottIsAFool/events{/privacy}","received_events_url":"https://api.github.com/users/ScottIsAFool/received_events","type":"User","site_admin":false},"body":"private","created_at":"2015-09-10T18:04:29Z","updated_at":"2015-09-10T18:04:29Z","html_url":"https://github.com/MediaBrowser/Emby.Mobile.Universal/pull/73#discussion_r39192510","pull_request_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/pulls/73","_links":{"self":{"href":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/pulls/comments/39192510"},"html":{"href":"https://github.com/MediaBrowser/Emby.Mobile.Universal/pull/73#discussion_r39192510"},"pull_request":{"href":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/pulls/73"}}},"pull_request":{"url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/pulls/73","id":44689054,"html_url":"https://github.com/MediaBrowser/Emby.Mobile.Universal/pull/73","diff_url":"https://github.com/MediaBrowser/Emby.Mobile.Universal/pull/73.diff","patch_url":"https://github.com/MediaBrowser/Emby.Mobile.Universal/pull/73.patch","issue_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/issues/73","number":73,"state":"open","locked":false,"title":"Feature/audio player","user":{"login":"7illusions","id":6048376,"avatar_url":"https://avatars.githubusercontent.com/u/6048376?v=3","gravatar_id":"","url":"https://api.github.com/users/7illusions","html_url":"https://github.com/7illusions","followers_url":"https://api.github.com/users/7illusions/followers","following_url":"https://api.github.com/users/7illusions/following{/other_user}","gists_url":"https://api.github.com/users/7illusions/gists{/gist_id}","starred_url":"https://api.github.com/users/7illusions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/7illusions/subscriptions","organizations_url":"https://api.github.com/users/7illusions/orgs","repos_url":"https://api.github.com/users/7illusions/repos","events_url":"https://api.github.com/users/7illusions/events{/privacy}","received_events_url":"https://api.github.com/users/7illusions/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-09-10T16:25:50Z","updated_at":"2015-09-10T18:04:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"58f659e4e754852ffd60dbd0b1b7d90b3659d63e","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/pulls/73/commits","review_comments_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/pulls/73/comments","review_comment_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/pulls/comments{/number}","comments_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/issues/73/comments","statuses_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/statuses/8e9af035252540da9bea237ed2a5b173cd7a6edd","head":{"label":"MediaBrowser:feature/AudioPlayer","ref":"feature/AudioPlayer","sha":"8e9af035252540da9bea237ed2a5b173cd7a6edd","user":{"login":"MediaBrowser","id":3607473,"avatar_url":"https://avatars.githubusercontent.com/u/3607473?v=3","gravatar_id":"","url":"https://api.github.com/users/MediaBrowser","html_url":"https://github.com/MediaBrowser","followers_url":"https://api.github.com/users/MediaBrowser/followers","following_url":"https://api.github.com/users/MediaBrowser/following{/other_user}","gists_url":"https://api.github.com/users/MediaBrowser/gists{/gist_id}","starred_url":"https://api.github.com/users/MediaBrowser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MediaBrowser/subscriptions","organizations_url":"https://api.github.com/users/MediaBrowser/orgs","repos_url":"https://api.github.com/users/MediaBrowser/repos","events_url":"https://api.github.com/users/MediaBrowser/events{/privacy}","received_events_url":"https://api.github.com/users/MediaBrowser/received_events","type":"Organization","site_admin":false},"repo":{"id":38940871,"name":"Emby.Mobile.Universal","full_name":"MediaBrowser/Emby.Mobile.Universal","owner":{"login":"MediaBrowser","id":3607473,"avatar_url":"https://avatars.githubusercontent.com/u/3607473?v=3","gravatar_id":"","url":"https://api.github.com/users/MediaBrowser","html_url":"https://github.com/MediaBrowser","followers_url":"https://api.github.com/users/MediaBrowser/followers","following_url":"https://api.github.com/users/MediaBrowser/following{/other_user}","gists_url":"https://api.github.com/users/MediaBrowser/gists{/gist_id}","starred_url":"https://api.github.com/users/MediaBrowser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MediaBrowser/subscriptions","organizations_url":"https://api.github.com/users/MediaBrowser/orgs","repos_url":"https://api.github.com/users/MediaBrowser/repos","events_url":"https://api.github.com/users/MediaBrowser/events{/privacy}","received_events_url":"https://api.github.com/users/MediaBrowser/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/MediaBrowser/Emby.Mobile.Universal","description":"The Emby Universal app for Windows 10","fork":false,"url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal","forks_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/forks","keys_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/teams","hooks_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/hooks","issue_events_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/issues/events{/number}","events_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/events","assignees_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/assignees{/user}","branches_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/branches{/branch}","tags_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/tags","blobs_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/git/refs{/sha}","trees_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/statuses/{sha}","languages_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/languages","stargazers_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/stargazers","contributors_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/contributors","subscribers_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/subscribers","subscription_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/subscription","commits_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/commits{/sha}","git_commits_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/git/commits{/sha}","comments_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/comments{/number}","issue_comment_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/issues/comments{/number}","contents_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/contents/{+path}","compare_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/merges","archive_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/downloads","issues_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/issues{/number}","pulls_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/pulls{/number}","milestones_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/milestones{/number}","notifications_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/labels{/name}","releases_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/releases{/id}","created_at":"2015-07-11T21:21:51Z","updated_at":"2015-09-01T20:10:32Z","pushed_at":"2015-09-10T17:02:10Z","git_url":"git://github.com/MediaBrowser/Emby.Mobile.Universal.git","ssh_url":"git@github.com:MediaBrowser/Emby.Mobile.Universal.git","clone_url":"https://github.com/MediaBrowser/Emby.Mobile.Universal.git","svn_url":"https://github.com/MediaBrowser/Emby.Mobile.Universal","homepage":null,"size":5068,"stargazers_count":4,"watchers_count":4,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":3,"forks":0,"open_issues":3,"watchers":4,"default_branch":"master"}},"base":{"label":"MediaBrowser:Dev","ref":"Dev","sha":"98cab57a96afb5c654704275026f25d9e47b8c53","user":{"login":"MediaBrowser","id":3607473,"avatar_url":"https://avatars.githubusercontent.com/u/3607473?v=3","gravatar_id":"","url":"https://api.github.com/users/MediaBrowser","html_url":"https://github.com/MediaBrowser","followers_url":"https://api.github.com/users/MediaBrowser/followers","following_url":"https://api.github.com/users/MediaBrowser/following{/other_user}","gists_url":"https://api.github.com/users/MediaBrowser/gists{/gist_id}","starred_url":"https://api.github.com/users/MediaBrowser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MediaBrowser/subscriptions","organizations_url":"https://api.github.com/users/MediaBrowser/orgs","repos_url":"https://api.github.com/users/MediaBrowser/repos","events_url":"https://api.github.com/users/MediaBrowser/events{/privacy}","received_events_url":"https://api.github.com/users/MediaBrowser/received_events","type":"Organization","site_admin":false},"repo":{"id":38940871,"name":"Emby.Mobile.Universal","full_name":"MediaBrowser/Emby.Mobile.Universal","owner":{"login":"MediaBrowser","id":3607473,"avatar_url":"https://avatars.githubusercontent.com/u/3607473?v=3","gravatar_id":"","url":"https://api.github.com/users/MediaBrowser","html_url":"https://github.com/MediaBrowser","followers_url":"https://api.github.com/users/MediaBrowser/followers","following_url":"https://api.github.com/users/MediaBrowser/following{/other_user}","gists_url":"https://api.github.com/users/MediaBrowser/gists{/gist_id}","starred_url":"https://api.github.com/users/MediaBrowser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MediaBrowser/subscriptions","organizations_url":"https://api.github.com/users/MediaBrowser/orgs","repos_url":"https://api.github.com/users/MediaBrowser/repos","events_url":"https://api.github.com/users/MediaBrowser/events{/privacy}","received_events_url":"https://api.github.com/users/MediaBrowser/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/MediaBrowser/Emby.Mobile.Universal","description":"The Emby Universal app for Windows 10","fork":false,"url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal","forks_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/forks","keys_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/teams","hooks_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/hooks","issue_events_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/issues/events{/number}","events_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/events","assignees_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/assignees{/user}","branches_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/branches{/branch}","tags_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/tags","blobs_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/git/refs{/sha}","trees_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/statuses/{sha}","languages_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/languages","stargazers_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/stargazers","contributors_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/contributors","subscribers_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/subscribers","subscription_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/subscription","commits_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/commits{/sha}","git_commits_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/git/commits{/sha}","comments_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/comments{/number}","issue_comment_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/issues/comments{/number}","contents_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/contents/{+path}","compare_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/merges","archive_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/downloads","issues_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/issues{/number}","pulls_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/pulls{/number}","milestones_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/milestones{/number}","notifications_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/labels{/name}","releases_url":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/releases{/id}","created_at":"2015-07-11T21:21:51Z","updated_at":"2015-09-01T20:10:32Z","pushed_at":"2015-09-10T17:02:10Z","git_url":"git://github.com/MediaBrowser/Emby.Mobile.Universal.git","ssh_url":"git@github.com:MediaBrowser/Emby.Mobile.Universal.git","clone_url":"https://github.com/MediaBrowser/Emby.Mobile.Universal.git","svn_url":"https://github.com/MediaBrowser/Emby.Mobile.Universal","homepage":null,"size":5068,"stargazers_count":4,"watchers_count":4,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":3,"forks":0,"open_issues":3,"watchers":4,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/pulls/73"},"html":{"href":"https://github.com/MediaBrowser/Emby.Mobile.Universal/pull/73"},"issue":{"href":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/issues/73"},"comments":{"href":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/issues/73/comments"},"review_comments":{"href":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/pulls/73/comments"},"review_comment":{"href":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/pulls/73/commits"},"statuses":{"href":"https://api.github.com/repos/MediaBrowser/Emby.Mobile.Universal/statuses/8e9af035252540da9bea237ed2a5b173cd7a6edd"}}}}