Skip to content

Commit 3d076ec

Browse files
authored
Handle file redirect example (#2)
1 parent 2d7f227 commit 3d076ec

File tree

13 files changed

+15339
-18295
lines changed

13 files changed

+15339
-18295
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ run28:
3737
--info-xml https://raw.githubusercontent.com/cloud-py-api/nc_py_api/main/examples/as_app/ui_example/appinfo/info.xml
3838

3939
.PHONY: run29
40-
run28:
40+
run29:
4141
docker exec master-stable29-1 sudo -u www-data php occ app_api:app:unregister ui_example --silent --force || true
4242
docker exec master-stable29-1 sudo -u www-data php occ app_api:app:register ui_example --force-scopes \
4343
--info-xml https://raw.githubusercontent.com/cloud-py-api/nc_py_api/main/examples/as_app/ui_example/appinfo/info.xml

l10n/uk.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ OC.L10N.register(
4242
"Second radio" : "Другий перемикач",
4343
"Third radio" : "Третій перемикач",
4444
"Test menu" : "Тестове меню",
45+
"Test notification subject" : "Тестовий заголовок повідомлення",
46+
"Test notification message" : "Тестовий зміст повідомлення",
4547
"UI Example" : "Приклад UI",
4648
"Example of displaying UI elements with l10n support" : "Приклад відображення UI елементів з підтримкою перекладів",
4749
"UI & Translations skeleton of the Nextcloud application written in Python" : "Найпростіший шаблон Nextcloud застосунку написаного за допомогою Python",
@@ -58,6 +60,9 @@ OC.L10N.register(
5860
"File size: " : "Розмір файлу: ",
5961
"Select test file" : "Обрати тестовий файл",
6062
"Send test file to ExApp" : "Відправити тестовий файл до ExApp",
63+
"Selected from File Actions Menu:" : "Вибрані файли з контекстного меню",
64+
"File ids:" : "Обрані файли: ",
65+
"Files search info:" : "Інформація вибраних файлів: ",
6166
"ExApp UI Example" : "Приклад UI",
6267
"ExApp send file" : "ExApp відправити файл",
6368
"Initial value is correct" : "Базове значення правильне",

l10n/uk.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
"Second radio" : "Другий перемикач",
4141
"Third radio" : "Третій перемикач",
4242
"Test menu" : "Тестове меню",
43+
"Test notification subject" : "Тестовий заголовок повідомлення",
44+
"Test notification message" : "Тестовий зміст повідомлення",
4345
"UI Example" : "Приклад UI",
4446
"Example of displaying UI elements with l10n support" : "Приклад відображення UI елементів з підтримкою перекладів",
4547
"UI & Translations skeleton of the Nextcloud application written in Python" : "Найпростіший шаблон Nextcloud застосунку написаного за допомогою Python",
@@ -56,6 +58,9 @@
5658
"File size: " : "Розмір файлу: ",
5759
"Select test file" : "Обрати тестовий файл",
5860
"Send test file to ExApp" : "Відправити тестовий файл до ExApp",
61+
"Selected from File Actions Menu:" : "Вибрані файли з контекстного меню",
62+
"File ids:" : "Обрані файли: ",
63+
"Files search info:" : "Інформація вибраних файлів: ",
5964
"ExApp UI Example" : "Приклад UI",
6065
"ExApp send file" : "ExApp відправити файл",
6166
"Initial value is correct" : "Базове значення правильне",

lib/main.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,10 @@ def enabled_handler(enabled: bool, nc: NextcloudApp) -> str:
198198
)
199199
nc.ui.resources.set_script("top_menu", "first_menu", "js/ui_example-main")
200200
nc.ui.top_menu.register("first_menu", "UI example", "img/app.svg")
201-
nc.ui.files_dropdown_menu.register("test_menu", _("Test menu"), "/test_menu", mime="image/jpeg", icon="img/app-dark.svg")
201+
nc.ui.files_dropdown_menu.register("test_menu", _("Test menu"), "/test_menu", mime="image/jpeg",
202+
icon="img/app-dark.svg")
203+
nc.ui.files_dropdown_menu.register_ex("test_redirect", _("Test redirect"), "/test_redirect", mime="image/jpeg",
204+
icon="img/app-dark.svg")
202205
nc.occ_commands.register("ui_example:ping", "/occ_ping")
203206
nc.occ_commands.register(
204207
"ui_example:setup",
@@ -231,7 +234,6 @@ def enabled_handler(enabled: bool, nc: NextcloudApp) -> str:
231234
],
232235
)
233236

234-
235237
if nc.srv_version["major"] >= 29:
236238
nc.ui.settings.register_form(SETTINGS_EXAMPLE)
237239
else:
@@ -241,6 +243,7 @@ def enabled_handler(enabled: bool, nc: NextcloudApp) -> str:
241243
nc.ui.resources.delete_script("top_menu", "first_menu", "js/ui_example-main")
242244
nc.ui.top_menu.unregister("first_menu")
243245
nc.ui.files_dropdown_menu.unregister("test_menu")
246+
nc.ui.files_dropdown_menu.unregister("test_redirect")
244247
nc.occ_commands.unregister("ui_example:ping")
245248
nc.occ_commands.unregister("ui_example:setup")
246249
nc.occ_commands.unregister("ui_example:stream")
@@ -274,6 +277,22 @@ async def test_menu_handler(
274277
nc.notifications.create(_('Test notification subject'), _("Test notification message"))
275278
return responses.Response()
276279

280+
class NodesPayload(BaseModel):
281+
files: list[UiActionFileInfo]
282+
283+
284+
@APP.post("/test_redirect")
285+
async def test_menu_handler(
286+
files: NodesPayload,
287+
nc: Annotated[NextcloudApp, Depends(nc_app)],
288+
accept_language: Annotated[str | None, Header()] = None
289+
):
290+
print(f'Files: {files}')
291+
print(f'Accept-Language: {accept_language}')
292+
print(_("Test redirect"))
293+
nc.notifications.create(_('Test redirect notification subject'), _("Test redirect notification message"))
294+
return responses.JSONResponse(content={"redirect_handler": "first_menu/second_page"})
295+
277296

278297
class OccPayload(BaseModel):
279298
arguments: dict | None = None
483 Bytes
Binary file not shown.

locale/uk/LC_MESSAGES/ui_example.po

Lines changed: 78 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ msgid ""
77
msgstr ""
88
"Project-Id-Version: Nextcloud 3.14159\n"
99
"Report-Msgid-Bugs-To: translations\\@example.com\n"
10-
"POT-Creation-Date: 2024-02-20 15:37+0200\n"
11-
"PO-Revision-Date: 2024-02-20 18:37+0200\n"
10+
"POT-Creation-Date: 2024-05-02 19:38+0300\n"
11+
"PO-Revision-Date: 2024-05-02 19:44+0300\n"
1212
"Last-Translator: \n"
1313
"Language-Team: \n"
1414
"Language: uk_UA\n"
@@ -19,177 +19,188 @@ msgstr ""
1919
"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
2020
"X-Generator: Poedit 3.4\n"
2121

22-
#: /home/andrey/coding/ui_example/lib/main.py:41
22+
#: /home/andrey/coding/ui_example/lib/main.py:38
23+
#: /home/andrey/coding/ui_example/lib/main.py:49
24+
#: /home/andrey/coding/ui_example/lib/main.py:57
2325
msgid "UI example"
2426
msgstr "Приклад UI"
2527

26-
#: /home/andrey/coding/ui_example/lib/main.py:52
28+
#: /home/andrey/coding/ui_example/lib/main.py:69
2729
msgid "Example of declarative settings"
2830
msgstr "Приклад декларативних налаштувань"
2931

30-
#: /home/andrey/coding/ui_example/lib/main.py:53
32+
#: /home/andrey/coding/ui_example/lib/main.py:70
3133
msgid "These fields are rendered dynamically from declarative schema"
3234
msgstr "Ці поля сгенеровані динамічно з декларавтиної схеми"
3335

34-
#: /home/andrey/coding/ui_example/lib/main.py:58
35-
#: /home/andrey/coding/ui_example/lib/main.py:129
36-
#: /home/andrey/coding/ui_example/lib/main.py:132
37-
#: /home/andrey/coding/ui_example/lib/main.py:138
38-
#: /home/andrey/coding/ui_example/lib/main.py:141
36+
#: /home/andrey/coding/ui_example/lib/main.py:75
37+
#: /home/andrey/coding/ui_example/lib/main.py:146
38+
#: /home/andrey/coding/ui_example/lib/main.py:149
39+
#: /home/andrey/coding/ui_example/lib/main.py:155
40+
#: /home/andrey/coding/ui_example/lib/main.py:158
3941
msgid "Select some option setting"
4042
msgstr "Виберіть якусь опцію"
4143

42-
#: /home/andrey/coding/ui_example/lib/main.py:61
44+
#: /home/andrey/coding/ui_example/lib/main.py:78
4345
msgid "Select some multiple options"
4446
msgstr "Виберіть якісь множинні опції"
4547

46-
#: /home/andrey/coding/ui_example/lib/main.py:66
47-
#: /home/andrey/coding/ui_example/lib/main.py:70
48+
#: /home/andrey/coding/ui_example/lib/main.py:83
49+
#: /home/andrey/coding/ui_example/lib/main.py:87
4850
msgid "Choose init status check background job interval"
4951
msgstr "Виберіть інтервал фонової задачі перевірки статусу"
5052

51-
#: /home/andrey/coding/ui_example/lib/main.py:67
53+
#: /home/andrey/coding/ui_example/lib/main.py:84
5254
msgid "How often ExApp should check for initialization status"
5355
msgstr "Як часто виконувати перевірку ініціалізації"
5456

55-
#: /home/andrey/coding/ui_example/lib/main.py:72
57+
#: /home/andrey/coding/ui_example/lib/main.py:89
5658
msgid "Each 40 minutes"
5759
msgstr "Кожні 40 хвилин"
5860

59-
#: /home/andrey/coding/ui_example/lib/main.py:73
61+
#: /home/andrey/coding/ui_example/lib/main.py:90
6062
msgid "Each 60 minutes"
6163
msgstr "Кожні 60 хвилин"
6264

63-
#: /home/andrey/coding/ui_example/lib/main.py:74
65+
#: /home/andrey/coding/ui_example/lib/main.py:91
6466
msgid "Each 120 minutes"
6567
msgstr "Кожні 120 хвилин"
6668

67-
#: /home/andrey/coding/ui_example/lib/main.py:75
69+
#: /home/andrey/coding/ui_example/lib/main.py:92
6870
msgid "Each day"
6971
msgstr "Кожен день"
7072

71-
#: /home/andrey/coding/ui_example/lib/main.py:80
73+
#: /home/andrey/coding/ui_example/lib/main.py:97
7274
msgid "Default text field"
7375
msgstr "Звичайне текстове поле"
7476

75-
#: /home/andrey/coding/ui_example/lib/main.py:81
77+
#: /home/andrey/coding/ui_example/lib/main.py:98
7678
msgid "Set some simple text setting"
7779
msgstr "Встановити простий текстовий параметр"
7880

79-
#: /home/andrey/coding/ui_example/lib/main.py:84
81+
#: /home/andrey/coding/ui_example/lib/main.py:101
8082
msgid "Enter text setting"
8183
msgstr "Параметр email"
8284

83-
#: /home/andrey/coding/ui_example/lib/main.py:88
85+
#: /home/andrey/coding/ui_example/lib/main.py:105
8486
msgid "Email field"
8587
msgstr "Поле email"
8688

87-
#: /home/andrey/coding/ui_example/lib/main.py:89
89+
#: /home/andrey/coding/ui_example/lib/main.py:106
8890
msgid "Set email config"
8991
msgstr "Встановіть email конфугурацію"
9092

91-
#: /home/andrey/coding/ui_example/lib/main.py:92
93+
#: /home/andrey/coding/ui_example/lib/main.py:109
9294
msgid "Enter email"
9395
msgstr "Введіть email"
9496

95-
#: /home/andrey/coding/ui_example/lib/main.py:96
97+
#: /home/andrey/coding/ui_example/lib/main.py:113
9698
msgid "Tel field"
9799
msgstr "Поле телефону"
98100

99-
#: /home/andrey/coding/ui_example/lib/main.py:97
101+
#: /home/andrey/coding/ui_example/lib/main.py:114
100102
msgid "Set tel config"
101103
msgstr "Вкажіть конфігурації телефону"
102104

103-
#: /home/andrey/coding/ui_example/lib/main.py:100
105+
#: /home/andrey/coding/ui_example/lib/main.py:117
104106
msgid "Enter your tel"
105107
msgstr "Введіть ваш телефон"
106108

107-
#: /home/andrey/coding/ui_example/lib/main.py:104
109+
#: /home/andrey/coding/ui_example/lib/main.py:121
108110
msgid "Url (website) field"
109111
msgstr "Посилання на веб-сайт"
110112

111-
#: /home/andrey/coding/ui_example/lib/main.py:105
113+
#: /home/andrey/coding/ui_example/lib/main.py:122
112114
msgid "Set url config"
113115
msgstr "Встановіть конфігурацію посилання"
114116

115-
#: /home/andrey/coding/ui_example/lib/main.py:108
117+
#: /home/andrey/coding/ui_example/lib/main.py:125
116118
msgid "Enter url"
117119
msgstr "Введіть посилання"
118120

119-
#: /home/andrey/coding/ui_example/lib/main.py:112
121+
#: /home/andrey/coding/ui_example/lib/main.py:129
120122
msgid "Number field"
121123
msgstr "Введіть число"
122124

123-
#: /home/andrey/coding/ui_example/lib/main.py:113
125+
#: /home/andrey/coding/ui_example/lib/main.py:130
124126
msgid "Set number config"
125127
msgstr "Опція число"
126128

127-
#: /home/andrey/coding/ui_example/lib/main.py:116
129+
#: /home/andrey/coding/ui_example/lib/main.py:133
128130
msgid "Enter number value"
129131
msgstr "Введіть числову конфігурацію"
130132

131-
#: /home/andrey/coding/ui_example/lib/main.py:120
133+
#: /home/andrey/coding/ui_example/lib/main.py:137
132134
msgid "Password"
133135
msgstr "Пароль"
134136

135-
#: /home/andrey/coding/ui_example/lib/main.py:121
137+
#: /home/andrey/coding/ui_example/lib/main.py:138
136138
msgid "Set some secure value setting"
137139
msgstr "Встановіть захищене значення параметру"
138140

139-
#: /home/andrey/coding/ui_example/lib/main.py:124
141+
#: /home/andrey/coding/ui_example/lib/main.py:141
140142
msgid "Set secure value"
141143
msgstr "Встановіть захищене значення"
142144

143-
#: /home/andrey/coding/ui_example/lib/main.py:128
144-
#: /home/andrey/coding/ui_example/lib/main.py:137
145+
#: /home/andrey/coding/ui_example/lib/main.py:145
146+
#: /home/andrey/coding/ui_example/lib/main.py:154
145147
msgid "Selection"
146148
msgstr "Випадаючий список"
147149

148-
#: /home/andrey/coding/ui_example/lib/main.py:146
150+
#: /home/andrey/coding/ui_example/lib/main.py:163
149151
msgid "Toggle something"
150152
msgstr "Перемикач"
151153

152-
#: /home/andrey/coding/ui_example/lib/main.py:147
153-
#: /home/andrey/coding/ui_example/lib/main.py:155
154+
#: /home/andrey/coding/ui_example/lib/main.py:164
155+
#: /home/andrey/coding/ui_example/lib/main.py:172
154156
msgid "Select checkbox option setting"
155157
msgstr "Виберіть чекбокс"
156158

157-
#: /home/andrey/coding/ui_example/lib/main.py:150
159+
#: /home/andrey/coding/ui_example/lib/main.py:167
158160
msgid "Verify something if enabled"
159161
msgstr "Верифікувати чи щось увімкнено"
160162

161-
#: /home/andrey/coding/ui_example/lib/main.py:154
163+
#: /home/andrey/coding/ui_example/lib/main.py:171
162164
msgid "Multiple checkbox toggles, describing one setting"
163165
msgstr "Множинні чекбокс перемикачі, відповідаючих одному параметру"
164166

165-
#: /home/andrey/coding/ui_example/lib/main.py:162
167+
#: /home/andrey/coding/ui_example/lib/main.py:179
166168
msgid "Radio toggles, describing one setting like single select"
167169
msgstr "Радіо перемикачі, відповідаючих одному параметру як одиночний select"
168170

169-
#: /home/andrey/coding/ui_example/lib/main.py:163
171+
#: /home/andrey/coding/ui_example/lib/main.py:180
170172
msgid "Select radio option setting"
171173
msgstr "Налаштування одиночний перемикач"
172174

173-
#: /home/andrey/coding/ui_example/lib/main.py:165
175+
#: /home/andrey/coding/ui_example/lib/main.py:182
174176
msgid "Select single toggle"
175177
msgstr "Одиночний перемикач"
176178

177-
#: /home/andrey/coding/ui_example/lib/main.py:167
179+
#: /home/andrey/coding/ui_example/lib/main.py:184
178180
msgid "First radio"
179181
msgstr "Перший перемикач"
180182

181-
#: /home/andrey/coding/ui_example/lib/main.py:167
183+
#: /home/andrey/coding/ui_example/lib/main.py:184
182184
msgid "Second radio"
183185
msgstr "Другий перемикач"
184186

185-
#: /home/andrey/coding/ui_example/lib/main.py:167
187+
#: /home/andrey/coding/ui_example/lib/main.py:184
186188
msgid "Third radio"
187189
msgstr "Третій перемикач"
188190

189-
#: /home/andrey/coding/ui_example/lib/main.py:184
191+
#: /home/andrey/coding/ui_example/lib/main.py:201
192+
#: /home/andrey/coding/ui_example/lib/main.py:272
190193
msgid "Test menu"
191194
msgstr "Тестове меню"
192195

196+
#: /home/andrey/coding/ui_example/lib/main.py:274
197+
msgid "Test notification subject"
198+
msgstr "Тестовий заголовок повідомлення"
199+
200+
#: /home/andrey/coding/ui_example/lib/main.py:274
201+
msgid "Test notification message"
202+
msgstr "Тестовий зміст повідомлення"
203+
193204
#: /home/andrey/coding/ui_example/specialAppInfoFakeDummyForL10nScript.php:2
194205
msgid "UI Example"
195206
msgstr "Приклад UI"
@@ -264,9 +275,9 @@ msgid "File size: "
264275
msgstr "Розмір файлу: "
265276

266277
#. TRANSLATORS src/views/FilePicker.vue:14
267-
#. TRANSLATORS src/views/FilePicker.vue:62
278+
#. TRANSLATORS src/views/FilePicker.vue:81
268279
#: /home/andrey/coding/ui_example/specialVueFakeDummyForL10nScript.js:24
269-
#: /home/andrey/coding/ui_example/specialVueFakeDummyForL10nScript.js:28
280+
#: /home/andrey/coding/ui_example/specialVueFakeDummyForL10nScript.js:34
270281
msgid "Select test file"
271282
msgstr "Обрати тестовий файл"
272283

@@ -275,6 +286,21 @@ msgstr "Обрати тестовий файл"
275286
msgid "Send test file to ExApp"
276287
msgstr "Відправити тестовий файл до ExApp"
277288

289+
#. TRANSLATORS src/views/FilePicker.vue:21
290+
#: /home/andrey/coding/ui_example/specialVueFakeDummyForL10nScript.js:28
291+
msgid "Selected from File Actions Menu:"
292+
msgstr "Вибрані файли з контекстного меню"
293+
294+
#. TRANSLATORS src/views/FilePicker.vue:22
295+
#: /home/andrey/coding/ui_example/specialVueFakeDummyForL10nScript.js:30
296+
msgid "File ids:"
297+
msgstr "Обрані файли: "
298+
299+
#. TRANSLATORS src/views/FilePicker.vue:23
300+
#: /home/andrey/coding/ui_example/specialVueFakeDummyForL10nScript.js:32
301+
msgid "Files search info:"
302+
msgstr "Інформація вибраних файлів: "
303+
278304
#: /home/andrey/coding/ui_example/src/router/index.js:30
279305
msgid "ExApp UI Example"
280306
msgstr "Приклад UI"

0 commit comments

Comments
 (0)