{"action":"created","comment":{"url":"https://api.github.com/repos/xbmc/xbmc/pulls/comments/26354256","id":26354256,"diff_hunk":"@@ -1,464 +0,0 @@\n-/*\n- *      Copyright (C) 2005-2013 Team XBMC\n- *      http://xbmc.org\n- *\n- *  This Program is free software; you can redistribute it and/or modify\n- *  it under the terms of the GNU General Public License as published by\n- *  the Free Software Foundation; either version 2, or (at your option)\n- *  any later version.\n- *\n- *  This Program is distributed in the hope that it will be useful,\n- *  but WITHOUT ANY WARRANTY; without even the implied warranty of\n- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n- *  GNU General Public License for more details.\n- *\n- *  You should have received a copy of the GNU General Public License\n- *  along with XBMC; see the file COPYING.  If not, see\n- *  <http://www.gnu.org/licenses/>.\n- *\n- */\n-\n-#include \"threads/SystemClock.h\"\n-#include \"HTSPDirectory.h\"\n-#include \"URL.h\"\n-#include \"FileItem.h\"\n-#include \"settings/Settings.h\"\n-#include \"guilib/LocalizeStrings.h\"\n-#include \"cores/dvdplayer/DVDInputStreams/DVDInputStreamHTSP.h\"\n-#include \"threads/SingleLock.h\"\n-#include \"utils/log.h\"\n-#include \"utils/TimeUtils.h\"\n-#include \"utils/StringUtils.h\"\n-\n-#include <cassert>\n-\n-extern \"C\" {\n-#include \"libhts/htsmsg.h\"\n-#include \"libhts/htsmsg_binary.h\"\n-}\n-\n-using namespace XFILE;\n-using namespace HTSP;\n-\n-struct SSession\n-{\n-  SSession()\n-  {\n-    session = NULL;\n-    port    = 0;\n-    refs    = 0;\n-    last    = 0;\n-  }\n-\n-  std::string            hostname;\n-  int                    port;\n-  std::string            username;\n-  std::string            password;\n-  CHTSPDirectorySession* session;\n-  int                    refs;\n-  unsigned int           last;\n-};\n-\n-struct STimedOut\n-{\n-  STimedOut(DWORD idle) : m_idle(idle)\n-  {\n-    m_time = XbmcThreads::SystemClockMillis();\n-  }\n-  bool operator()(SSession& data)\n-  {\n-    return data.refs == 0 && (m_time - data.last) > m_idle;\n-  }\n-  unsigned int m_idle;\n-  unsigned int m_time;\n-};\n-\n-typedef std::vector<SSession> SSessions;\n-\n-\n-static SSessions         g_sessions;\n-static CCriticalSection  g_section;\n-\n-\n-CHTSPDirectorySession::CHTSPDirectorySession() : CThread(\"HTSPDirectorySession\")\n-{\n-}\n-\n-CHTSPDirectorySession::~CHTSPDirectorySession()\n-{\n-  Close();\n-}\n-\n-CHTSPDirectorySession* CHTSPDirectorySession::Acquire(const CURL& url)\n-{\n-  CSingleLock lock(g_section);\n-\n-  for(SSessions::iterator it = g_sessions.begin(); it != g_sessions.end(); ++it)\n-  {\n-    if(it->hostname == url.GetHostName()\n-    && it->port     == url.GetPort()\n-    && it->username == url.GetUserName()\n-    && it->password == url.GetPassWord())\n-    {\n-      it->refs++;\n-      return it->session;\n-    }\n-  }\n-  lock.Leave();\n-\n-  CHTSPDirectorySession* session = new CHTSPDirectorySession();\n-  if(session->Open(url))\n-  {\n-    SSession data;\n-    data.hostname = url.GetHostName();\n-    data.port     = url.GetPort();\n-    data.username = url.GetUserName();\n-    data.password = url.GetPassWord();\n-    data.session  = session;\n-    data.refs     = 1;\n-    lock.Enter();\n-    g_sessions.push_back(data);\n-    return session;\n-  }\n-\n-  delete session;\n-  return NULL;\n-}\n-\n-void CHTSPDirectorySession::Release(CHTSPDirectorySession* &session)\n-{\n-  if(session == NULL)\n-    return;\n-\n-  CSingleLock lock(g_section);\n-  for(SSessions::iterator it = g_sessions.begin(); it != g_sessions.end(); ++it)\n-  {\n-    if(it->session == session)\n-    {\n-      it->refs--;\n-      it->last = XbmcThreads::SystemClockMillis();\n-      return;\n-    }\n-  }\n-  CLog::Log(LOGERROR, \"CHTSPDirectorySession::Release - release of invalid session\");\n-  assert(0);\n-}\n-\n-void CHTSPDirectorySession::CheckIdle(DWORD idle)\n-{\n-  CSingleLock lock(g_section);\n-  STimedOut timeout(idle);\n-\n-  for(SSessions::iterator it = g_sessions.begin(); it != g_sessions.end();)\n-  {\n-    if(timeout(*it))\n-    {\n-      CLog::Log(LOGINFO, \"CheckIdle - Closing session to htsp://%s:%i\", it->hostname.c_str(), it->port);\n-      delete it->session;\n-      it = g_sessions.erase(it);\n-    }\n-    else\n-      ++it;\n-  }\n-}\n-\n-bool CHTSPDirectorySession::Open(const CURL& url)\n-{\n-  if(!m_session.Connect(url.GetHostName(), url.GetPort()))\n-    return false;\n-\n-  if(m_session.GetProtocol() < 2)\n-  {\n-    CLog::Log(LOGERROR, \"CHTSPDirectory::GetDirectory - incompatible protocol version %d\", m_session.GetProtocol());\n-    return false;\n-  }\n-\n-  if(!url.GetUserName().empty())\n-    m_session.Auth(url.GetUserName(), url.GetPassWord());\n-\n-  if(!m_session.SendEnableAsync())\n-    return false;\n-\n-  Create();\n-\n-  m_started.WaitMSec(30000);\n-  return !m_bStop;\n-}\n-\n-void CHTSPDirectorySession::Close()\n-{\n-  m_bStop = true;\n-  m_session.Abort();\n-  StopThread();\n-  m_session.Close();\n-}\n-\n-htsmsg_t* CHTSPDirectorySession::ReadResult(htsmsg_t* m)\n-{\n-  CSingleLock lock(m_section);\n-  unsigned    seq (m_session.AddSequence());\n-\n-  SMessage &message(m_queue[seq]);\n-  message.event = new CEvent();\n-  message.msg   = NULL;\n-\n-  lock.Leave();\n-  htsmsg_add_u32(m, \"seq\", seq);\n-  if(!m_session.SendMessage(m))\n-  {\n-    m_queue.erase(seq);\n-    return NULL;\n-  }\n-\n-  if(!message.event->WaitMSec(2000))\n-    CLog::Log(LOGERROR, \"CHTSPDirectorySession::ReadResult - Timeout waiting for response\");\n-  lock.Enter();\n-\n-  m =    message.msg;\n-  delete message.event;\n-\n-  m_queue.erase(seq);\n-\n-  return m;\n-}\n-\n-bool CHTSPDirectorySession::GetEvent(SEvent& event, uint32_t id)\n-{\n-  if(id == 0)\n-  {\n-    event.Clear();\n-    return false;\n-  }\n-\n-  SEvents::iterator it = m_events.find(id);\n-  if(it != m_events.end())\n-  {\n-    event = it->second;\n-    return true;\n-  }\n-\n-  htsmsg_t *msg = htsmsg_create_map();\n-  htsmsg_add_str(msg, \"method\", \"getEvent\");\n-  htsmsg_add_u32(msg, \"eventId\", id);\n-  if((msg = ReadResult(msg)) == NULL)\n-  {\n-    CLog::Log(LOGDEBUG, \"CHTSPSession::GetEvent - failed to get event %u\", id);\n-    return false;\n-  }\n-  if(!CHTSPSession::ParseEvent(msg, id, event))\n-    return false;\n-\n-  m_events[id] = event;\n-  return true;\n-}\n-\n-void CHTSPDirectorySession::Process()\n-{\n-  CLog::Log(LOGDEBUG, \"CHTSPDirectorySession::Process() - Starting\");\n-\n-  htsmsg_t* msg;\n-\n-  while(!m_bStop)\n-  {\n-    if((msg = m_session.ReadMessage()) == NULL)\n-      break;\n-\n-    uint32_t seq;\n-    if(htsmsg_get_u32(msg, \"seq\", &seq) == 0)\n-    {\n-      CSingleLock lock(m_section);\n-      SMessages::iterator it = m_queue.find(seq);\n-      if(it != m_queue.end())\n-      {\n-        it->second.msg = msg;\n-        it->second.event->Set();\n-        continue;\n-      }\n-    }\n-\n-    const char* method;\n-    if((method = htsmsg_get_str(msg, \"method\")) == NULL)\n-    {\n-      htsmsg_destroy(msg);\n-      continue;\n-    }\n-\n-    if     (strstr(method, \"channelAdd\"))\n-      CHTSPSession::ParseChannelUpdate(msg, m_channels);\n-    else if(strstr(method, \"channelUpdate\"))\n-      CHTSPSession::ParseChannelUpdate(msg, m_channels);\n-    else if(strstr(method, \"channelRemove\"))\n-      CHTSPSession::ParseChannelRemove(msg, m_channels);\n-    if     (strstr(method, \"tagAdd\"))\n-      CHTSPSession::ParseTagUpdate(msg, m_tags);\n-    else if(strstr(method, \"tagUpdate\"))\n-      CHTSPSession::ParseTagUpdate(msg, m_tags);\n-    else if(strstr(method, \"tagRemove\"))\n-      CHTSPSession::ParseTagRemove(msg, m_tags);\n-    else if(strstr(method, \"initialSyncCompleted\"))\n-      m_started.Set();\n-\n-    htsmsg_destroy(msg);\n-  }\n-\n-  m_started.Set();\n-  CLog::Log(LOGDEBUG, \"CHTSPDirectorySession::Process() - Exiting\");\n-}\n-\n-SChannels CHTSPDirectorySession::GetChannels()\n-{\n-  return GetChannels(0);\n-}\n-\n-SChannels CHTSPDirectorySession::GetChannels(int tag)\n-{\n-  CSingleLock lock(m_section);\n-  if(tag == 0)\n-    return m_channels;\n-\n-  STags::iterator it = m_tags.find(tag);\n-  if(it == m_tags.end())\n-  {\n-    SChannels channels;\n-    return channels;\n-  }\n-  return GetChannels(it->second);\n-}\n-\n-SChannels CHTSPDirectorySession::GetChannels(STag& tag)\n-{\n-  CSingleLock lock(m_section);\n-  SChannels channels;\n-\n-  std::vector<int>::iterator it;\n-  for(it = tag.channels.begin(); it != tag.channels.end(); ++it)\n-  {\n-    SChannels::iterator it2 = m_channels.find(*it);\n-    if(it2 == m_channels.end())\n-    {\n-      CLog::Log(LOGERROR, \"CHTSPDirectorySession::GetChannels - tag points to unknown channel %d\", *it);\n-      continue;\n-    }\n-    channels[*it] = it2->second;\n-  }\n-  return channels;\n-}\n-\n-\n-STags CHTSPDirectorySession::GetTags()\n-{\n-  CSingleLock lock(m_section);\n-  return m_tags;\n-}\n-\n-CHTSPDirectory::CHTSPDirectory(void)\n-{\n-  m_session = NULL;\n-}\n-\n-CHTSPDirectory::~CHTSPDirectory(void)\n-{\n-  CHTSPDirectorySession::Release(m_session);\n-}\n-\n-\n-bool CHTSPDirectory::GetChannels(const CURL &base, CFileItemList &items)\n-{\n-  SChannels channels = m_session->GetChannels();\n-  return GetChannels(base, items, channels, 0);\n-}\n-\n-bool CHTSPDirectory::GetChannels( const CURL &base\n-                                , CFileItemList &items\n-                                , SChannels channels\n-                                , int tag)\n-{\n-  CURL url(base);\n-\n-  SEvent event;\n-\n-  for(SChannels::iterator it = channels.begin(); it != channels.end(); ++it)\n-  {\n-    if(!m_session->GetEvent(event, it->second.event))\n-      event.Clear();\n-\n-    CFileItemPtr item(new CFileItem(\"\", true));\n-\n-    url.SetFileName(\"\");\n-    item->SetPath(url.Get());\n-    CHTSPSession::ParseItem(it->second, tag, event, *item);\n-    item->m_bIsFolder = false;\n-    item->SetLabel(item->m_strTitle);\n-    item->m_strTitle = StringUtils::Format(\"%d\", it->second.num);\n-\n-    items.Add(item);\n-  }\n-\n-  items.AddSortMethod(SortByTrackNumber,   554, LABEL_MASKS(\"%K[ - %B]\", \"%Z\", \"%L\", \"\"));\n-  items.AddSortMethod(SortByAlbum,         558, LABEL_MASKS(\"%B\", \"%Z\", \"%L\", \"\"), CSettings::Get().GetBool(\"filelists.ignorethewhensorting\") ? SortAttributeIgnoreArticle : SortAttributeNone);\n-  items.AddSortMethod(SortByLabel,         551, LABEL_MASKS(\"%Z\", \"%B\", \"%L\", \"\"), CSettings::Get().GetBool(\"filelists.ignorethewhensorting\") ? SortAttributeIgnoreArticle : SortAttributeNone);\n-\n-  items.SetContent(\"livetv\");\n-\n-  return !channels.empty();\n-\n-}\n-\n-bool CHTSPDirectory::GetTag(const CURL &base, CFileItemList &items)\n-{\n-  CURL url(base);\n-\n-  int id = 0;\n-  if (url.GetFileName().size() >= 5)\n-    id = atoi(url.GetFileName().substr(5).c_str());\n-\n-  SChannels channels = m_session->GetChannels(id);\n-  if(channels.empty())\n-    return false;\n-\n-  return GetChannels(base, items, channels, id);\n-}\n-\n-\n-bool CHTSPDirectory::GetDirectory(const CURL& url, CFileItemList &items)\n-{\n-  CHTSPDirectorySession::Release(m_session);\n-  if(!(m_session = CHTSPDirectorySession::Acquire(url)))\n-    return false;\n-\n-\n-  if(url.GetFileName().empty())\n-  {\n-    CFileItemPtr item;\n-\n-    item.reset(new CFileItem(\"\", true));\n-    CURL url2(url);\n-    url2.SetFileName(\"tags/0/\");\n-    item->SetURL(url2);\n-    item->SetLabel(g_localizeStrings.Get(22018));","path":"xbmc/filesystem/HTSPDirectory.cpp","position":438,"original_position":438,"commit_id":"5ebe170efc20751e0fc0dc116642b4b1f02e208e","original_commit_id":"5ebe170efc20751e0fc0dc116642b4b1f02e208e","user":{"login":"mkortstiege","id":475281,"avatar_url":"https://avatars.githubusercontent.com/u/475281?v=3","gravatar_id":"","url":"https://api.github.com/users/mkortstiege","html_url":"https://github.com/mkortstiege","followers_url":"https://api.github.com/users/mkortstiege/followers","following_url":"https://api.github.com/users/mkortstiege/following{/other_user}","gists_url":"https://api.github.com/users/mkortstiege/gists{/gist_id}","starred_url":"https://api.github.com/users/mkortstiege/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mkortstiege/subscriptions","organizations_url":"https://api.github.com/users/mkortstiege/orgs","repos_url":"https://api.github.com/users/mkortstiege/repos","events_url":"https://api.github.com/users/mkortstiege/events{/privacy}","received_events_url":"https://api.github.com/users/mkortstiege/received_events","type":"User","site_admin":false},"body":"please remove string as well. It is htsp only.","created_at":"2015-03-12T23:29:14Z","updated_at":"2015-03-12T23:29:14Z","html_url":"https://github.com/xbmc/xbmc/pull/6699#discussion_r26354256","pull_request_url":"https://api.github.com/repos/xbmc/xbmc/pulls/6699","_links":{"self":{"href":"https://api.github.com/repos/xbmc/xbmc/pulls/comments/26354256"},"html":{"href":"https://github.com/xbmc/xbmc/pull/6699#discussion_r26354256"},"pull_request":{"href":"https://api.github.com/repos/xbmc/xbmc/pulls/6699"}}},"pull_request":{"url":"https://api.github.com/repos/xbmc/xbmc/pulls/6699","id":31070525,"html_url":"https://github.com/xbmc/xbmc/pull/6699","diff_url":"https://github.com/xbmc/xbmc/pull/6699.diff","patch_url":"https://github.com/xbmc/xbmc/pull/6699.patch","issue_url":"https://api.github.com/repos/xbmc/xbmc/issues/6699","number":6699,"state":"open","locked":false,"title":"[htsp] remove internal htsp support.","user":{"login":"ksooo","id":3226626,"avatar_url":"https://avatars.githubusercontent.com/u/3226626?v=3","gravatar_id":"","url":"https://api.github.com/users/ksooo","html_url":"https://github.com/ksooo","followers_url":"https://api.github.com/users/ksooo/followers","following_url":"https://api.github.com/users/ksooo/following{/other_user}","gists_url":"https://api.github.com/users/ksooo/gists{/gist_id}","starred_url":"https://api.github.com/users/ksooo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ksooo/subscriptions","organizations_url":"https://api.github.com/users/ksooo/orgs","repos_url":"https://api.github.com/users/ksooo/repos","events_url":"https://api.github.com/users/ksooo/events{/privacy}","received_events_url":"https://api.github.com/users/ksooo/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-03-12T19:41:51Z","updated_at":"2015-03-12T23:29:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2aa2154ab905f7cbcde73c55b5f9d2d6d5e7eb4b","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/xbmc/xbmc/pulls/6699/commits","review_comments_url":"https://api.github.com/repos/xbmc/xbmc/pulls/6699/comments","review_comment_url":"https://api.github.com/repos/xbmc/xbmc/pulls/comments{/number}","comments_url":"https://api.github.com/repos/xbmc/xbmc/issues/6699/comments","statuses_url":"https://api.github.com/repos/xbmc/xbmc/statuses/5ebe170efc20751e0fc0dc116642b4b1f02e208e","head":{"label":"ksooo:remove-internal-htsp","ref":"remove-internal-htsp","sha":"5ebe170efc20751e0fc0dc116642b4b1f02e208e","user":{"login":"ksooo","id":3226626,"avatar_url":"https://avatars.githubusercontent.com/u/3226626?v=3","gravatar_id":"","url":"https://api.github.com/users/ksooo","html_url":"https://github.com/ksooo","followers_url":"https://api.github.com/users/ksooo/followers","following_url":"https://api.github.com/users/ksooo/following{/other_user}","gists_url":"https://api.github.com/users/ksooo/gists{/gist_id}","starred_url":"https://api.github.com/users/ksooo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ksooo/subscriptions","organizations_url":"https://api.github.com/users/ksooo/orgs","repos_url":"https://api.github.com/users/ksooo/repos","events_url":"https://api.github.com/users/ksooo/events{/privacy}","received_events_url":"https://api.github.com/users/ksooo/received_events","type":"User","site_admin":false},"repo":{"id":17368872,"name":"xbmc","full_name":"ksooo/xbmc","owner":{"login":"ksooo","id":3226626,"avatar_url":"https://avatars.githubusercontent.com/u/3226626?v=3","gravatar_id":"","url":"https://api.github.com/users/ksooo","html_url":"https://github.com/ksooo","followers_url":"https://api.github.com/users/ksooo/followers","following_url":"https://api.github.com/users/ksooo/following{/other_user}","gists_url":"https://api.github.com/users/ksooo/gists{/gist_id}","starred_url":"https://api.github.com/users/ksooo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ksooo/subscriptions","organizations_url":"https://api.github.com/users/ksooo/orgs","repos_url":"https://api.github.com/users/ksooo/repos","events_url":"https://api.github.com/users/ksooo/events{/privacy}","received_events_url":"https://api.github.com/users/ksooo/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ksooo/xbmc","description":"XBMC Main Repository","fork":true,"url":"https://api.github.com/repos/ksooo/xbmc","forks_url":"https://api.github.com/repos/ksooo/xbmc/forks","keys_url":"https://api.github.com/repos/ksooo/xbmc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ksooo/xbmc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ksooo/xbmc/teams","hooks_url":"https://api.github.com/repos/ksooo/xbmc/hooks","issue_events_url":"https://api.github.com/repos/ksooo/xbmc/issues/events{/number}","events_url":"https://api.github.com/repos/ksooo/xbmc/events","assignees_url":"https://api.github.com/repos/ksooo/xbmc/assignees{/user}","branches_url":"https://api.github.com/repos/ksooo/xbmc/branches{/branch}","tags_url":"https://api.github.com/repos/ksooo/xbmc/tags","blobs_url":"https://api.github.com/repos/ksooo/xbmc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ksooo/xbmc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ksooo/xbmc/git/refs{/sha}","trees_url":"https://api.github.com/repos/ksooo/xbmc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ksooo/xbmc/statuses/{sha}","languages_url":"https://api.github.com/repos/ksooo/xbmc/languages","stargazers_url":"https://api.github.com/repos/ksooo/xbmc/stargazers","contributors_url":"https://api.github.com/repos/ksooo/xbmc/contributors","subscribers_url":"https://api.github.com/repos/ksooo/xbmc/subscribers","subscription_url":"https://api.github.com/repos/ksooo/xbmc/subscription","commits_url":"https://api.github.com/repos/ksooo/xbmc/commits{/sha}","git_commits_url":"https://api.github.com/repos/ksooo/xbmc/git/commits{/sha}","comments_url":"https://api.github.com/repos/ksooo/xbmc/comments{/number}","issue_comment_url":"https://api.github.com/repos/ksooo/xbmc/issues/comments{/number}","contents_url":"https://api.github.com/repos/ksooo/xbmc/contents/{+path}","compare_url":"https://api.github.com/repos/ksooo/xbmc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ksooo/xbmc/merges","archive_url":"https://api.github.com/repos/ksooo/xbmc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ksooo/xbmc/downloads","issues_url":"https://api.github.com/repos/ksooo/xbmc/issues{/number}","pulls_url":"https://api.github.com/repos/ksooo/xbmc/pulls{/number}","milestones_url":"https://api.github.com/repos/ksooo/xbmc/milestones{/number}","notifications_url":"https://api.github.com/repos/ksooo/xbmc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ksooo/xbmc/labels{/name}","releases_url":"https://api.github.com/repos/ksooo/xbmc/releases{/id}","created_at":"2014-03-03T14:45:39Z","updated_at":"2015-03-12T08:49:40Z","pushed_at":"2015-03-12T19:38:34Z","git_url":"git://github.com/ksooo/xbmc.git","ssh_url":"git@github.com:ksooo/xbmc.git","clone_url":"https://github.com/ksooo/xbmc.git","svn_url":"https://github.com/ksooo/xbmc","homepage":"http://xbmc.org","size":501466,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"xbmc:master","ref":"master","sha":"e5b3e2c42265c2ce88a005a8c4192f8f2444b891","user":{"login":"xbmc","id":199122,"avatar_url":"https://avatars.githubusercontent.com/u/199122?v=3","gravatar_id":"","url":"https://api.github.com/users/xbmc","html_url":"https://github.com/xbmc","followers_url":"https://api.github.com/users/xbmc/followers","following_url":"https://api.github.com/users/xbmc/following{/other_user}","gists_url":"https://api.github.com/users/xbmc/gists{/gist_id}","starred_url":"https://api.github.com/users/xbmc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xbmc/subscriptions","organizations_url":"https://api.github.com/users/xbmc/orgs","repos_url":"https://api.github.com/users/xbmc/repos","events_url":"https://api.github.com/users/xbmc/events{/privacy}","received_events_url":"https://api.github.com/users/xbmc/received_events","type":"Organization","site_admin":false},"repo":{"id":1217614,"name":"xbmc","full_name":"xbmc/xbmc","owner":{"login":"xbmc","id":199122,"avatar_url":"https://avatars.githubusercontent.com/u/199122?v=3","gravatar_id":"","url":"https://api.github.com/users/xbmc","html_url":"https://github.com/xbmc","followers_url":"https://api.github.com/users/xbmc/followers","following_url":"https://api.github.com/users/xbmc/following{/other_user}","gists_url":"https://api.github.com/users/xbmc/gists{/gist_id}","starred_url":"https://api.github.com/users/xbmc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xbmc/subscriptions","organizations_url":"https://api.github.com/users/xbmc/orgs","repos_url":"https://api.github.com/users/xbmc/repos","events_url":"https://api.github.com/users/xbmc/events{/privacy}","received_events_url":"https://api.github.com/users/xbmc/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/xbmc/xbmc","description":"Kodi Main Repository - By using this code you agree with our policy and will follow the GPLv2 license as included","fork":false,"url":"https://api.github.com/repos/xbmc/xbmc","forks_url":"https://api.github.com/repos/xbmc/xbmc/forks","keys_url":"https://api.github.com/repos/xbmc/xbmc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/xbmc/xbmc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/xbmc/xbmc/teams","hooks_url":"https://api.github.com/repos/xbmc/xbmc/hooks","issue_events_url":"https://api.github.com/repos/xbmc/xbmc/issues/events{/number}","events_url":"https://api.github.com/repos/xbmc/xbmc/events","assignees_url":"https://api.github.com/repos/xbmc/xbmc/assignees{/user}","branches_url":"https://api.github.com/repos/xbmc/xbmc/branches{/branch}","tags_url":"https://api.github.com/repos/xbmc/xbmc/tags","blobs_url":"https://api.github.com/repos/xbmc/xbmc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/xbmc/xbmc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/xbmc/xbmc/git/refs{/sha}","trees_url":"https://api.github.com/repos/xbmc/xbmc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/xbmc/xbmc/statuses/{sha}","languages_url":"https://api.github.com/repos/xbmc/xbmc/languages","stargazers_url":"https://api.github.com/repos/xbmc/xbmc/stargazers","contributors_url":"https://api.github.com/repos/xbmc/xbmc/contributors","subscribers_url":"https://api.github.com/repos/xbmc/xbmc/subscribers","subscription_url":"https://api.github.com/repos/xbmc/xbmc/subscription","commits_url":"https://api.github.com/repos/xbmc/xbmc/commits{/sha}","git_commits_url":"https://api.github.com/repos/xbmc/xbmc/git/commits{/sha}","comments_url":"https://api.github.com/repos/xbmc/xbmc/comments{/number}","issue_comment_url":"https://api.github.com/repos/xbmc/xbmc/issues/comments{/number}","contents_url":"https://api.github.com/repos/xbmc/xbmc/contents/{+path}","compare_url":"https://api.github.com/repos/xbmc/xbmc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/xbmc/xbmc/merges","archive_url":"https://api.github.com/repos/xbmc/xbmc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/xbmc/xbmc/downloads","issues_url":"https://api.github.com/repos/xbmc/xbmc/issues{/number}","pulls_url":"https://api.github.com/repos/xbmc/xbmc/pulls{/number}","milestones_url":"https://api.github.com/repos/xbmc/xbmc/milestones{/number}","notifications_url":"https://api.github.com/repos/xbmc/xbmc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/xbmc/xbmc/labels{/name}","releases_url":"https://api.github.com/repos/xbmc/xbmc/releases{/id}","created_at":"2011-01-03T21:18:51Z","updated_at":"2015-03-12T21:56:32Z","pushed_at":"2015-03-12T21:56:31Z","git_url":"git://github.com/xbmc/xbmc.git","ssh_url":"git@github.com:xbmc/xbmc.git","clone_url":"https://github.com/xbmc/xbmc.git","svn_url":"https://github.com/xbmc/xbmc","homepage":"http://kodi.wiki/view/Official:Trademark_Policy","size":1827102,"stargazers_count":3768,"watchers_count":3768,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":2724,"mirror_url":null,"open_issues_count":224,"forks":2724,"open_issues":224,"watchers":3768,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/xbmc/xbmc/pulls/6699"},"html":{"href":"https://github.com/xbmc/xbmc/pull/6699"},"issue":{"href":"https://api.github.com/repos/xbmc/xbmc/issues/6699"},"comments":{"href":"https://api.github.com/repos/xbmc/xbmc/issues/6699/comments"},"review_comments":{"href":"https://api.github.com/repos/xbmc/xbmc/pulls/6699/comments"},"review_comment":{"href":"https://api.github.com/repos/xbmc/xbmc/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/xbmc/xbmc/pulls/6699/commits"},"statuses":{"href":"https://api.github.com/repos/xbmc/xbmc/statuses/5ebe170efc20751e0fc0dc116642b4b1f02e208e"}}}}