diff --git a/docs/usage.rst b/docs/usage.rst index 3ac4e4b..28ad0d0 100644 --- a/docs/usage.rst +++ b/docs/usage.rst @@ -836,6 +836,17 @@ Check `Open Vsx `_ for updates. openvsx The extension's Unique Identifier on open-vsx.org, e.g. ``ritwickdey.LiveServer``. +Check Visual Studio Code Marketplace +~~~~~~~~~~~~~~~ +:: + + source = "vsmarketplace" + +Check `Visual Studio Code Marketplace `_ for updates. + +vsmarketplace + The extension's Unique Identifier on marketplace.visualstudio.com/vscode, e.g. ``ritwickdey.LiveServer``. + Combine others' results ~~~~~~~~~~~~~~~~~~~~~~~ :: diff --git a/nvchecker_source/vsmarketplace.py b/nvchecker_source/vsmarketplace.py new file mode 100644 index 0000000..265829e --- /dev/null +++ b/nvchecker_source/vsmarketplace.py @@ -0,0 +1,54 @@ +# MIT licensed +# Copyright (c) 2013-2021 Th3Whit3Wolf , et al. + +from nvchecker.api import ( + VersionResult, Entry, AsyncCache, KeyManager, + TemporaryError, session, GetVersionError, +) + +API_URL = 'https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery' + +HEADERS = { + 'Accept': 'application/json;api-version=6.1-preview.1', + 'Content-Type': 'application/json' +} + +async def get_version(name: str, conf: Entry, *, cache: AsyncCache, **kwargs): + name = conf.get('vsmarketplace') or name + + q = { + 'filters': [ + { + 'criteria': [ + { + 'filterType': 8, + 'value': 'Microsoft.VisualStudio.Code' + }, + { + 'filterType': 10, + 'value': name + }, + { + 'filterType': 12, + 'value': '4096' + } + ], + 'pageNumber': 1, + 'pageSize': 2, + 'sortBy': 0, + 'sortOrder': 0 + } + ], + 'assetTypes': [], + 'flags': 946 + } + + res = await session.post( + API_URL, + headers = HEADERS, + json = q, + ) + j = res.json() + + version = j['results'][0]['extensions'][0]['versions'][0]['version'] + return version \ No newline at end of file diff --git a/tests/test_vsmarketplace.py b/tests/test_vsmarketplace.py new file mode 100644 index 0000000..a2d1ab8 --- /dev/null +++ b/tests/test_vsmarketplace.py @@ -0,0 +1,10 @@ +# MIT licensed +# Copyright (c) 2013-2021 Th3Whit3Wolf , et al. + +import pytest +pytestmark = [pytest.mark.asyncio, pytest.mark.needs_net] + +async def test_vsmarketplace(get_version): + assert await get_version("usernamehw.indent-one-space", { + "source": "vsmarketplace", + }) == "0.2.6" \ No newline at end of file