Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions api/lua/build/grpc_client.lua
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ end
---
---@param request_specifier grpc_client.RequestSpecifier
---@param data table The message to send. This should be in the structure of `request_specifier.request`.
---@param callback fun(response: table) A callback that will be run with every response
---@param callback fun(response: table): boolean? A callback that will be run with every response
---@param done? fun() A callback that will be run when the stream closes.
---
---@return string|nil error An error string, if any.
Expand Down Expand Up @@ -355,6 +355,7 @@ function Client:server_streaming_request(request_specifier, data, callback, done

self.loop:wrap(function()
for response_body in stream:each_chunk() do
local stop = nil
while response_body:len() > 0 do
local msg_len = string.unpack(">I4", response_body:sub(2, 5))

Expand All @@ -369,10 +370,18 @@ function Client:server_streaming_request(request_specifier, data, callback, done
end

local response = obj
callback(response)
local should_stop = callback(response)

if should_stop then
stop = true
end

response_body = response_body:sub(msg_len + 6)
end

if stop == true then
break
end
end

if done then
Expand Down
2 changes: 1 addition & 1 deletion api/lua/build/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ end"#,
---@nodiscard
---
---@param data {data_ty}
---@param callback fun(response: {ret_ty})
---@param callback fun(response: {ret_ty}): boolean?
---@param done? fun()
---
---@return string | nil An error string, if any
Expand Down
19 changes: 14 additions & 5 deletions api/lua/pinnacle/grpc/defs.lua
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ end
---
---@param request_specifier grpc_client.RequestSpecifier
---@param data table The message to send. This should be in the structure of `request_specifier.request`.
---@param callback fun(response: table) A callback that will be run with every response
---@param callback fun(response: table): boolean? A callback that will be run with every response
---@param done? fun() A callback that will be run when the stream closes.
---
---@return string|nil error An error string, if any.
Expand Down Expand Up @@ -357,6 +357,7 @@ function Client:server_streaming_request(request_specifier, data, callback, done

self.loop:wrap(function()
for response_body in stream:each_chunk() do
local stop = nil
while response_body:len() > 0 do
local msg_len = string.unpack(">I4", response_body:sub(2, 5))

Expand All @@ -371,10 +372,18 @@ function Client:server_streaming_request(request_specifier, data, callback, done
end

local response = obj
callback(response)
local should_stop = callback(response)

if should_stop then
stop = true
end

response_body = response_body:sub(msg_len + 6)
end

if stop == true then
break
end
end

if done then
Expand Down Expand Up @@ -1835,7 +1844,7 @@ pinnacle.input.v1.InputService.KeybindStream.response = ".pinnacle.input.v1.Keyb
---@nodiscard
---
---@param data pinnacle.input.v1.KeybindStreamRequest
---@param callback fun(response: pinnacle.input.v1.KeybindStreamResponse)
---@param callback fun(response: pinnacle.input.v1.KeybindStreamResponse): boolean?
---@param done? fun()
---
---@return string | nil An error string, if any
Expand All @@ -1855,7 +1864,7 @@ pinnacle.input.v1.InputService.MousebindStream.response = ".pinnacle.input.v1.Mo
---@nodiscard
---
---@param data pinnacle.input.v1.MousebindStreamRequest
---@param callback fun(response: pinnacle.input.v1.MousebindStreamResponse)
---@param callback fun(response: pinnacle.input.v1.MousebindStreamResponse): boolean?
---@param done? fun()
---
---@return string | nil An error string, if any
Expand Down Expand Up @@ -2512,7 +2521,7 @@ pinnacle.process.v1.ProcessService.WaitOnSpawn.response = ".pinnacle.process.v1.
---@nodiscard
---
---@param data pinnacle.process.v1.WaitOnSpawnRequest
---@param callback fun(response: pinnacle.process.v1.WaitOnSpawnResponse)
---@param callback fun(response: pinnacle.process.v1.WaitOnSpawnResponse): boolean?
---@param done? fun()
---
---@return string | nil An error string, if any
Expand Down
16 changes: 16 additions & 0 deletions snowcap/api/lua/snowcap/decoration.lua
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,22 @@ function decoration.new_widget(args)
created = widget.SurfaceHandle.from_decoration_handle(handle),
})

err = client:snowcap_decoration_v1_DecorationService_GetDecorationEvents({
decoration_id = decoration_id,
}, function(response) ---@diagnostic disable-line:redefined-local
response.decoration_events = response.decoration_events or {}

for _, decoration_event in ipairs(response.decoration_events) do
if decoration_event.closing ~= nil then
return true
end
end
end, function()
args.program:event({
closing = {},
})
end)

err = client:snowcap_widget_v1_WidgetService_GetWidgetEvents({
decoration_id = decoration_id,
}, function(response) ---@diagnostic disable-line: redefined-local
Expand Down
70 changes: 61 additions & 9 deletions snowcap/api/lua/snowcap/grpc/defs.lua
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ end
---
---@param request_specifier grpc_client.RequestSpecifier
---@param data table The message to send. This should be in the structure of `request_specifier.request`.
---@param callback fun(response: table) A callback that will be run with every response
---@param callback fun(response: table): boolean? A callback that will be run with every response
---@param done? fun() A callback that will be run when the stream closes.
---
---@return string|nil error An error string, if any.
Expand Down Expand Up @@ -357,6 +357,7 @@ function Client:server_streaming_request(request_specifier, data, callback, done

self.loop:wrap(function()
for response_body in stream:each_chunk() do
local stop = nil
while response_body:len() > 0 do
local msg_len = string.unpack(">I4", response_body:sub(2, 5))

Expand All @@ -371,10 +372,18 @@ function Client:server_streaming_request(request_specifier, data, callback, done
end

local response = obj
callback(response)
local should_stop = callback(response)

if should_stop then
stop = true
end

response_body = response_body:sub(msg_len + 6)
end

if stop == true then
break
end
end

if done then
Expand Down Expand Up @@ -1138,6 +1147,17 @@ local snowcap_popup_v1_PopupEvent_Focus = {

---@class snowcap.decoration.v1.ViewResponse

---@class snowcap.decoration.v1.GetDecorationEventsRequest
---@field decoration_id integer?

---@class snowcap.decoration.v1.DecorationEvent
---@field closing snowcap.decoration.v1.DecorationEvent.Closing?

---@class snowcap.decoration.v1.DecorationEvent.Closing

---@class snowcap.decoration.v1.GetDecorationEventsResponse
---@field decoration_events snowcap.decoration.v1.DecorationEvent[]?

---@class snowcap.input.v0alpha1.Modifiers
---@field shift boolean?
---@field ctrl boolean?
Expand Down Expand Up @@ -1337,6 +1357,9 @@ local snowcap_popup_v1_PopupEvent_Focus = {

---@class snowcap.layer.v1.LayerEvent
---@field focus snowcap.layer.v1.LayerEvent.Focus?
---@field closing snowcap.layer.v1.LayerEvent.Closing?

---@class snowcap.layer.v1.LayerEvent.Closing

---@class snowcap.layer.v1.GetLayerEventsResponse
---@field layer_events snowcap.layer.v1.LayerEvent[]?
Expand Down Expand Up @@ -1411,6 +1434,9 @@ local snowcap_popup_v1_PopupEvent_Focus = {

---@class snowcap.popup.v1.PopupEvent
---@field focus snowcap.popup.v1.PopupEvent.Focus?
---@field closing snowcap.popup.v1.PopupEvent.Closing?

---@class snowcap.popup.v1.PopupEvent.Closing

---@class snowcap.popup.v1.GetPopupEventsResponse
---@field popup_events snowcap.popup.v1.PopupEvent[]?
Expand Down Expand Up @@ -1498,6 +1524,10 @@ snowcap.decoration.v1.UpdateDecorationRequest = {}
snowcap.decoration.v1.UpdateDecorationResponse = {}
snowcap.decoration.v1.ViewRequest = {}
snowcap.decoration.v1.ViewResponse = {}
snowcap.decoration.v1.GetDecorationEventsRequest = {}
snowcap.decoration.v1.DecorationEvent = {}
snowcap.decoration.v1.DecorationEvent.Closing = {}
snowcap.decoration.v1.GetDecorationEventsResponse = {}
snowcap.input = {}
snowcap.input.v0alpha1 = {}
snowcap.input.v0alpha1.Modifiers = {}
Expand Down Expand Up @@ -1542,6 +1572,7 @@ snowcap.layer.v1.ViewRequest = {}
snowcap.layer.v1.ViewResponse = {}
snowcap.layer.v1.GetLayerEventsRequest = {}
snowcap.layer.v1.LayerEvent = {}
snowcap.layer.v1.LayerEvent.Closing = {}
snowcap.layer.v1.GetLayerEventsResponse = {}
snowcap.popup = {}
snowcap.popup.v1 = {}
Expand All @@ -1560,6 +1591,7 @@ snowcap.popup.v1.ViewRequest = {}
snowcap.popup.v1.ViewResponse = {}
snowcap.popup.v1.GetPopupEventsRequest = {}
snowcap.popup.v1.PopupEvent = {}
snowcap.popup.v1.PopupEvent.Closing = {}
snowcap.popup.v1.GetPopupEventsResponse = {}
snowcap.v0alpha1 = {}
snowcap.v0alpha1.Nothing = {}
Expand Down Expand Up @@ -1602,7 +1634,7 @@ snowcap.widget.v1.WidgetService.GetWidgetEvents.response = ".snowcap.widget.v1.G
---@nodiscard
---
---@param data snowcap.widget.v1.GetWidgetEventsRequest
---@param callback fun(response: snowcap.widget.v1.GetWidgetEventsResponse)
---@param callback fun(response: snowcap.widget.v1.GetWidgetEventsResponse): boolean?
---@param done? fun()
---
---@return string | nil An error string, if any
Expand Down Expand Up @@ -1695,6 +1727,26 @@ snowcap.decoration.v1.DecorationService.RequestView.response = ".snowcap.decorat
function Client:snowcap_decoration_v1_DecorationService_RequestView(data)
return self:unary_request(snowcap.decoration.v1.DecorationService.RequestView, data)
end
snowcap.decoration.v1.DecorationService.GetDecorationEvents = {}
snowcap.decoration.v1.DecorationService.GetDecorationEvents.service = "snowcap.decoration.v1.DecorationService"
snowcap.decoration.v1.DecorationService.GetDecorationEvents.method = "GetDecorationEvents"
snowcap.decoration.v1.DecorationService.GetDecorationEvents.request = ".snowcap.decoration.v1.GetDecorationEventsRequest"
snowcap.decoration.v1.DecorationService.GetDecorationEvents.response = ".snowcap.decoration.v1.GetDecorationEventsResponse"

---Performs a server-streaming request.
---
---`callback` will be called with every streamed response.
---
---@nodiscard
---
---@param data snowcap.decoration.v1.GetDecorationEventsRequest
---@param callback fun(response: snowcap.decoration.v1.GetDecorationEventsResponse): boolean?
---@param done? fun()
---
---@return string | nil An error string, if any
function Client:snowcap_decoration_v1_DecorationService_GetDecorationEvents(data, callback, done)
return self:server_streaming_request(snowcap.decoration.v1.DecorationService.GetDecorationEvents, data, callback, done)
end
snowcap.input.v0alpha1.InputService = {}
snowcap.input.v0alpha1.InputService.KeyboardKey = {}
snowcap.input.v0alpha1.InputService.KeyboardKey.service = "snowcap.input.v0alpha1.InputService"
Expand All @@ -1709,7 +1761,7 @@ snowcap.input.v0alpha1.InputService.KeyboardKey.response = ".snowcap.input.v0alp
---@nodiscard
---
---@param data snowcap.input.v0alpha1.KeyboardKeyRequest
---@param callback fun(response: snowcap.input.v0alpha1.KeyboardKeyResponse)
---@param callback fun(response: snowcap.input.v0alpha1.KeyboardKeyResponse): boolean?
---@param done? fun()
---
---@return string | nil An error string, if any
Expand All @@ -1729,7 +1781,7 @@ snowcap.input.v0alpha1.InputService.PointerButton.response = ".snowcap.input.v0a
---@nodiscard
---
---@param data snowcap.input.v0alpha1.PointerButtonRequest
---@param callback fun(response: snowcap.input.v0alpha1.PointerButtonResponse)
---@param callback fun(response: snowcap.input.v0alpha1.PointerButtonResponse): boolean?
---@param done? fun()
---
---@return string | nil An error string, if any
Expand All @@ -1750,7 +1802,7 @@ snowcap.input.v1.InputService.KeyboardKey.response = ".snowcap.input.v1.Keyboard
---@nodiscard
---
---@param data snowcap.input.v1.KeyboardKeyRequest
---@param callback fun(response: snowcap.input.v1.KeyboardKeyResponse)
---@param callback fun(response: snowcap.input.v1.KeyboardKeyResponse): boolean?
---@param done? fun()
---
---@return string | nil An error string, if any
Expand All @@ -1770,7 +1822,7 @@ snowcap.input.v1.InputService.PointerButton.response = ".snowcap.input.v1.Pointe
---@nodiscard
---
---@param data snowcap.input.v1.PointerButtonRequest
---@param callback fun(response: snowcap.input.v1.PointerButtonResponse)
---@param callback fun(response: snowcap.input.v1.PointerButtonResponse): boolean?
---@param done? fun()
---
---@return string | nil An error string, if any
Expand Down Expand Up @@ -1911,7 +1963,7 @@ snowcap.layer.v1.LayerService.GetLayerEvents.response = ".snowcap.layer.v1.GetLa
---@nodiscard
---
---@param data snowcap.layer.v1.GetLayerEventsRequest
---@param callback fun(response: snowcap.layer.v1.GetLayerEventsResponse)
---@param callback fun(response: snowcap.layer.v1.GetLayerEventsResponse): boolean?
---@param done? fun()
---
---@return string | nil An error string, if any
Expand Down Expand Up @@ -2017,7 +2069,7 @@ snowcap.popup.v1.PopupService.GetPopupEvents.response = ".snowcap.popup.v1.GetPo
---@nodiscard
---
---@param data snowcap.popup.v1.GetPopupEventsRequest
---@param callback fun(response: snowcap.popup.v1.GetPopupEventsResponse)
---@param callback fun(response: snowcap.popup.v1.GetPopupEventsResponse): boolean?
---@param done? fun()
---
---@return string | nil An error string, if any
Expand Down
8 changes: 8 additions & 0 deletions snowcap/api/lua/snowcap/layer.lua
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,10 @@ function layer.new_widget(args)
response.layer_events = response.layer_events or {}

for _, layer_event in ipairs(response.layer_events) do
if layer_event.closing ~= nil then
return true
end

local focus = layer_event.focus --[[@as snowcap.layer.FocusEvent]]
---@type snowcap.widget.SurfaceEvent?
local event = nil
Expand Down Expand Up @@ -204,6 +208,10 @@ function layer.new_widget(args)
if err then
log.error(err)
end
end, function()
args.program:event({
closing = {},
})
end)

err = client:snowcap_widget_v1_WidgetService_GetWidgetEvents({
Expand Down
8 changes: 8 additions & 0 deletions snowcap/api/lua/snowcap/popup.lua
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,10 @@ function popup.new_widget(args)
response.popup_events = response.popup_events or {}

for _, popup_event in ipairs(response.popup_events) do
if popup_event.closing ~= nil then
return true
end

local focus = popup_event.focus --[[@as snowcap.popup.FocusEvent]]
---@type snowcap.widget.SurfaceEvent?
local event = nil
Expand Down Expand Up @@ -337,6 +341,10 @@ function popup.new_widget(args)
if err then
log.error(err)
end
end, function()
args.program:event({
closing = {},
})
end)

err = client:snowcap_widget_v1_WidgetService_GetWidgetEvents({
Expand Down
15 changes: 15 additions & 0 deletions snowcap/api/protobuf/snowcap/decoration/v1/decoration.proto
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,25 @@ message ViewRequest {
}
message ViewResponse {}

message GetDecorationEventsRequest {
uint32 decoration_id = 1;
}
message DecorationEvent {
message Closing {}

oneof event {
Closing closing = 1;
}
}
message GetDecorationEventsResponse {
repeated DecorationEvent decoration_events = 1;
}

service DecorationService {
rpc NewDecoration(NewDecorationRequest) returns (NewDecorationResponse);
rpc Close(CloseRequest) returns (CloseResponse);
rpc OperateDecoration(OperateDecorationRequest) returns (OperateDecorationResponse);
rpc UpdateDecoration(UpdateDecorationRequest) returns (UpdateDecorationResponse);
rpc RequestView(ViewRequest) returns (ViewResponse);
rpc GetDecorationEvents(GetDecorationEventsRequest) returns (stream GetDecorationEventsResponse);
}
Loading
Loading