mirror of
https://github.com/DrizzleTime/Foxel.git
synced 2026-09-02 14:07:20 +08:00
* feat: paginate public share directories * feat: add cursor pagination to public share listings Unify share and VFS directory payloads, pass cursor through the share API, and add prev/next controls plus tests for cursor-mode adapters. --------- Co-authored-by: shiyu <im@shiyu.dev>
59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
from api.response import dir_listing
|
|
|
|
from .common import VirtualFSCommonMixin
|
|
from .resolver import VirtualFSResolverMixin
|
|
from .listing import VirtualFSListingMixin
|
|
from .file_ops import VirtualFSFileOpsMixin
|
|
from .transfer import VirtualFSTransferMixin
|
|
from .processing import VirtualFSProcessingMixin
|
|
from .temp_link import VirtualFSTempLinkMixin
|
|
from .routes import VirtualFSRouteMixin
|
|
|
|
|
|
class VirtualFSService(
|
|
VirtualFSRouteMixin,
|
|
VirtualFSTempLinkMixin,
|
|
VirtualFSProcessingMixin,
|
|
VirtualFSTransferMixin,
|
|
VirtualFSFileOpsMixin,
|
|
VirtualFSListingMixin,
|
|
VirtualFSResolverMixin,
|
|
VirtualFSCommonMixin,
|
|
):
|
|
@classmethod
|
|
async def list_directory(
|
|
cls,
|
|
path: str,
|
|
page_num: int = 1,
|
|
page_size: int = 50,
|
|
sort_by: str = "name",
|
|
sort_order: str = "asc",
|
|
cursor: str | None = None,
|
|
):
|
|
"""列出目录内容"""
|
|
return await cls.list_virtual_dir(path, page_num, page_size, sort_by, sort_order, cursor)
|
|
|
|
@classmethod
|
|
async def list_directory_with_permission(
|
|
cls,
|
|
path: str,
|
|
user_id: int,
|
|
page_num: int = 1,
|
|
page_size: int = 50,
|
|
sort_by: str = "name",
|
|
sort_order: str = "asc",
|
|
cursor: str | None = None,
|
|
):
|
|
"""列出目录内容(带权限过滤)"""
|
|
full_path = cls._normalize_path(path).rstrip("/") or "/"
|
|
result = await cls.list_virtual_dir_with_permission(
|
|
full_path, user_id, page_num, page_size, sort_by, sort_order, cursor
|
|
)
|
|
return dir_listing(
|
|
result,
|
|
path=full_path,
|
|
page_num=page_num,
|
|
page_size=page_size,
|
|
cursor=cursor,
|
|
)
|