diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake index c53b479982d..9ea9c3e829f 100644 --- a/cmake/QtCreatorAPI.cmake +++ b/cmake/QtCreatorAPI.cmake @@ -1119,3 +1119,28 @@ function(qtc_add_public_header header) COMPONENT Devel EXCLUDE_FROM_ALL ) endfunction() + +function (add_qtc_lua_plugin name) + cmake_parse_arguments(_arg "EXCLUDE_FROM_INSTALL;" "" "SOURCES;" ${ARGN}) + + add_custom_target(${name} ALL SOURCES ${_arg_SOURCES}) + + foreach(SOURCE ${_arg_SOURCES}) + add_custom_command(TARGET ${name} POST_BUILD + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE} + ${CMAKE_BINARY_DIR}/${IDE_PLUGIN_PATH}/lua-plugins/${SOURCE} + COMMENT "Copying ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE} to ${CMAKE_BINARY_DIR}/${IDE_PLUGIN_PATH}/lua-plugins/${SOURCE}" + ) + + if (NOT _arg_EXCLUDE_FROM_INSTALL) + cmake_path(GET SOURCE PARENT_PATH SOURCE_DIR) + + install(FILES + ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE} + DESTINATION ${IDE_PLUGIN_PATH}/lua-plugins/${SOURCE_DIR} + ) + endif() + endforeach() +endfunction() diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt index 976f2875700..3e32757ff86 100644 --- a/src/plugins/CMakeLists.txt +++ b/src/plugins/CMakeLists.txt @@ -118,3 +118,4 @@ endif() add_subdirectory(qnx) add_subdirectory(mcusupport) add_subdirectory(qtapplicationmanager) +add_subdirectory(tellajoke) diff --git a/src/plugins/tellajoke/CMakeLists.txt b/src/plugins/tellajoke/CMakeLists.txt new file mode 100644 index 00000000000..c9dfcf23d20 --- /dev/null +++ b/src/plugins/tellajoke/CMakeLists.txt @@ -0,0 +1 @@ +add_qtc_lua_plugin(tellajoke SOURCES tellajoke/tellajoke.lua) diff --git a/src/plugins/tellajoke/tellajoke/tellajoke.lua b/src/plugins/tellajoke/tellajoke/tellajoke.lua new file mode 100644 index 00000000000..680e0420d2f --- /dev/null +++ b/src/plugins/tellajoke/tellajoke/tellajoke.lua @@ -0,0 +1,56 @@ +--- Copyright (C) 2024 The Qt Company Ltd. +--- SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +local function fetchJoke() + print("Fetching ...") + + local a = require("async") + local fetch = require("Fetch").fetch + local utils = require("Utils") + local mm = require("MessageManager") + + local r = a.wait(fetch({ url = "https://official-joke-api.appspot.com/random_joke", convertToTable = true })) + if (type(r) == "table") then + mm.writeDisrupting(r.setup) + a.wait(utils.waitms(1000)) + mm.writeSilently(".") + a.wait(utils.waitms(1000)) + mm.writeSilently(".") + a.wait(utils.waitms(1000)) + mm.writeSilently(".") + a.wait(utils.waitms(1000)) + mm.writeDisrupting(r.punchline) + else + print("echo Error fetching: " .. r) + end +end + +local function fetchJokeSafe() + local ok, err = pcall(fetchJoke) + if not ok then + print("echo Error fetching: " .. err) + end +end + +local function setup() + local a = require("async") + Action = require("Action") + Action.create("Simple.joke", { + text = "Tell a joke", + onTrigger = function() a.sync(fetchJokeSafe)() end, + defaultKeySequences = { "Meta+Ctrl+Shift+J", "Ctrl+Shift+Alt+J" }, + }) +end + +return { + Name = "Tell A Joke", + Version = "1.0.0", + CompatVersion = "1.0.0", + Vendor = "The Qt Company", + Category = "Fun", + Description = "This plugin adds an action that tells a joke.", + Dependencies = { + { Name = "Lua", Version = "13.0.82", Required = true }, + }, + setup = setup, +} --[[@as QtcPlugin]]