Skip to content

Commit 50f4211

Browse files
authored
UI: AppAPI 1.4: FileAction breaking change (#169)
Adjusted nc_app.ui.files_dropdown_menu.register to be in sync with nextcloud/app_api#141 Signed-off-by: Alexander Piskun <bigcat88@icloud.com>
1 parent 298589b commit 50f4211

File tree

4 files changed

+14
-33
lines changed

4 files changed

+14
-33
lines changed

nc_py_api/ex_app/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
from .defs import ApiScope, LogLvl
44
from .integration_fastapi import nc_app, set_handlers, talk_bot_app
55
from .misc import persistent_storage, verify_version
6-
from .ui.files_actions import UiActionFileInfo, UiFileActionHandlerInfo
6+
from .ui.files_actions import UiActionFileInfo
77
from .uvicorn_fastapi import run_app

nc_py_api/ex_app/ui/files_actions.py

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def order(self) -> int:
5252

5353
@property
5454
def icon(self) -> str:
55-
"""-no description-."""
55+
"""Relative to the ExApp url with icon or empty value to use the default one icon."""
5656
return self._raw_data["icon"] if self._raw_data["icon"] else ""
5757

5858
@property
@@ -119,21 +119,10 @@ def to_fs_node(self) -> FsNode:
119119
)
120120

121121

122-
class UiFileActionHandlerInfo(BaseModel):
123-
"""Action information Nextcloud sends to the External Application."""
124-
125-
actionName: str
126-
"""Name of the action, useful when App registers multiple actions for one handler."""
127-
actionHandler: str
128-
"""Callback url, which was called with this information."""
129-
actionFile: UiActionFileInfo
130-
"""Information about the file on which the action run."""
131-
132-
133122
class _UiFilesActionsAPI:
134123
"""API for the drop-down menu in Nextcloud **Files app**."""
135124

136-
_ep_suffix: str = "files/actions/menu"
125+
_ep_suffix: str = "ui/files-actions-menu"
137126

138127
def __init__(self, session: NcSessionApp):
139128
self._session = session
@@ -142,25 +131,21 @@ def register(self, name: str, display_name: str, callback_url: str, **kwargs) ->
142131
"""Registers the files a dropdown menu element."""
143132
require_capabilities("app_api", self._session.capabilities)
144133
params = {
145-
"fileActionMenuParams": {
146-
"name": name,
147-
"display_name": display_name,
148-
"mime": kwargs.get("mime", "file"),
149-
"permissions": kwargs.get("permissions", 31),
150-
"order": kwargs.get("order", 0),
151-
"icon": kwargs.get("icon", ""),
152-
"icon_class": kwargs.get("icon_class", "icon-app-api"),
153-
"action_handler": callback_url,
154-
},
134+
"name": name,
135+
"displayName": display_name,
136+
"actionHandler": callback_url,
137+
"icon": kwargs.get("icon", ""),
138+
"mime": kwargs.get("mime", "file"),
139+
"permissions": kwargs.get("permissions", 31),
140+
"order": kwargs.get("order", 0),
155141
}
156142
self._session.ocs(method="POST", path=f"{self._session.ae_url}/{self._ep_suffix}", json=params)
157143

158144
def unregister(self, name: str, not_fail=True) -> None:
159145
"""Removes files dropdown menu element."""
160146
require_capabilities("app_api", self._session.capabilities)
161-
params = {"fileActionMenuName": name}
162147
try:
163-
self._session.ocs(method="DELETE", path=f"{self._session.ae_url}/{self._ep_suffix}", json=params)
148+
self._session.ocs(method="DELETE", path=f"{self._session.ae_url}/{self._ep_suffix}", json={"name": name})
164149
except NextcloudExceptionNotFound as e:
165150
if not not_fail:
166151
raise e from None

nc_py_api/ex_app/ui/top_menu.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,7 @@ def icon(self) -> str:
3838
@property
3939
def admin_required(self) -> bool:
4040
"""Flag that determines whether the entry menu is displayed only for administrators."""
41-
return (
42-
bool(int(self._raw_data["admin_required"]))
43-
if isinstance(self._raw_data["admin_required"], str)
44-
else bool(self._raw_data["admin_required"])
45-
)
41+
return bool(int(self._raw_data["admin_required"]))
4642

4743
def __repr__(self):
4844
return f"<{self.__class__.__name__} name={self.name}, admin_required={self.admin_required}>"

tests/actual_tests/ui_files_actions_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@ def test_register_ui_file_actions(nc_app):
2323
assert result.permissions == 1
2424
assert result.order == 1
2525
assert result.icon == ""
26-
nc_app.ui.files_dropdown_menu.register("test_ui_action_any", "UI", "/ui_action2")
26+
nc_app.ui.files_dropdown_menu.register("test_ui_action_any", "UI", "/ui_action2", icon="/img/icon.svg")
2727
result = nc_app.ui.files_dropdown_menu.get_entry("test_ui_action_any")
2828
assert result.name == "test_ui_action_any"
2929
assert result.display_name == "UI"
3030
assert result.action_handler == "/ui_action2"
3131
assert result.mime == "file"
3232
assert result.permissions == 31
3333
assert result.order == 0
34-
assert result.icon == ""
34+
assert result.icon == "/img/icon.svg"
3535
nc_app.ui.files_dropdown_menu.unregister(result.name)
3636

3737

0 commit comments

Comments
 (0)