{"action":"created","comment":{"url":"https://api.github.com/repos/xbmc/xbmc/pulls/comments/119376612","pull_request_review_id":41249455,"id":119376612,"diff_hunk":"@@ -0,0 +1,341 @@\n+/*\n+ *      Copyright (C) 2005-2017 Team Kodi\n+ *      http://kodi.tv\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 KODI; see the file COPYING.  If not, see\n+ *  <http://www.gnu.org/licenses/>.\n+ *\n+ */\n+\n+#include \"DialogFileBrowser.h\"\n+#include \"addons/kodi-addon-dev-kit/include/kodi/gui/DialogFileBrowser.h\"\n+\n+#include \"URL.h\"\n+#include \"addons/AddonDll.h\"\n+#include \"dialogs/GUIDialogFileBrowser.h\"\n+#include \"settings/MediaSourceSettings.h\"\n+#include \"storage/MediaManager.h\"\n+#include \"utils/log.h\"\n+#include \"utils/URIUtils.h\"\n+\n+extern \"C\"\n+{\n+namespace ADDON\n+{\n+\n+void Interface_GUIDialogFileBrowser::Init(AddonGlobalInterface* addonInterface)\n+{\n+  addonInterface->toKodi->kodi_gui->dialogFileBrowser = static_cast<AddonToKodiFuncTable_kodi_gui_dialogFileBrowser*>(malloc(sizeof(AddonToKodiFuncTable_kodi_gui_dialogFileBrowser)));\n+\n+  addonInterface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_directory = show_and_get_directory;\n+  addonInterface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_file = show_and_get_file;\n+  addonInterface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_file_from_dir = show_and_get_file_from_dir;\n+  addonInterface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_file_list = show_and_get_file_list;\n+  addonInterface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_source = show_and_get_source;\n+  addonInterface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_image = show_and_get_image;\n+  addonInterface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_image_list = show_and_get_image_list;\n+  addonInterface->toKodi->kodi_gui->dialogFileBrowser->clear_file_list = clear_file_list;\n+}\n+\n+void Interface_GUIDialogFileBrowser::DeInit(AddonGlobalInterface* addonInterface)\n+{\n+  free(addonInterface->toKodi->kodi_gui->dialogFileBrowser);\n+}\n+\n+bool Interface_GUIDialogFileBrowser::show_and_get_directory(void* kodiBase, const char* shares, const char* heading,\n+                                                            const char* path_in, char** path_out, bool write_only)\n+{\n+  CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);\n+  if (!addon)\n+  {\n+    CLog::Log(LOGERROR, \"Interface_GUIDialogFileBrowser::%s - invalid data\", __FUNCTION__);\n+    return false;\n+  }\n+\n+  if (!shares || !heading || !path_in || !path_out)\n+  {\n+    CLog::Log(LOGERROR, \"Interface_GUIDialogFileBrowser::%s - invalid handler data (shares='%p', heading='%p', path_in='%p', path_out='%p') on addon '%s'\",\n+                          __FUNCTION__, shares, heading, path_in, path_out, addon->ID().c_str());\n+    return false;\n+  }\n+\n+  std::string strPath = path_in;\n+\n+  VECSOURCES vecShares;\n+  GetVECShares(vecShares, shares, strPath);\n+  bool bRet = CGUIDialogFileBrowser::ShowAndGetDirectory(vecShares, heading, strPath, write_only);\n+  if (bRet)\n+    *path_out = strdup(strPath.c_str());\n+  return bRet;\n+}\n+\n+bool Interface_GUIDialogFileBrowser::show_and_get_file(void* kodiBase, const char* shares, const char* mask, const char* heading,\n+                                                       const char* path_in, char** path_out, bool use_thumbs, bool use_file_directories)\n+{\n+  CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);\n+  if (!addon)\n+  {\n+    CLog::Log(LOGERROR, \"Interface_GUIDialogFileBrowser::%s - invalid data\", __FUNCTION__);\n+    return false;\n+  }\n+\n+  if (!shares || !mask || !heading || !path_in || !path_out)\n+  {\n+    CLog::Log(LOGERROR, \"Interface_GUIDialogFileBrowser::%s - invalid handler data (shares='%p', mask='%p', heading='%p', path_in='%p', path_out='%p') on addon '%s'\",\n+                          __FUNCTION__, shares, mask, heading, path_in, path_out, addon->ID().c_str());\n+    return false;\n+  }\n+\n+  std::string strPath = path_in;\n+\n+  VECSOURCES vecShares;\n+  GetVECShares(vecShares, shares, strPath);\n+  bool bRet = CGUIDialogFileBrowser::ShowAndGetFile(vecShares, mask, heading, strPath, use_thumbs, use_file_directories);\n+  if (bRet)\n+    *path_out = strdup(strPath.c_str());\n+  return bRet;\n+}\n+\n+bool Interface_GUIDialogFileBrowser::show_and_get_file_from_dir(void* kodiBase, const char* directory, const char* mask,\n+                                                                const char* heading, const char* path_in, char** path_out,\n+                                                                bool use_thumbs, bool use_file_directories, bool single_list)\n+{\n+  CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);\n+  if (!addon)\n+  {\n+    CLog::Log(LOGERROR, \"Interface_GUIDialogFileBrowser::%s - invalid data\", __FUNCTION__);\n+    return false;\n+  }\n+\n+  if (!directory || !mask || !heading || !path_in || !path_out)\n+  {\n+    CLog::Log(LOGERROR, \"Interface_GUIDialogFileBrowser::%s - invalid handler data (directory='%p', mask='%p', heading='%p', path_in='%p', path_out='%p') on addon '%s'\",\n+                          __FUNCTION__, directory, mask, heading, path_in, path_out, addon->ID().c_str());\n+    return false;\n+  }\n+\n+  std::string strPath = path_in;\n+  bool bRet = CGUIDialogFileBrowser::ShowAndGetFile(directory, mask, heading, strPath, use_thumbs, use_file_directories, single_list);\n+  if (bRet)\n+    *path_out = strdup(strPath.c_str());\n+  return bRet;\n+}\n+\n+bool Interface_GUIDialogFileBrowser::show_and_get_file_list(void* kodiBase, const char* shares, const char* mask,\n+                                                            const char* heading, char*** path, unsigned int* entries,\n+                                                            bool use_thumbs, bool use_file_directories)\n+{\n+  CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);\n+  if (!addon)\n+  {\n+    CLog::Log(LOGERROR, \"Interface_GUIDialogFileBrowser::%s - invalid data\", __FUNCTION__);\n+    return false;\n+  }\n+\n+  if (!shares || !mask || !heading)\n+  {\n+    CLog::Log(LOGERROR, \"Interface_GUIDialogFileBrowser::%s - invalid handler data (shares='%p', mask='%p', heading='%p') on addon '%s'\",\n+                          __FUNCTION__, shares, mask, heading, addon->ID().c_str());\n+    return false;\n+  }\n+\n+  VECSOURCES vecShares;\n+  GetVECShares(vecShares, shares, \"\");\n+\n+  std::vector<std::string> pathsInt;\n+  bool bRet = CGUIDialogFileBrowser::ShowAndGetFileList(vecShares, mask, heading, pathsInt, use_thumbs, use_file_directories);\n+  if (bRet)\n+  {\n+    *entries = pathsInt.size();\n+    *path = static_cast<char**>(malloc(*entries*sizeof(char*)));\n+    for (unsigned int i = 0; i < *entries; ++i)\n+      (*path)[i] = strdup(pathsInt[i].c_str());\n+  }\n+  else\n+    *entries = 0;\n+  return bRet;\n+}\n+\n+bool Interface_GUIDialogFileBrowser::show_and_get_source(void* kodiBase, const char* path_in, char** path_out,\n+                                                         bool allowNetworkShares, const char* additionalShare,\n+                                                         const char* strType)\n+{\n+  CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);\n+  if (!addon)\n+  {\n+    CLog::Log(LOGERROR, \"Interface_GUIDialogFileBrowser::%s - invalid data\", __FUNCTION__);\n+    return false;\n+  }\n+\n+  if (!strType || !additionalShare || !path_in || !path_out)\n+  {\n+    CLog::Log(LOGERROR, \"Interface_GUIDialogFileBrowser::%s - invalid handler data (additionalShare='%p', strType='%p', path_in='%p', path_out='%p') on addon '%s'\",\n+                          __FUNCTION__, additionalShare, strType, path_in, path_out, addon->ID().c_str());\n+    return false;\n+  }\n+\n+  std::string strPath = path_in;\n+\n+  VECSOURCES vecShares;\n+  if (additionalShare)\n+    GetVECShares(vecShares, additionalShare, strPath);\n+  bool bRet = CGUIDialogFileBrowser::ShowAndGetSource(strPath, allowNetworkShares, &vecShares, strType);\n+  if (bRet)\n+    *path_out = strdup(strPath.c_str());\n+  return bRet;\n+}\n+\n+bool Interface_GUIDialogFileBrowser::show_and_get_image(void* kodiBase, const char* shares, const char* heading,\n+                                                        const char* path_in, char** path_out)\n+{\n+  CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);\n+  if (!addon)\n+  {\n+    CLog::Log(LOGERROR, \"Interface_GUIDialogFileBrowser::%s - invalid data\", __FUNCTION__);\n+    return false;\n+  }\n+\n+  if (!shares || !heading)\n+  {\n+    CLog::Log(LOGERROR, \"Interface_GUIDialogFileBrowser::%s - invalid handler data (shares='%p', heading='%p') on addon '%s'\", __FUNCTION__, shares, heading, addon->ID().c_str());\n+    return false;\n+  }\n+\n+  std::string strPath = path_in;\n+\n+  VECSOURCES vecShares;\n+  GetVECShares(vecShares, shares, strPath);\n+  bool bRet = CGUIDialogFileBrowser::ShowAndGetImage(vecShares, heading, strPath);\n+  if (bRet)\n+    *path_out = strdup(strPath.c_str());\n+  return bRet;\n+}\n+\n+bool Interface_GUIDialogFileBrowser::show_and_get_image_list(void* kodiBase, const char* shares, const char* heading, char*** path, unsigned int* entries)\n+{\n+  CAddonDll* addon = static_cast<CAddonDll*>(kodiBase);\n+  if (!addon)\n+  {\n+    CLog::Log(LOGERROR, \"Interface_GUIDialogFileBrowser::%s - invalid data\", __FUNCTION__);\n+    return false;\n+  }\n+\n+  if (!shares || !heading)\n+  {\n+    CLog::Log(LOGERROR, \"Interface_GUIDialogFileBrowser::%s - invalid handler data (shares='%p', heading='%p') on addon '%s'\", __FUNCTION__, shares, heading, addon->ID().c_str());\n+    return false;\n+  }\n+\n+  VECSOURCES vecShares;\n+  GetVECShares(vecShares, shares, \"\");\n+\n+  std::vector<std::string> pathsInt;\n+  bool bRet = CGUIDialogFileBrowser::ShowAndGetImageList(vecShares, heading, pathsInt);\n+  if (bRet)\n+  {\n+    *entries = pathsInt.size();\n+    *path = static_cast<char**>(malloc(*entries*sizeof(char*)));\n+    for (unsigned int i = 0; i < *entries; ++i)\n+      (*path)[i] = strdup(pathsInt[i].c_str());\n+  }\n+  else\n+    *entries = 0;\n+  return bRet;\n+}\n+\n+void Interface_GUIDialogFileBrowser::clear_file_list(void* kodiBase, char*** path, unsigned int entries)","path":"xbmc/addons/interfaces/GUI/DialogFileBrowser.cpp","position":257,"original_position":257,"commit_id":"4253b83d1bc9387bcf7c8d6e59ba9df5e16ade08","original_commit_id":"4253b83d1bc9387bcf7c8d6e59ba9df5e16ade08","user":{"login":"ksooo","id":3226626,"avatar_url":"https://avatars0.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":"I would name the variable file_list, not path as it contains a list of several files, not a single path.","created_at":"2017-05-31T14:49:09Z","updated_at":"2017-05-31T15:00:43Z","html_url":"https://github.com/xbmc/xbmc/pull/12202#discussion_r119376612","pull_request_url":"https://api.github.com/repos/xbmc/xbmc/pulls/12202","_links":{"self":{"href":"https://api.github.com/repos/xbmc/xbmc/pulls/comments/119376612"},"html":{"href":"https://github.com/xbmc/xbmc/pull/12202#discussion_r119376612"},"pull_request":{"href":"https://api.github.com/repos/xbmc/xbmc/pulls/12202"}}},"pull_request":{"url":"https://api.github.com/repos/xbmc/xbmc/pulls/12202","id":123065419,"html_url":"https://github.com/xbmc/xbmc/pull/12202","diff_url":"https://github.com/xbmc/xbmc/pull/12202.diff","patch_url":"https://github.com/xbmc/xbmc/pull/12202.patch","issue_url":"https://api.github.com/repos/xbmc/xbmc/issues/12202","number":12202,"state":"open","locked":false,"title":"[addons] add first step of gui on addon interface","user":{"login":"AlwinEsch","id":6879739,"avatar_url":"https://avatars0.githubusercontent.com/u/6879739?v=3","gravatar_id":"","url":"https://api.github.com/users/AlwinEsch","html_url":"https://github.com/AlwinEsch","followers_url":"https://api.github.com/users/AlwinEsch/followers","following_url":"https://api.github.com/users/AlwinEsch/following{/other_user}","gists_url":"https://api.github.com/users/AlwinEsch/gists{/gist_id}","starred_url":"https://api.github.com/users/AlwinEsch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlwinEsch/subscriptions","organizations_url":"https://api.github.com/users/AlwinEsch/orgs","repos_url":"https://api.github.com/users/AlwinEsch/repos","events_url":"https://api.github.com/users/AlwinEsch/events{/privacy}","received_events_url":"https://api.github.com/users/AlwinEsch/received_events","type":"User","site_admin":false},"body":"<!--- Provide a general summary of your change in the Title above -->\r\n\r\n## Description\r\n<!--- Describe your change in detail -->\r\n\r\nThis add the first parts of gui related addon callback parts to new\r\nstyle. There becomes standard functions and the dialogs added.\r\n\r\nOn next request comes the controls list item and window.\r\n\r\n## Motivation and Context\r\n<!--- Why is this change required? What problem does it solve? -->\r\n<!--- If it fixes an open issue, please link to the issue here -->\r\n\r\n## How Has This Been Tested?\r\n<!--- Please describe in detail how you tested your change -->\r\n<!--- Include details of your testing environment, and the tests you ran to -->\r\n<!--- see how your change affects other areas of the code, etc -->\r\n\r\n## Screenshots (if appropriate):\r\n\r\n## Types of change\r\n<!--- What type of change does your code introduce? Put an `x` in all the boxes that apply like this: [X] -->\r\n- [ ] Bug fix (non-breaking change which fixes an issue)\r\n- [ ] New feature (non-breaking change which adds functionality)\r\n- [ ] Breaking change (fix or feature that would cause existing functionality to change)\r\n\r\n## Checklist:\r\n<!--- Go over all the following points, and put an `x` in all the boxes that apply like this: [X] -->\r\n<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->\r\n- [ ] My code follows the [Code guidelines](https://codedocs.xyz/xbmc/xbmc/code_guidelines.html) of this project \r\n- [ ] My change requires a change to the documentation, either Doxygen or wiki\r\n- [ ] I have updated the documentation accordingly\r\n- [ ] I have read the [CONTRIBUTING](https://github.com/xbmc/xbmc/blob/master/CONTRIBUTING.md) document\r\n- [ ] I have added tests to cover my change\r\n- [ ] All new and existing tests passed\r\n","created_at":"2017-05-30T14:35:04Z","updated_at":"2017-05-31T15:00:43Z","closed_at":null,"merged_at":null,"merge_commit_sha":"28b659b00c53975fede502018632b38314af5f28","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":{"url":"https://api.github.com/repos/xbmc/xbmc/milestones/95","html_url":"https://github.com/xbmc/xbmc/milestone/95","labels_url":"https://api.github.com/repos/xbmc/xbmc/milestones/95/labels","id":2166828,"number":95,"title":"L 18.0-alpha1","description":"","creator":{"login":"MartijnKaijser","id":907436,"avatar_url":"https://avatars2.githubusercontent.com/u/907436?v=3","gravatar_id":"","url":"https://api.github.com/users/MartijnKaijser","html_url":"https://github.com/MartijnKaijser","followers_url":"https://api.github.com/users/MartijnKaijser/followers","following_url":"https://api.github.com/users/MartijnKaijser/following{/other_user}","gists_url":"https://api.github.com/users/MartijnKaijser/gists{/gist_id}","starred_url":"https://api.github.com/users/MartijnKaijser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MartijnKaijser/subscriptions","organizations_url":"https://api.github.com/users/MartijnKaijser/orgs","repos_url":"https://api.github.com/users/MartijnKaijser/repos","events_url":"https://api.github.com/users/MartijnKaijser/events{/privacy}","received_events_url":"https://api.github.com/users/MartijnKaijser/received_events","type":"User","site_admin":false},"open_issues":16,"closed_issues":774,"state":"open","created_at":"2016-11-30T16:58:49Z","updated_at":"2017-05-31T04:50:39Z","due_on":"2017-05-31T07:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/xbmc/xbmc/pulls/12202/commits","review_comments_url":"https://api.github.com/repos/xbmc/xbmc/pulls/12202/comments","review_comment_url":"https://api.github.com/repos/xbmc/xbmc/pulls/comments{/number}","comments_url":"https://api.github.com/repos/xbmc/xbmc/issues/12202/comments","statuses_url":"https://api.github.com/repos/xbmc/xbmc/statuses/4253b83d1bc9387bcf7c8d6e59ba9df5e16ade08","head":{"label":"AlwinEsch:add-callbacks-3","ref":"add-callbacks-3","sha":"4253b83d1bc9387bcf7c8d6e59ba9df5e16ade08","user":{"login":"AlwinEsch","id":6879739,"avatar_url":"https://avatars0.githubusercontent.com/u/6879739?v=3","gravatar_id":"","url":"https://api.github.com/users/AlwinEsch","html_url":"https://github.com/AlwinEsch","followers_url":"https://api.github.com/users/AlwinEsch/followers","following_url":"https://api.github.com/users/AlwinEsch/following{/other_user}","gists_url":"https://api.github.com/users/AlwinEsch/gists{/gist_id}","starred_url":"https://api.github.com/users/AlwinEsch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlwinEsch/subscriptions","organizations_url":"https://api.github.com/users/AlwinEsch/orgs","repos_url":"https://api.github.com/users/AlwinEsch/repos","events_url":"https://api.github.com/users/AlwinEsch/events{/privacy}","received_events_url":"https://api.github.com/users/AlwinEsch/received_events","type":"User","site_admin":false},"repo":{"id":17647639,"name":"kodi","full_name":"AlwinEsch/kodi","owner":{"login":"AlwinEsch","id":6879739,"avatar_url":"https://avatars0.githubusercontent.com/u/6879739?v=3","gravatar_id":"","url":"https://api.github.com/users/AlwinEsch","html_url":"https://github.com/AlwinEsch","followers_url":"https://api.github.com/users/AlwinEsch/followers","following_url":"https://api.github.com/users/AlwinEsch/following{/other_user}","gists_url":"https://api.github.com/users/AlwinEsch/gists{/gist_id}","starred_url":"https://api.github.com/users/AlwinEsch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlwinEsch/subscriptions","organizations_url":"https://api.github.com/users/AlwinEsch/orgs","repos_url":"https://api.github.com/users/AlwinEsch/repos","events_url":"https://api.github.com/users/AlwinEsch/events{/privacy}","received_events_url":"https://api.github.com/users/AlwinEsch/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/AlwinEsch/kodi","description":"Fork of Kodi Main Repository","fork":true,"url":"https://api.github.com/repos/AlwinEsch/kodi","forks_url":"https://api.github.com/repos/AlwinEsch/kodi/forks","keys_url":"https://api.github.com/repos/AlwinEsch/kodi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/AlwinEsch/kodi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/AlwinEsch/kodi/teams","hooks_url":"https://api.github.com/repos/AlwinEsch/kodi/hooks","issue_events_url":"https://api.github.com/repos/AlwinEsch/kodi/issues/events{/number}","events_url":"https://api.github.com/repos/AlwinEsch/kodi/events","assignees_url":"https://api.github.com/repos/AlwinEsch/kodi/assignees{/user}","branches_url":"https://api.github.com/repos/AlwinEsch/kodi/branches{/branch}","tags_url":"https://api.github.com/repos/AlwinEsch/kodi/tags","blobs_url":"https://api.github.com/repos/AlwinEsch/kodi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/AlwinEsch/kodi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/AlwinEsch/kodi/git/refs{/sha}","trees_url":"https://api.github.com/repos/AlwinEsch/kodi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/AlwinEsch/kodi/statuses/{sha}","languages_url":"https://api.github.com/repos/AlwinEsch/kodi/languages","stargazers_url":"https://api.github.com/repos/AlwinEsch/kodi/stargazers","contributors_url":"https://api.github.com/repos/AlwinEsch/kodi/contributors","subscribers_url":"https://api.github.com/repos/AlwinEsch/kodi/subscribers","subscription_url":"https://api.github.com/repos/AlwinEsch/kodi/subscription","commits_url":"https://api.github.com/repos/AlwinEsch/kodi/commits{/sha}","git_commits_url":"https://api.github.com/repos/AlwinEsch/kodi/git/commits{/sha}","comments_url":"https://api.github.com/repos/AlwinEsch/kodi/comments{/number}","issue_comment_url":"https://api.github.com/repos/AlwinEsch/kodi/issues/comments{/number}","contents_url":"https://api.github.com/repos/AlwinEsch/kodi/contents/{+path}","compare_url":"https://api.github.com/repos/AlwinEsch/kodi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/AlwinEsch/kodi/merges","archive_url":"https://api.github.com/repos/AlwinEsch/kodi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/AlwinEsch/kodi/downloads","issues_url":"https://api.github.com/repos/AlwinEsch/kodi/issues{/number}","pulls_url":"https://api.github.com/repos/AlwinEsch/kodi/pulls{/number}","milestones_url":"https://api.github.com/repos/AlwinEsch/kodi/milestones{/number}","notifications_url":"https://api.github.com/repos/AlwinEsch/kodi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/AlwinEsch/kodi/labels{/name}","releases_url":"https://api.github.com/repos/AlwinEsch/kodi/releases{/id}","deployments_url":"https://api.github.com/repos/AlwinEsch/kodi/deployments","created_at":"2014-03-11T22:34:10Z","updated_at":"2017-05-10T00:36:19Z","pushed_at":"2017-05-31T14:00:39Z","git_url":"git://github.com/AlwinEsch/kodi.git","ssh_url":"git@github.com:AlwinEsch/kodi.git","clone_url":"https://github.com/AlwinEsch/kodi.git","svn_url":"https://github.com/AlwinEsch/kodi","homepage":"http://kodi.tv","size":593305,"stargazers_count":2,"watchers_count":2,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":1,"forks":1,"open_issues":1,"watchers":2,"default_branch":"master"}},"base":{"label":"xbmc:master","ref":"master","sha":"81df4ad49fe8ac5b4780dd33dbd28b25c91e1aeb","user":{"login":"xbmc","id":199122,"avatar_url":"https://avatars1.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://avatars1.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}","deployments_url":"https://api.github.com/repos/xbmc/xbmc/deployments","created_at":"2011-01-03T21:18:51Z","updated_at":"2017-05-31T14:06:21Z","pushed_at":"2017-05-31T14:54:01Z","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":1417922,"stargazers_count":5986,"watchers_count":5986,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":4161,"mirror_url":null,"open_issues_count":168,"forks":4161,"open_issues":168,"watchers":5986,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/xbmc/xbmc/pulls/12202"},"html":{"href":"https://github.com/xbmc/xbmc/pull/12202"},"issue":{"href":"https://api.github.com/repos/xbmc/xbmc/issues/12202"},"comments":{"href":"https://api.github.com/repos/xbmc/xbmc/issues/12202/comments"},"review_comments":{"href":"https://api.github.com/repos/xbmc/xbmc/pulls/12202/comments"},"review_comment":{"href":"https://api.github.com/repos/xbmc/xbmc/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/xbmc/xbmc/pulls/12202/commits"},"statuses":{"href":"https://api.github.com/repos/xbmc/xbmc/statuses/4253b83d1bc9387bcf7c8d6e59ba9df5e16ade08"}}}}
{"actor":{"display_login":"ksooo"}}