// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 #pragma once #include "copilothoverhandler.h" #include "requests/checkstatus.h" #include "requests/getcompletions.h" #include "requests/seteditorinfo.h" #include "requests/signinconfirm.h" #include "requests/signininitiate.h" #include "requests/signout.h" #include #include #include #include namespace Copilot::Internal { class CopilotClient : public LanguageClient::Client { public: CopilotClient(const Utils::FilePath &nodePath, const Utils::FilePath &distPath); ~CopilotClient() override; void openDocument(TextEditor::TextDocument *document) override; void scheduleRequest(TextEditor::TextEditorWidget *editor); void requestCompletions(TextEditor::TextEditorWidget *editor); void handleCompletions(const GetCompletionRequest::Response &response, TextEditor::TextEditorWidget *editor); void cancelRunningRequest(TextEditor::TextEditorWidget *editor); void requestCheckStatus( bool localChecksOnly, std::function callback); void requestSignOut(std::function callback); void requestSignInInitiate( std::function callback); void requestSignInConfirm( const QString &userCode, std::function callback); bool canOpenProject(ProjectExplorer::Project *project) override; bool isEnabled(ProjectExplorer::Project *project); void proxyAuthenticationFailed(); private: void requestSetEditorInfo(); QHash m_runningRequests; struct ScheduleData { int cursorPosition = -1; QTimer *timer = nullptr; }; QHash m_scheduledRequests; CopilotHoverHandler m_hoverHandler; bool m_isAskingForPassword{false}; }; } // namespace Copilot::Internal