Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
altlinux-packages-bot
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kirill Unitsaev
altlinux-packages-bot
Commits
1f63413f
Verified
Commit
1f63413f
authored
Mar 10, 2026
by
Kirill Unitsaev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
task_search: add pagination with inline navigation buttons
parent
bc9c37a6
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
64 additions
and
6 deletions
+64
-6
tasks.py
src/data/keyboards/tasks.py
+26
-0
tasks.py
src/handlers/tasks.py
+38
-6
No files found.
src/data/keyboards/tasks.py
View file @
1f63413f
...
...
@@ -29,6 +29,32 @@ def tasks_nav_kb(maintainer: str, branch: str, offset: int, total: int, per_page
return
kb
.
get_markup
()
def
task_search_nav_kb
(
query
:
str
,
offset
:
int
,
total
:
int
,
per_page
:
int
=
20
):
if
total
<=
per_page
:
return
None
kb
=
InlineKeyboard
()
nav_buttons
=
[]
if
offset
>
0
:
nav_buttons
.
append
(
InlineButton
(
text
=
"← Назад"
,
callback_data
=
f
"task_search/{query}/{offset - per_page}"
,
))
if
offset
+
per_page
<
total
:
nav_buttons
.
append
(
InlineButton
(
text
=
"Вперёд →"
,
callback_data
=
f
"task_search/{query}/{offset + per_page}"
,
))
for
btn
in
nav_buttons
:
kb
.
add
(
btn
)
kb
.
row
()
return
kb
.
get_markup
()
def
task_page_kb
(
task
:
int
):
kb
=
InlineKeyboard
()
kb
.
add
(
...
...
src/handlers/tasks.py
View file @
1f63413f
...
...
@@ -97,6 +97,9 @@ async def tasks_page_handler(
await
cb
.
answer
()
SEARCH_PER_PAGE
=
20
@dp.message
(
Command
(
"task_search"
,
Argument
(
"args"
,
optional
=
True
)))
async
def
task_search_handler
(
m
:
Message
,
args
:
str
|
None
=
None
)
->
None
:
if
not
args
:
...
...
@@ -110,13 +113,42 @@ async def task_search_handler(m: Message, args: str | None = None) -> None:
if
not
tasks_data
.
tasks
:
return
await
m
.
answer
(
"Нет тасков."
)
msg
=
""
for
task
in
tasks_data
.
tasks
:
msg
+=
await
format_task_entry
(
task
)
tasks
=
tasks_data
.
tasks
total
=
len
(
tasks
)
page
=
tasks
[:
SEARCH_PER_PAGE
]
query
=
"+"
.
join
(
args
.
split
())
await
m
.
answer
(
await
format_tasks_page
(
page
,
0
,
total
),
reply_markup
=
tasks_keyboards
.
task_search_nav_kb
(
query
,
0
,
total
,
SEARCH_PER_PAGE
),
)
answer
=
(
await
m
.
answer
(
_bold
(
"Таски:
\n\n
"
)
+
msg
))
.
unwrap_or_none
()
if
answer
is
None
:
await
m
.
answer
(
"Слишком много результатов, уточните поиск."
)
@dp.callback_query
(
CallbackDataMarkup
(
"task_search/<query>/<offset:int>"
))
async
def
task_search_page_handler
(
cb
:
CallbackQuery
,
query
:
str
,
offset
:
int
,
)
->
None
:
args
=
query
.
split
(
"+"
)
try
:
tasks_data
=
await
altrepo
.
api
.
task
.
progress
.
find_tasks
(
input
=
args
)
except
DataNotFoundError
:
await
cb
.
answer
(
"Таски не найдены."
)
return
if
not
tasks_data
.
tasks
:
await
cb
.
answer
(
"Нет тасков."
)
return
tasks
=
tasks_data
.
tasks
total
=
len
(
tasks
)
page
=
tasks
[
offset
:
offset
+
SEARCH_PER_PAGE
]
await
cb
.
edit_text
(
await
format_tasks_page
(
page
,
offset
,
total
),
reply_markup
=
tasks_keyboards
.
task_search_nav_kb
(
query
,
offset
,
total
,
SEARCH_PER_PAGE
),
)
await
cb
.
answer
()
@dp.message
(
Command
(
"task"
,
Argument
(
"task"
,
[
int_validator
],
optional
=
True
)))
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment