16:03:01.575 qtc.languageclient.messages: StdIOClient send data: 16:03:01.575 qtc.languageclient.messages: Content-Length: 311 16:03:01.575 qtc.languageclient.messages: StdIOClient send data: 16:03:01.575 qtc.languageclient.messages: {"jsonrpc":"2.0","method":"textDocument/didChange","params":{"contentChanges":[{"range":{"end":{"character":0,"line":92},"start":{"character":0,"line":92}},"rangeLength":0,"text":"\n"}],"textDocument":{"uri":"file:///C:/Users/aless/dev/qt-creator/src/plugins/learning/scripts/updatethumbnails.py","version":4}}} 16:03:01.575 qtc.languageclient.messages: StdIOClient send data: 16:03:01.575 qtc.languageclient.messages: Content-Length: 3072 16:03:01.575 qtc.languageclient.messages: StdIOClient send data: 16:03:01.575 qtc.languageclient.messages: {"jsonrpc":"2.0","method":"textDocument/didSave","params":{"text":"#!/usr/bin/env python\n\n# Copyright (C) 2025 The Qt Company Ltd.\n# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0\n\nimport json\nimport os\nimport shutil\nimport subprocess\nimport sys\nimport urllib.request\n\nfrom pathlib import Path\n\n\ndef recommendations_root():\n return (Path(__file__).parent / \"../overview\").resolve()\n\n\ndef recommendations_json():\n return recommendations_root() / \"recommendations.json\"\n\n\ndef download_file(url, file_name):\n if not os.path.isfile(file_name):\n print(f\"Fetching {url}\")\n urllib.request.urlretrieve(url, file_name)\n\n\ndef magick():\n magick_tool = shutil.which(\"magick\")\n if magick_tool is None:\n magick_tool = shutil.which(\"convert\")\n if magick_tool is None:\n sys.exit(\"ImageMagick was not found in Path.\")\n return magick_tool\n\n\ndef convert_thumbnail(thumbnail_file_name, url, thumbnail_type):\n temp_file_name = Path(thumbnail_file_name).stem + Path(url).suffix\n download_file(url, temp_file_name)\n\n is_blog_pic = thumbnail_type == \"blogpost\"\n is_course_pic = thumbnail_type == \"course\"\n size = (\n # Learning::Internal::blogThumbSize\n {\"w\": 450 * 2, \"h\": 192 * 2} if is_blog_pic else\n # WelcomePageHelpers::WelcomeThumbnailSize\n {\"w\": 214 * 2, \"h\": 160 * 2}\n )\n size_str = f\"{size['w']}x{size['h']}\"\n\n command = [magick(), f\"{temp_file_name}[0]\"]\n command.extend([\n # https://imagemagick.org/script/command-line-options.php#filter\n \"-filter\", \"Mitchell\",\n # https://usage.imagemagick.org/resize/#fill\n \"-resize\", f\"{size_str}^\",\n \"-gravity\", \"north\",\n \"-extent\", size_str,\n ])\n if is_course_pic:\n command.extend([\n \"+dither\",\n \"-colors\", \"15\",\n # https://imagemagick.org/script/webp.php\n \"-define\", \"webp:lossless=true\",\n ])\n else:\n command.extend([\n # https://imagemagick.org/script/webp.php\n \"-define\", \"webp:use-sharp-yuv=1\",\n \"-define\", \"webp:method=6\",\n ])\n command.append(recommendations_root() / thumbnail_file_name)\n\n print(command)\n try:\n subprocess.check_call(command)\n except subprocess.CalledProcessError:\n print(f\"Failed to convert to {thumbnail_file_name}.\")\n\n\ndef main():\n with open(recommendations_json(), encoding=\"utf-8\") as json_data:\n data = json.load(json_data)\n for item in data[\"items\"]:\n if \"thumbnailurl\" in item:\n convert_thumbnail(item[\"thumbnail\"], item[\"thumbnailurl\"],\n item[\"type\"])\n\n return 0\n\n\nif __name__ == '__main__':\n sys.exit(main())\n","textDocument":{"uri":"file:///C:/Users/aless/dev/qt-creator/src/plugins/learning/scripts/updatethumbnails.py"}}} 16:03:01.775 qtc.languageclient.messages: StdIOClient send data: 16:03:01.775 qtc.languageclient.messages: Content-Length: 225 16:03:01.775 qtc.languageclient.messages: StdIOClient send data: 16:03:01.775 qtc.languageclient.messages: {"id":"{2723f23c-891a-4a89-b8d3-abb03803ec3c}","jsonrpc":"2.0","method":"textDocument/documentSymbol","params":{"textDocument":{"uri":"file:///C:/Users/aless/dev/qt-creator/src/plugins/learning/scripts/updatethumbnails.py"}}} 16:03:01.787 qtc.languageclient.messages: StdIOClient std out: 16:03:01.787 qtc.languageclient.messages: Content-Length: 6122 Content-Type: application/vscode-jsonrpc; charset=utf8 {"jsonrpc":"2.0","id":"{2723f23c-891a-4a89-b8d3-abb03803ec3c}","result":[{"name":"json","containerName":null,"location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":5,"character":0},"end":{"line":5,"character":11}}},"kind":2},{"name":"os","containerName":null,"location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":6,"character":0},"end":{"line":6,"character":9}}},"kind":2},{"name":"shutil","containerName":null,"location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":7,"character":0},"end":{"line":7,"character":13}}},"kind":2},{"name":"subprocess","containerName":null,"location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":8,"character":0},"end":{"line":8,"character":17}}},"kind":2},{"name":"sys","containerName":null,"location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":9,"character":0},"end":{"line":9,"character":10}}},"kind":2},{"name":"urllib","containerName":null,"location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":10,"character":0},"end":{"line":10,"character":21}}},"kind":2},{"name":"Path","containerName":null,"location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":12,"character":0},"end":{"line":12,"character":24}}},"kind":5},{"name":"recommendations_root","containerName":null,"location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":15,"character":0},"end":{"line":17,"character":0}}},"kind":12},{"name":"recommendations_json","containerName":null,"location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":19,"character":0},"end":{"line":21,"character":0}}},"kind":12},{"name":"download_file","containerName":null,"location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":23,"character":0},"end":{"line":27,"character":0}}},"kind":12},{"name":"magick","containerName":null,"location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":29,"character":0},"end":{"line":36,"character":0}}},"kind":12},{"name":"magick_tool","containerName":"magick","location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":30,"character":4},"end":{"line":30,"character":40}}},"kind":13},{"name":"magick_tool","containerName":"magick","location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":32,"character":8},"end":{"line":32,"character":45}}},"kind":13},{"name":"convert_thumbnail","containerName":null,"location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":38,"character":0},"end":{"line":81,"character":0}}},"kind":12},{"name":"temp_file_name","containerName":"convert_thumbnail","location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":70}}},"kind":13},{"name":"is_blog_pic","containerName":"convert_thumbnail","location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":42,"character":4},"end":{"line":42,"character":46}}},"kind":13},{"name":"is_course_pic","containerName":"convert_thumbnail","location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":43,"character":4},"end":{"line":43,"character":46}}},"kind":13},{"name":"size","containerName":"convert_thumbnail","location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":44,"character":4},"end":{"line":49,"character":5}}},"kind":13},{"name":"size_str","containerName":"convert_thumbnail","location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":41}}},"kind":13},{"name":"command","containerName":"convert_thumbnail","location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":52,"character":4},"end":{"line":52,"character":48}}},"kind":13},{"name":"main","containerName":null,"location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":83,"character":0},"end":{"line":92,"character":0}}},"kind":12},{"name":"json_data","containerName":"main","location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":84,"character":4},"end":{"line":90,"character":0}}},"kind":13},{"name":"data","containerName":"main","location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":85,"character":8},"end":{"line":85,"character":35}}},"kind":13},{"name":"item","containerName":"main","location":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","range":{"start":{"line":86,"character":8},"end":{"line":90,"character":0}}},"kind":13}]} 16:03:01.787 qtc.languageserverprotocol.parse: parse buffer pos: 0 16:03:01.787 qtc.languageserverprotocol.parse: data: "Content-Length: 6122\r\nContent-Type: application/vscode-jsonrpc; charset=utf8\r\n\r\n{\"jsonrpc\":\"2.0\",\"id\":\"{2723f23c-891a-4a89-b8d3-abb03803ec3c}\",\"result\":[{\"name\":\"json\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":5,\"character\":0},\"end\":{\"line\":5,\"character\":11}}},\"kind\":2},{\"name\":\"os\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":6,\"character\":0},\"end\":{\"line\":6,\"character\":9}}},\"kind\":2},{\"name\":\"shutil\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":7,\"character\":0},\"end\":{\"line\":7,\"character\":13}}},\"kind\":2},{\"name\":\"subprocess\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":8,\"character\":0},\"end\":{\"line\":8,\"character\":17}}},\"kind\":2},{\"name\":\"sys\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":9,\"character\":0},\"end\":{\"line\":9,\"character\":10}}},\"kind\":2},{\"name\":\"urllib\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":10,\"character\":0},\"end\":{\"line\":10,\"character\":21}}},\"kind\":2},{\"name\":\"Path\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":12,\"character\":0},\"end\":{\"line\":12,\"character\":24}}},\"kind\":5},{\"name\":\"recommendations_root\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":15,\"character\":0},\"end\":{\"line\":17,\"character\":0}}},\"kind\":12},{\"name\":\"recommendations_json\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":19,\"character\":0},\"end\":{\"line\":21,\"character\":0}}},\"kind\":12},{\"name\":\"download_file\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":23,\"character\":0},\"end\":{\"line\":27,\"character\":0}}},\"kind\":12},{\"name\":\"magick\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":29,\"character\":0},\"end\":{\"line\":36,\"character\":0}}},\"kind\":12},{\"name\":\"magick_tool\",\"containerName\":\"magick\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":30,\"character\":4},\"end\":{\"line\":30,\"character\":40}}},\"kind\":13},{\"name\":\"magick_tool\",\"containerName\":\"magick\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":32,\"character\":8},\"end\":{\"line\":32,\"character\":45}}},\"kind\":13},{\"name\":\"convert_thumbnail\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":38,\"character\":0},\"end\":{\"line\":81,\"character\":0}}},\"kind\":12},{\"name\":\"temp_file_name\",\"containerName\":\"convert_thumbnail\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":39,\"character\":4},\"end\":{\"line\":39,\"character\":70}}},\"kind\":13},{\"name\":\"is_blog_pic\",\"containerName\":\"convert_thumbnail\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":42,\"character\":4},\"end\":{\"line\":42,\"character\":46}}},\"kind\":13},{\"name\":\"is_course_pic\",\"containerName\":\"convert_thumbnail\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":43,\"character\":4},\"end\":{\"line\":43,\"character\":46}}},\"kind\":13},{\"name\":\"size\",\"containerName\":\"convert_thumbnail\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":44,\"character\":4},\"end\":{\"line\":49,\"character\":5}}},\"kind\":13},{\"name\":\"size_str\",\"containerName\":\"convert_thumbnail\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":50,\"character\":4},\"end\":{\"line\":50,\"character\":41}}},\"kind\":13},{\"name\":\"command\",\"containerName\":\"convert_thumbnail\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":52,\"character\":4},\"end\":{\"line\":52,\"character\":48}}},\"kind\":13},{\"name\":\"main\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":83,\"character\":0},\"end\":{\"line\":92,\"character\":0}}},\"kind\":12},{\"name\":\"json_data\",\"containerName\":\"main\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":84,\"character\":4},\"end\":{\"line\":90,\"character\":0}}},\"kind\":13},{\"name\":\"data\",\"containerName\":\"main\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":85,\"character\":8},\"end\":{\"line\":85,\"character\":35}}},\"kind\":13},{\"name\":\"item\",\"containerName\":\"main\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":86,\"character\":8},\"end\":{\"line\":90,\"character\":0}}},\"kind\":13}]}" 16:03:01.787 qtc.languageserverprotocol.parse: complete: true 16:03:01.787 qtc.languageserverprotocol.parse: length: 6122 16:03:01.787 qtc.languageserverprotocol.parse: content: "{\"jsonrpc\":\"2.0\",\"id\":\"{2723f23c-891a-4a89-b8d3-abb03803ec3c}\",\"result\":[{\"name\":\"json\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":5,\"character\":0},\"end\":{\"line\":5,\"character\":11}}},\"kind\":2},{\"name\":\"os\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":6,\"character\":0},\"end\":{\"line\":6,\"character\":9}}},\"kind\":2},{\"name\":\"shutil\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":7,\"character\":0},\"end\":{\"line\":7,\"character\":13}}},\"kind\":2},{\"name\":\"subprocess\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":8,\"character\":0},\"end\":{\"line\":8,\"character\":17}}},\"kind\":2},{\"name\":\"sys\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":9,\"character\":0},\"end\":{\"line\":9,\"character\":10}}},\"kind\":2},{\"name\":\"urllib\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":10,\"character\":0},\"end\":{\"line\":10,\"character\":21}}},\"kind\":2},{\"name\":\"Path\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":12,\"character\":0},\"end\":{\"line\":12,\"character\":24}}},\"kind\":5},{\"name\":\"recommendations_root\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":15,\"character\":0},\"end\":{\"line\":17,\"character\":0}}},\"kind\":12},{\"name\":\"recommendations_json\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":19,\"character\":0},\"end\":{\"line\":21,\"character\":0}}},\"kind\":12},{\"name\":\"download_file\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":23,\"character\":0},\"end\":{\"line\":27,\"character\":0}}},\"kind\":12},{\"name\":\"magick\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":29,\"character\":0},\"end\":{\"line\":36,\"character\":0}}},\"kind\":12},{\"name\":\"magick_tool\",\"containerName\":\"magick\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":30,\"character\":4},\"end\":{\"line\":30,\"character\":40}}},\"kind\":13},{\"name\":\"magick_tool\",\"containerName\":\"magick\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":32,\"character\":8},\"end\":{\"line\":32,\"character\":45}}},\"kind\":13},{\"name\":\"convert_thumbnail\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":38,\"character\":0},\"end\":{\"line\":81,\"character\":0}}},\"kind\":12},{\"name\":\"temp_file_name\",\"containerName\":\"convert_thumbnail\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":39,\"character\":4},\"end\":{\"line\":39,\"character\":70}}},\"kind\":13},{\"name\":\"is_blog_pic\",\"containerName\":\"convert_thumbnail\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":42,\"character\":4},\"end\":{\"line\":42,\"character\":46}}},\"kind\":13},{\"name\":\"is_course_pic\",\"containerName\":\"convert_thumbnail\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":43,\"character\":4},\"end\":{\"line\":43,\"character\":46}}},\"kind\":13},{\"name\":\"size\",\"containerName\":\"convert_thumbnail\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":44,\"character\":4},\"end\":{\"line\":49,\"character\":5}}},\"kind\":13},{\"name\":\"size_str\",\"containerName\":\"convert_thumbnail\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":50,\"character\":4},\"end\":{\"line\":50,\"character\":41}}},\"kind\":13},{\"name\":\"command\",\"containerName\":\"convert_thumbnail\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":52,\"character\":4},\"end\":{\"line\":52,\"character\":48}}},\"kind\":13},{\"name\":\"main\",\"containerName\":null,\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":83,\"character\":0},\"end\":{\"line\":92,\"character\":0}}},\"kind\":12},{\"name\":\"json_data\",\"containerName\":\"main\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":84,\"character\":4},\"end\":{\"line\":90,\"character\":0}}},\"kind\":13},{\"name\":\"data\",\"containerName\":\"main\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":85,\"character\":8},\"end\":{\"line\":85,\"character\":35}}},\"kind\":13},{\"name\":\"item\",\"containerName\":\"main\",\"location\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"range\":{\"start\":{\"line\":86,\"character\":8},\"end\":{\"line\":90,\"character\":0}}},\"kind\":13}]}" 16:03:01.787 qtc.languageserverprotocol.timing: received server reply to "textDocument/documentSymbol" after 12 ms 16:03:01.818 qtc.languageclient.messages: StdIOClient send data: 16:03:01.818 qtc.languageclient.messages: Content-Length: 265 16:03:01.818 qtc.languageclient.messages: StdIOClient send data: 16:03:01.818 qtc.languageclient.messages: {"id":"{7dcb7754-f9e2-4ea1-ae0d-b27c84133fa3}","jsonrpc":"2.0","method":"textDocument/documentHighlight","params":{"position":{"character":0,"line":93},"textDocument":{"uri":"file:///C:/Users/aless/dev/qt-creator/src/plugins/learning/scripts/updatethumbnails.py"}}} 16:03:01.819 qtc.languageclient.messages: StdIOClient std out: 16:03:01.819 qtc.languageclient.messages: Content-Length: 77 Content-Type: application/vscode-jsonrpc; charset=utf8 {"jsonrpc":"2.0","id":"{7dcb7754-f9e2-4ea1-ae0d-b27c84133fa3}","result":null} 16:03:01.819 qtc.languageserverprotocol.parse: parse buffer pos: 0 16:03:01.819 qtc.languageserverprotocol.parse: data: "Content-Length: 77\r\nContent-Type: application/vscode-jsonrpc; charset=utf8\r\n\r\n{\"jsonrpc\":\"2.0\",\"id\":\"{7dcb7754-f9e2-4ea1-ae0d-b27c84133fa3}\",\"result\":null}" 16:03:01.819 qtc.languageserverprotocol.parse: complete: true 16:03:01.819 qtc.languageserverprotocol.parse: length: 77 16:03:01.819 qtc.languageserverprotocol.parse: content: "{\"jsonrpc\":\"2.0\",\"id\":\"{7dcb7754-f9e2-4ea1-ae0d-b27c84133fa3}\",\"result\":null}" 16:03:01.819 qtc.languageserverprotocol.timing: received server reply to "textDocument/documentHighlight" after 1 ms 16:03:02.091 qtc.languageclient.messages: StdIOClient std out: 16:03:02.091 qtc.languageclient.messages: Content-Length: 208 Content-Type: application/vscode-jsonrpc; charset=utf8 {"jsonrpc":"2.0","method":"textDocument\/publishDiagnostics","params":{"uri":"file:\/\/\/C:\/Users\/aless\/dev\/qt-creator\/src\/plugins\/learning\/scripts\/updatethumbnails.py","diagnostics":[],"version":4}} 16:03:02.091 qtc.languageserverprotocol.parse: parse buffer pos: 0 16:03:02.091 qtc.languageserverprotocol.parse: data: "Content-Length: 208\r\nContent-Type: application/vscode-jsonrpc; charset=utf8\r\n\r\n{\"jsonrpc\":\"2.0\",\"method\":\"textDocument\\/publishDiagnostics\",\"params\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"diagnostics\":[],\"version\":4}}" 16:03:02.091 qtc.languageserverprotocol.parse: complete: true 16:03:02.091 qtc.languageserverprotocol.parse: length: 208 16:03:02.091 qtc.languageserverprotocol.parse: content: "{\"jsonrpc\":\"2.0\",\"method\":\"textDocument\\/publishDiagnostics\",\"params\":{\"uri\":\"file:\\/\\/\\/C:\\/Users\\/aless\\/dev\\/qt-creator\\/src\\/plugins\\/learning\\/scripts\\/updatethumbnails.py\",\"diagnostics\":[],\"version\":4}}" 16:03:02.091 qtc.languageserverprotocol.conversion: Expected Object in json value but got: QJsonValue(undefined) 16:03:02.091 qtc.languageserverprotocol.conversion: class LanguageServerProtocol::Position is not valid: QJsonObject() 16:03:02.091 qtc.languageserverprotocol.conversion: Expected Object in json value but got: QJsonValue(undefined) 16:03:02.091 qtc.languageserverprotocol.conversion: class LanguageServerProtocol::Position is not valid: QJsonObject() 16:03:02.091 qtc.languageclient.messages: StdIOClient send data: 16:03:02.091 qtc.languageclient.messages: Content-Length: 325 16:03:02.091 qtc.languageclient.messages: StdIOClient send data: 16:03:02.091 qtc.languageclient.messages: {"id":"{a11f8060-626c-4bff-8ca1-38b62f910b99}","jsonrpc":"2.0","method":"textDocument/codeAction","params":{"context":{"diagnostics":[]},"range":{"end":{"character":0,"line":96},"start":{"character":0,"line":0}},"textDocument":{"uri":"file:///C:/Users/aless/dev/qt-creator/src/plugins/learning/scripts/updatethumbnails.py"}}} 16:03:02.091 qtc.languageclient.messages: StdIOClient std out: 16:03:02.091 qtc.languageclient.messages: Content-Length: 75 Content-Type: application/vscode-jsonrpc; charset=utf8 {"jsonrpc":"2.0","id":"{a11f8060-626c-4bff-8ca1-38b62f910b99}","result":[]} 16:03:02.091 qtc.languageserverprotocol.parse: parse buffer pos: 0 16:03:02.091 qtc.languageserverprotocol.parse: data: "Content-Length: 75\r\nContent-Type: application/vscode-jsonrpc; charset=utf8\r\n\r\n{\"jsonrpc\":\"2.0\",\"id\":\"{a11f8060-626c-4bff-8ca1-38b62f910b99}\",\"result\":[]}" 16:03:02.091 qtc.languageserverprotocol.parse: complete: true 16:03:02.091 qtc.languageserverprotocol.parse: length: 75 16:03:02.091 qtc.languageserverprotocol.parse: content: "{\"jsonrpc\":\"2.0\",\"id\":\"{a11f8060-626c-4bff-8ca1-38b62f910b99}\",\"result\":[]}" 16:03:02.099 qtc.languageserverprotocol.timing: received server reply to "textDocument/codeAction" after 12 ms