Showing preview only (2,287K chars total). Download the full file or copy to clipboard to get everything.
Repository: liupan1890/aliyunpan
Branch: v3
Commit: b3108ebbdda5
Files: 250
Total size: 2.1 MB
Directory structure:
gitextract_g6ltbs2_/
├── .gitignore
├── .prettierrc
├── README.md
├── adrive sdk/
│ ├── ReadMe.md
│ ├── account.md
│ ├── aims.md
│ ├── album.md
│ ├── archive.md
│ ├── book.md
│ ├── contact.md
│ ├── drive.md
│ ├── file.md
│ ├── filedir.md
│ ├── fileupload.md
│ ├── image.md
│ ├── member.md
│ ├── note.md
│ ├── offline.md
│ ├── recyclebin.md
│ ├── reddot.md
│ ├── sbox.md
│ ├── search.md
│ ├── sfiia.md
│ ├── share.md
│ ├── timeline.md
│ ├── token.md
│ ├── user.md
│ └── video.md
├── changelog.txt
├── crx/
│ ├── devtools.html
│ ├── devtools.js
│ └── manifest.json
├── doc/
│ ├── info.md
│ ├── v2.8.x 使用PotPlayer.md
│ └── v2.8.x 阿里云盘小白羊版和官方性能测试.md
├── electron-builder.json
├── nano-staged.mjs
├── package.json
├── public/
│ ├── comlink.js
│ ├── iconfont.css
│ ├── lang/
│ │ ├── en.js
│ │ └── zh-CN.js
│ ├── main.html
│ ├── main2.html
│ ├── prism-vsc-dark-plus.css
│ ├── prism.js
│ ├── sha1filework.js
│ ├── silvermine-videojs-quality-selector.css
│ ├── wasm.wasm
│ └── wasm_exec.js
├── src/
│ ├── main/
│ │ ├── index.ts
│ │ ├── mainfile.ts
│ │ └── window.ts
│ ├── preload/
│ │ ├── index.ts
│ │ └── preload-env.d.ts
│ └── renderer/
│ ├── App.vue
│ ├── aliapi/
│ │ ├── alihttp.ts
│ │ ├── alimodels.ts
│ │ ├── archive.ts
│ │ ├── batch.ts
│ │ ├── dirfilelist.ts
│ │ ├── dirlist.ts
│ │ ├── file.ts
│ │ ├── filecmd.ts
│ │ ├── fileicon.ts
│ │ ├── filewalk.ts
│ │ ├── following.ts
│ │ ├── models.ts
│ │ ├── server.tsx
│ │ ├── share.ts
│ │ ├── sharelist.ts
│ │ ├── trash.ts
│ │ ├── upload.ts
│ │ ├── uploaddisk.ts
│ │ ├── uploadhash.ts
│ │ ├── uploadhashpool.ts
│ │ ├── uploadmem.ts
│ │ ├── user.ts
│ │ └── utils.ts
│ ├── assets/
│ │ ├── antd.css
│ │ ├── fileitem.css
│ │ └── global.css
│ ├── down/
│ │ ├── DownDowned.vue
│ │ ├── DownDowning.vue
│ │ ├── DownM3U8.vue
│ │ ├── DownSync.vue
│ │ ├── DownUploaded.vue
│ │ ├── DownUploading.vue
│ │ ├── downdal.ts
│ │ ├── downingstore.ts
│ │ ├── downmenu.ts
│ │ ├── index.vue
│ │ ├── uploadedstore.ts
│ │ └── uploadingstore.ts
│ ├── env.d.ts
│ ├── global.d.ts
│ ├── layout/
│ │ ├── MyLoading.vue
│ │ ├── MyModal.vue
│ │ ├── MySplit.vue
│ │ ├── MySwitch.vue
│ │ ├── MySwitchTab.vue
│ │ ├── MyTags.vue
│ │ ├── PageCode.vue
│ │ ├── PageHelp.vue
│ │ ├── PageImage.vue
│ │ ├── PageLoading.vue
│ │ ├── PageMain.vue
│ │ ├── PageOffice.vue
│ │ ├── PageVideo.vue
│ │ ├── PageVideoXBT.vue
│ │ ├── PageWorker.vue
│ │ └── pagemain.ts
│ ├── main.ts
│ ├── pan/
│ │ ├── PanLeft.vue
│ │ ├── PanRight.vue
│ │ ├── index.vue
│ │ ├── menus/
│ │ │ ├── DirLeftMenu.vue
│ │ │ ├── DirTopPath.vue
│ │ │ ├── FileRightMenu.vue
│ │ │ ├── FileTopbtn.vue
│ │ │ ├── PanTopbtn.vue
│ │ │ ├── TrashRightMenu.vue
│ │ │ └── TrashTopbtn.vue
│ │ ├── pandal.ts
│ │ ├── panfilestore.ts
│ │ ├── pantreestore.ts
│ │ └── topbtns/
│ │ ├── AlphaModal.vue
│ │ ├── ArchiveModal.vue
│ │ ├── ArchivePasswordModal.vue
│ │ ├── CopyFileTreeModal.vue
│ │ ├── CreatNewDirModal.vue
│ │ ├── CreatNewDirMultiModal.vue
│ │ ├── CreatNewFileModal.vue
│ │ ├── CreatNewShareLinkModal.vue
│ │ ├── DLNAPlayerModal.vue
│ │ ├── DaoRuShareLinkModal.vue
│ │ ├── DaoRuShareLinkMultiModal.vue
│ │ ├── DownloadModal.vue
│ │ ├── M3U8DownloadModal.vue
│ │ ├── RenameModal.vue
│ │ ├── RenameMultiModal.vue
│ │ ├── SearchPanModal.vue
│ │ ├── SelectPanDirModal.vue
│ │ ├── ShuXingModal.vue
│ │ ├── ShuXingMultiModal.vue
│ │ ├── UploadModal.vue
│ │ ├── renamemulti.ts
│ │ └── topbtn.ts
│ ├── pic/
│ │ ├── PicLeft.vue
│ │ ├── PicRight.vue
│ │ └── index.vue
│ ├── rss/
│ │ ├── ScanDAL.ts
│ │ ├── appsame/
│ │ │ ├── AppSame.vue
│ │ │ └── same.ts
│ │ ├── index.vue
│ │ ├── rssdrivecopy/
│ │ │ ├── RssDriveCopy.vue
│ │ │ └── drivecopy.ts
│ │ ├── rssjiami/
│ │ │ ├── RssJiaMi.vue
│ │ │ └── jiami.ts
│ │ ├── rssrename/
│ │ │ └── RssRename.vue
│ │ ├── rssscanclean/
│ │ │ ├── RssScanClean.vue
│ │ │ └── ScanClean.ts
│ │ ├── rssscanenmpty/
│ │ │ ├── RssScanEnmpty.vue
│ │ │ └── scanenmpty.ts
│ │ ├── rssscanpunish/
│ │ │ ├── RssScanPunish.vue
│ │ │ └── scanpunish.ts
│ │ ├── rssscansame/
│ │ │ ├── RssScanSame.vue
│ │ │ └── scansame.ts
│ │ ├── rssusercopy/
│ │ │ ├── RssUserCopy.vue
│ │ │ └── usercopy.ts
│ │ └── rssxima/
│ │ ├── RssXiMa.vue
│ │ └── xima.ts
│ ├── setting/
│ │ ├── SettingDebug.vue
│ │ ├── SettingDown.vue
│ │ ├── SettingLog.vue
│ │ ├── SettingPan.vue
│ │ ├── SettingPlay.vue
│ │ ├── SettingProxy.vue
│ │ ├── SettingUI.vue
│ │ ├── SettingUpload.vue
│ │ ├── ShutDown.vue
│ │ ├── index.vue
│ │ └── settingstore.ts
│ ├── share/
│ │ ├── following/
│ │ │ ├── FollowingDAL.ts
│ │ │ ├── MyFollowingRight.vue
│ │ │ ├── MyFollowingStore.ts
│ │ │ ├── OtherFollowingRight.vue
│ │ │ └── OtherFollowingStore.ts
│ │ ├── index.vue
│ │ └── share/
│ │ ├── EditShareLinkModal.vue
│ │ ├── MyShareRight.vue
│ │ ├── MyShareStore.ts
│ │ ├── OtherShareRight.vue
│ │ ├── OtherShareStore.ts
│ │ ├── ShareDAL.ts
│ │ ├── ShareSiteRight.vue
│ │ └── ShowShareLinkModal.vue
│ ├── store/
│ │ ├── appstore.ts
│ │ ├── footstore.ts
│ │ ├── index.ts
│ │ ├── keyboardstore.ts
│ │ ├── logstore.ts
│ │ ├── modalstore.ts
│ │ ├── protobuf.ts.bak
│ │ ├── serverstore.ts
│ │ ├── treestore.ts
│ │ └── winstore.ts
│ ├── transfer/
│ │ ├── uploaddal.ts
│ │ ├── uploadingdal.ts
│ │ └── uploadingdata.ts
│ ├── user/
│ │ ├── UserInfo.vue
│ │ ├── UserLogin.vue
│ │ ├── UserSpaceModal.vue
│ │ ├── userdal.ts
│ │ └── userstore.ts
│ ├── utils/
│ │ ├── antdtree.ts
│ │ ├── appcache.ts
│ │ ├── config.ts
│ │ ├── db.ts
│ │ ├── dbcache.ts
│ │ ├── dbdown.ts
│ │ ├── dbupload.ts
│ │ ├── debounce.ts
│ │ ├── debuglog.ts
│ │ ├── electronhelper.ts
│ │ ├── filehelper.ts
│ │ ├── filenameorder.ts
│ │ ├── foot.ts
│ │ ├── format.ts
│ │ ├── idhelper.ts
│ │ ├── keyboardhelper.ts
│ │ ├── levemap.ts
│ │ ├── message.ts
│ │ ├── modal.ts
│ │ ├── openfile.ts
│ │ ├── selecthelper.ts
│ │ ├── sha1workerpool.ts
│ │ ├── shareurl.ts
│ │ ├── utils.ts
│ │ └── worker.ts
│ └── workerpage/
│ ├── uidownload.ts
│ ├── uiupload.ts
│ ├── uploader.ts
│ └── workercmd.ts
├── tsconfig.json
├── types.d.ts
├── v2.10.19性能测试.md
├── v2.11.11自定义播放软件.md
├── 开源代码统计.md
└── 源码开发打包帮助.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
node_modules
.DS_Store
dist
dist-ssr
*.local
.debug.env
tmp
**/.tmp
release
================================================
FILE: .prettierrc
================================================
{
"singleQuote": true,
"printWidth": 260,
"semi": false,
"quoteProps": "as-needed",
"jsxSingleQuote": false,
"trailingComma": "none",
"bracketSpacing": true,
"jsxBracketSameLine": true,
"arrowParens": "always",
"requirePragma": false,
"insertPragma": false,
"wrapAttributes": false,
"sortAttributes": true,
"proseWrap": "preserve",
"htmlWhitespaceSensitivity": "css",
"endOfLine": "lf",
"overrides": [
{
"files": ".prettierrc",
"options": { "parser": "json" }
}
]
}
================================================
FILE: README.md
================================================
# 阿里云盘小白羊版
#### 项目说明
基于阿里云盘网页版开发的PC客户端,支持win7-11,macOS,linux
> **04.14:[v2.12.14版已发布](https://github.com/liupan1890/aliyunpan/issues/639),适配官网升级**
> **2022-01-02:在憋大招,耐心等待v3版**
<br />
v1.6.29:[https://wwe.lanzoui.com/b01npsg8h](https://wwe.lanzoui.com/b01npsg8h)
v2.12.14:[https://wwe.lanzoui.com/b01nqc4gd](https://wwe.lanzoui.com/b01nqc4gd)
MacOS:[https://www.macwk.com/soft/aliyun-drive-xiaobaiyang](https://www.macwk.com/soft/aliyun-drive-xiaobaiyang)
Mac版由macwk.com使用自有签名打包dmg,可以简单点击安装了(不需要输入终端命令),推荐下载此版本,已测MacOS10.12-11.4,兼容M1
<br />
已经发布在小众软件发现频道,大爱小众[meta.appinn.net](https://meta.appinn.net)
<br />
已发布了使用帮助文档 [https://www.yuque.com/liupan1890/xiaobaiyang](https://www.yuque.com/liupan1890/xiaobaiyang)
``````
2021年11月28日 已完成功能:
多账号登录、常用文件操作(新建文件夹、收藏、重命名、复制、移动、删除、详情、视频雪碧图)、
在线播放原始视频、在线播放转码视频、在线预览图片、在线预览文本、在线预览 word/excel/ppt/pdf、
连接到远程 Aria2 下载、上传文件、上传文件夹、批量改名、在线解压、回收站、收藏夹、
分享文件、导入阿里云分享链接、缩略图列表、网盘内文件搜索、视频文件洗码
等待完成的功能:
相册功能、网盘和相册间文件互相复制、文件同步盘、重复文件扫描、帐号间文件复制
``````
<br />
#

#
#### 为什么要用小白羊?
#### 一:因为更快
##### 上传和下载4.4万个json格式小文件(共24GB):
| 程序 | 总用时 | 用时基准 |
| --- | ---: | ---: |
| 上传&小白羊版 v2.10 | 24分钟 | :zap:58% |
| 上传&PC客户端 v2.2.6 | 41分钟 | 100% |
| ... | | | | |
| 下载&小白羊版 v2.10 | 25分钟 | :zap:42% |
| 下载&PC客户端 v2.2.6 | 59分钟 | 100% |
##### 上传和下载33个大文件(共90GB):
| 程序 | 总用时 | 用时基准 |
| --- | ---: | ---: |
| 上传&小白羊版 v2.10 | 1分10秒 | :zap:44% |
| 上传&PC客户端 v2.2.6 | 2分40秒 | 100% |
| ... | | | | |
| 下载&小白羊版 v2.10 | 38分钟 | :zap:52% |
| 下载&PC客户端 v2.2.6 | 72分钟 | 100% |
<br/>
详情参阅 :[v2.10.19性能测试](https://github.com/liupan1890/aliyunpan/blob/main/v2.10.19%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95.md) 的性能测试文档
#### 二:因为更好
小白羊支持同时登录多个账号管理
小白羊特有文件夹树,可以快速方便的操作
小白羊支持直接在线播放网盘里的各种格式的视频并且是高清原画,支持外挂字幕/音轨/播放速度调整,比官方的格式更多更清晰
小白羊可以显示文件夹体积,可以文件夹和文件混合排序(文件名/体积/时间),并且文件名排序时更准确!
小白羊可以通过远程Aria2功能把文件直接下载到远程的VPS/NAS上
小白羊可以批量的对 大量文件/多层嵌套的文件夹 一键重命名
小白羊可以快速复制文件,可以直接预览视频的雪碧图,可以直接删除文件
小白羊支持数万文件夹和数万文件的管理,支持一次性列出文件夹里包含的全部文件
小白羊支持单次上传/下载 一百万 量级的文件/文件夹
小白羊仍在努力开发新功能,让大家使用起来更方便!
#
#### 常见问题请参阅帮助文档
#### 特别感谢 @jkqxl @iD2073 @ybbluesky 等为小白羊提供了大量的优化建议
================================================
FILE: adrive sdk/ReadMe.md
================================================
### 阿里云盘接口
> 2022-03整理的阿里云盘SDK接口数据
仅用来记录官方提供的接口参数,共整理了144个,比较全了,与编程语言无关,方便大家据此开发
================================================
FILE: adrive sdk/account.md
================================================
#### 刷新 token
POST: `https://auth.aliyundrive.com/v2/account/token`
```json
{ "grant_type": "refresh_token", "app_id": "pJZInNHN2dZWk8qg", "refresh_token": "c65bf6d104ac510885c0124d74c4a099" }
```
Response:
```json
{
"default_sbox_drive_id": "9600002",
"role": "user",
"device_id": "2909000000004f01aa28264bfc30e4ed",
"user_name": "151***111",
"need_link": false,
"expire_time": "2022-03-21T06:33:21Z",
"pin_setup": true,
"need_rp_verify": false,
"avatar": "https://ccp-bj29-bj-1592982087.oss-cn-beijing.aliyuncs.com/2GhCur3G%2F...",
"user_data": {
"DingDingRobotUrl": "https://oapi.dingtalk.com/robot/send?access_token=0b4a936d0e...",
"EncourageDesc": "内测期间有效反馈前10名用户将获得终身免费会员",
"FeedBackSwitch": true,
"FollowingDesc": "34848372",
"back_up_config": {
"手机备份": { "folder_id": "605c0c29b7acf78b6ee34bf095594f7654e57d68", "photo_folder_id": "605c0c299af37539f3d34879b2f0d1c5543f27d5", "sub_folder": {}, "video_folder_id": "605c0c29e520154c22644bed904b76b25ced317a" }
},
"ding_ding_robot_url": "https://oapi.dingtalk.com/robot/send?access_token=0b4a936d0e...",
"encourage_desc": "内测期间有效反馈前10名用户将获得终身免费会员",
"feed_back_switch": true,
"following_desc": "34848372"
},
"token_type": "Bearer",
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..................",
"default_drive_id": "9600002",
"domain_id": "bj29",
"refresh_token": "b2d9c244d8a24df38aa1a5dec59e2a92",
"is_first_login": false,
"user_id": "9400000000bc480bbcbbb1e074f55a7f",
"nick_name": "myname",
"exist_link": [],
"state": "",
"expires_in": 7200,
"status": "enabled"
}
```
#### 退出登录
POST: `https://auth.aliyundrive.com/v2/account/revoke`
```json
```
Response:
```json
```
#### 检查账号是否存在 x
POST: `https://auth.aliyundrive.com/v2/account/mobile/check_exist`
```json
{ "app_id": "pJZInNHN2dZWk8qg", "phone_number": "151***111", "phone_region": "86" }
```
Response:
```json
{ "is_exist": true }
```
================================================
FILE: adrive sdk/aims.md
================================================
#### 探索-列出图片分类最多的前几个分类
POST: `https://api.aliyundrive.com/v2/aims/list_hints`
```json
{ "user_id": "9400000000bc480bbcbbb1e074f55a7f", "limit": 5 }
```
Response:
```json
["白色", "鞋", "服装", "颜色", "黑色"]
```
#### 探索-列出图片分类(对应的是 label)
POST: `https://api.aliyundrive.com/v2/aims/list_tags`
```json
{ "all": false, "image_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg", "video_thumbnail_process": "video/snapshot,t_7000,f_jpg,w_800,h_600,ar_auto,m_fast", "drive_id": "9600002" }
```
Response:
```json
{
"tags": [
{
"count": 22,
"cover_file_category": "",
"cover_file_id": "6061000000001af7c3034e3590ea7d5a50f58015",
"cover_overall_score": 0.7444725632667542,
"cover_tag_confidence": 0.9806441068649292,
"cover_url": "https://ccp-bj29-bj-1592982087.oss-cn-beijing.aliyuncs.com/HCBUxQOF%2F...",
"name": "截图"
},
{
"count": 6,
"cover_file_category": "",
"cover_file_id": "6061000000001af7c3034e3590ea7d5a50f58015",
"cover_overall_score": 0.660460352897644,
"cover_tag_confidence": 0.8765541911125183,
"cover_url": "https://ccp-bj29-bj-1592982087.oss-cn-beijing.aliyuncs.com/HCBUxQOF%2F...",
"name": "健身"
}
]
}
```
#### 探索-列出一个分类(label)的全部图片
POST: `https://api.aliyundrive.com/v2/file/search`
```json
{
"return_total_count": true,
"image_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg",
"order_by": "last_access_at DESC,updated_at DESC,image_time DESC",
"query": "(label = '截图') and category in ['video','image'] and status = 'available' and hidden = false",
"limit": 100,
"drive_id": "9600002"
}
```
Response:
```json
filelist
```
#### 探索-列出全部回忆
POST: `https://api.aliyundrive.com/v2/aims/list_stories`
```json
{ "drive_id": "9600002", "skip_stories_creation": false, "cover_image_thumbnail_process": "image/resize,m_lfit,w_800/format,jpg" }
```
Response:
```json
{
"items": [
{
"cover_file_id": "6061000000001af7c3034e3590ea7d5a50f58015",
"cover_file_thumbnail_url": "https://ccp-bj29-bj-1592982087.oss-cn-beijing.aliyuncs.com/aUDpMBAO%2F...",
"created_at": "2022-03-13T21:31:47.210563978+08:00",
"face_group_ids": ["Group-00000000-1703-4fc8-4f56-369478ed14df"],
"story_end_time": "",
"story_file_list": [
{ "file_id": "623b00000000d89ef21d4118838aed83de7575ba" },
{ "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }
],
"story_id": "903C5705-0000-0000-4fc8-42B97E29C65C",
"story_name": "熟悉的TA",
"story_start_time": "",
"story_sub_type": "ImportantPerson",
"story_type": "ImportantPerson",
"updated_at": "2022-03-13T21:31:47.21056415+08:00",
"cover_file": {
"category": "image",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"content_type": "application/oct-stream",
"crc64_hash": "1548000000008183211",
"created_at": "2021-09-08T13:45:59.755Z",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"drive_id": "9600002",
"encrypt_mode": "none",
"file_extension": "jpg",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"hidden": false,
"image_media_metadata": {
"faces": "[{\"FaceConfidence\":0.9646940231323242,\"EmotionConfidence\":0.974002480506897,\"ImageUri\":\"\",\"FaceQuality\":0.8240875005722046,\"Similarity\":0,\"ExternalId\":\"\",\"Attractive\":0.95,\"AttractiveConfidence\":0,\"Age\":19,\"AgeConfidence\":0,\"Gender\":\"FEMALE\",\"Emotion\":\"SAD\",\"GenderConfidence\":1,\"FaceId\":\"45f700000000ac19ffbf56adcaa98e3944f28c087cd36b9bc1acde5ae5829fa3\",\"GroupId\":\"Group-00000000-1703-4fc8-5f56-369478ed14df\",\"FaceAttributes\":{\"Glasses\":\"NONE\",\"MaskConfidence\":0.9999961853027344,\"Mask\":\"NONE\",\"GlassesConfidence\":1,\"Beard\":\"NONE\",\"BeardConfidence\":1,\"FaceBoundary\":{\"Width\":558,\"Height\":787,\"Top\":318,\"Left\":1075},\"HeadPose\":{\"Pitch\":8.109945297241211,\"Roll\":-11.779093742370605,\"Yaw\":-12.086345672607422}},\"EmotionDetails\":{\"SURPRISED\":0.0010840623872354627,\"HAPPY\":0.0072783417999744415,\"ANGRY\":0.00025470455875620246,\"DISGUSTED\":0.0018990141106769443,\"SAD\":0.974002480506897,\"CALM\":0.005655393470078707,\"SCARED\":0.006041224580258131},\"SimilarFaces\":null}]",
"faces_thumbnail": [
{
"face_group_id": "Group-00000000-1703-4fc8-5f56-369478ed14df",
"face_id": "45f700000000ac19ffbf56adcaa98e3944f28c087cd36b9bc1acde5ae5829fa3",
"face_thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F..."
}
],
"height": 3600,
"image_quality": { "overall_score": 0.639841616153717 },
"time": "2022-03-13T21:31:47.210563978+08:00",
"width": 2400
},
"labels": ["面部", "日常行为"],
"mime_extension": "jpg",
"mime_type": "image/jpeg",
"name": "44.jpg",
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"punish_flag": 2,
"revision_id": "6138000000000b81a8164550b1e7cba1d7fbe111",
"size": 1974176,
"starred": false,
"status": "available",
"thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"trashed": false,
"type": "file",
"updated_at": "2021-09-08T13:46:01.896Z",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F..."
}
}
]
}
```
#### 探索-读取一个回忆的信息(名称、人物、图片)
POST: `https://api.aliyundrive.com/v2/aims/get_story`
```json
{ "drive_id": "9600002", "story_id": "903C5705-0000-0000-4fc8-42B97E29C65C" }
```
Response:
```json
{
"cover_file_id": "6061000000001af7c3034e3590ea7d5a50f58015",
"cover_file_thumbnail_url": "https://bj29.cn-beijing.data.alicloudccp.com/RV5OBihM%2F...",
"created_at": "2022-03-13T21:31:47.210563978+08:00",
"face_group_ids": ["Group-00000000-1763-4fc8-bf56-369478ed14df"],
"story_end_time": "",
"story_file_list": [
{
"category": "image",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"content_type": "application/oct-stream",
"crc64_hash": "1548000000008183211",
"created_at": "2021-09-08T13:45:59.755Z",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"drive_id": "9600002",
"encrypt_mode": "none",
"file_extension": "jpg",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"hidden": false,
"image_media_metadata": {
"faces": "[{\"FaceConfidence\":0.9646940231323242,\"EmotionConfidence\":0.974002480506897,\"ImageUri\":\"\",\"FaceQuality\":0.8240875005722046,\"Similarity\":0,\"ExternalId\":\"\",\"Attractive\":0.95,\"AttractiveConfidence\":0,\"Age\":19,\"AgeConfidence\":0,\"Gender\":\"FEMALE\",\"Emotion\":\"SAD\",\"GenderConfidence\":1,\"FaceId\":\"45f700000000ac19ffbf56adcaa98e3944f28c087cd36b9bc1acde5ae5829fa3\",\"GroupId\":\"Group-00000000-1703-4fc6-bf56-369478ed14df\",\"FaceAttributes\":{\"Glasses\":\"NONE\",\"MaskConfidence\":0.9999961853027344,\"Mask\":\"NONE\",\"GlassesConfidence\":1,\"Beard\":\"NONE\",\"BeardConfidence\":1,\"FaceBoundary\":{\"Width\":558,\"Height\":787,\"Top\":318,\"Left\":1075},\"HeadPose\":{\"Pitch\":8.109945297241211,\"Roll\":-11.779093742370605,\"Yaw\":-12.086345672607422}},\"EmotionDetails\":{\"SURPRISED\":0.0010840623872354627,\"HAPPY\":0.0072783417999744415,\"ANGRY\":0.00025470455875620246,\"DISGUSTED\":0.0018990141106769443,\"SAD\":0.974002480506897,\"CALM\":0.005655393470078707,\"SCARED\":0.006041224580258131},\"SimilarFaces\":null}]",
"faces_thumbnail": [
{
"face_group_id": "Group-00000000-1703-4fc8-bf56-369478ed14df",
"face_id": "45f700000000ac19ffbf56adcaa98e3944f28c087cd36b9bc1acde5ae5829fa3",
"face_thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F..."
}
],
"height": 3600,
"image_quality": { "overall_score": 0.639841616153717 },
"width": 2400
},
"labels": [
"面部",
"日常行为"
],
"name": "44.jpg",
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"size": 1974176,
"starred": false,
"status": "available",
"thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"type": "file",
"updated_at": "2021-09-08T13:46:01.896Z",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F..."
}
],
"story_id": "903C5705-0000-0000-4fc8-42B97E29C65C",
"story_name": "fang的高光时刻",
"story_start_time": "",
"story_sub_type": "ImportantPerson",
"story_type": "ImportantPerson",
"updated_at": "2022-03-13T21:31:47.21056415+08:00"
}
```
#### 清理空间-统计数量
POST: `https://api.aliyundrive.com/v2/aims/clutter_removal/count`
```json
{ "drive_id": "9600002" }
```
Response:
```json
{ "screenshot": 20, "text": 26 }
```
#### 清理空间-清理屏幕截图
POST: `https://api.aliyundrive.com/v2/aims/clutter_removal/list`
```json
{ "type": "screenshot", "drive_id": "9600002" }
```
Response:
```json
filelist
```
#### 清理空间-清理文本图片
POST: `https://api.aliyundrive.com/v2/aims/clutter_removal/list`
```json
{ "type": "text", "drive_id": "9600002" }
```
Response:
```json
filelist
```
================================================
FILE: adrive sdk/album.md
================================================
#### 创建相册
POST: `https://api.aliyundrive.com/adrive/v1/album/create`
```json
{ "name": "未命名", "description": "" }
```
Response:
```json
{
"owner": "ccff000000004d75b5788a481eed8386",
"name": "未命名",
"description": "",
"album_id": "cfe400000000478599575b69356c5a4962383669",
"file_count": 0,
"image_count": 0,
"video_count": 0,
"created_at": 1647851113891,
"updated_at": 1647851113891
}
```
#### 修改相册
POST: `https://api.aliyundrive.com/adrive/v1/album/update`
```json
{ "album_id": "cfe400000000478599575b69356c5a4962383669", "description": "ff", "name": "未命名" }
```
Response:
```json
{
"owner": "ccff000000004d75b5788a481eed8386",
"name": "未命名",
"description": "",
"album_id": "cfe400000000478599575b69356c5a4962383669",
"file_count": 0,
"image_count": 0,
"video_count": 0,
"created_at": 1647851113891,
"updated_at": 1647851113891
}
```
#### 删除相册(不会删除相册内文件)
POST: `https://api.aliyundrive.com/adrive/v1/album/delete`
```json
{ "album_id": "cfe400000000478599575b69356c5a4962383669" }
```
Response:
```json
{}
```
#### 读取相册
POST: `https://api.aliyundrive.com/adrive/v1/album/get`
```json
{ "album_id": "cfe400000000478599575b69356c5a4962383669" }
```
Response:
```json
{
"owner": "ccff000000004d75b5788a481eed8386",
"name": "未命名",
"description": "",
"cover": {
"list": [
{
"trashed": false,
"category": "image",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"content_type": "application/oct-stream",
"crc64_hash": "1548000000008183211",
"created_at": "2022-03-21T08:27:15.671Z",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"drive_id": "9600002",
"encrypt_mode": "none",
"file_extension": "jpeg",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"hidden": false,
"image_media_metadata": { "image_quality": {} },
"mime_type": "image/jpeg",
"name": "fa9cb4682043bb141b48dd82.jpeg",
"parent_file_id": "root",
"punish_flag": 0,
"size": 586988,
"starred": false,
"status": "available",
"thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"type": "file",
"updated_at": "2022-03-21T08:27:16.226Z",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"ex_fields_info": {}
}
]
},
"album_id": "cfe400000000478599575b69356c5a4962383669",
"file_count": 1,
"image_count": 1,
"video_count": 0,
"created_at": 1647851113891,
"updated_at": 1647851236638
}
```
#### 添加文件到相册
POST: `https://api.aliyundrive.com/adrive/v1/album/add_files`
```json
{ "album_id": "cfe400000000478599575b69356c5a4962383669", "drive_file_list": [{ "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }] }
```
Response:
```json
{
"file_list": [
{
"trashed": false,
"category": "image",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"content_type": "application/oct-stream",
"crc64_hash": "1548000000008183211",
"created_at": "2022-03-21T08:27:15.671Z",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"drive_id": "9600002",
"encrypt_mode": "none",
"file_extension": "jpeg",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"hidden": false,
"image_media_metadata": { "image_quality": {} },
"mime_type": "image/jpeg",
"name": "fa9cb4682043bb141b48dd82.jpeg",
"parent_file_id": "root",
"punish_flag": 0,
"size": 586988,
"starred": false,
"status": "available",
"thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"type": "file",
"updated_at": "2022-03-21T08:27:16.226Z",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"ex_fields_info": {}
}
]
}
```
#### 从相册移除文件
POST: `https://api.aliyundrive.com/adrive/v1/album/delete_files`
```json
{ "album_id": "cfe400000000478599575b69356c5a4962383669", "drive_file_list": [{ "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }] }
```
Response:
```json
{}
```
#### 列出相册内文件
POST: `https://api.aliyundrive.com/adrive/v1/album/list_files`
```json
{
"album_id": "cfe400000000478599575b69356c5a4962383669",
"image_thumbnail_process": "image/resize,w_400/format,jpeg",
"video_thumbnail_process": "video/snapshot,t_0,f_jpg,ar_auto,w_1000",
"image_url_process": "image/resize,w_1920/format,jpeg",
"filter": "",
"fields": "*",
"limit": 100,
"order_by": "file_image_time",
"order_direction": "DESC"
}
```
Response:
```json
{
"items": [
{
"category": "image",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"content_type": "application/oct-stream",
"crc64_hash": "1548000000008183211",
"created_at": "2022-03-21T08:27:15.671Z",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"drive_id": "9600002",
"encrypt_mode": "none",
"file_extension": "jpeg",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"hidden": false,
"image_media_metadata": { "image_quality": {} },
"name": "fa9cb4682043bb141b48dd82.jpeg",
"parent_file_id": "root",
"size": 586988,
"starred": false,
"status": "available",
"thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"type": "file",
"updated_at": "2022-03-21T08:27:16.226Z",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F..."
}
]
}
```
#### 上传文件到相册
POST: `https://api.aliyundrive.com/adrive/v1/biz/albums/file/create`
```json
{
"drive_id": "9600002",
"part_info_list": [{ "part_number": 1 }],
"parent_file_id": "root",
"name": "fa9cb4682043bb141b48dd82.jpeg",
"type": "file",
"check_name_mode": "auto_rename",
"size": 586988,
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"proof_code": "TIo2j2wSMV4=",
"proof_version": "v1"
}
```
Response:
```json
{
"type": "file",
"parent_file_id": "root",
"drive_id": "9600002",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"domain_id": "bj29",
"trashed_at": null,
"file_name": "fa9cb4682043bb141b48dd82.jpeg",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"encrypt_mode": "none",
"location": "cn-beijing",
"rapid_upload": false,
"part_info_list": [
{
"part_number": 1,
"upload_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"internal_upload_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"content_type": ""
}
]
}
```
================================================
FILE: adrive sdk/archive.md
================================================
#### 在线打开压缩包
POST: `https://api.aliyundrive.com/v2/archive/list`
```json
{ "archive_type": "zip", "domain_id": "bj29", "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }
```
Response:
```json
{ "state": "Running", "file_list": {}, "task_id": "e026000000007f609bcd6aa71b8fde94" }
```
#### 在线打开压缩包进度
POST: `https://api.aliyundrive.com/v2/archive/status`
```json
{ "domain_id": "bj29", "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "task_id": "e026000000007f609bcd6aa71b8fde94" }
```
Response:
```json
{ "code": "LimitArchive", "message": "Archive reach limit" }
{"code":"BadArchive","message":"Archive is bad"}
{"code":"InvalidPassword","message":"Password is invalid"}
```
```json
{ "state": "Running", "file_list": {}, "task_id": "e026000000007f609bcd6aa71b8fde94", "progress": 0 }
```
```json
{
"state": "Succeed",
"file_list": {
"filezi": {
"is_folder": true,
"items": [
{
"is_folder": true,
"items": [
{ "is_folder": false, "items": [], "name": "filezi/electron/electron", "size": 140256360, "updated_at": "2022-03-23T04:11:45.000Z" },
{ "is_folder": false, "items": [], "name": "filezi/electron/libvk_swiftshader.so", "size": 4168528, "updated_at": "2022-03-23T04:11:45.000Z" },
{
"is_folder": true,
"items": [
{ "is_folder": false, "items": [], "name": "filezi/electron/swiftshader/libEGL.so", "size": 256032, "updated_at": "2022-03-23T04:11:45.000Z" },
{ "is_folder": false, "items": [], "name": "filezi/electron/swiftshader/libGLESv2.so", "size": 2580600, "updated_at": "2022-03-23T04:11:45.000Z" }
],
"name": "filezi/electron/swiftshader",
"size": 0,
"updated_at": "1970-01-01T00:00:00.000Z"
}
],
"name": "filezi/electron",
"size": 0,
"updated_at": "1970-01-01T00:00:00.000Z"
},
{ "is_folder": false, "items": [], "name": "filezi/linux使用帮助.txt", "size": 509, "updated_at": "2022-03-23T04:11:45.000Z" }
],
"name": "filezi",
"size": 0,
"updated_at": "1970-01-01T00:00:00.000Z"
}
},
"task_id": "e026000000007f609bcd6aa71b8fde94",
"progress": 100
}
```
#### 在线打开压缩包(rar 带密码)
```js
//第一次,没有文件缓存
//POST: `https://api.aliyundrive.com/v2/archive/list`
{"code":"BadArchive","message":"Archive is bad"}//返回文件锁坏
//POST: `https://api.aliyundrive.com/v2/archive/list` "password":"123"
//返回正常的 { "state": "Succeed", "file_list": { ...
```
```js
//第二次,有缓存
//POST: `https://api.aliyundrive.com/v2/archive/list`
{"code":"InvalidPassword","message":"Password is invalid"}//返回需要密码
//POST: `https://api.aliyundrive.com/v2/archive/list` "password":"123"
//返回正常的 { "state": "Succeed", "file_list": { ...
```
#### 在线解压
POST: `https://api.aliyundrive.com/v2/archive/uncompress`
```json
{ "archive_type": "zip", "domain_id": "bj29", "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "target_drive_id": "9600002", "target_file_id": "61a300000000e67e5cf8489fab317ef345373b80" }
```
```json
{
"archive_type": "zip",
"domain_id": "bj29",
"drive_id": "9600002",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"file_list": ["lc-design-demo/assets/views/home.xml", "lc-design-demo/assets/views/layout"],
"password": "123",
"target_drive_id": "9600002",
"target_file_id": "61a300000000e67e5cf8489fab317ef345373b80"
}
```
Response:
```json
{ "state": "Running", "task_id": "e026000000007f609bcd6aa71b8fde94" }
```
#### 在线解压进度
POST: `https://api.aliyundrive.com/v2/archive/status`
```json
{ "domain_id": "bj29", "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "task_id": "e026000000007f609bcd6aa71b8fde94" }
```
Response:
```json
{ "state": "Running", "file_list": {}, "task_id": "e026000000007f609bcd6aa71b8fde94", "progress": -1 }
```
```json
{ "state": "Running", "file_list": {}, "task_id": "e026000000007f609bcd6aa71b8fde94", "progress": 15 }
```
```json
{ "state": "Succeed", "file_list": {}, "task_id": "e026000000007f609bcd6aa71b8fde94", "progress": 100 }
```
#### 打包下载
POST: `https://api.aliyundrive.com/v2/file/archive_files`
```json
{ "name": "aname.zip", "drive_id": "9600002", "files": [{ "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }] }
```
Response:
```json
{ "async_task_id": "9fcb1e1d-0000-0000-b30d-387e04dcafcb" }
```
#### 打包下载进度
POST: `https://api.aliyundrive.com/v2/async_task/get`
```json
{ "async_task_id": "9fcb1e1d-0000-0000-b30d-387e04dcafcb" }
```
Response:
```json
{
"async_task_id": "9fcb1e1d-0000-0000-b30d-387e04dcafcb",
"state": "Succeed",
"err_code": 200,
"total_process": 167238406,
"consumed_process": 167238406,
"url": "https://ccp-bj29-video-preview.oss-cn-beijing.aliyuncs.com/archive%2F9fcb1e1d-e9dd-43d0-b30d-387e04dcafcb?response-content-disposition=attachment%3B%20filename%2A%3DUTF-8%27%27aname.zip\u0026x-oss-access-key-id=LTAIsE5mAn2F493Q\u0026x-oss-expires=1648014906\u0026x-oss-signature=5E4UEDoNKoUFDKsH41BQxlsc0BvoTeMjS4QZv5x1U%2B0%3D\u0026x-oss-signature-version=OSS2",
"punished_file_count": 0
}
```
================================================
FILE: adrive sdk/book.md
================================================
#### 列出图书
POST: `https://api.aliyundrive.com/adrive/v2/book/list`
```json
{ "book_progress_type": "ALL", "limit": 1, "marker": "", "order_by": "name asc", "show_hidden": false }
```
Response:
```json
{
"items": [
{
"category": "doc",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"content_type": "application/oct-stream",
"crc64_hash": "1548000000008183211",
"created_at": "2021-11-22T03:36:19.680Z",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"drive_id": "9600002",
"encrypt_mode": "none",
"file_extension": "epub",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"hidden": false,
"name": "Republic.epub",
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"punish_flag": 0,
"size": 128000,
"starred": false,
"status": "available",
"type": "file",
"updated_at": "2022-01-12T12:44:16.835Z",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"user_meta": "{\"client\":\"web\"}",
"user_tags": { "book_show": "true" }
}
],
"next_marker": ""
}
```
#### 列出最近阅读的图书
POST: `https://api.aliyundrive.com/adrive/v2/book/recentList`
```json
{ "book_progress_type": "ALL", "limit": 1, "marker": "", "order_by": "name asc", "show_hidden": false }
```
Response:
```json
{
"items": [
{
"category": "doc",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"content_type": "application/oct-stream",
"crc64_hash": "1548000000008183211",
"created_at": "2021-09-24T12:50:00.905Z",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"drive_id": "9600002",
"encrypt_mode": "none",
"file_extension": "epub",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"hidden": false,
"name": "无声告白.epub",
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"punish_flag": 0,
"size": 1027423,
"starred": false,
"status": "available",
"type": "file",
"updated_at": "2022-03-22T14:59:12.333Z",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"book_progress": "{\"bookName\":\"无声告白\",\"chapterNumber\":1,\"chapterPercent\":0.0,\"currentPageNumber\":-1,\"progress\":29,\"totalPageNumber\":-1,\"uid\":\"9400000000bc480bbcbbb1e074f55a7f\",\"updateTime\":1647961151874}",
"user_tags": {
"book_progress": "{\"bookName\":\"无声告白\",\"chapterNumber\":1,\"chapterPercent\":0.0,\"currentPageNumber\":-1,\"progress\":29,\"totalPageNumber\":-1,\"uid\":\"9400000000bc480bbcbbb1e074f55a7f\",\"updateTime\":1647961151874}",
"book_progress_percentage": "35",
"book_show": "true",
"epub_book_progress": "{\"uid\":\"9400000000bc480bbcbbb1e074f55a7f\",\"href\":\"\\/text\\/part0000.html\",\"type\":\"application\\/xhtml+xml\",\"locations\":{\"progression\":0,\"position\":2,\"totalProgression\":8.873114463176575E-4}}",
"start_read": "true"
},
"book_name": "无声告白",
"book_progress_percentage": 29
}
]
}
```
#### 添加到阅读室
POST: `https://api.aliyundrive.com/adrive/v2/book/update`
```json
{ "file_ids": ["623b00000000d89ef21d4118838aed83de7575ba"], "operation": 1 }
```
Response:
```text
HTTP/1.1 200 OK
```
#### 从阅读室移除
POST: `https://api.aliyundrive.com/adrive/v2/book/update`
```json
{ "file_ids": ["623b00000000d89ef21d4118838aed83de7575ba"], "operation": 2 }
```
Response:
```text
HTTP/1.1 200 OK
```
================================================
FILE: adrive sdk/contact.md
================================================
#### 通讯录列出
POST: `https://api.aliyundrive.com/adrive/v1/contact/list`
```json
{}
```
Response:
```json
{
"items": [
{
"id": 223963400,
"content": {
"format": "vcard",
"hash": "1a48648e8b140ae80be048f1681cfbe24a7b9579c2ffbabe2686eb79338dfe14",
"value": "BEGIN:VCARD\r\nVERSION:4.0\r\nPRODID:ez-vcard 0.11.2\r\nKIND:individual\r\nFN:高青\r\nN:高;青;;;\r\nTEL;TYPE=cell:15000065001\r\nEND:VCARD\r\n",
"version": "4.0"
},
"gmt_create": 1647864044589
},
{
"id": 224054214,
"content": {
"format": "vcard",
"hash": "978edd2d967b94b34d3a90c00cbd4819e239f21a6f72f6a2f87b522fe81a62f4",
"value": "BEGIN:VCARD\r\nVERSION:4.0\r\nPRODID:ez-vcard 0.11.2\r\nKIND:individual\r\nFN:木门\r\nN:木;门;;;\r\nTEL;TYPE=cell:03100000981\r\nEND:VCARD\r\n",
"version": "4.0"
},
"gmt_create": 1647864055972
}
],
"total_count": 2
}
```
#### 通讯录删除
POST: `https://api.aliyundrive.com/adrive/v1/contact/delete`
```json
{ "ids": [224206708] }
```
Response:
```json
{}
```
#### 通讯录备份添加
POST: `https://api.aliyundrive.com/adrive/v1/contact/add`
```json
{
"items": [
{
"hash": "978edd2d967b94b34d3a90c00cbd4819e239f21a6f72f6a2f87b522fe81a62f4",
"version": "4.0",
"value": "BEGIN:VCARD\r\nVERSION:4.0\r\nN:木;门\r\nTEL;TYPE=cell:03000080981\r\nKIND:individual\r\nEND:VCARD\r\n",
"avatar": "",
"format": "vcard"
}
]
}
```
Response:
```json
{ "items": [{ "id": 223963801, "content": { "format": "vcard", "hash": "978edd2d967b94b34d3a90c00cbd4819e239f21a6f72f6a2f87b522fe81a62f4", "version": "4.0" } }] }
```
================================================
FILE: adrive sdk/drive.md
================================================
#### 全部 drive
POST: `https://api.aliyundrive.com/v2/drive/list`
```json
{ "owner": "ccff000000004d75b5788a481eed8386" }
```
Response:
```json
{
"items": [
{
"domain_id": "bj29",
"drive_id": "9600002",
"drive_name": "alibum",
"description": "",
"creator": "",
"owner": "ccff000000004d75b5788a481eed8386",
"owner_type": "user",
"drive_type": "normal",
"status": "enabled",
"used_size": 739272268,
"total_size": -1,
"store_id": "b5e90000000041d084733b520ea8b57d",
"relative_path": "",
"encrypt_mode": "none",
"encrypt_data_access": false,
"created_at": "2021-03-29T04:02:57.981Z",
"permission": null,
"subdomain_id": ""
},
{
"domain_id": "bj29",
"drive_id": "9600002",
"drive_name": "Default",
"description": "Created by system",
"creator": "System",
"owner": "ccff000000004d75b5788a481eed8386",
"owner_type": "user",
"drive_type": "normal",
"status": "enabled",
"used_size": 7186746146291,
"total_size": 10737418240,
"store_id": "b5e90000000041d084733b520ea8b57d",
"relative_path": "",
"encrypt_mode": "none",
"encrypt_data_access": false,
"created_at": "2021-03-18T04:55:06.893Z",
"permission": null,
"subdomain_id": ""
},
{
"domain_id": "bj29",
"drive_id": "9600002",
"drive_name": "note_drive",
"description": "",
"creator": "",
"owner": "ccff000000004d75b5788a481eed8386",
"owner_type": "user",
"drive_type": "normal",
"status": "enabled",
"used_size": 502382874,
"total_size": -1,
"store_id": "b5e90000000041d084733b520ea8b57d",
"relative_path": "",
"encrypt_mode": "none",
"encrypt_data_access": false,
"created_at": "2021-10-24T11:29:12.773Z",
"permission": null,
"subdomain_id": ""
},
{
"domain_id": "bj29",
"drive_id": "9600002",
"drive_name": "Default",
"description": "Created by system",
"creator": "System",
"owner": "ccff000000004d75b5788a481eed8386",
"owner_type": "user",
"drive_type": "normal",
"status": "enabled",
"used_size": 227511979353,
"total_size": 10737418240,
"store_id": "b5e90000000041d084733b520ea8b57d",
"relative_path": "",
"encrypt_mode": "none",
"encrypt_data_access": false,
"created_at": "2021-03-18T04:55:06.936Z",
"permission": null,
"subdomain_id": ""
}
],
"next_marker": ""
}
```
#### 全部 drive
POST: `https://api.aliyundrive.com/v2/drive/list_my_drives`
```json
{ "owner": "ccff000000004d75b5788a481eed8386" }
```
Response:
```json
同上
```
#### 默认 drive(网盘)
POST: `https://api.aliyundrive.com/v2/drive/get_default_drive`
```json
```
Response:
```json
{
"domain_id": "bj29",
"drive_id": "9600002",
"drive_name": "Default",
"description": "Created by system",
"creator": "System",
"owner": "ccff000000004d75b5788a481eed8386",
"owner_type": "user",
"drive_type": "normal",
"status": "enabled",
"used_size": 7186746146291,
"total_size": 17536351469568,
"store_id": "b5e90000000041d084733b520ea8b57d",
"relative_path": "",
"encrypt_mode": "none",
"encrypt_data_access": false,
"created_at": "2021-03-18T04:55:06.893Z",
"permission": null,
"subdomain_id": ""
}
```
#### 指定 drive
POST: `https://api.aliyundrive.com/v2/drive/get`
```json
{ "drive_id": "9600002" }
```
Response:
```json
{
"domain_id": "bj29",
"drive_id": "9600002",
"drive_name": "alibum",
"description": "",
"creator": "",
"owner": "ccff000000004d75b5788a481eed8386",
"owner_type": "user",
"drive_type": "normal",
"status": "enabled",
"used_size": 742962124,
"total_size": 17536351469568,
"store_id": "b5e90000000041d084733b520ea8b57d",
"relative_path": "",
"encrypt_mode": "none",
"encrypt_data_access": false,
"created_at": "2021-03-29T04:02:57.981Z",
"permission": null,
"subdomain_id": ""
}
```
================================================
FILE: adrive sdk/file.md
================================================
#### 一个文件的信息
POST: `https://api.aliyundrive.com/v2/file/get`
```json
{
"drive_id": "9600002",
"office_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg",
"image_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"video_thumbnail_process": "video/snapshot,t_0,f_jpg,m_lfit,w_256,ar_auto,m_fast",
"permanently": false,
"image_url_process": "image/resize,m_lfit,w_1080/format,webp",
"url_expire_sec": 1800
}
```
Response:
```json
{
"drive_id": "9600002",
"domain_id": "bj29",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"name": "父文件夹23",
"type": "folder",
"created_at": "2021-11-05T12:23:02.914Z",
"updated_at": "2022-01-24T10:53:36.469Z",
"hidden": false,
"starred": false,
"status": "available",
"user_meta": "{\"shares\":[\"2eVphedN4QT\"],\"client\":\"web\"}",
"parent_file_id": "root",
"encrypt_mode": "none",
"creator_type": "User",
"creator_id": "9400000000bc480bbcbbb1e074f55a7f",
"last_modifier_type": "User",
"last_modifier_id": "9400000000bc480bbcbbb1e074f55a7f",
"revision_id": "",
"ex_fields_info": { "image_count": 0 },
"trashed": false
}
```
#### 一个文件的信息 get_by_path
POST: `https://api.aliyundrive.com/v2/file/get_by_path`
```json
{ "drive_id": "9600002", "file_path": "/zip23" }
```
Response:
```json
{
"drive_id": "9600002",
"domain_id": "bj29",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"name": "zip23",
"type": "folder",
"created_at": "2021-08-28T02:54:02.561Z",
"updated_at": "2022-01-24T10:53:36.474Z",
"hidden": false,
"starred": false,
"status": "available",
"user_meta": "{\"shares\":[\"mUo000000ka\"]}",
"parent_file_id": "root",
"encrypt_mode": "none",
"last_modifier_type": "User",
"last_modifier_id": "9400000000bc480bbcbbb1e074f55a7f",
"revision_id": "",
"trashed": false
}
```
#### 一个文件的路径(root[不含] -> file_id 本身)
POST: `https://api.aliyundrive.com/adrive/v1/file/get_path`
```json
{ "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }
```
Response:
```json
{
"items": [
{
"trashed": false,
"created_at": "2021-11-06T02:51:06.833Z",
"domain_id": "bj29",
"drive_id": "9600002",
"encrypt_mode": "none",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"hidden": false,
"name": "donghua",
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"starred": false,
"status": "available",
"type": "folder",
"updated_at": "2021-11-06T02:51:06.833Z",
"user_meta": "{\"client\":\"web\"}",
"ex_fields_info": { "image_count": 0 }
},
{
"trashed": false,
"created_at": "2021-11-05T12:23:02.914Z",
"domain_id": "bj29",
"drive_id": "9600002",
"encrypt_mode": "none",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"hidden": false,
"name": "父文件夹23",
"parent_file_id": "root",
"starred": false,
"status": "available",
"type": "folder",
"updated_at": "2022-01-24T10:53:36.469Z",
"user_meta": "{\"shares\":[\"mUo000000ka\"],\"client\":\"web\"}",
"ex_fields_info": { "image_count": 0 }
}
]
}
```
#### 直接下载
GET: `https://api.aliyundrive.com/v2/file/download?drive_id=9600002&file_id=623b00000000d89ef21d4118838aed83de7575ba&image_thumbnail_process=image%2Fresize%2Cm_lfit%2Cw_256%2Climit_0%2Fformat%2Cjpg%7Cimage%2Fformat%2Cwebp`
```json
```
Response:
```text
<a href="https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...">Moved Permanently</a>.
```
#### 单个下载地址
GET: `https://api.aliyundrive.com/v2/file/get_download_url`
```json
{ "drive_id": "9600002", "expires_sec": 0, "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }
```
Response:
```json
{
"method": "GET",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"internal_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"expiration": "2022-03-22T14:54:28.057Z",
"size": 13,
"ratelimit": { "part_speed": -1, "part_size": -1 },
"crc64_hash": "1548000000008183211",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1"
}
```
#### 打包下载(失效)
GET: `https://api.aliyundrive.com/adrive/v1/file/multiDownloadUrl`
```json
{ "archive_name": "archive_name", "download_infos": [{ "drive_id": "9600002", "files": [{ "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }] }] }
```
Response:
```json
{ "download_url": "https://file.aliyundrive.com/files/archive?task_id=c3f2cd02-0000-0000-8c5a-e80fb1e6f35d&uid=ccff000000004d74b5788a481eed8386" }
```
#### 预览地址(Office)
POST: `https://api.aliyundrive.com/v2/file/get_office_preview_url`
```json
{ "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }
```
Response:
```json
{ "preview_url": "https://office-cn-beijing.imm.aliyuncs.com/office/w/623b00000000d89ef21d4118838aed83de7575ba?_w_tokentype=1&hidecmb=1&simple=1", "access_token": "9eedf665d2464dfcbcabcef640211f0av3" }
```
#### 预览地址(OfficeEdit)
POST: `https://api.aliyundrive.com/v2/file/get_office_edit_url`
```json
{ "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "option": { "readonly": false } }
```
Response:
```json
{
"edit_url": "https://office-cn-beijing.imm.aliyuncs.com/office/p/623b00000000d89ef21d4118838aed83de7575ba?_w_tokentype=1",
"office_access_token": "75d3976f75a44e4980439ae8ac58ccf1v3",
"office_refresh_token": "ca61bb7e51394b62924a09552de868e3v3"
}
```
#### 预览地址(Video)
POST: `https://api.aliyundrive.com/v2/file/get_video_preview_play_info`
```json
{ "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "template_id": "", "url_expire_sec": 3600, "get_subtitle_info": true, "category": "live_transcoding", "drive_id": "9600002" }
```
Response:
```json
{
"domain_id": "bj29",
"drive_id": "9600002",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"video_preview_play_info": {
"category": "live_transcoding",
"meta": { "duration": 6728.747, "width": 3840, "height": 2160, "live_transcoding_meta": { "ts_segment": 10, "ts_total_count": 673, "ts_pre_count": 3 } },
"live_transcoding_task_list": [
{
"template_id": "SD",
"template_name": "pdsSD",
"status": "finished",
"stage": "stage_all",
"url": "https://ccp-bj29-video-preview.oss-cn-beijing.aliyuncs.com/lt/E85700000000F9AF45055D714AF43EE744E7262F_51495704429__sha1_bj29/SD/media.m3u8?di=bj29&dr=9600002&f=623b00000000d89ef21d4118838aed83de7575ba&u=9400000000bc480bbcbbb1e074f55a7f&x-oss-access-key-id=LTAIsE5mAn2F493Q&x-oss-expires=1648039409&x-oss-process=hls%2Fsign&x-oss-signature=qBAS4aI%2F3hT7TFv2mAlgeigtDNtoEK2Vk3BHkCYMXUI%3D&x-oss-signature-version=OSS2"
},
{
"template_id": "HD",
"template_name": "pdsHD",
"status": "finished",
"stage": "stage_all",
"url": "https://ccp-bj29-video-preview.oss-cn-beijing.aliyuncs.com/lt/E85700000000F9AF45055D714AF43EE744E7262F_51495704429__sha1_bj29/HD/media.m3u8?di=bj29&dr=9600002&f=623b00000000d89ef21d4118838aed83de7575ba&u=9400000000bc480bbcbbb1e074f55a7f&x-oss-access-key-id=LTAIsE5mAn2F493Q&x-oss-expires=1648039409&x-oss-process=hls%2Fsign&x-oss-signature=xv2x1WcvwqHpadUysuVyG%2FqsC4SGemy8kuXTUQ6G8qA%3D&x-oss-signature-version=OSS2"
},
{
"template_id": "FHD",
"template_name": "pdsFHD",
"status": "finished",
"stage": "stage_all",
"url": "https://ccp-bj29-video-preview.oss-cn-beijing.aliyuncs.com/lt/E85700000000F9AF45055D714AF43EE744E7262F_51495704429__sha1_bj29/FHD/media.m3u8?di=bj29&dr=9600002&f=623b00000000d89ef21d4118838aed83de7575ba&u=9400000000bc480bbcbbb1e074f55a7f&x-oss-access-key-id=LTAIsE5mAn2F493Q&x-oss-expires=1648039409&x-oss-process=hls%2Fsign&x-oss-signature=EK6lF3iznE9mW7PHfAQDT5vUZfQRV99aQ%2BS06Ir5P9I%3D&x-oss-signature-version=OSS2"
}
],
"live_transcoding_subtitle_task_list": [
{
"language": "chi",
"status": "finished",
"url": "https://ccp-bj29-video-preview.oss-cn-beijing.aliyuncs.com/lt/E85700000000F9AF45055D714AF43EE744E7262F_51495704429__sha1_bj29/subtitle/chi_0.vtt?di=bj29&dr=9600002&f=623b00000000d89ef21d4118838aed83de7575ba&u=9400000000bc480bbcbbb1e074f55a7f&x-oss-access-key-id=LTAIsE5mAn2F493Q&x-oss-expires=1648039409&x-oss-signature=%2Bywa3xJQWhSbqwhfj0namnSgH0Da5mYg%2F7cEU6hbsOI%3D&x-oss-signature-version=OSS2"
}
]
}
}
```
#### 预览地址(VideoUrl)
POST: `https://api.aliyundrive.com/v2/file/get_video_preview_url`
```json
{ "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "template_id": "HD", "url_expire_sec": 14400 }
```
Response:
```json
{
"preview_url": "https://ccp-bj29-video-preview.oss-cn-beijing.aliyuncs.com/bj29/sha1_1ADDEFFAB9820EDC1ECEAFA8F9D6511456A4053C_167238406_/HD/master.mp4?di=bj29&dr=9600002&f=623b00000000d89ef21d4118838aed83de7575ba&u=9400000000bc480bbcbbb1e074f55a7f&x-oss-access-key-id=LTAIsE5mAn2F493Q&x-oss-expires=1648018799&x-oss-signature=KZikIyRSw4c9WkYa2M3Mk4NQjAkdmmg60R6z3I2UJDY%3D&x-oss-signature-version=OSS2"
}
```
#### 预览地址(Audio)
POST: `https://api.aliyundrive.com/v2/databox/get_audio_play_info`
```json
{ "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }
```
Response:
```json
{
"template_list": [
{
"template_id": "LQ",
"status": "finished",
"url": "https://ccp-bj29-video-preview.oss-cn-beijing.aliyuncs.com/bj29/sha1_4E2B9BBE6B93AE7DAAF932966EDF43CD307EC5A1_4030744_/LQ/master.mp3?di=bj29\u0026dr=9600002\u0026f=623b00000000d89ef21d4118838aed83de7575ba\u0026u=9400000000bc480bbcbbb1e074f55a7f\u0026x-oss-access-key-id=LTAIsE5mAn2F493Q\u0026x-oss-expires=1647960250\u0026x-oss-signature=S5pC%2BAje9NY4%2FYCYchj%2BC5LnsLZffAezK3%2F24CEjrvk%3D\u0026x-oss-signature-version=OSS2\u0026x-oss-traffic-limit=31457280"
}
]
}
```
#### 重命名
POST: `https://api.aliyundrive.com/v3/file/update`
```json
{ "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "name": "Screenshot_2021-11-23-09-34-20-248_com.tencet.mm.jpg", "check_name_mode": "refuse" }
```
Response:
```json
file
```
#### 移动
POST: `https://api.aliyundrive.com/v3/file/move`
```json
{ "auto_rename": false, "overwrite": false, "drive_id": "9600002", "to_drive_id": "9600002", "to_parent_file_id": "613800000000336ae9164455b135a9729a298c9c", "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }
```
Response:
```json
{ "domain_id": "bj29", "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }
```
#### 复制
POST: `https://api.aliyundrive.com/v3/file/copy`
```json
{ "auto_rename": false, "drive_id": "9600002", "to_drive_id": "9600002", "to_parent_file_id": "root", "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "new_name": "" }
```
Response:
```json
{ "domain_id": "bj29", "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }
```
#### 列表 list
POST: `https://api.aliyundrive.com/v2/file/list`
```json
{
"fields": "*",
"drive_id": "9600002",
"office_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg",
"order_direction": "DESC",
"image_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg",
"order_by": "name",
"limit": 50,
"video_thumbnail_process": "video/snapshot,t_0,f_jpg,m_lfit,w_256,ar_auto,m_fast",
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"all": false,
"image_url_process": "image/resize,m_lfit,w_1080/format,webp"
}
```
Response:
```json
{
"items": [
{
"drive_id": "9600002",
"domain_id": "bj29",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"name": "试看版",
"type": "folder",
"created_at": "2021-11-06T03:15:19.060Z",
"updated_at": "2021-11-06T03:15:19.060Z",
"hidden": false,
"starred": false,
"status": "available",
"user_meta": "{\"client\":\"web\"}",
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"encrypt_mode": "none",
"creator_type": "User",
"creator_id": "9400000000bc480bbcbbb1e074f55a7f",
"creator_name": "myname",
"last_modifier_type": "User",
"last_modifier_id": "9400000000bc480bbcbbb1e074f55a7f",
"last_modifier_name": "myname",
"revision_id": ""
},
{
"drive_id": "9600002",
"domain_id": "bj29",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"name": "压缩包.zip",
"type": "file",
"content_type": "application/oct-stream",
"created_at": "2021-11-06T03:31:13.518Z",
"updated_at": "2021-11-06T03:31:13.518Z",
"file_extension": "zip",
"mime_type": "application/zip",
"mime_extension": "zip",
"hidden": false,
"size": 604818808,
"starred": false,
"status": "available",
"user_meta": "{\"client\":\"web\"}",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"crc64_hash": "1548000000008183211",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"category": "zip",
"encrypt_mode": "none",
"punish_flag": 0,
"creator_type": "User",
"creator_id": "9400000000bc480bbcbbb1e074f55a7f",
"creator_name": "myname",
"last_modifier_type": "User",
"last_modifier_id": "9400000000bc480bbcbbb1e074f55a7f",
"last_modifier_name": "myname",
"revision_id": "6138000000000b81a8164550b1e7cba1d7fbe111"
},
{
"drive_id": "9600002",
"domain_id": "bj29",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"name": "夫知間.jpg",
"type": "file",
"content_type": "application/oct-stream",
"created_at": "2021-11-06T03:16:33.170Z",
"updated_at": "2021-11-06T03:16:33.390Z",
"file_extension": "jpg",
"mime_type": "image/jpeg",
"mime_extension": "jpg",
"hidden": false,
"size": 294767,
"starred": false,
"status": "available",
"user_meta": "{\"client\":\"web\"}",
"labels": ["其他事物", "艺术品"],
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"crc64_hash": "1548000000008183211",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"category": "image",
"encrypt_mode": "none",
"image_media_metadata": {
"width": 1627,
"height": 2310,
"exif": "{\"FileSize\":{\"value\":\"294767\"},\"Format\":{\"value\":\"jpg\"},\"ImageHeight\":{\"value\":\"2310\"},\"ImageWidth\":{\"value\":\"1627\"},\"ResolutionUnit\":{\"value\":\"2\"},\"XResolution\":{\"value\":\"300/1\"},\"YResolution\":{\"value\":\"300/1\"}}",
"image_quality": { "overall_score": 0.7194659113883972 }
},
"punish_flag": 2,
"last_modifier_type": "User",
"last_modifier_id": "9400000000bc480bbcbbb1e074f55a7f",
"last_modifier_name": "myname",
"revision_id": "6138000000000b81a8164550b1e7cba1d7fbe111"
},
{
"drive_id": "9600002",
"domain_id": "bj29",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"name": "麻冬.zip",
"type": "file",
"content_type": "application/oct-stream",
"created_at": "2021-11-06T03:16:58.189Z",
"updated_at": "2021-11-06T03:16:58.189Z",
"file_extension": "zip",
"mime_type": "application/zip",
"mime_extension": "zip",
"hidden": false,
"size": 575786476,
"starred": false,
"status": "available",
"user_meta": "{\"client\":\"web\"}",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"crc64_hash": "1548000000008183211",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"category": "zip",
"encrypt_mode": "none",
"punish_flag": 0,
"creator_type": "User",
"creator_id": "9400000000bc480bbcbbb1e074f55a7f",
"creator_name": "myname",
"last_modifier_type": "User",
"last_modifier_id": "9400000000bc480bbcbbb1e074f55a7f",
"last_modifier_name": "myname",
"revision_id": "6138000000000b81a8164550b1e7cba1d7fbe111"
}
],
"next_marker": "",
"punished_file_count": 0
}
```
#### 列表 walk
POST: `https://api.aliyundrive.com/v2/file/walk`
```json
{
"all": false,
"drive_id": "9600002",
"fields": "*",
"image_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg|image/format,webp",
"image_url_process": "image/resize,m_lfit,w_1080/format,webp",
"limit": 1000,
"marker": "",
"office_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg|image/format,webp",
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"video_thumbnail_process": "video/snapshot,t_120000,f_jpg,m_lfit,w_256,ar_auto,m_fast"
}
```
```json
{
"all": false,
"drive_id": "9600002",
"fields": "*",
"image_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg|image/format,webp",
"image_url_process": "image/resize,m_lfit,w_1080/format,webp",
"limit": 800,
"marker": "",
"office_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg|image/format,webp",
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"video_thumbnail_process": "video/snapshot,t_120000,f_jpg,m_lfit,w_256,ar_auto,m_fast",
"return_total_count": true,
"type": "folder"
}
```
Response:
```json
filelist
```
#### 列表(全量) scan
POST: `https://api.aliyundrive.com/v2/file/scan`
```json
{
"drive_id": "9600002",
"category": "image",
"limit": 1000
}
```
Response:
```json
filelist
```
#### 收藏列表
POST: `https://api.aliyundrive.com/v2/file/list_by_custom_index_key`
```json
{
"fields": "*",
"drive_id": "9600002",
"image_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg",
"limit": 50,
"video_thumbnail_process": "video/snapshot,t_0,f_jpg,m_lfit,w_256,ar_auto,m_fast",
"parent_file_id": "root",
"all": false,
"image_url_process": "image/resize,m_lfit,w_1080/format,webp",
"custom_index_key": "starred_yes"
}
```
Response:
```json
filelist
```
#### 收藏文件
POST: `https://api.aliyundrive.com/v3/file/update`
```json
{ "hidden": false, "drive_id": "9600002", "starred": false, "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "custom_index_key": "" }
```
```json
{ "hidden": false, "drive_id": "9600002", "starred": true, "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "custom_index_key": "starred_yes" }
```
Response:
```json
file
```
#### 删除文件(从回收站彻底删除)
POST: `https://api.aliyundrive.com/v3/file/delete`
```json
{ "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "drive_id": "9600002" }
```
Response:
```text
HTTP/1.1 204 No Content
```
#### 增加文件 user_tags
POST: `https://api.aliyundrive.com/v2/file/put_usertags`
```json
{ "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "drive_id": "9600002", "user_tags": [{ "key": "k", "value": "0" }] }
```
Response:
```json
{ "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }
```
#### 删除文件 user_tags
POST: `https://api.aliyundrive.com/v2/file/delete_usertags`
```json
{ "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "drive_id": "9600002", "key_list": ["k"] }
```
Response:
```text
HTTP/1.1 204 No Content
```
#### 未知 list_delta(向相册中上传文件时触发)
POST: `https://api.aliyundrive.com/v2/file/list_delta`
```json
{ "cursor": "MDAwMDAwMDA6MDAwNWRhYjNiYjQ2YTFkMzowMDAwMDAwMQ==", "drive_id": "9600002", "limit": 1000 }
```
Response:
```json
{
"items": [
{
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"op": "create",
"file": {
"drive_id": "9600002",
"domain_id": "bj29",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"name": "ic_acloud_launcher.png",
"type": "file",
"content_type": "image/png",
"created_at": "2022-03-22T04:28:47.498Z",
"updated_at": "2022-03-22T04:28:47.498Z",
"file_extension": "png",
"hidden": false,
"size": 6414,
"starred": false,
"status": "available",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"parent_file_id": "root",
"crc64_hash": "1548000000008183211",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"category": "image",
"encrypt_mode": "none",
"image_media_metadata": { "image_quality": {} },
"characteristic_hash": "e14f000000004eb4ae91b8a4a723c2a11361928f",
"revision_id": ""
},
"current_category": "image"
},
{
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"op": "update",
"file": {
"drive_id": "9600002",
"domain_id": "bj29",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"labels": ["其他事物", "蓝色"],
"category": "image",
"image_media_metadata": {
"width": 108,
"height": 108,
"image_quality": { "overall_score": 0.4490000009536743 }
},
"revision_id": ""
},
"current_category": "image"
}
],
"has_more": false,
"cursor": "MDAwMDAwMDA6MDAwNWRhYzcwYzk2ZTM4OTowMDAwMDAwMQ=="
}
```
================================================
FILE: adrive sdk/filedir.md
================================================
#### 文件夹大小
POST: `https://api.aliyundrive.com/adrive/v1/file/get_folder_size_info`
```json
{ "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }
```
Response:
```json
{ "size": 67200, "folder_count": 0, "file_count": 600, "reach_limit": true }
```
#### 批量读取文件夹封面
POST: `https://api.aliyundrive.com/adrive/v1/file/cover/batchGet`
```json
{ "drive_id": "9600002", "file_ids": ["623b00000000d89ef21d4118838aed83de7575ba", "6061000000001af7c3034e3590ea7d5a50f58015"] }
```
Response:
```json
{
"items": [
{
"folder_file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"cover_file_id": "6061000000001af7c3034e3590ea7d5a50f58015",
"cover_file_thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/RV5OBihM%2F...",
"cover_file_name": "反贪5.mp4",
"cover_file_category": "video"
},
{ "folder_file_id": "623b00000000d89ef21d4118838aed83de7575ba", "cover_file_id": "6061000000001af7c3034e3590ea7d5a50f58015", "cover_file_name": "bbbc", "cover_file_category": "others" }
]
}
```
#### 读取文件夹封面
POST: `https://api.aliyundrive.com/adrive/v1/file/cover/get`
```json
{ "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }
```
Response:
```json
{
"folder_file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"cover_file_id": "6061000000001af7c3034e3590ea7d5a50f58015",
"cover_file_thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/RV5OBihM%2F...",
"cover_file_name": "firmware.3911(1).dat",
"cover_file_category": "video"
}
```
#### 设置-读取开启文件夹封面
POST: `https://api.aliyundrive.com/adrive/v1/file/cover/config/get`
```json
{}
```
Response:
```json
{"enable":true}
```
#### 设置-保存开启文件夹封面
POST: `https://api.aliyundrive.com/adrive/v1/file/cover/config/set`
```json
{"enable":true}
```
Response:
```text
HTTP/1.1 200 OK
```
================================================
FILE: adrive sdk/fileupload.md
================================================
#### 上传文件 pre_hash
POST: `https://api.aliyundrive.com/v2/file/create_with_proof`
```json
{
"auto_rename": true,
"content_type": "application/octet-stream",
"drive_id": "9600002",
"hidden": false,
"name": "Version 89",
"parent_file_id": "root",
"part_info_list": [{ "part_number": 1, "part_size": 4094816 }],
"pre_hash": "BF9800000000645AAAE912D616759A7C96CC8BFA",
"size": 4094816,
"type": "file"
}
```
Response:
```json
{ "parent_file_id": "", "file_name": "Version 89", "pre_hash": "BF9800000000645AAAE912D616759A7C96CC8BFA", "code": "PreHashMatched", "message": "Pre hash matched." }
```
#### 上传文件
POST: `https://api.aliyundrive.com/v2/file/create_with_proof`
```json
{
"auto_rename": true,
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"content_type": "application/octet-stream",
"drive_id": "9600002",
"hidden": false,
"name": "Version 89",
"parent_file_id": "root",
"part_info_list": [{ "part_number": 1, "part_size": 4094816 }],
"proof_code": "h49KOtR0okk=",
"proof_version": "v1",
"size": 4094816,
"type": "file"
}
```
Response:
```json
//秒传了
{
"parent_file_id": "root",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"rapid_upload": true,
"type": "file",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"domain_id": "bj29",
"drive_id": "9600002",
"file_name": "Version 89",
"encrypt_mode": "none",
"location": "cn-beijing"
}
```
```json
//正常上传
{
"parent_file_id": "root",
"part_info_list": [
{
"part_number": 1,
"part_size": 950,
"upload_url": "https://bj29.cn-beijing.data.alicloudccp.com/AfD0AB6n%2F9600002%2F623b00000000d89ef21d4118838aed83de7575ba%2F623b000000006480042148a5bb586d3c2f053ec8?partNumber=1&uploadId=1382108D9D2C4182B2D4B9AEBB53E2E4&x-oss-access-key-id=LTAIsE5mAn2F493Q&x-oss-expires=1648043319&x-oss-signature=rIWzJDDihQwWO%2FoAxPPjQV2Y0%2F8FXH3h7rd01w%2Biin8%3D&x-oss-signature-version=OSS2",
"internal_upload_url": "http://ccp-bj29-bj-1592982087.oss-cn-beijing-internal.aliyuncs.com/AfD0AB6n%2F9600002%2F623b00000000d89ef21d4118838aed83de7575ba%2F623b000000006480042148a5bb586d3c2f053ec8?partNumber=1&uploadId=1382108D9D2C4182B2D4B9AEBB53E2E4&x-oss-access-key-id=LTAIsE5mAn2F493Q&x-oss-expires=1648043319&x-oss-signature=rIWzJDDihQwWO%2FoAxPPjQV2Y0%2F8FXH3h7rd01w%2Biin8%3D&x-oss-signature-version=OSS2",
"content_type": ""
}
],
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"rapid_upload": false,
"type": "file",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"domain_id": "bj29",
"drive_id": "9600002",
"file_name": "FiddlerRoot.crt",
"encrypt_mode": "none",
"location": "cn-beijing"
}
```
//循环上传分片数据
PUT `https://bj29.cn-beijing.data.alicloudccp.com/AfD0AB6n%2F9600002%2F623b00000000d89ef21d4118838aed83de7575ba%2F623b000000006480042148a5bb586d3c2f053ec8?partNumber=1&uploadId=1382108D9D2C4182B2D4B9AEBB53E2E4&x-oss-access-key-id=LTAIsE5mAn2F493Q&x-oss-expires=1648043319&x-oss-signature=rIWzJDDihQwWO%2FoAxPPjQV2Y0%2F8FXH3h7rd01w%2Biin8%3D&x-oss-signature-version=OSS2`
#### 合并分片
POST: `https://api.aliyundrive.com/v2/file/complete`
```json
{ "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "upload_id": "ED12000000004724833D47B5D5D3C8B9" }
```
Response:
```json
{
"drive_id": "9600002",
"domain_id": "bj29",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"name": "FiddlerRoot.crt",
"type": "file",
"content_type": "application/x-x509-ca-cert",
"created_at": "2022-03-23T12:48:39.888Z",
"updated_at": "2022-03-23T12:48:40.449Z",
"file_extension": "crt",
"hidden": false,
"size": 950,
"starred": false,
"status": "available",
"user_meta": "{\"client\":\"Android\"}",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"parent_file_id": "root",
"crc64_hash": "1548000000008183211",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"category": "others",
"encrypt_mode": "none",
"creator_type": "User",
"creator_id": "9400000000bc480bbcbbb1e074f55a7f",
"last_modifier_type": "User",
"last_modifier_id": "9400000000bc480bbcbbb1e074f55a7f",
"revision_id": "6138000000000b81a8164550b1e7cba1d7fbe111",
"location": "cn-beijing"
}
```
================================================
FILE: adrive sdk/image.md
================================================
#### 探索-人物列表
POST: `https://api.aliyundrive.com/v2/image/list_facegroups`
```json
{ "drive_id": "9600002", "limit": 100 }
```
Response:
```json
{
"items": [
{
"group_id": "Group-00000000-1703-4fc0-bf56-369478ed14df",
"group_name": " ",
"image_count": 15,
"created_at": "2021-09-08T21:46:02.413048705+08:00",
"updated_at": "2021-11-08T13:58:11.452257679+08:00",
"group_cover_url": "https://ccp-bj29-bj-1592982087.oss-cn-beijing.aliyuncs.com/nIaV4oIe%2F...",
"group_cover_file_id": "613800000000c99442f44b99b93b3bdd40e21836",
"group_cover_face_boundary": { "Width": 445, "Height": 532, "Top": 328, "Left": 650 }
}
],
"next_marker": ""
}
```
#### 探索-人物照片列表
POST: `https://api.aliyundrive.com/v2/file/search`
```json
{
"drive_id": "9600002",
"limit": 100,
"order_by": "created_at DESC",
"query": "type = 'file' and category in ['image', 'video'] and face_group_id = 'Group-00000000-1703-4fc0-bf56-369478ed14df' and status = 'available' and hidden = false",
"return_total_count": true
}
```
Response:
```json
{
"items": [
{
"drive_id": "9600002",
"domain_id": "bj29",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"name": "43.jpg",
"type": "file",
"content_type": "application/oct-stream",
"created_at": "2021-09-08T13:46:00.764Z",
"updated_at": "2021-09-08T13:46:02.889Z",
"file_extension": "jpg",
"mime_type": "image/jpeg",
"mime_extension": "jpg",
"hidden": false,
"size": 2178603,
"starred": false,
"status": "available",
"labels": ["日常行为", "职业&角色"],
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"crc64_hash": "1548000000008183211",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"category": "image",
"encrypt_mode": "none",
"image_media_metadata": {
"width": 2400,
"height": 3600,
"faces": "[{\"FaceConfidence\":0.9466279149055481,\"EmotionConfidence\":0.9990111589431763,\"ImageUri\":\"\",\"FaceQuality\":0.7725782990455627,\"Similarity\":0,\"ExternalId\":\"\",\"Attractive\":0.93,\"AttractiveConfidence\":0,\"Age\":23,\"AgeConfidence\":0,\"Gender\":\"FEMALE\",\"Emotion\":\"HAPPY\",\"GenderConfidence\":1,\"FaceId\":\"45f700000000ac19ffbf56adcaa98e3944f28c087cd36b9bc1acde5ae5829fa3\",\"GroupId\":\"Group-00000000-1703-4fc0-bf56-369478ed14df\",\"FaceAttributes\":{\"Glasses\":\"NONE\",\"MaskConfidence\":1,\"Mask\":\"NONE\",\"GlassesConfidence\":1,\"Beard\":\"NONE\",\"BeardConfidence\":1,\"FaceBoundary\":{\"Width\":445,\"Height\":532,\"Top\":328,\"Left\":650},\"HeadPose\":{\"Pitch\":18.937170028686523,\"Roll\":30.32413101196289,\"Yaw\":9.59316635131836}},\"EmotionDetails\":{\"SURPRISED\":0.0000041519870137562975,\"HAPPY\":0.9990111589431763,\"ANGRY\":0.0000027373464490665356,\"DISGUSTED\":0.000007709058991167694,\"SAD\":0.0001263682497665286,\"CALM\":0.0008296924061141908,\"SCARED\":0.0000020987527022953145},\"SimilarFaces\":null}]",
"faces_thumbnail": [
{
"face_id": "45f700000000ac19ffbf56adcaa98e3944f28c087cd36b9bc1acde5ae5829fa3",
"face_group_id": "Group-00000000-1703-4fc0-bf56-369478ed14df",
"face_thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F..."
}
],
"image_quality": { "overall_score": 0.6911791563034058 }
},
"punish_flag": 2,
"revision_id": "6138000000000b81a8164550b1e7cba1d7fbe111"
}
],
"next_marker": "",
"total_count": 15
}
```
#### 探索-从人物的照片中移除一张
POST: `https://api.aliyundrive.com/v2/albums/unassign_facegroup_item`
```json
{ "face_group_id": "Group-00000000-1703-4fc0-bf56-369478ed14df", "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "drive_id": "9600002" }
```
Response:
```text
HTTP/1.1 204 No Content
```
#### 探索-修改人物 name,头像,remarks
POST: `https://api.aliyundrive.com/v2/image/update_facegroup_info`
```json
{ "drive_id": "9600002", "group_cover_face_id": "45f700000000ac19ffbf56adcaa98e3944f28c087cd36b9bc1acde5ae5829fa3", "group_id": "Group-00000000-1703-4fc0-bf56-369478ed14df", "group_name": "fang", "remarks": "-" }
```
Response:
```json
{ "drive_id": "9600002", "group_id": "Group-00000000-1703-4fc0-bf56-369478ed14df" }
```
#### 探索-地点列表
POST: `https://api.aliyundrive.com/v2/image/list_address_groups`
```json
{ "all": false, "image_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg", "video_thumbnail_process": "video/snapshot,t_7000,f_jpg,w_800,h_600,ar_auto,m_fast", "drive_id": "9600002" }
```
Response:
```json
{ "items": [], "next_marker": "" }
```
#### 探索-地点列表
POST: `https://api.aliyundrive.com/v2/image/list_address_groups`
```json
{ "drive_id": "9600002", "address_names": ["杭州市", "北京市"] }
```
Response:
```json
{ "items": [] }
```
#### 探索-标记列表
POST: `https://api.aliyundrive.com/v2/image/list_tags`
```json
{ "all": false, "image_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg", "video_thumbnail_process": "video/snapshot,t_7000,f_jpg,w_800,h_600,ar_auto,m_fast", "drive_id": "9600002" }
```
Response:
```json
{
"tags": [
{
"name": "摄影",
"count": 75,
"cover_url": "https://ccp-bj29-bj-1592982087.oss-cn-beijing.aliyuncs.com/ew5HgHNJ%2F...",
"cover_file_id": "6061000000001af7c3034e3590ea7d5a50f58015",
"cover_file_category": "",
"cover_tag_confidence": 1,
"cover_overall_score": 0.7421030402183533
}
]
}
```
#### drive 内图片总数
POST: `https://api.aliyundrive.com/v2/image/get_photo_count`
```json
{ "drive_id": "9600002" }
```
Response:
```json
{ "image_count": 126 }
```
================================================
FILE: adrive sdk/member.md
================================================
#### 列出已订阅
POST: `https://api.aliyundrive.com/adrive/v1/member/list_following`
```json
{ "limit": 50, "order_by": "updated_at", "order_direction": "DESC" }
```
Response:
```json
{
"items": [
{
"description": "中国国家地理景观官方账号,带你领略目酣神醉的壮美景观、发现中国各地独具特色的人文胜迹。",
"avatar": "https://ccp-bj29-bj-1592982087.oss-cn-beijing.aliyuncs.com/2GhCur3G%2F...",
"user_id": "9400000000bc480bbcbbb1e074f55a7f",
"nick_name": "中国国家地理景观",
"phone": "136***902",
"is_following": true,
"has_unread_message": true,
"latest_messages": [
{
"creator": {
"description": "中国国家地理景观官方账号,带你领略目酣神醉的壮美景观、发现中国各地独具特色的人文胜迹。",
"avatar": "https://ccp-bj29-bj-1592982087.oss-cn-beijing.aliyuncs.com/2GhCur3G%2F...",
"user_id": "9400000000bc480bbcbbb1e074f55a7f",
"nick_name": "中国国家地理景观",
"phone": "136***902"
},
"action": "sharelink.create",
"content": {
"share": {
"popularity": 6019,
"share_id": "6RRP4gDWwzE",
"share_msg": "「广东100个最美观景拍摄点-...拍摄季节:四季).jpg」,点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。",
"share_name": "广东100个最美观景拍摄点-...拍摄季节:四季).jpg",
"description": "",
"expiration": "",
"expired": false,
"share_pwd": "",
"share_url": "https://www.aliyundrive.com/s/6RRP4gDWwzE",
"creator": "01d1ea604d644cfb83ac7e9be530db8e",
"drive_id": "347756450",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"file_id_list": ["6228000000002c31be704ca28671f09712894f4f"],
"preview_count": 2139,
"save_count": 802,
"download_count": 27,
"status": "enabled",
"created_at": "2022-03-20T13:55:42.630Z",
"updated_at": "2022-03-21T08:04:11.464Z",
"first_file": {
"trashed": false,
"category": "image",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"content_type": "application/oct-stream",
"crc64_hash": "1548000000008183211",
"created_at": "2022-02-28T09:09:54.329Z",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"drive_id": "347756450",
"encrypt_mode": "none",
"file_extension": "jpg",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"hidden": false,
"image_media_metadata": {
"height": 1464,
"image_quality": { "overall_score": 0.6488162279129028 },
"width": 2500
},
"labels": ["旅游&地理", "体育运动", "植物", "徒步", "自然景观", "植被", "高地", "山脊", "山峰", "丘陵", "山", "云", "山中避暑地", "山脉", "雾", "天空", "荒野", "雾景", "森林"],
"mime_type": "image/jpeg",
"name": "广东100个最美观景拍摄点-油岭瑶寨(最佳拍摄季节:四季).jpg",
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"punish_flag": 0,
"size": 3829229,
"starred": false,
"status": "available",
"thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"type": "file",
"updated_at": "2022-02-28T09:09:57.283Z",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"user_meta": "{\"client\":\"desktop\"}"
},
"allow_subscribe": false,
"current_sync_status": 3,
"popularity_str": "6K",
"popularity_emoji": "\uD83D\uDD25",
"full_share_msg": "「广东100个最美观景拍摄点-...拍摄季节:四季).jpg」https://www.aliyundrive.com/s/6RRP4gDWwzE\n点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。",
"display_name": "广东100个最美观景拍摄点-油岭瑶寨(最佳拍摄季节:四季).jpg"
},
"share_id": "6RRP4gDWwzE",
"drive_id": "347756450",
"file_id_list": ["6228000000002c31be704ca28671f09712894f4f"],
"file_list": [
{
"category": "image",
"created_at": "2022-02-28T09:09:54.329Z",
"domain_id": "bj29",
"drive_id": "347756450",
"file_extension": "jpg",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"image_media_metadata": { "height": 1464, "width": 2500 },
"mime_type": "image/jpeg",
"name": "广东100个最美观景拍摄点-油岭瑶寨(最佳拍摄季节:四季).jpg",
"parent_file_id": "root",
"punish_flag": 0,
"share_id": "6RRP4gDWwzE",
"size": 3829229,
"thumbnail": "https://pdsapi.aliyundrive.com/v2/redirect?id=5c2b8c638c27409f8516c5fce2c320bc",
"type": "file",
"updated_at": "2022-02-28T09:09:57.283Z"
}
]
},
"created": 1647784542657,
"creator_id": "01d1ea604d644cfb83ac7e9be530db8e",
"sequence_id": 1647784542661000,
"display_action": "分享了 广东100个最美观景拍摄点-油岭瑶寨(最佳拍摄季节:四季).jpg"
}
]
}
],
"total_count": 2
}
```
#### 标记已读(订阅的一个用户有动态)
POST: `https://api.aliyundrive.com/adrive/v1/member/mark_read`
```json
{ "user_id": "9400000000bc480bbcbbb1e074f55a7f" }
```
Response:
```json
{}
```
#### 取消订阅
POST: `https://api.aliyundrive.com/adrive/v1/member/unfollow_user`
```json
{ "user_id": "9400000000bc480bbcbbb1e074f55a7f" }
```
Response:
```json
{}
```
#### 增加订阅
POST: `https://api.aliyundrive.com/adrive/v1/member/follow_user`
```json
{ "user_id": "9400000000bc480bbcbbb1e074f55a7f" }
```
Response:
```json
{}
```
================================================
FILE: adrive sdk/note.md
================================================
#### 笔记-drive_id
POST: `https://api.aliyundrive.com/anote/v1/drive/info`
```json
```
Response:
```json
{ "user_id": "9400000000bc480bbcbbb1e074f55a7f", "drive_id": "9600002" }
```
#### 笔记列表
POST: `https://api.aliyundrive.com/anote/v1/note/list`
```json
{ "order_direction": "desc", "order_by": 2, "media_category_list": ["image"], "limit": 100, "status": 0 }
```
Response:
```json
{
"result": [
{
"status": 0,
"top": 0,
"title": "高三总复习CETV.mp4",
"summary": " 回顾改革\n三生俄文\n",
"media": "[]",
"type": "common",
"value": null,
"version": null,
"user_id": "9400000000bc480bbcbbb1e074f55a7f",
"doc_id": "feb400000000a0a7f69588aeed0567c8e5c31d1d",
"drive_id": "9600002",
"created_at": 1647859789126,
"updated_at": 1647860036653,
"media_list": []
},
{
"status": 0,
"top": 0,
"title": "iyvxb",
"summary": "",
"media": "[]",
"type": "common",
"value": null,
"version": null,
"user_id": "9400000000bc480bbcbbb1e074f55a7f",
"doc_id": "feb400000000a0a7f69588aeed0567c8e5c31d1d",
"drive_id": "9600002",
"created_at": 1635075204623,
"updated_at": 1635075211182,
"media_list": []
},
{
"status": 0,
"top": 0,
"title": "ggg",
"summary": "ggc\n",
"media": "[]",
"type": "common",
"value": null,
"version": null,
"user_id": "9400000000bc480bbcbbb1e074f55a7f",
"doc_id": "feb400000000a0a7f69588aeed0567c8e5c31d1d",
"drive_id": "9600002",
"created_at": 1635074956002,
"updated_at": 1635074983777,
"media_list": []
},
{
"status": 0,
"top": 0,
"title": "欢迎使用笔记",
"summary": "阿里云盘「笔记」是你在数字生活中的又一个伙伴,帮助你随时记录生活、学习、工作中的各种重要信息。你的每一次起心动念,都会留下属于自己的思想痕迹。抓住它们、记录它们,它们会是你在数字世界中重要的资产。 · 笔记能做什么?\n · 阿里云盘「笔记」将有两大核心能力:\n · 1. 在云盘中跨云服务记录想法 · 1. 管理信息、知识 · \uD83D\uDC47下面我们简单为大家介绍一下笔记的具体功能:\n · 灵活强大的编辑器\n",
"media": "[]",
"type": "common",
"value": null,
"version": null,
"user_id": "9400000000bc480bbcbbb1e074f55a7f",
"doc_id": "feb400000000a0a7f69588aeed0567c8e5c31d1d",
"drive_id": "9600002",
"created_at": 1635074953183,
"updated_at": 1635074953183,
"media_list": [
{ "fileId": "61754388dab29ac982464de485c38a5f67d07bc1", "driveId": "9600002", "resourceType": null, "dataPreviewUrl": null, "dataSrc": null, "dataAppId": null, "dataObjectId": null, "dataCategory": null },
{ "fileId": "61754389b1a68525c17d4235af597722dbd32370", "driveId": "9600002", "resourceType": null, "dataPreviewUrl": null, "dataSrc": null, "dataAppId": null, "dataObjectId": null, "dataCategory": null },
{ "fileId": "61754389ead68e4cce6b4499b5512585d94a011b", "driveId": "9600002", "resourceType": null, "dataPreviewUrl": null, "dataSrc": null, "dataAppId": null, "dataObjectId": null, "dataCategory": null }
]
}
],
"marker": "",
"total_count": 4
}
```
#### 一个笔记的简介
POST: `https://api.aliyundrive.com/anote/v1/note/getNote`
```json
{ "exclude_fields": ["value"], "doc_id": "feb400000000a0a7f69588aeed0567c8e5c31d1d" }
```
Response:
```json
{
"status": 0,
"top": 0,
"title": "欢迎使用笔记",
"summary": "阿里云盘「笔记」是你在数字生活中的又一个伙伴,帮助你随时记录生活、学习、工作中的各种重要信息。你的每一次起心动念,都会留下属于自己的思想痕迹。抓住它们、记录它们,它们会是你在数字世界中重要的资产。 · 笔记能做什么?\n · 阿里云盘「笔记」将有两大核心能力:\n · 1. 在云盘中跨云服务记录想法 · 1. 管理信息、知识 · \uD83D\uDC47下面我们简单为大家介绍一下笔记的具体功能:\n · 灵活强大的编辑器\n",
"media": "[]",
"type": "common",
"value": null,
"version": 1,
"user_id": "9400000000bc480bbcbbb1e074f55a7f",
"doc_id": "feb400000000a0a7f69588aeed0567c8e5c31d1d",
"drive_id": "9600002",
"created_at": 1635074953183,
"updated_at": 1635074953183,
"media_list": [
{
"fileId": null,
"driveId": null,
"resourceType": null,
"dataPreviewUrl": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"dataSrc": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"dataAppId": "anote",
"dataObjectId": "9600002_61754389ead68e4cce6b4499b5512585d94a011b",
"dataCategory": "image"
}
]
}
```
#### 一个笔记的完整内容
POST: `https://api.aliyundrive.com/anote/v1/note/getNote`
```json
{ "doc_id": "feb400000000a0a7f69588aeed0567c8e5c31d1d" }
```
Response:
```json
{
"status": 0,
"top": 0,
"title": "欢迎使用笔记",
"summary": "阿里云盘「笔记」是你在数字生活中的又一个伙伴,帮助你随时记录生活、学习、工作中的各种重要信息。你的每一次起心动念,都会留下属于自己的思想痕迹。抓住它们、记录它们,它们会是你在数字世界中重要的资产。 · 笔记能做什么?\n · 阿里云盘「笔记」将有两大核心能力:\n · 1. 在云盘中跨云服务记录想法 · 1. 管理信息、知识 · \uD83D\uDC47下面我们简单为大家介绍一下笔记的具体功能:\n · 灵活强大的编辑器\n",
"media": "[]",
"type": "common",
"value": [
"root",
{},
[
"p",
{},
[
"span",
{ "data-type": "text" },
[
"span",
{ "data-type": "leaf" },
"阿里云盘「笔记」是你在数字生活中的又一个伙伴,帮助你随时记录生活、学习、工作中的各种重要信息。你的每一次起心动念,都会留下属于自己的思想痕迹。抓住它们、记录它们,它们会是你在数字世界中重要的资产。"
]
]
],
[
"h2",
{ "spacing": { "before": 14.666666666666668, "after": 14.666666666666668, "line": 0.8529411764705882 } },
["span", { "data-type": "text" }, ["span", { "bold": true, "sz": 16, "szUnit": "pt", "data-type": "leaf" }, "笔记能做什么?\n"]]
],
["p", { "ind": { "left": 0 } }, ["span", { "data-type": "text" }, ["span", { "data-type": "leaf" }, "阿里云盘「笔记」将有两大核心能力:\n"]]],
[
"p",
{
"ind": { "left": 0 },
"list": { "listId": "kak98pl4pzh", "level": 0, "isOrdered": true, "isTaskList": false, "listStyleType": "DEC_LEN_LROM_P", "symbolStyle": {}, "listStyle": { "format": "decimal", "text": "%1.", "align": "left" }, "hideSymbol": false }
},
["span", { "data-type": "text" }, ["span", { "data-type": "leaf" }, "在云盘中跨"], ["span", { "bold": true, "data-type": "leaf" }, "云服务"], ["span", { "data-type": "leaf" }, "记录想法"]]
],
[
"p",
{},
["span", { "data-type": "text" }, ["span", { "data-type": "leaf" }, ""]],
[
"object",
{
"dataCategory": "image",
"dataId": "0079012b-d4c9-43b0-ad46-a394ef944aa4",
"dataAppId": "anote",
"dataObjectId": "9600002_61754388dab29ac982464de485c38a5f67d07bc1",
"dataResourceType": "file",
"dataMetadata": { "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba" },
"aslMetadata": {},
"dataPreviewUrl": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"dataSrc": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F..."
},
["span", { "data-type": "text" }, ["span", { "data-type": "leaf" }, ""]]
],
["span", { "data-type": "text" }, ["span", { "data-type": "leaf" }, "\n"]]
]
],
"version": 1,
"user_id": "9400000000bc480bbcbbb1e074f55a7f",
"doc_id": "feb400000000a0a7f69588aeed0567c8e5c31d1d",
"drive_id": "9600002",
"created_at": 1635074953183,
"updated_at": 1635074953183,
"media_list": [
{
"fileId": null,
"driveId": null,
"resourceType": null,
"dataPreviewUrl": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"dataSrc": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"dataAppId": "anote",
"dataObjectId": "9600002_61754389b1a68525c17d4235af597722dbd32370",
"dataCategory": "image"
}
]
}
```
#### 更新一个笔记标题
POST: `https://api.aliyundrive.com/anote/v1/note/updateTitle`
```json
{ "doc_id": "feb400000000a0a7f69588aeed0567c8e5c31d1d", "title": "我" }
```
Response:
```text
HTTP/1.1 200 OK
```
#### 更新一个笔记内容
POST: `https://api.aliyundrive.com/anote/v1/note/patch`
```json
{
"ops": [
{ "op": "add", "path": "/5", "value": ["p", {}, ["span", { "data-type": "text" }, ["span", { "data-type": "leaf" }, "三生俄文将和 v 将祸福倚伏具有肌肤光滑"]]] },
{ "op": "remove", "path": "/6" }
],
"doc_id": "feb400000000a0a7f69588aeed0567c8e5c31d1d",
"version": 7,
"summary": " 回顾改革\n三生俄文将和 v 将祸福倚伏具有肌肤光滑\n"
}
```
Response:
```json
{ "docId": "feb400000000a0a7f69588aeed0567c8e5c31d1d", "version": 8 }
```
https://www.aliyundrive.com/static/note-mobile-editor?docId=feb4c7c1f55fa0a7f69588aeed0567c8e5c31d1d
#### 置顶一个笔记
POST: `https://api.aliyundrive.com/anote/v1/note/batchUpdate`
```json
{ "doc_ids": ["feb400000000a0a7f69588aeed0567c8e5c31d1d"], "operation": 1 }
```
Response:
```json
{ "result": [] }
```
#### 删除一个笔记
POST: `https://api.aliyundrive.com/anote/v1/note/batchUpdate`
```json
{ "doc_ids": ["feb400000000a0a7f69588aeed0567c8e5c31d1d"], "operation": 2 }
```
Response:
```json
{ "result": [] }
```
#### 新建一个笔记
POST: `https://api.aliyundrive.com/anote/v1/note/create`
```json
{ "value": ["root", {}], "title": "", "drive_id": "" }
```
Response:
```json
{
"status": 0,
"top": 0,
"title": "",
"summary": "",
"media": "[]",
"type": "common",
"user_id": "9400000000bc480bbcbbb1e074f55a7f",
"doc_id": "feb400000000a0a7f69588aeed0567c8e5c31d1d",
"drive_id": "9600002",
"created_at": 1647862805027,
"updated_at": 1647862805027,
"media_list": null
}
```
================================================
FILE: adrive sdk/offline.md
================================================
#### 离线任务列表
POST: `https://api.aliyundrive.com/adrive/v1/offline/jobsList`
```json
{}
```
Response:
```json
{ "maxResults": 10, "nextToken": "", "result": [] }
```
================================================
FILE: adrive sdk/recyclebin.md
================================================
#### 列出回收站
POST: `https://api.aliyundrive.com/v2/recyclebin/list`
```json
{ "fields": "*", "all": false, "drive_id": "9600002", "limit": 50 }
```
Response:
```json
{
"items": [
{
"drive_id": "9600002",
"domain_id": "bj29",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"name": "[1.3.1].mp4",
"type": "file",
"content_type": "application/oct-stream",
"created_at": "2022-01-19T04:51:12.832Z",
"updated_at": "2022-03-10T03:10:04.074Z",
"trashed_at": "2022-03-10T03:10:04.074Z",
"file_extension": "mp4",
"mime_type": "application/octet-stream",
"mime_extension": "unknown",
"hidden": false,
"size": 94814980,
"starred": false,
"status": "available",
"labels": ["艺术品"],
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"crc64_hash": "1548000000008183211",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"category": "video",
"encrypt_mode": "none",
"video_media_metadata": {
"width": 1280,
"height": 720,
"video_media_video_stream": [{ "duration": "1530.680000", "clarity": "720", "fps": "25/1", "code_name": "h264" }],
"video_media_audio_stream": [{ "duration": "1530.581333", "channels": 2, "channel_layout": "stereo", "bit_rate": "143625", "code_name": "aac", "sample_rate": "48000" }],
"duration": "1530.701333"
},
"punish_flag": 0,
"creator_type": "User",
"creator_id": "9400000000bc480bbcbbb1e074f55a7f",
"creator_name": "myname",
"last_modifier_type": "User",
"last_modifier_id": "9400000000bc480bbcbbb1e074f55a7f",
"last_modifier_name": "myname",
"revision_id": "6138000000000b81a8164550b1e7cba1d7fbe111"
}
],
"next_marker": ""
}
```
#### 恢复文件
POST: `https://api.aliyundrive.com/v2/recyclebin/restore`
```json
{ "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "drive_id": "9600002" }
```
Response:
```text
HTTP/1.1 204 No Content
```
#### 删除文件(放入回收站)
POST: `https://api.aliyundrive.com/v2/recyclebin/trash`
```json
{ "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }
```
Response:
```text
HTTP/1.1 204 No Content
```
#### 删除文件(从回收站彻底删除)
POST: `https://api.aliyundrive.com/v3/file/delete`
```json
{ "permanently": true, "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "drive_id": "9600002" }
```
Response:
```text
HTTP/1.1 204 No Content
```
#### 清空回收站
POST: `https://api.aliyundrive.com/v2/recyclebin/clear`
```json
{ "drive_id": "9600002" }
```
Response:
```json
{ "domain_id": "bj29", "drive_id": "9600002", "task_id": "e026000000007f609bcd6aa71b8fde94" }
```
================================================
FILE: adrive sdk/reddot.md
================================================
#### 订阅的账号有更新
POST: `https://api.aliyundrive.com/adrive/v1/reddot/get`
```json
{}
```
Response:
```json
{
"items": [
{
"code": "followed_user_has_new_activity",
"context": {
"creator": {
"description": "中国国家地理景观官方账号,带你领略目酣神醉的壮美景观、发现中国各地独具特色的人文胜迹。",
"avatar": "https://ccp-bj29-bj-1592982087.oss-cn-beijing.aliyuncs.com/2GhCur3G%2F...",
"user_id": "9400000000bc480bbcbbb1e074f55a7f",
"nick_name": "中国国家地理景观",
"phone": "136***902"
}
}
}
]
}
```
#### 标记已读
POST: `https://api.aliyundrive.com/adrive/v1/reddot/read`
```json
{"code":"followed_user_has_new_activity"}
```
Response:
```json
{}
```
================================================
FILE: adrive sdk/sbox.md
================================================
#### 保险箱
POST: `https://api.aliyundrive.com/v2/sbox/get`
```json
{}
```
Response:
```json
{ "drive_id": "9600002", "sbox_used_size": 0, "sbox_real_used_size": 0, "sbox_total_size": 53687091200, "recommend_vip": "svip", "pin_setup": true, "locked": true, "insurance_enabled": false }
```
#### 解锁
POST: `https://api.aliyundrive.com/v2/sbox/unlock`
```json
{
"drive_id": "9600002",
"app_id": "25dzX3vbYqktVxyX",
"encrypted_pin": "pteN00000000/gLZpQaFKA==",
"encrypted_key": "nNaV......r13doYbpmJxag=="
}
```
Response:
```json
{ "drive_id": "9600002" }
```
#### 重新锁定
POST: `https://api.aliyundrive.com/v2/sbox/lock`
```json
{"drive_id":"9600002"}
```
Response:
```json
{ "drive_id": "9600002" }
```
================================================
FILE: adrive sdk/search.md
================================================
#### 首页 widgets
POST: `https://api.aliyundrive.com/v2/file/search`
```json
//截图
{
"return_total_count": true,
"image_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg",
"order_by": "last_access_at DESC,updated_at DESC,image_time DESC",
"query": "(label = '手机截图' or label = '截图') and category in ['video','image'] and status = 'available' and hidden = false",
"limit": 100,
"drive_id": "9600002"
}
```
```json
//证件
{
"return_total_count": true,
"image_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg",
"order_by": "last_access_at DESC,updated_at DESC,image_time DESC",
"query": "(label = '身份证明' or label = '证件' or label = '身份证' or label = '银行卡' or label = '护照') and category in ['video','image'] and status = 'available' and hidden = false",
"limit": 100,
"drive_id": "9600002"
}
```
```json
//最近图片
{
"return_total_count": true,
"image_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg",
"order_by": "last_access_at DESC,updated_at DESC,image_time DESC",
"query": "category = 'image' and status = 'available' and hidden = false",
"limit": 100,
"drive_id": "9600002"
}
```
```json
//最近视频
{
"return_total_count": true,
"image_thumbnail_process": "image/resize,m_lfit,w_256,limit_0/format,jpg",
"order_by": "last_access_at DESC,updated_at DESC,image_time DESC",
"query": "category = 'video' and status = 'available' and hidden = false",
"limit": 100,
"drive_id": "9600002"
}
```
Response:
```json
filelist
```
#### 列出人物(face)的图片
POST: `https://api.aliyundrive.com/v2/file/search`
```json
{
"drive_id": "9600002",
"limit": 100,
"order_by": "created_at DESC",
"query": "type = 'file' and category in ['image', 'video'] and face_group_id = 'Group-00000000-1703-4fc0-bf56-369478ed14df' and status = 'available' and hidden = false",
"return_total_count": true
}
```
Response:
```json
filelist
```
================================================
FILE: adrive sdk/sfiia.md
================================================
#### 文件中的图片
POST: `https://api.aliyundrive.com/adrive/v1/sfiia/get_recommends`
```json
{ "drive_id": "9600002" }
```
Response:
```json
{
"items": [
{
"category": "image",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"content_type": "application/oct-stream",
"crc64_hash": "1548000000008183211",
"created_at": "2021-10-16T02:10:51.625Z",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"drive_id": "9600002",
"encrypt_mode": "none",
"file_extension": "png",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"hidden": false,
"labels": ["衣服", "外貌特征", "其他事物", "艺术品", "笑脸", "墨镜", "护目镜", "微笑", "颜色", "动画", "黄色"],
"mime_type": "image/png",
"name": "cool_11.png",
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"punish_flag": 0,
"size": 80480,
"starred": false,
"status": "available",
"thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"type": "file",
"updated_at": "2021-10-16T02:10:51.625Z",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F..."
}
],
"total_image_count": 28943
}
```
================================================
FILE: adrive sdk/share.md
================================================
#### 我创建的分享链接
POST: `https://api.aliyundrive.com/adrive/v3/share_link/list`
```json
{ "category": "file,album", "order_direction": "DESC", "order_by": "created_at", "creator": "9400000000bc480bbcbbb1e074f55a7f", "limit": 100 }
```
Response:
```json
{
"items": [
{
"popularity": 6,
"share_id": "9Q00000000L",
"share_msg": "「testali.alimc」,点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。",
"share_name": "testali.alimc",
"description": "",
"expiration": "2022-04-08T10:29:22.000Z",
"expired": false,
"share_pwd": "",
"share_url": "https://www.aliyundrive.com/s/9Q00000000L",
"creator": "9400000000bc480bbcbbb1e074f55a7f",
"drive_id": "9600002",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"file_id_list": ["6228000000002c31be704ca28671f09712894f4f"],
"preview_count": 2,
"save_count": 0,
"download_count": 0,
"status": "enabled",
"created_at": "2022-03-09T10:29:23.272Z",
"updated_at": "2022-03-19T04:54:26.435Z",
"first_file": {
"trashed": false,
"category": "others",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"content_type": "application/oct-stream",
"crc64_hash": "1548000000008183211",
"created_at": "2022-03-09T10:29:02.190Z",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"drive_id": "9600002",
"encrypt_mode": "none",
"file_extension": "alimc",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"hidden": false,
"mime_type": "text/plain; charset=utf-8",
"name": "testali.alimc",
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"punish_flag": 0,
"size": 7318,
"starred": false,
"status": "available",
"type": "file",
"updated_at": "2022-03-09T10:29:51.415Z",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"user_meta": "{\"client\":\"web\"}"
},
"current_sync_status": 1,
"next_sync_status": 2,
"full_share_msg": "「testali.alimc」https://www.aliyundrive.com/s/9Q00000000L\n点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。",
"popularity_str": "6",
"display_name": "testali.alimc"
},
{
"album": {
"owner": "ccff000000004d75b5788a481eed8386",
"name": "fff",
"description": "",
"album_id": "cfe400000000478599575b69356c5a4962383669",
"file_count": 0,
"image_count": 0,
"video_count": 0,
"created_at": 1642306691089,
"updated_at": 1642306691089,
"is_sharing": true
},
"popularity": 9,
"share_id": "9Q00000000L",
"share_msg": "我用阿里云盘分享了相簿「fff」,复制这段内容打开「阿里云盘」APP 即可获取。\n提取码: ni5u",
"share_name": "fff",
"description": "",
"expiration": "2022-04-06T03:56:13.839Z",
"expired": false,
"share_pwd": "ni5u",
"share_url": "https://www.aliyundrive.com/s/9Q00000000L",
"creator": "9400000000bc480bbcbbb1e074f55a7f",
"drive_id": "9600002",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"album_id": "cfe400000000478599575b69356c5a4962383669",
"preview_count": 4,
"save_count": 0,
"download_count": 0,
"status": "enabled",
"created_at": "2022-03-07T03:56:13.789Z",
"updated_at": "2022-03-09T13:37:25.895Z",
"full_share_msg": "相簿分享「fff」https://www.aliyundrive.com/s/9Q00000000L 提取码: ni5u\n点击链接保存,或者复制本段内容,打开「阿里云盘」APP,使用相册备份节省手机空间,体验智能分类和回忆自动生成。",
"popularity_str": "9",
"display_name": "相簿 ∙ fff"
}
],
"next_marker": ""
}
```
#### 读取一条自己的分享链接的信息
POST: `https://api.aliyundrive.com/adrive/v2/share_link/get`
```json
{ "share_id": "9Q00000000L" }
```
Response:
```json
{
"popularity": 3,
"share_id": "9Q00000000L",
"share_msg": "「返回.gif」,点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。",
"share_name": "返回.gif",
"description": "",
"expiration": "2022-04-20T04:41:04.509Z",
"expired": false,
"share_pwd": "",
"share_url": "https://www.aliyundrive.com/s/9Q00000000L",
"creator": "9400000000bc480bbcbbb1e074f55a7f",
"drive_id": "9600002",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"file_id_list": ["6228000000002c31be704ca28671f09712894f4f"],
"preview_count": 0,
"save_count": 0,
"download_count": 0,
"status": "enabled",
"created_at": "2021-11-09T17:47:43.516Z",
"updated_at": "2022-03-21T04:41:05.159Z",
"first_file": {
"trashed": false,
"category": "image",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"content_type": "application/oct-stream",
"crc64_hash": "1548000000008183211",
"created_at": "2021-11-05T13:40:00.994Z",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"drive_id": "9600002",
"encrypt_mode": "none",
"file_extension": "gif",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"hidden": false,
"image_media_metadata": {
"exif": "{\"FileSize\":{\"value\":\"58391\"},\"Format\":{\"value\":\"gif\"},\"ImageHeight\":{\"value\":\"556\"},\"ImageWidth\":{\"value\":\"608\"}}",
"height": 556,
"image_quality": { "overall_score": 0.6453010439872742 },
"width": 608
},
"labels": ["其他场景", "其他事物", "日常用品", "颜色", "文本", "手机截图", "信", "蓝色"],
"mime_type": "image/gif",
"name": "返回.gif",
"parent_file_id": "root",
"punish_flag": 0,
"size": 58391,
"starred": false,
"status": "available",
"thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"type": "file",
"updated_at": "2022-01-24T10:53:36.473Z",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"user_meta": "{\"client\":\"web\"}"
},
"current_sync_status": 1,
"next_sync_status": 2,
"popularity_str": "3",
"full_share_msg": "「返回.gif」https://www.aliyundrive.com/s/9Q00000000L\n点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。",
"display_name": "返回.gif"
}
```
#### 复制分享链接到剪切板
POST: `https://api.aliyundrive.com/adrive/v2/share_link/get_share_msg`
```json
{ "share_id": "9Q00000000L" }
```
Response:
```json
{ "full_share_msg": "「返回.gif」https://www.aliyundrive.com/s/9Q00000000L\n点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。", "share_url": "https://www.aliyundrive.com/s/9Q00000000L" }
```
#### 修改分享链接
POST: `https://api.aliyundrive.com/adrive/v2/share_link/update`
```json
{ "share_id": "9Q00000000L", "expiration": "2022-04-20T04:41:04.509Z" }
```
Response:
```json
{
"popularity": 3,
"share_id": "9Q00000000L",
"share_msg": "「返回.gif」,点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。",
"share_name": "返回.gif",
"description": "",
"expiration": "2022-04-20T04:41:04.509Z",
"expired": false,
"share_pwd": "",
"share_url": "https://www.aliyundrive.com/s/9Q00000000L",
"creator": "9400000000bc480bbcbbb1e074f55a7f",
"drive_id": "9600002",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"file_id_list": ["6228000000002c31be704ca28671f09712894f4f"],
"preview_count": 0,
"save_count": 0,
"download_count": 0,
"status": "enabled",
"created_at": "2021-11-09T17:47:43.516Z",
"updated_at": "2022-03-21T04:41:05.159Z",
"first_file": {
"trashed": false,
"category": "image",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"content_type": "application/oct-stream",
"crc64_hash": "1548000000008183211",
"created_at": "2021-11-05T13:40:00.994Z",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"drive_id": "9600002",
"encrypt_mode": "none",
"file_extension": "gif",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"hidden": false,
"image_media_metadata": {
"height": 556,
"image_quality": { "overall_score": 0.6453010439872742 },
"width": 608
},
"labels": ["其他场景", "其他事物", "日常用品", "颜色", "文本", "手机截图", "信", "蓝色"],
"mime_type": "image/gif",
"name": "返回.gif",
"parent_file_id": "root",
"punish_flag": 0,
"size": 58391,
"starred": false,
"status": "available",
"thumbnail": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"type": "file",
"updated_at": "2022-01-24T10:53:36.473Z",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"user_meta": "{\"client\":\"web\"}"
},
"current_sync_status": 1,
"next_sync_status": 2,
"popularity_str": "3",
"full_share_msg": "「返回.gif」https://www.aliyundrive.com/s/9Q00000000L\n点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。",
"display_name": "返回.gif"
}
```
#### 删除分享链接
POST: `https://api.aliyundrive.com/adrive/v2/share_link/cancel`
```json
{ "share_id": "9Q00000000L" }
```
Response:
```text
HTTP/1.1 200 OK
```
#### 创建分享链接
POST: `https://api.aliyundrive.com/adrive/v2/share_link/create`
```json
{ "drive_id": "9600002", "file_id_list": ["6228000000002c31be704ca28671f09712894f4f"], "expiration": "2022-04-20T08:01:05.278Z" }
```
Response:
```json
{
"popularity": 3,
"share_id": "9Q00000000L",
"share_msg": "「dotull_x86.exe」,点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。",
"share_name": "dotull_x86.exe",
"description": "",
"expiration": "2022-04-20T08:01:05.278Z",
"expired": false,
"share_pwd": "",
"share_url": "https://www.aliyundrive.com/s/9Q00000000L",
"creator": "9400000000bc480bbcbbb1e074f55a7f",
"drive_id": "9600002",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"file_id_list": ["6228000000002c31be704ca28671f09712894f4f"],
"preview_count": 0,
"save_count": 0,
"download_count": 0,
"status": "enabled",
"created_at": "2022-03-21T08:01:03.739Z",
"updated_at": "2022-03-21T08:01:03.739Z",
"first_file": {
"trashed": false,
"category": "others",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"content_type": "application/oct-stream",
"crc64_hash": "1548000000008183211",
"created_at": "2021-12-05T02:05:08.125Z",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"drive_id": "9600002",
"encrypt_mode": "none",
"file_extension": "exe",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"hidden": false,
"mime_type": "application/vnd.microsoft.portable-executable",
"name": "dotull_x86.exe",
"parent_file_id": "root",
"punish_flag": 0,
"size": 50449456,
"starred": false,
"status": "available",
"type": "file",
"updated_at": "2021-12-05T02:05:08.125Z",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"user_meta": "{\"client\":\"web\"}"
},
"is_photo_collection": false,
"sync_to_homepage": false,
"full_share_msg": "「dotull_x86.exe」https://www.aliyundrive.com/s/9Q00000000L\n点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。",
"popularity_str": "3",
"display_name": "dotull_x86.exe"
}
```
#### 检查是否可以分享
POST: `https://api.aliyundrive.com/adrive/v2/share_link/check_available`
```json
{ "drive_file_list": [{ "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba" }] }
```
Response:
```json
{
"invalid_items": [
{
"trashed": false,
"category": "others",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"content_hash_name": "sha1",
"content_type": "application/oct-stream",
"crc64_hash": "1548000000008183211",
"created_at": "2021-12-05T02:42:36.249Z",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"drive_id": "9600002",
"encrypt_mode": "none",
"file_extension": "qrc",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"hidden": false,
"mime_type": "application/octet-stream",
"name": "赵希予 - 克莱因蓝 - 186 - 克莱因蓝_qm.qrc",
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"punish_flag": 0,
"size": 3979,
"starred": false,
"status": "available",
"type": "file",
"updated_at": "2022-03-21T13:16:16.209Z",
"upload_id": "ED12000000004724833D47B5D5D3C8B9",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"user_meta": "{\"client\":\"web\"}"
}
]
}
```
#### 分析出 shareid(必须是规范的格式)
POST: `https://api.aliyundrive.com/adrive/v2/share_link/extract_code`
```json
{ "content": "「The.Battle.at.L...获取更多免费资源.mkv」https://www.aliyundrive.com/s/9Q00000000L 提取码: f259\n点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。" }
```
Response:
```json
{ "code": "200", "message": "success", "data": { "share_id": "9Q00000000L", "share_pwd": "f259" }, "resultCode": "200" }
```
#### 读取分享链接信息
POST: `https://api.aliyundrive.com/adrive/v2/share_link/get_share_by_anonymous`
```json
{ "share_id": "9Q00000000L" }
```
Response:
```json
{
"creator_id": "deb7000972d84bb6bfa74e42b22beb07",
"creator_name": "霸***组",
"creator_phone": "157***610",
"expiration": "",
"updated_at": "2022-03-22T03:16:01.088Z",
"vip": "non-vip",
"avatar": "https://ccp-bj29-bj-1592982087.oss-cn-beijing.aliyuncs.com/2GhCur3G%2F...",
"share_name": "军检察官多伯曼犬",
"file_count": 1,
"allow_subscribe": false,
"is_creator_followable": true,
"is_following_creator": true,
"display_name": "军检察官多伯曼犬",
"file_infos": [{ "type": "folder", "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "file_name": "军检察官多伯曼犬" }]
}
```
#### 打开分享链接
POST: `https://api.aliyundrive.com/v2/share_link/get_share_token`
```json
{ "share_id": "9Q00000000L", "share_pwd": "" }
```
Response:
```json
{
"share_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJjdXN0b21Kc29uIjoie1wiZG9tYWluX2lkXCI6XCJiajI5XCIsXCJzaGFyZV9pZFwiOlwiaTJRVllCVVVWQ1dcIixcImNyZWF0b3JcIjpcImNjZmY3ZDYwZWZkZjRkNzRiNTc4OGE0ODFlZWQ4Mzg2XCIsXCJ1c2VyX2lkXCI6XCJhbm9ueW1vdXNcIn0iLCJjdXN0b21UeXBlIjoic2hhcmVfbGluayIsImV4cCI6MTY0Nzg3NjM0MCwiaWF0IjoxNjQ3ODY5MDgwfQ.O-wrga-HmgbN4KUWFEhUDozvFu5qV0sn0ntjzbfGpExWQ9yzPCdxVNi-A-wmXtOHNJ5xwnA2GZnX-FsZZ1EQauaOjSswmcc5xsjEenx1ohJVpXPKgl0iKhd9BmmpURZ_4uByhgXFIcEux-Rob22wyt3_NvvfZotVKrvW-pn0Ne8",
"expire_time": "2022-03-21T15:25:40.247Z",
"expires_in": 7200
}
```
#### 分享链接内文件的下载地址
POST: `https://api.aliyundrive.com/v2/file/get_share_link_download_url`
```json
{ "drive_id": "9600002", "share_id": "9Q00000000L", "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "expire_sec": 600 }
```
Response:
```json
{
"download_url": "https://pdsapi.aliyundrive.com/v2/redirect?id=a8c5bda295434d4987610b391010bbd5",
"url": "https://pdsapi.aliyundrive.com/v2/redirect?id=8b59b11717984cab801f651f6503f064",
"thumbnail": "https://pdsapi.aliyundrive.com/v2/redirect?id=e511a261a19949399d9a2ab7cb0bc31a"
}
```
#### 分享链接内文件的预览地址
POST: `https://api.aliyundrive.com/v2/file/get_share_link_video_preview_play_info`
```json
{ "share_id": "9Q00000000L", "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "category": "live_transcoding", "template_id": "", "get_preview_url": true }
```
Response:
```json
{
"share_id": "9Q00000000L",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"video_preview_play_info": {
"category": "live_transcoding",
"meta": { "duration": 1464.669, "width": 672, "height": 504, "live_transcoding_meta": { "ts_segment": 10, "ts_total_count": 147, "ts_pre_count": 3 } },
"live_transcoding_task_list": [
{
"template_id": "SD",
"template_name": "pdsSD",
"status": "finished",
"stage": "stage_none",
"url": "https://pdsapi.aliyundrive.com/v2/redirect?id=15b59a72f8904636bbca16bfa64fbd6d",
"preview_url": "https://pdsapi.aliyundrive.com/v2/redirect?id=467363f46e1e490fa5811ba52c320744",
"keep_original_resolution": true
}
]
}
}
```
#### 标记一个分享链接已读
POST: `https://api.aliyundrive.com/adrive/v1/share_link/subscription/update`
```json
{ "share_id": "9Q00000000L", "update_last_seen": true }
```
Response:
```json
{}
```
#### 导入分享
POST: `https://api.aliyundrive.com/adrive/v1/file/copy`
```json
{"body":{"auto_rename":true,"addition_data":{"umidtoken":"EmdLeXVLOsU9pTV/tFcskzsD8K4J80Ol"},"to_drive_id":"9600002","to_parent_file_id":"root","share_id":"ob7csMtYs9S","file_id":"619b000000006a42a4c143a99dd261777b2e149d"}
```
Response:
```json
{ "domain_id": "bj29", "drive_id": "9600002", "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "async_task_id": "9fcb1e1d-0000-0000-b30d-387e04dcafcb" }
```
POST: `https://api.aliyundrive.com/v2/async_task/get`
```json
{ "async_task_id": "9fcb1e1d-0000-0000-b30d-387e04dcafcb" }
```
Response:
```json
{ "async_task_id": "9fcb1e1d-0000-0000-b30d-387e04dcafcb", "state": "Running", "message": "task is running", "total_process": 0, "consumed_process": 0, "punished_file_count": 0 }
```
```json
{ "async_task_id": "9fcb1e1d-0000-0000-b30d-387e04dcafcb", "state": "Succeed", "total_process": 0, "consumed_process": 0, "punished_file_count": 0 }
```
================================================
FILE: adrive sdk/timeline.md
================================================
#### 用户信息
POST: `https://api.aliyundrive.com/adrive/v1/timeline/user/get`
```json
{ "user_id": "9400000000bc480bbcbbb1e074f55a7f" }
```
Response:
```json
{
"description": "",
"avatar": "https://ccp-bj29-bj-1592982087.oss-cn-beijing.aliyuncs.com/2GhCur3G%2F...",
"user_id": "9400000000bc480bbcbbb1e074f55a7f",
"nick_name": "myname",
"phone": "151***111",
"is_following": false,
"follower_count": 0,
"homepage_visibility": 1,
"latest_messages": [],
"homepage_visible_time_range_text": "三个月",
"homepage_visible_time_range_in_millis": 7776000000
}
```
#### 用户发布的动态
POST: `https://api.aliyundrive.com/adrive/v1/timeline/homepage/list_message`
```json
{ "order_direction": "DESC", "user_id": "9400000000bc480bbcbbb1e074f55a7f", "limit": 10 }
```
Response:
```json
{ "items": [], "pin_items": [] }
```
#### 推荐订阅
POST: `https://api.aliyundrive.com/adrive/v1/timeline/user/recommend`
```json
{ "user_id": "9400000000bc480bbcbbb1e074f55a7f", "limit": 20, "order_by": "updated_at", "order_direction": "DESC" }
```
Response:
```json
{
"items": [
{
"description": "Hi~小可爱!感恩关注~盘盘酱会不定时发放福利哦!让盘酱陪伴你更久✧( •˓◞•̀ ) ",
"avatar": "https://ccp-bj29-bj-1592982087.oss-cn-beijing.aliyuncs.com/2GhCur3G%2F...",
"user_id": "9400000000bc480bbcbbb1e074f55a7f",
"nick_name": "阿里盘盘酱",
"phone": "131***325",
"is_following": true
},
{
"description": "中国国家地理景观官方账号,带你领略目酣神醉的壮美景观、发现中国各地独具特色的人文胜迹。",
"avatar": "https://ccp-bj29-bj-1592982087.oss-cn-beijing.aliyuncs.com/2GhCur3G%2F...",
"user_id": "9400000000bc480bbcbbb1e074f55a7f",
"nick_name": "中国国家地理景观",
"phone": "136***902",
"is_following": true
}
],
"next_marker": "MjA="
}
```
================================================
FILE: adrive sdk/token.md
================================================
#### 网页版登录
POST: `https://api.aliyundrive.com/token/get`
```json
{ "code": "f98788cef51641728f2aad9c64a96a63", "loginType": "normal", "deviceId": "CPH800000000AbfFPI5QSJjO" }
```
Response:
```json
{
"default_sbox_drive_id": "9600002",
"role": "user",
"user_name": "151***111",
"need_link": false,
"expire_time": "2022-03-21T09:48:46Z",
"pin_setup": true,
"need_rp_verify": false,
"avatar": "https://ccp-bj29-bj-1592982087.oss-cn-beijing.aliyuncs.com/2GhCur3G%2F...",
"user_data": {
"DingDingRobotUrl": "https://oapi.dingtalk.com/robot/send?access_token=0b4a00000000c08608cd99f693393c18fa905aa0868215485a28497501916fec",
"EncourageDesc": "内测期间有效反馈前10名用户将获得终身免费会员",
"FeedBackSwitch": true,
"FollowingDesc": "34848372",
"ding_ding_robot_url": "https://oapi.dingtalk.com/robot/send?access_token=0b4a00000000c08608cd99f693393c18fa905aa0868215485a28497501916fec",
"encourage_desc": "内测期间有效反馈前10名用户将获得终身免费会员",
"feed_back_switch": true,
"following_desc": "34848372"
},
"token_type": "Bearer",
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9......aixJ4k",
"default_drive_id": "9600002",
"domain_id": "bj29",
"refresh_token": "82ad000000004fbda61b01b5a5cf103b",
"is_first_login": false,
"user_id": "9400000000bc480bbcbbb1e074f55a7f",
"nick_name": "mynane",
"exist_link": [],
"state": "",
"expires_in": 7200,
"status": "enabled"
}
```
================================================
FILE: adrive sdk/user.md
================================================
#### 首页 widgets
POST: `https://api.aliyundrive.com/apps/v1/users/apps/widgets`
```json
```
Response:
```json
最近转存,你订阅的分享者有更新了...
```
#### 用户信息
POST: `https://api.aliyundrive.com/v2/user/get`
```json
{}
```
Response:
```json
{
"domain_id": "bj29",
"user_id": "9400000000bc480bbcbbb1e074f55a7f",
"avatar": "https://ccp-bj29-bj-1592982087.oss-cn-beijing.aliyuncs.com/2GhCur3G%2F...",
"created_at": 1623212076923,
"updated_at": 1636164094577,
"email": "",
"nick_name": "mynane",
"phone": "15100000111",
"role": "user",
"status": "enabled",
"user_name": "151***111",
"description": "",
"default_drive_id": "9600002",
"user_data": {},
"deny_change_password_by_self": false,
"need_change_password_next_login": false,
"creator": "",
"permission": null
}
```
#### 用户信息
POST: `https://api.aliyundrive.com/v2/user/update`
```json
{ "user_id": "9400000000bc480bbcbbb1e074f55a7f", "nick_name": "n_mynane4" }
//用户可以修改自己的description,nick_name,avatar
```
Response:
```json
同上userinfo
```
#### 已用空间
POST: `https://api.aliyundrive.com/adrive/v1/user/driveCapacityDetails`
```json
```
Response:
```json
{ "drive_used_size": 7436100078094 }
```
#### 相册 driveId
POST: `https://api.aliyundrive.com/adrive/v1/user/albums_info`
```json
{}
```
Response:
```json
{ "code": "200", "message": "success", "data": { "driveId": "9600002", "driveName": "alibum" }, "resultCode": "200" }
```
#### 实名信息
POST: `https://api.aliyundrive.com/adrive/v1/user_verify/get`
```json
{}
```
Response:
```json
{ "name": "*名子", "rp_verify_status": "pass", "card_number": "1****************3" }
```
#### 用户信息(vip+空间)
POST: `https://api.aliyundrive.com/v2/databox/get_personal_info`
```json
{}
```
Response:
```json
{
"personal_rights_info": {
"spu_id": "non-vip",
"name": "普通用户",
"is_expires": false,
"privileges": [
{ "feature_id": "download", "feature_attr_id": "speed_limit", "quota": -1 },
{ "feature_id": "drive", "feature_attr_id": "size_limit", "quota": 107374182400 },
{ "feature_id": "safe_box", "feature_attr_id": "size_limit", "quota": 53687091200 },
{ "feature_id": "upload", "feature_attr_id": "size_limit", "quota": 2199023255552 },
{ "feature_id": "video", "feature_attr_id": "backup", "quota": 1 },
{ "feature_id": "video", "feature_attr_id": "clarity_limit", "quota": 3 }
]
},
"personal_space_info": { "used_size": 7436100078094, "total_size": 8946416877568 }
}
```
#### 云服务授权管理
POST: `https://api.aliyundrive.com/apps/v1/users/list_app_permissions`
```json
```
Response:
```json
{ "result": [] }
```
#### 登录设备列表
POST: `https://api.aliyundrive.com/users/v1/users/device_list`
```json
```
Response:
```json
{
"result": [
{ "deviceId": "q2e900000000ASdqMZ/pXgt7", "deviceName": "Chrome浏览器", "modelName": "Windows网页版", "city": "北京市", "loginTime": "2022-03-20 08:52" },
{ "deviceId": "SyQo00000000AbfHgMQi2AXv", "deviceName": "Chrome浏览器", "modelName": "Windows网页版", "city": "北京市", "loginTime": "2022-03-01 08:28" }
]
}
```
#### 登录设备列表下线
> 需要先短信验证,获取 umidToken
> POST: `https://api.aliyundrive.com/users/v1/users/device_offline`
```json
{ "deviceId": "q2e900000000ASdqMZ/pXgt7", "token": "CN-SPLIT-AQiE_......zdaLa2BOqAzuwCl3TS5Vp68qw", "umidToken": "dhhL00000000BzV/qXrSsXhU3k6buc1a" }
```
Response:
```json
{ "result": true }
```
#### 未知(相册合并?)
POST: `https://api.aliyundrive.com/adrive/v1/user/albums_migration`
```json
{}
```
Response:
```json
{ "code": "200", "message": "success", "data": { "hasMigrateData": false, "drive": { "driveId": "9600002", "driveName": "alibum" } }, "resultCode": "200" }
```
#### 上报登录设备
POST: `https://api.aliyundrive.com/users/v1/users/device`
```json
{
"modelName": "iPad4,4",
"refreshToken": "3b920000000043f19fbc6b65c8dea11c",
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9......",
"deviceName": "iPad"
}
```
Response:
```json
{ "result": true }
```
#### 兑换福利码
POST: `https://member.aliyundrive.com/v1/users/rewards`
```json
{ "code": "山山水水" }
```
Response:
```json
{ "success": false, "code": "30002", "message": "请输入有效的福利码", "totalCount": null, "nextToken": null, "maxResults": null, "result": { "message": "请输入有效的福利码" }, "arguments": null }
```
#### 容量明细
https://pages.aliyundrive.com/mobile-page/capacitymanager.html?disableNav=YES
POST: `https://api.aliyundrive.com/adrive/v1/user/capacityDetails`
```json
```
Response:
```json
{
"capacity_details": [
{ "type": "MEMBER_TASK", "size": 107374182400, "expired": "2022-10-14T05:01:48.935Z", "description": "完成福利社任务", "latest_receive_time": "2021-07-09T11:15:42.845Z" },
{ "type": "NEW_USER", "size": 107374182400, "expired": "permanent", "description": "新用户赠礼", "latest_receive_time": "2021-05-14T07:11:03.521Z" },
{ "type": "REWARD_CODE", "size": 536870912000, "expired": "permanent", "description": "兑换福利码", "latest_receive_time": "2022-02-21T12:08:58.000Z" },
{ "type": "BETA", "size": 3298534883328, "expired": "permanent_condition", "description": "内测专享", "latest_receive_time": "2021-03-18T05:01:21.118Z" },
{ "type": "MEMBER_TASK", "size": 107374182400, "expired": "2021-07-08T11:15:42.905Z", "description": "完成福利社任务", "latest_receive_time": "2021-03-18T05:02:28.160Z" }
]
}
```
#### 福利社任务列表
POST: `https://member.aliyundrive.com/v1/users/task_list`
```json
```
Response:
```json
{
"success": true,
"code": null,
"message": null,
"totalCount": null,
"nextToken": null,
"maxResults": null,
"result": [
{
"idempotent": "5dd6000000004283a4be19f4a5ab647a",
"position": 10,
"id": "51",
"name": "邀请好友用云盘",
"code": "referral",
"actionType": "openLink",
"action": "smartdrive://vipcenter/referral",
"url": "https://pages.aliyundrive.com/mobile-page/web/invitefriends.html",
"appName": null,
"description": "+800G/人",
"backgroundImage": "https://img.alicdn.com/imgextra/i4/O1CN016LFIjK1SRL72iovyX_!!6000000002243-2-tps-819-456.png",
"backgroundColor": "#D9E8FF",
"darkBackgroundColor": "#D9E8FF",
"textColor": "#6FBEEB",
"darkTextColor": "#6FBEEB",
"status": "unfinished",
"createdAt": 1644718396417,
"finishedAt": null,
"notice": "容量一年有效",
"topRightCorner": "限时任务",
"detailName": "",
"detailDescription": "https://pages.aliyundrive.com/mobile-page/web/beinvited.html?code=",
"detailBackgroundImage": "",
"detailIntroduction": null,
"rewards": [{ "icon": "https://img.alicdn.com/imgextra/i1/O1CN015KvMU11Yj65cGXGCp_!!6000000003094-2-tps-72-72.png", "name": "", "description": "有效期一年" }],
"detailRewardNotice": "",
"process": { "current": 0, "max": 0 },
"statusNotice": "",
"explain": null,
"referral": null,
"monthlyCard": null,
"popUps": null,
"shareFissions": null,
"subTasks": null,
"shareAction": null,
"darenShareViewModel": null
},
{
"idempotent": "80bf00000000442b90368c27a7ec3443",
"position": 3,
"id": "66",
"name": "第四周·周任务",
"code": "adrive",
"actionType": "openNative",
"action": "smartdrive://vipcenter/opentaskcarddetail?taskId=66",
"url": "",
"appName": null,
"description": "阿里云盘VIP免费领",
"backgroundImage": "https://img.alicdn.com/imgextra/i3/O1CN01HK76N21tBlGdfXcjm_!!6000000005864-2-tps-1029-612.png",
"backgroundColor": null,
"darkBackgroundColor": null,
"textColor": "#FFD601",
"darkTextColor": "#FFD601",
"status": "finished",
"createdAt": 1645953637620,
"finishedAt": 1647857247562,
"notice": "一个月 VIP",
"topRightCorner": "周年庆",
"detailName": "第四周·周任务",
"detailDescription": "阿里云盘VIP免费领",
"detailBackgroundImage": "https://img.alicdn.com/imgextra/i3/O1CN01HK76N21tBlGdfXcjm_!!6000000005864-2-tps-1029-612.png",
"detailIntroduction": null,
"rewards": [{ "icon": "https://gw.alicdn.com/imgextra/i3/O1CN01nl3rNq1PWQc5cpUWQ_!!6000000001848-2-tps-72-72.png", "name": "阿里云盘VIP", "description": "完成两个任务即可获得1个月阿里云盘VIP " }],
"detailRewardNotice": "",
"process": { "current": 2, "max": 0 },
"statusNotice": "领取阿里云盘VIP",
"explain": { "title": "活动说明:\r\n1. 活动期为2022年3月21日-3月27日。\r\n2. 任务福利将于4月30日开启兑换,所有会员福利最晚兑换时间为2022年6月30日,过期后不可兑换。", "description": "" },
"referral": null,
"monthlyCard": null,
"popUps": null,
"shareFissions": null,
"subTasks": null,
"shareAction": null,
"darenShareViewModel": null
}
],
"arguments": null
}
```
#### 福利社任务详情
POST: `https://member.aliyundrive.com/v1/users/task_detail`
```json
{ "taskId": "51" }
```
Response:
```json
{
"idempotent": "5dd6000000004283a4be19f4a5ab647a",
"position": 10,
"id": "51",
"name": "邀请好友用云盘",
"code": "referral",
"actionType": "openLink",
"action": "smartdrive://vipcenter/referral",
"url": "https://pages.aliyundrive.com/mobile-page/web/invitefriends.html",
"appName": null,
"description": "+800 GB/人 一年有效",
"backgroundImage": "https://img.alicdn.com/imgextra/i4/O1CN016LFIjK1SRL72iovyX_!!6000000002243-2-tps-819-456.png",
"backgroundColor": "#D9E8FF",
"darkBackgroundColor": "#D9E8FF",
"textColor": "#FFD601",
"darkTextColor": "#FFD601",
"status": "unfinished",
"createdAt": 1644718396417,
"finishedAt": null,
"notice": "",
"topRightCorner": "限时任务",
"detailName": "",
"detailDescription": "https://pages.aliyundrive.com/mobile-page/web/beinvited.html?code=",
"detailBackgroundImage": "",
"detailIntroduction": null,
"rewards": [{ "icon": "https://img.alicdn.com/imgextra/i1/O1CN015KvMU11Yj65cGXGCp_!!6000000003094-2-tps-72-72.png", "name": "", "description": "有效期一年" }],
"detailRewardNotice": "",
"process": { "current": 0, "max": 0 },
"statusNotice": "",
"explain": null,
"referral": {
"reward": 300,
"userSignupAmount": 10,
"userAmount": 10,
"newUserTask": 10,
"availableReward": 0,
"verificationReward": 8000,
"limitReward": 8000,
"shortURL": "https://pages.aliyundrive.com/mobile-page/web/beinvited.html?code=0000007"
},
"monthlyCard": null,
"popUps": null,
"shareFissions": null,
"subTasks": null,
"shareAction": null,
"darenShareViewModel": null
}
```
#### 福利社任务批量详情
POST: `https://member.aliyundrive.com/v1/users/batch_task_detail`
```json
{ "taskIds": ["52", "55", "58", "66", "69"] }
```
Response:
```json
[
{
"idempotent": "80bf00000000442b90368c27a7ec3443",
"position": 3,
"id": "66",
"name": "第四周·周任务",
"code": "adrive",
"actionType": "openNative",
"action": "smartdrive://vipcenter/opentaskcarddetail?taskId=66",
"url": "",
"appName": null,
"description": "阿里云盘VIP免费领",
"backgroundImage": "https://img.alicdn.com/imgextra/i3/O1CN01HK76N21tBlGdfXcjm_!!6000000005864-2-tps-1029-612.png",
"backgroundColor": null,
"darkBackgroundColor": null,
"textColor": "#FFD601",
"darkTextColor": "#FFD601",
"status": "finished",
"createdAt": 1645953637620,
"finishedAt": 1647857247562,
"notice": "一个月 VIP",
"topRightCorner": "周年庆",
"detailName": "第四周·周任务",
"detailDescription": "阿里云盘VIP免费领",
"detailBackgroundImage": "https://img.alicdn.com/imgextra/i3/O1CN01HK76N21tBlGdfXcjm_!!6000000005864-2-tps-1029-612.png",
"detailIntroduction": null,
"rewards": [{ "icon": "https://gw.alicdn.com/imgextra/i3/O1CN01nl3rNq1PWQc5cpUWQ_!!6000000001848-2-tps-72-72.png", "name": "阿里云盘VIP", "description": "完成两个任务即可获得1个月阿里云盘VIP " }],
"detailRewardNotice": "",
"process": { "current": 2, "max": 0 },
"statusNotice": "领取阿里云盘VIP",
"explain": { "title": "活动说明:\r\n1. 活动期为2022年3月21日-3月27日。\r\n2. 任务福利将于4月30日开启兑换,所有会员福利最晚兑换时间为2022年6月30日,过期后不可兑换。", "description": "" },
"referral": null,
"monthlyCard": null,
"popUps": null,
"shareFissions": null,
"subTasks": [
{
"id": 67,
"name": "订阅一个云盘订阅号",
"actionType": "openNative",
"action": "smartdrive://app/subscription",
"url": "",
"idempotent": "0c260000000042d493714b53fc6da210",
"status": "finished",
"statusNotice": "已完成",
"position": 0
},
{
"id": 68,
"name": "转存一个订阅号分享的文件",
"actionType": "openNative",
"action": "smartdrive://userpage/openroot?userId=ec11691148db442aa7aa374ca707543c",
"url": "",
"idempotent": "369f000000004f188d85e7f682f9633f",
"status": "finished",
"statusNotice": "已完成",
"position": 0
}
],
"shareAction": null,
"darenShareViewModel": null
}
]
```
================================================
FILE: adrive sdk/video.md
================================================
#### 放映室-列出全部专辑
POST: `https://api.aliyundrive.com/adrive/v2/video/list`
```json
{ "use_compilation": true, "duration": 0, "order_by": "created_at desc", "hidden_type": "NO_HIDDEN", "limit": 50 }
```
Response:
```json
{
"items": [
{
"name": "hotel.2022.mp4",
"thumbnail": "https://api.aliyundrive.com/v2/file/download?drive_id=9600002&file_id=623b00000000d89ef21d4118838aed83de7575ba&video_thumbnail_process=video/snapshot,t_120000,f_jpg,w_480,ar_auto,m_fast",
"type": "file",
"category": "video",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"size": 2623499628,
"starred": false,
"duration": "0",
"independent": true,
"parent_file_id": "root",
"drive_id": "9600002",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"file_extension": "mp4",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"user_meta": "{\"client\":\"web\"}",
"content_type": "application/oct-stream",
"created_at": "2022-03-20T04:26:18.082+00:00",
"updated_at": "2022-03-20T04:26:18.082+00:00",
"trashed_at": null,
"punish_flag": 1,
"video_type": "COMMON",
"video_hidden": false,
"play_cursor": "0",
"video_media_metadata": {},
"video_preview_metadata": { "bitrate": "3996225", "duration": "5251.955000", "height": 1040, "width": 1920, "audio_format": "aac", "frame_rate": "24000/1001" },
"compilation_id": "9600002_6236000000001b86cee34bdab3a5ad1d4d0cd676",
"grand_parent_file_id": null
},
{
"name": "总复习",
"thumbnail": "https://api.aliyundrive.com/v2/file/download?drive_id=9600002&file_id=623b00000000d89ef21d4118838aed83de7575ba&video_thumbnail_process=video/snapshot,t_120000,f_jpg,w_480,ar_auto,m_fast",
"created_at": "2022-01-23T04:21:54.470+00:00",
"updated_at": "2022-01-23T04:21:54.743+00:00",
"trashed_at": null,
"video_type": "COMPILATION",
"video_hidden": false,
"video_nums": "7",
"compilation_id": "9600002_61ec000000009a6068fe4c67936d781b6c2fced2"
}
],
"next_marker": ""
}
```
#### 放映室-最近播放
POST: `https://api.aliyundrive.com/adrive/v2/video/recentList`
```json
{}
```
Response:
```json
{
"items": [
{
"name": "综合复习.mp4",
"thumbnail": "https://api.aliyundrive.com/v2/file/download?drive_id=9600002&file_id=623b00000000d89ef21d4118838aed83de7575ba&video_thumbnail_process=video/snapshot,t_125201,f_jpg,w_480,ar_auto,m_fast",
"size": 167238406,
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"file_extension": "mp4",
"drive_id": "9600002",
"duration": "1800.80",
"play_cursor": "125.201",
"last_played_at": "2022-03-19T13:46:04.000+00:00",
"compilation_id": "9600002_61ec000000009a6068fe4c67936d781b6c2fced2"
}
]
}
```
#### 列出一个专辑包含的文件
POST: `https://api.aliyundrive.com/adrive/v2/video/compilation/list`
```json
{ "duration": 0, "hidden_type": "NO_HIDDEN", "name": "总复习", "limit": 50 }
```
Response:
```json
{
"items": [
{
"name": "热点复习.mp4",
"thumbnail": "https://api.aliyundrive.com/v2/file/download?drive_id=9600002&file_id=623b00000000d89ef21d4118838aed83de7575ba&video_thumbnail_process=video/snapshot,t_120000,f_jpg,w_480,ar_auto,m_fast",
"type": "file",
"category": "video",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"size": 181714186,
"starred": false,
"duration": "1800.080000",
"labels": ["其他场景", "内部场景"],
"independent": false,
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"drive_id": "9600002",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"file_extension": "mp4",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"content_type": "application/oct-stream",
"created_at": "2022-01-23T04:21:54.563+00:00",
"updated_at": "2022-01-23T04:21:54.563+00:00",
"trashed_at": null,
"punish_flag": 0,
"video_type": "COMMON",
"video_hidden": false,
"play_cursor": "0",
"video_media_metadata": {
"duration": "1800.080000",
"height": 1080,
"width": 1920
},
"video_preview_metadata": { "bitrate": "807582", "duration": "1800.080000", "height": 1080, "width": 1920, "audio_format": "aac", "frame_rate": "25/1", "template_list": [{ "status": "finished", "template_id": "HD" }] },
"compilation_id": "9600002_61ec000000009a6068fe4c67936d781b6c2fced2",
"grand_parent_file_id": null
}
],
"next_marker": ""
}
```
#### 从专辑里隐藏一个文件
POST: `https://api.aliyundrive.com/adrive/v2/video/update`
```json
{ "play_cursor": "0", "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "drive_id": "9600002", "hidden": true }
```
Response:
```json
{
"name": "热点复习.mp4",
"thumbnail": "https://api.aliyundrive.com/v2/file/download?drive_id=9600002&file_id=623b00000000d89ef21d4118838aed83de7575ba&video_thumbnail_process=video/snapshot,t_0,f_jpg,w_480,ar_auto,m_fast",
"type": "file",
"category": "video",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"size": 181714186,
"starred": false,
"duration": "1800.080000",
"labels": ["其他场景", "内部场景"],
"independent": true,
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"drive_id": "9600002",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"file_extension": "mp4",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"content_type": "application/oct-stream",
"created_at": "2022-01-23T04:21:54.563+00:00",
"updated_at": "2022-01-23T04:21:54.563+00:00",
"trashed_at": null,
"punish_flag": 0,
"video_hidden": true,
"play_cursor": "0",
"video_media_metadata": {
"duration": "1800.080000",
"height": 1080,
"width": 1920
},
"video_preview_metadata": { "bitrate": "807582", "duration": "1800.080000", "height": 1080, "width": 1920, "audio_format": "aac", "frame_rate": "25/1", "template_list": [{ "status": "finished", "template_id": "HD" }] },
"grand_parent_file_id": null
}
```
#### 播放列表(根据一个文件,列出同专辑的文件列表)
POST: `https://api.aliyundrive.com/adrive/v2/video/compilation/listByFileInfo`
```json
{ "file_id": "623b00000000d89ef21d4118838aed83de7575ba", "limit": "100", "drive_id": "9600002" }
```
Response:
```json
{
"items": [
{
"name": "热点复习.mp4",
"thumbnail": "https://api.aliyundrive.com/v2/file/download?drive_id=9600002&file_id=623b00000000d89ef21d4118838aed83de7575ba&video_thumbnail_process=video/snapshot,t_120000,f_jpg,w_480,ar_auto,m_fast",
"type": "file",
"category": "video",
"url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"size": 181714186,
"starred": false,
"duration": "1800.080000",
"labels": ["其他场景", "内部场景"],
"independent": false,
"parent_file_id": "613800000000336ae9164455b135a9729a298c9c",
"drive_id": "9600002",
"file_id": "623b00000000d89ef21d4118838aed83de7575ba",
"file_extension": "mp4",
"content_hash": "4DBF0000000023E6E756C29AF6AC487217921D53",
"domain_id": "bj29",
"download_url": "https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F...",
"user_meta": "{\"play_cursor\":\"0\"}",
"content_type": "application/oct-stream",
"created_at": "2022-01-23T04:21:54.563+00:00",
"updated_at": "2022-03-21T09:39:07.226+00:00",
"trashed_at": null,
"punish_flag": 0,
"video_type": "COMMON",
"video_hidden": true,
"play_cursor": "0",
"video_media_metadata": {
"duration": "1800.080000",
"height": 1080,
"width": 1920
},
"video_preview_metadata": { "bitrate": "807582", "duration": "1800.080000", "height": 1080, "width": 1920, "audio_format": "aac", "frame_rate": "25/1", "template_list": [{ "status": "finished", "template_id": "HD" }] },
"compilation_id": "9600002_61ec000000009a6068fe4c67936d781b6c2fced2",
"grand_parent_file_id": null
}
],
"next_marker": ""
}
//警告:无用的next_marker
```
#### 播放-更新播放进度
POST: `https://api.aliyundrive.com/adrive/v2/video/update`
```json
{"drive_id":"9600002","duration":"616.235","file_extension":"mp4","file_id":"623b00000000d89ef21d4118838aed83de7575ba","name":"样本.mp4","play_cursor":"148.298","thumbnail":"https://bj29.cn-beijing.data.alicloudccp.com/2GhCur3G%2F..."}
```
Response:
```json
file
```
================================================
FILE: changelog.txt
================================================
#### 2022/10/24
注:因上传下载功能尚未做完,本次仅同步代码不发布安装包
0. 恢复文件上传功能,支持单次上传百万个文件/文件夹,优化上传任务的数据库文件体积过大的问题
1. 优化sha1并发计算逻辑,增加文件sha1的缓存,提升上传大文件的性能
2. Add 上传前弹窗,设置重名冲突(删除/覆盖/自动重命名/不上传)
3. Add 单独的总上传速度限制设置
4. Add 上传文件时只上传可以秒传的文件的设置
5. Add 单独的上传文件时的并发执行数设置(最大50文件同时上传)
6. Add 左侧文件树文件夹对拖放上传的支持
7. Add 上传中列表里文件夹视图
8. Add 优先上传小文件(100M)的支持
9. Fix 按住Ctrl时,点击CheckBox和点击空白处,选中结果不一致的BUG
10. Fix 右键菜单-打开文件位置,没有选中和滚动到指定文件的BUG
11. Fix 断网时,重试上传任务,可能导致上传任务的断点续传进度丢失的BUG
#### 2022/09/18
注:因上传下载功能尚未做完,本次仅同步代码不发布安装包
1. Fix v3.5.23alpha中的20余处小BUG
2. Fix 登录时遇到二次短信验证时不能继续登录的BUG
3. 完善批量重命名功能
4. 完善颜色标记功能
5. 优化文件列表加载显示逻辑,现在很优雅了
6. 优化文件名排序,支持中文数字排序,按win习惯英文在前中文在后
7. 优化文件夹树性能(全部文件夹列出速度加快3倍,20万文件夹不卡顿,树内存占用减少60%)
8. 恢复显示文件夹体积(可按大小排序),优化计算文件夹体积的逻辑(速度加快计算量减少)
9. 底部增加网盘空间信息和文件夹内文件总数量
10. 增加复制文件名和复制目录树的功能
11. 适配更新vite3.1.2,更新全部package到最新版
#### 2022/05/23
v3.5.23alpha 开发人员测试版本
1. Fix 偶发的登录后显示空白窗口的 BUG
2. Fix 登录太多账号时切换账号弹窗不能正确显示的 BUG
3. 优化长时间不用后需要重新登录的问题
4. Fix 偶发的下载中显示空白列表的 BUG
5. Fix 多次弹出升级提示窗口的 BUG
6. Fix 目录下超过 200 个文件夹不能显示的 BUG
7. 重制 APP 设置页面,分组设置,配置保存到 setting.config
8. 优化快捷键(现在很多操作都支持键盘快捷键)
--
v3.05.23.alpha 新增加的功能
文件恢复,放映室,网页版播放器,彻底删除菜单,文件属性菜单,所有列表支持右键菜单,
整盘高级搜索,文件快速筛选,右侧文件拖放移动,文件标记,文件夹快捷方式,我订阅的公众号,
重复文件清理,扫描大文件,扫描重复文件,扫描违规文件,扫描空文件夹,网盘相册间复制,
批量重命名
#### 2022/04/14
1. 修正因阿里云盘官网升级导致的无法使用
2. 优化访问频次问题
3. 修正违禁视频详情BUG
#### 2021/12/05
1. 修正网盘内文件路径过长时下载失败 BUG
2. 优化快捷键功能(帮助文档里有完整的快捷键说明)
3. 增加收藏夹的搜索功能
4. 优化后退按钮(以前是返回父文件夹,现在是后退,最多后退 20 步)
5. 增加优先下载小文件选项
6. 增加雪碧图里视频信息的显示和保存雪碧图按钮
7. 网盘页顶部路径默认隐藏需要在设置里勾选显示
8. 修正m3u8播放链接15分钟后失效的 BUG (现在4小时)
9. 修正之前部分版本代理设置被覆盖的 BUG
10. 增加自定义缓存位置功能
11. 增加帮助文档
#### 2021/11/29
1. 修正 2.11.28 下载显示出错的 BUG
1. 修正登录时遇到二次验证导致点击登录按钮无反应的 BUG
2. 修正自 v2.11.07 开始不能上传体积为 0 的文件的 BUG
3. 修正 v2.11.16 上传文件时占用内存过多的问题
4. 11.16 里 60 文件同时上传会占用大量内存,11.28 里优化为只占用 400MB 以内的内存
5. 修正传输完自动关机触发时机不准确的 BUG
6. 修正上传时遇到没有访问权限的文件/文件夹时上传中队列卡住的 BUG
7. 增加视频文件洗码功能
8. 增加右侧文件拖动到左侧文件夹树(移动文件)功能
9. 优化远程 Aria2 下载功能并修复断线后自动重连
10. 优化本地 Aria2,无法连接时会尝试自动重启一次 Aria2 进程
11. 增加任务栏的下载中上传中进度提示(win/mac)
12. 底部状态栏显示总传输的预估剩余时间
13. 增加上传时跳过同名文件的设置项
14. 优化盘内文件搜索支持选择分类
15. 一些细节优化
#### 2021/11/14
1. 增加创建分享、编辑分享、管理分享功能
2. 完善导入分享功能,支持部分导入和完整导入
3. 增加网盘内文件搜索功能
4. 增加下载时自动过滤违规文件的设置
5. 增加对禁止分享的文件的图标
6. 增加文件/文件夹置顶功能
7. 增加主题跟随系统
8. 增加下载上传完成后自动关机设置
9. 完善 mac 和 linux 下自定义播放软件功能
10. 恢复视频文件雪碧图,增加复制 M3U8 链接和原始视频链接功能
11. 修正 linux 下上传时会自动过滤软链接文件
#### 2021/11/07
1. 优化一次性上传或下载大量文件时的界面卡顿(参阅 挑战一百万.md)
2. 创建日期文件夹支持编号了
3. 新增定时清理回收站功能
4. 新增我创建的分享列表功能(没做完)
5. 增加文件列表显示限制(减少加载中)
6. 恢复导入阿里云盘分享链接功能(仅全部导入)
7. 恢复新建文件功能
8. 恢复版本升级提示功能
9. 修正 windows 下载位置不能选择根目录的 BUG
10. 修正不能上传大于 97.6GB 的文件的问题
11. 修正上传速度显示不准确的 BUG
12. 修正不能同时下载同一个文件(下载到不同的位置)的 BUG
13. 优化部分文件格式图标
#### 2021/10/31
1. 增加文件列表的缩略图模式
2. 修正v2.10.17和v2.10.19版本里一个严重的BUG(删除文件时可能会错误选中父文件夹一起删除)
3. 去除彻底删除按钮
4. 回收站增加清理回收站按钮(一键删除回收站内全部文件)
5. 增加上传和下载的文件过滤功能(自动跳过特定格式的文件)
6. 修正左侧文件夹树和右侧文件列表的互动关联
7. 恢复重命名功能和移动复制功能
#### 2021/10/19
1. 优化文件列出逻辑,节省一半的等待加载中时间
2. 优化v2.9一个文件夹直接包含大量子文件夹时的卡顿和内存剧增问题
一个文件夹里直接包含 17000 个子文件夹时,打开文件夹 v2.9 需要占用 700MB 内存, v2.10 需要占用 190MB 内存
v2.9 当一个文件夹里包含 3000 个以上的子文件夹时,小白羊文件夹树会卡顿
v2.10 无所谓多少个子文件夹,不会卡顿
3. 优化v2.9网盘包含有巨量文件夹时,启动后前几秒会卡顿的问题
4. 优化v2.9上下传记录的本地数据库体积
长期大量上传下载会产生较大的本地记录数据,现在会自动清理
5. 修正v2.9统计文件夹体积功能的本地缓存和运行时CPU内存占用
开启统计文件夹体积功能后,我网盘里有 2 万个文件夹和 31 万个文件,v2.9 会产生 167MB 的缓存,v2.10 会产生 8MB 的缓存
修正了一个会导致 CPU 和内存占用高的 BUG(用户账号 token 失效时,会因为定时统计功能导致 CPU 和内存占用很高)
6. 优化在线预览视频现在支持很多种播放器了
当前只适配了 windows (测试了 MPV,Potplayer,VLC media player,KMPlayer,恒星播放器,SMPlayer)
macos 和 linux 稍后会适配,现在仍旧只能用 mpv 播放器
7. 增加在线预览 word/excel/ppt/pdf 文件的功能
当前,大部分音视频格式,大部分图片格式,word/excel/ppt/pdf/txt,200 余种常见文本格式 都可以在线预览了
8. 修正在文件夹里搜索后,拖动搜索结果里的文件上传,上传文件名错误的 BUG
9. 优化上传前的 sha1 校验速度,提升上传速度
10. 美化了一下界面
11. 增加是否按照完整网盘路径保存的设置
12. 增加关闭窗口立即退出的设置
13. 增加双击才打开文件、文件夹的设置
14. 增加清理缓存的设置
15. 增加运行日志的设置
16. 文件夹树的宽度可以拖动调整了
17. 图片、Office、文本预览现在是单独窗口了
18. 修正一些文件格式识别不准确的 BUG
#### 2021/09/24
1. 修正上传 20GB 以上的文件时,断点续传时进度不准确的 BUG
2. 取消文件列表的加载中状态提示,快速展现文件列表
3. 更新文件列表缓存方式,数据库文件体积减少 73% (14 万个文件从 240MB 降低为 60MB)
4. 增加是否统计文件夹体积的设置开关,减少网盘内文件过多时的白屏问题
5. 同步 v2.9.24 源码到 github
#### 2021/09/19
1. 删除秒传相关功能
2. 修正 v2.8.30 里 aria2 远程模式连接失败的 BUG
3. 修正偶发文件列表只显示占位符不显示文件名的 BUG
4. 修正移动文件后选中文件数显示错误的 BUG
5. 修正批量重命名取消勾选文件夹时子文件名计算错误的 BUG
6. 修正批量重命名点击刷新后因一直加载,不能关闭的 BUG
7. 增加对文件名结尾的点和空格的清理,修正这些文件下载失败的 BUG
8. 修正闲置长时间后上传文件可能出现获取上传地址失败的 BUG
9. 减少因并发数太高容易出现的操作失败 BUG
10. 修正等宽图片预览时,切换下一张后滚动条没有自动回到顶部的 BUG
11. 增加文件列表(F5 键刷新文件,Back 键返回上级文件夹),等宽图片预览(← 上一张,→ 下一张)的快捷键
12. 增加点击头像图片时自动刷新网盘空间用量
13. 增加文件夹独立排序选项
14. 增加直接彻底删除文件的右键菜单
15. 升级数据库架构,提升了加载文件列表的性能,本周重点就是此项,性能提升涉及方方面面的细节,大部分以前加载慢的功能都有了极明显的提升,例如一次性上传包含 10 万个文件的文件夹,不会出现任何卡顿了
16. 修正 v2.9.15 里长时间后上传文件时出现获取上传地址失败的 BUG
17. 增加上传/下载任务出错后等 1 分钟自动重试功能,可以放心挂机下载、挂机上传了
#### 2021/08/30
1. Fix 修正 v1.6.29 大量上传下载后会生成大体积的 数据库 的 BUG
2. Fix 修正 v1.6.29 导入阿里云盘分享链接失败的 BUG
3. Fix 修正 v1.6.29 上传途中重启程序后,重新上传不会断点续传的 BUG
4. Fix 修正部分违规视频不能播放的 BUG,现在可以使用"优先播放转码视频"模式播放了
#
1. Add 增加阿里云盘官方登录接口(手机短信、账号密码、APP 扫码登录)
2. Add 增加多个账号同时登录、切换功能
3. Add 增加 Aria 远程连接设置,可以把文件直接下载到远程电脑/VPS/NAS/Docker
4. Add 增加文件名颜色标记,批量标记功能,观看视频自动标记功能
5. Add 增加文件、文件夹详情功能(文件夹大小,包含文件数),视频文件的雪碧图
6. Add 增加新的图片预览模式,可以放大/缩小/旋转/幻灯片播放
7. Add 增加代码高亮/ json 格式化显示 / txt 在线预览功能
8. Add 增加快速创建日期格式的文件夹
9. Add 增加可选择文件夹是否和文件一起排序了
10. Add 增加所有文件夹体积的显示,可以按照体积排序文件夹了
11. Add windows 上支持 Potplayer 播放器了
12. Add 顶部快捷路径跳转和区间选择功能
#
1. Pro 优化文件复制功能,可极速复制 TB 级/上万文件 到网盘的其他位置
2. Pro 优化导入分享功能,在导入时可以选择网盘里的保存位置,可以勾选要保存的 文件/文件夹
3. Pro 优化上传功能,现在部分不能秒传的大文件,上传前不再需要计算 sha1 了(减少上传时间)
4. Pro 优化 sha1 计算逻辑和性能,同时最多 3 个文件计算 sha1,机械硬盘不会掉速,CPU 不会爆满
5. Pro 现在 windows/macos/linux 都支持拖拽文件、文件夹上传了
6. Pro 优化批量重命名功能,支持勾选文件,支持重命名多级子文件夹,支持 替换/删除/增加/序号/随机字符 等方式
7. Pro 优化在线解压功能,支持全部解压和勾选文件解压,支持有密码的压缩包
#### 2021/06/29
Fix 优化重命名、搜索输入框大小
Fix 修正下载中、上传中页面因进度条动画导致的GPU占用过高的BUG
Fix 中文名导致偶有macos启动失败的BUG
Add 导入阿里云盘分享链接的功能
Add 导入115网盘分享链接的功能
#### 2021/06/21
Fix 显示用户昵称和头像
Fix 完善对字体的支持(可以随意更换自己喜欢的字体了),完善文字大小设置功能
Fix 完善在线预览图片功能(支持旋转,文件夹内全部图片上一张下一张查看)
Fix 文件名是.(点)时导致的创建下载任务失败的BUG
Fix 创建文件夹太快偶发点击文件夹名不能进入的BUG
Add Windows上支持批量拖拽文件/文件夹上传
Add 选择文件/文件夹计算秒传信息保存到网盘内txt文件的功能
Add 导入txt文件类型的秒传链接(支持文件夹嵌套)
Add 新增相册功能(文件可以在相册和网盘之间移动复制)
#### 2021/06/13
Fix 在下载大文件时Aria在某些系统上强制分配硬盘BUG导致下载进度卡死
Fix 优化Aria的连接性,减少出错崩溃
Fix Mac版输出大量无用日志的BUG
Fix 一堆UI细节上的完善
Add 复制文件到...的功能(官方只有移动到...)
Add 批量重命名功能(替换/删除字符,增加前缀,正则表达式替换)
Add 聚合搜索功能(当前搜不到什么,要等以后大家主动分享)
Add 初步支持在线解压缩(zip,rar)
Ver 更新到Flutter2.2.1
#### 2021/06/10
Fix 因阿里云盘API升级导致的无法加载文件列表的BUG
Fix 选择上传文件夹时 可能 需要长时间等待的BUG
Fix 批量下载大量子文件夹时 可能 需要长时间等待的BUG
Fix 修正回收站内文件无法在线播放的BUG
Fix 增加一些在线播放视频格式的支持(m2ts/hevc....)
Add 增加对违规文件的标识
Add 增加深色模式
Add 下载失败时的一些错误提示
Del 去除创建秒传链接的功能,仅支持导入秒传链接(115:// 、aliyun://)
#### 2021/06/06
1. Fix 批量下载时只解析了第一个选中的文件夹的严重BUG
2. Fix 大量操作更新为异步操作,极大的减少了操作等待时间
3. Fix 因阿里云盘升级导致扫码登陆失败的BUG
4. Add 支持导入李恒道版本秒传链接
#### 2021/06/05
1. Add 秒传短链接功能(创建秒传链接、导入别人分享的短链接、短链接本地历史记录)
2. Add 增加115链接批量导入功能(靠运气)
3. Add 增加在线预览文本文件功能
4. Fix 因阿里云盘升级导致扫码登陆失败的BUG
5. Fix 阿里云盘对单次批量操作最多限制100条的限制
6. Fix 在线预览图片时图片大小缩放BUG
7. Fix 按文件名排序时不准确的BUG
#### 2021/05/31
1. Add 上传文件、文件夹功能
2. Add 在线预览图片
3. Add 移动文件、文件夹功能
4. Fix 优化启动时启动后台提示
5. Fix 延长下载链接时效(15分钟->4小时)
6. Fix 文件夹内包含大量文件时多次操作可能回重复拉取的BUG
#### 2021/05/25
1. 上传第一个开发中版本仅供测试
2. 支持 扫码登录/Cookie登录
3. 支持 阿里云盘基本功能
4. 支持 在线预览全格式原画视频(非转码)
5. 支持 批量下载文件/文件夹,只要阿里云不限速,就是满速下载
================================================
FILE: crx/devtools.html
================================================
<!DOCTYPE html>
<html>
<head></head>
<body>
<script type="text/javascript" src="devtools.js"></script>
</body>
</html>
================================================
FILE: crx/devtools.js
================================================
chrome.devtools.network.onRequestFinished.addListener(function (detail) {
let url = detail.request.url;
let isbreak = false;
if (url.indexOf("api.aliyundrive.com") > 0) isbreak = true; /** 跳过api */
if (url.indexOf("img.aliyundrive.com") > 0) isbreak = true; /** 跳过img */
if (url.indexOf("_tmd_") > 0) isbreak = true; /** 跳过滑动验证 */
if (url.indexOf(".aliyuncs.com") > 0) isbreak = true; /** 跳过滑动验证 */
if (url.indexOf(".aliyun.com") > 0) isbreak = true; /** 跳过滑动验证 */
if (url.indexOf(".taobao.com") > 0) isbreak = true; /** 跳过滑动验证 */
if (url.indexOf(".mmstat.com") > 0) isbreak = true; /** 跳过日志 */
if (url.indexOf(".aliyundrive.com") < 0) isbreak = true; /** 跳过无效域名 */
if (isbreak) return;
detail.getContent(function (content, mimeType) {
try {
if (typeof content == "string" && content.indexOf('"bizExt"') > 0) {
let bizExt = "";
try {
/** https://passport.aliyundrive.com/newlogin/login.do?appName=aliyun_drive&fromSite=52&_bx-v=2.0.31 */
const data = JSON.parse(content);
bizExt = data.content?.data?.bizExt || "";
} catch (e) {
bizExt = "";
chrome.devtools.inspectedWindow.eval(
"console.log('" + JSON.stringify({ url, e, content }) + "')"
);
}
if (!bizExt) {
/** https://passport.aliyundrive.com/newlogin/safe/ivCheckLogin.htm?havana_iv_token=... 二次短信验证 */
try {
let temp = content.substring(
content.indexOf('"bizExt"') + '"bizExt"'.length
);
temp = temp.substring(temp.indexOf('"') + 1); // :"eyJ...",
temp = temp.substring(0, temp.indexOf('"')); //eyJ...
if (temp.startsWith("eyJ")) bizExt = temp;
} catch (e) {
bizExt = "";
chrome.devtools.inspectedWindow.eval(
"console.log('" + JSON.stringify({ url, e, content }) + "')"
);
}
}
if (bizExt) {
chrome.devtools.inspectedWindow.eval(
"console.log('" + JSON.stringify({ bizExt: bizExt }) + "')"
);
}
}
} catch {}
});
});
================================================
FILE: crx/manifest.json
================================================
{
"manifest_version": 3,
"name": "demo",
"version": "1.0.0",
"description": "demo",
"devtools_page": "devtools.html",
"host_permissions": [
"http://*/*",
"https://*/*"
]
}
================================================
FILE: doc/info.md
================================================
================================================
FILE: doc/v2.8.x 使用PotPlayer.md
================================================
#### window系统上,在v2.8.15版本开始支持使用Potplayer替换掉默认的MPV播放器
这里是临时的复制文件方式,使用Potplayer,在以后以后的版本中会在设置里增加一个设置,让用户手动选择potplayer.exe文件即可,那时就不需要复制了
#### 具体的操作:
1.下载小白羊v2.8.15 解压到“阿里云盘小白羊版v2”
2.下载Potplayer 不管是解压还是安装,最终找到Potplayer.exe所在的文件夹
(注:如果你已经安装过Potplayer,不需要重新安装,直接找到Potplayer.exe所在的文件夹就行了)
3.把Potplayer的整个文件夹复制到“阿里云盘小白羊版v2\resources\”里面
#### 最终得到:
'阿里云盘小白羊版v2\resources\Potplayer\Potplayer.exe'
退出后重新启动小白羊生效
### 需要注意的是:
第一:Potplayer必须是20210127以后的版本,推荐安装最新版
#### 第二:有的Potplayer文件夹里只有Potplayermini.exe 没有Potplayer.exe 需要手动把Potplayermini.exe 改名成 Potplayer.exe
第三:有的Potplayer文件夹里只有Potplayer64.exe 没有Potplayer.exe 需要手动把Potplayer64.exe 改名成 Potplayer.exe
第四:遇到在线预览视频没有画面只有声音的,请自行安装解码器(OpenCodec/LAVFilters)
安装解码器参阅
http://www.potplayercn.com/course/OpenCodec.html
http://www.potplayercn.com/course/2994.html
最后附上最终的文件目录树:
``````
阿里云盘小白羊版v2
│ chrome_100_percent.pak
│ chrome_200_percent.pak
│ d3dcompiler_47.dll
│ ffmpeg.dll
│ icudtl.dat
│ libEGL.dll
│ libGLESv2.dll
│ resources.pak
│ snapshot_blob.bin
│ v2.8.15.txt
│ v8_context_snapshot.bin
│ vk_swiftshader.dll
│ vk_swiftshader_icd.json
│ vulkan-1.dll
│ 阿里云盘小白羊版v2.exe
│
├─locales
├─resources
│ │ app.asar
│ │ app.ico
│ │ app.png
│ │ aria2.conf
│ │ aria2c.exe
│ │ filehash32.exe
│ │
│ ├─MPV
│ │ │ d3dcompiler_43.dll
│ │ │ mpv.com
│ │ │ mpv.exe
│ │
│ └─PotPlayer
│ │ Alarm.wav
│ │ ATextOut.dll
│ │ CaptureUWP.dll
│ │ CmdLine.txt
│ │ d3dcompiler_47.dll
│ │ d3dx9_43.dll
│ │ DaumCrashHandler.dll
│ │ DesktopHook.dll
│ │ DesktopHook.exe
│ │ DesktopHook64.dll
│ │ DesktopHook64.exe
│ │ DTDrop.exe
│ │ D_Exec.exe
│ │ ffcodec.dll
│ │ FileList.txt
│ │ GameCaptureHook.dll
│ │ GameCaptureHook64.dll
│ │ KillPot.exe
│ │ LGPL.TXT
│ │ License.txt
│ │ MediaDB.dll
│ │ PotIcons.dll
│ │ PotPlayer.dll
│ │ PotPlayer.exe
│ │ PotPlayer.ini
│ │ PotPlayerXP.exe
│ │ PotScreenSaver.scr
│ │
│ ├─AviSynth
│ ├─Capture
│ ├─Extension
│ ├─History
│ ├─IconPack
│ ├─Language
│ ├─Logos
│ ├─Menus
│ ├─Module
│ ├─Playlist
│ ├─PxShader
│ ├─Skins
│ ├─UrlList
│ │
│ └─VapourSynth
│ Histogram.vpy
│ motioninterpolation.vpy
│
└─swiftshader
libEGL.dll
libGLESv2.dll
``````
================================================
FILE: doc/v2.8.x 阿里云盘小白羊版和官方性能测试.md
================================================
阿里云盘小白羊版和官方性能测试
====
阿里云盘小白羊版 v2.8.22终于实现了文件上传所以做个能测试(上传测试和下载测试)
>测试方法,就是简单的选择文件上传,用手机人工计时
>
>测试平台:联想Y7000笔记本,i5-8300H,16G内存,512GB M2 西数固态硬盘,3TB 外接usb2.0 机械硬盘(13年产西数绿盘)
#### 补充说明
1. 所有测试上传的文件都是可以秒传的,既只测试程序性能,不测试网络性能。所有测试均与网络状态无关
2. 只测试一遍没有多次测试取平均值,测试期间电脑不运行其他程序,上传中也不操作电脑
3. 测试基于特定程序版本,人工计时有误差 1-3 秒。结果仅用来展示小白羊的程序功能,并不能说明什么
4. 秒传测试不能体现网络传输性能,但网络传输主要是受限于网络状态,跟程序关系就不大了
#### 测试结果
小白羊对小文件上传,和网页版相差不大,但比客户端快一倍
小白羊对大文件上传,比网页版和客户端都快很多
------
#### 测试方案一:大量小文件上传
M2.SSD硬盘上的 6.28GB 共2899个文件 每个文件2-3MB 图集(jpg)
| 程序 | CPU | 用时 | 用时(s) | 基准 |
| --- | :---: | :---: | ---: | ---: |
| 小白羊v2.8.22 | 12% | 6分35秒 | 395 | 136% |
| PC客户端 v2.2.3.788 | 18% | 12分45秒 | 765 | [263%]() |
| 网页版 | 36% | 4分50秒 | 290 | 100% |
<br/>
M2.SSD硬盘上的 98MB 共3863个文件 每个文件10-150KB 文本小文件
| 程序 | CPU | 用时 | 用时(s) | 基准 |
| --- | :---: | :---: | ---: | ---: |
| 小白羊v2.8.22 | 6% | 4分19秒 | 259 | 125% |
| PC客户端 v2.2.3.788 | 7% | 14分12秒 | 852 | [411%]() |
| 网页版 | 23% | 3分27秒 | 207 | 100% |
<br/>
------
#### 测试方案二:单个大文件上传
USB机械硬盘 2.54GB [豆瓣5.0]魔唇劫.The.Holy.Virgin.Versus.the.Evil.Dead.1991.泰吉修复剪辑完整版.HD1080P.国粤双语.中字.mp4
| 程序 | CPU | 用时 | 用时(s) | 基准 |
| --- | :---: | :---: | ---: | ---: |
| 小白羊v2.8.22 | 9% | 55秒 | 55 | :zap:100% |
| PC客户端 v2.2.3.788 | 22% | 1分20秒 | 80 | 145% |
| 网页版 | 18% | 2分40秒 | 160 | [290%]() |
<br/>
M2.SSD硬盘上的 5.15GB [一只鱼4kyu.cc豆瓣7.6分]少年黄飞鸿之铁马骝.Iron.Monkey.1993.BD1080p.国粤双语.中字.mp4
| 程序 | CPU | 用时 | 用时(s) | 基准 |
| --- | :---: | :---: | ---: | ---: |
| 小白羊v2.8.22 | 22% | 22秒 | 22 | :zap:100% |
| PC客户端 v2.2.3.788 | 25% | 1分50秒 | 110 | 500% |
| 网页版 | 26% | 3分25秒 | 205 | [931%]() |
<br/>
------
#### 测试方案三:批量个大文件上传
M2.SSD硬盘上的 50GB 共22个文件 每个文件2-4G 视频大文件
| 程序 | CPU | 用时 | 用时(s) | 基准 |
| --- | :---: | :---: | ---: | ---: |
| 小白羊v2.8.22 | 66% | 1分25秒 | 85 | :zap:100% |
| PC客户端 v2.2.3.788 | 94% | 5分23秒 | 323 | 380% |
| 网页版 | 25% | 32分10秒 | 1930 | [2270%]() |
<br/>
------
#### 测试方案四:批量小文件下载
网盘里的一个包含5540个小文件的文件夹(共191MB,每个文件10-200KB,小文件)
| 程序 | CPU | 用时 | 用时(s) | 基准 |
| --- | :---: | :---: | ---: | ---: |
| 小白羊v2.8.1 | 无 | 4分10秒 | 250 | :zap:100% |
| PC客户端 v2.2.1.768 | 无 | 24分40秒 | 1480 | [592%]() |
<br/>
------
#### 测试方案五:批量大文件下载
网盘里的一个包含27个视频的文件夹(共191MB,每个文件700-900MB,视频文件)
小白羊v2.8.1 和 PC客户端 v2.2.1.768 单独下载时,都可以达到我的宽带上限(11MB/s)
小白羊v2.8.1 和 PC客户端 v2.2.1.768 同时下载时,小白羊挤占了更多的宽带(小白羊9MB/s下载,PC客户端2MB/s下载)
<br/>
================================================
FILE: electron-builder.json
================================================
{
"appId": "YouAppID",
"asar": true,
"directories": {
"output": "release"
},
"files": [
"dist"
],
"mac": {
"artifactName": "${productName}_${version}.${ext}",
"target": [
"dmg"
]
},
"win": {
"target": [
{
"target": "nsis",
"arch": [
"x64"
]
}
],
"artifactName": "${productName}_${version}.${ext}"
},
"nsis": {
"oneClick": false,
"perMachine": false,
"allowToChangeInstallationDirectory": true,
"deleteAppDataOnUninstall": false
}
}
================================================
FILE: nano-staged.mjs
================================================
export default {
// eslint
'*.{js,ts,tsx,jsx}': ['prettier --write', 'eslint --cache --fix'],
'*.{vue}': ['stylelint --fix', 'prettier --write', 'eslint --cache --fix'],
'*.{less,css}': ['stylelint --fix', 'prettier --write'],
// typecheck
'packages/renderer/**/{*.ts,*.tsx,*.vue,tsconfig.json}': ({ filenames }) => 'npm run typecheck'
}
================================================
FILE: package.json
================================================
{
"name": "alixby",
"version": "3.05.23",
"main": "dist/main/index.js",
"author": "",
"license": "",
"scripts": {
"dev": "node scripts/watch.mjs",
"build": "vue-tsc --noEmit --p packages/renderer/tsconfig.json && node scripts/build.mjs && electron-builder --dir"
},
"engines": {
"node": ">=14.17.0"
},
"dependencies": {
"@arco-design/web-vue": "^2.28.0",
"@electron/remote": "^2.0.8",
"ant-design-vue": "^3.2.3",
"axios": "^0.27.2",
"dayjs": "^1.11.2",
"dexie": "^3.2.2",
"dom-to-image": "^2.6.0",
"fuzzysort": "^1.9.0",
"isomorphic-fetch": "^3.0.0",
"jschardet": "^3.0.0",
"lodash": "^4.17.21",
"pinia": "^2.0.14",
"viewerjs": "^1.10.5",
"vue": "^3.2.33"
},
"devDependencies": {
"@types/lodash": "^4.14.182",
"@types/node": "^17.0.31",
"@vitejs/plugin-vue": "^2.3.2",
"@vitejs/plugin-vue-jsx": "^1.3.10",
"electron": "14.2.6",
"electron-builder": "^23.0.3",
"nano-staged": "^0.8.0",
"typescript": "^4.6.4",
"unplugin-vue-components": "^0.19.5",
"vite": "^2.9.9",
"vite-plugin-electron-renderer": "^0.3.3",
"vite-plugin-resolve": "^2.1.0",
"vue": "^3.2.33",
"vue-tsc": "^0.34.13"
},
"env": {
"VITE_DEV_SERVER_HOST": "127.0.0.1",
"VITE_DEV_SERVER_PORT": 3344
},
"keywords": [
"electron",
"rollup",
"vite",
"vue3",
"vue"
]
}
================================================
FILE: public/comlink.js
================================================
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(global = global || self, factory(global.Comlink = {}));
}(this, (function (exports) { 'use strict';
/**
* Copyright 2019 Google Inc. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const proxyMarker = Symbol("Comlink.proxy");
const createEndpoint = Symbol("Comlink.endpoint");
const releaseProxy = Symbol("Comlink.releaseProxy");
const throwMarker = Symbol("Comlink.thrown");
const isObject = (val) => (typeof val === "object" && val !== null) || typeof val === "function";
/**
* Internal transfer handle to handle objects marked to proxy.
*/
const proxyTransferHandler = {
canHandle: (val) => isObject(val) && val[proxyMarker],
serialize(obj) {
const { port1, port2 } = new MessageChannel();
expose(obj, port1);
return [port2, [port2]];
},
deserialize(port) {
port.start();
return wrap(port);
},
};
/**
* Internal transfer handler to handle thrown exceptions.
*/
const throwTransferHandler = {
canHandle: (value) => isObject(value) && throwMarker in value,
serialize({ value }) {
let serialized;
if (value instanceof Error) {
serialized = {
isError: true,
value: {
message: value.message,
name: value.name,
stack: value.stack,
},
};
}
else {
serialized = { isError: false, value };
}
return [serialized, []];
},
deserialize(serialized) {
if (serialized.isError) {
throw Object.assign(new Error(serialized.value.message), serialized.value);
}
throw serialized.value;
},
};
/**
* Allows customizing the serialization of certain values.
*/
const transferHandlers = new Map([
["proxy", proxyTransferHandler],
["throw", throwTransferHandler],
]);
function expose(obj, ep = self) {
ep.addEventListener("message", function callback(ev) {
if (!ev || !ev.data) {
return;
}
const { id, type, path } = Object.assign({ path: [] }, ev.data);
const argumentList = (ev.data.argumentList || []).map(fromWireValue);
let returnValue;
try {
const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);
const rawValue = path.reduce((obj, prop) => obj[prop], obj);
switch (type) {
case "GET" /* GET */:
{
returnValue = rawValue;
}
break;
case "SET" /* SET */:
{
parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);
returnValue = true;
}
break;
case "APPLY" /* APPLY */:
{
returnValue = rawValue.apply(parent, argumentList);
}
break;
case "CONSTRUCT" /* CONSTRUCT */:
{
const value = new rawValue(...argumentList);
returnValue = proxy(value);
}
break;
case "ENDPOINT" /* ENDPOINT */:
{
const { port1, port2 } = new MessageChannel();
expose(obj, port2);
returnValue = transfer(port1, [port1]);
}
break;
case "RELEASE" /* RELEASE */:
{
returnValue = undefined;
}
break;
default:
return;
}
}
catch (value) {
returnValue = { value, [throwMarker]: 0 };
}
Promise.resolve(returnValue)
.catch((value) => {
return { value, [throwMarker]: 0 };
})
.then((returnValue) => {
const [wireValue, transferables] = toWireValue(returnValue);
ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);
if (type === "RELEASE" /* RELEASE */) {
// detach and deactive after sending release response above.
ep.removeEventListener("message", callback);
closeEndPoint(ep);
}
});
});
if (ep.start) {
ep.start();
}
}
function isMessagePort(endpoint) {
return endpoint.constructor.name === "MessagePort";
}
function closeEndPoint(endpoint) {
if (isMessagePort(endpoint))
endpoint.close();
}
function wrap(ep, target) {
return createProxy(ep, [], target);
}
function throwIfProxyReleased(isReleased) {
if (isReleased) {
throw new Error("Proxy has been released and is not useable");
}
}
function createProxy(ep, path = [], target = function () { }) {
let isProxyReleased = false;
const proxy = new Proxy(target, {
get(_target, prop) {
throwIfProxyReleased(isProxyReleased);
if (prop === releaseProxy) {
return () => {
return requestResponseMessage(ep, {
type: "RELEASE" /* RELEASE */,
path: path.map((p) => p.toString()),
}).then(() => {
closeEndPoint(ep);
isProxyReleased = true;
});
};
}
if (prop === "then") {
if (path.length === 0) {
return { then: () => proxy };
}
const r = requestResponseMessage(ep, {
type: "GET" /* GET */,
path: path.map((p) => p.toString()),
}).then(fromWireValue);
return r.then.bind(r);
}
return createProxy(ep, [...path, prop]);
},
set(_target, prop, rawValue) {
throwIfProxyReleased(isProxyReleased);
// FIXME: ES6 Proxy Handler `set` methods are supposed to return a
// boolean. To show good will, we return true asynchronously ¯\_(ツ)_/¯
const [value, transferables] = toWireValue(rawValue);
return requestResponseMessage(ep, {
type: "SET" /* SET */,
path: [...path, prop].map((p) => p.toString()),
value,
}, transferables).then(fromWireValue);
},
apply(_target, _thisArg, rawArgumentList) {
throwIfProxyReleased(isProxyReleased);
const last = path[path.length - 1];
if (last === createEndpoint) {
return requestResponseMessage(ep, {
type: "ENDPOINT" /* ENDPOINT */,
}).then(fromWireValue);
}
// We just pretend that `bind()` didn’t happen.
if (last === "bind") {
return createProxy(ep, path.slice(0, -1));
}
const [argumentList, transferables] = processArguments(rawArgumentList);
return requestResponseMessage(ep, {
type: "APPLY" /* APPLY */,
path: path.map((p) => p.toString()),
argumentList,
}, transferables).then(fromWireValue);
},
construct(_target, rawArgumentList) {
throwIfProxyReleased(isProxyReleased);
const [argumentList, transferables] = processArguments(rawArgumentList);
return requestResponseMessage(ep, {
type: "CONSTRUCT" /* CONSTRUCT */,
path: path.map((p) => p.toString()),
argumentList,
}, transferables).then(fromWireValue);
},
});
return proxy;
}
function myFlat(arr) {
return Array.prototype.concat.apply([], arr);
}
function processArguments(argumentList) {
const processed = argumentList.map(toWireValue);
return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];
}
const transferCache = new WeakMap();
function transfer(obj, transfers) {
transferCache.set(obj, transfers);
return obj;
}
function proxy(obj) {
return Object.assign(obj, { [proxyMarker]: true });
}
function windowEndpoint(w, context = self, targetOrigin = "*") {
return {
postMessage: (msg, transferables) => w.postMessage(msg, targetOrigin, transferables),
addEventListener: context.addEventListener.bind(context),
removeEventListener: context.removeEventListener.bind(context),
};
}
function toWireValue(value) {
for (const [name, handler] of transferHandlers) {
if (handler.canHandle(value)) {
const [serializedValue, transferables] = handler.serialize(value);
return [
{
type: "HANDLER" /* HANDLER */,
name,
value: serializedValue,
},
transferables,
];
}
}
return [
{
type: "RAW" /* RAW */,
value,
},
transferCache.get(value) || [],
];
}
function fromWireValue(value) {
switch (value.type) {
case "HANDLER" /* HANDLER */:
return transferHandlers.get(value.name).deserialize(value.value);
case "RAW" /* RAW */:
return value.value;
}
}
function requestResponseMessage(ep, msg, transfers) {
return new Promise((resolve) => {
const id = generateUUID();
ep.addEventListener("message", function l(ev) {
if (!ev.data || !ev.data.id || ev.data.id !== id) {
return;
}
ep.removeEventListener("message", l);
resolve(ev.data);
});
if (ep.start) {
ep.start();
}
ep.postMessage(Object.assign({ id }, msg), transfers);
});
}
function generateUUID() {
return new Array(4)
.fill(0)
.map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))
.join("-");
}
exports.createEndpoint = createEndpoint;
exports.expose = expose;
exports.proxy = proxy;
exports.proxyMarker = proxyMarker;
exports.releaseProxy = releaseProxy;
exports.transfer = transfer;
exports.transferHandlers = transferHandlers;
exports.windowEndpoint = windowEndpoint;
exports.wrap = wrap;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=comlink.js.map
================================================
FILE: public/iconfont.css
================================================
@font-face {
font-family: 'iconfont';
src: url('iconfont.woff2') format('woff2');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.iconlist:before {
content: "\e685";
}
.iconzhongmingming:before {
content: "\e686";
}
.icona-juzhongduiqi3x:before {
content: "\e687";
}
.iconLocation:before {
content: "\e68e";
}
.iconlocation:before {
content: "\e684";
}
.icondingwei:before {
content: "\ec32";
}
.icontupianyulan:before {
content: "\e683";
}
.iconkuaisukaidian:before {
content: "\e6ea";
}
.iconmiaosha:before {
content: "\e681";
}
.iconae:before {
content: "\e682";
}
.iconpic2:before {
content: "\e680";
}
.iconpiliangxuanze:before {
content: "\e67e";
}
.iconpiliangbianji:before {
content: "\e67f";
}
.iconpaixu2:before {
content: "\e67c";
}
.iconpaixu11:before {
content: "\e67d";
}
.iconpaixu1:before {
content: "\e67a";
}
.iconwbiaoqian:before {
content: "\e67b";
}
.icondakaiwenjianjia:before {
content: "\e6bc";
}
.icondakaiwenjianjia1:before {
content: "\e679";
}
.iconmoveto:before {
content: "\e78a";
}
.iconyidong:before {
content: "\e678";
}
.iconyidong1:before {
content: "\e708";
}
.iconqingkong:before {
content: "\e677";
}
.icontouping2:before {
content: "\e675";
}
.iconluxiang:before {
content: "\efff";
}
.iconshipin:before {
content: "\e6bb";
}
.iconfangkuang:before {
content: "\e674";
}
.iconattribute:before {
content: "\e6b0";
}
.iconshuxing:before {
content: "\e723";
}
.iconshuxing1:before {
content: "\e91c";
}
.iconjietu:before {
content: "\e673";
}
.icongengduo1:before {
content: "\e672";
}
.iconcrown3:before {
content: "\e66c";
}
.iconshuzhuangtu:before {
content: "\e670";
}
.iconchuanshu2:before {
content: "\e66f";
}
.icontree-map:before {
content: "\e66d";
}
.iconnode-tree1:before {
content: "\e7c2";
}
.iconyuanduanfuzhi:before {
content: "\e66e";
}
.iconchrome:before {
content: "\eaa9";
}
.icondingyueno:before {
content: "\e66b";
}
.iconchakan:before {
content: "\e66a";
}
.icontuijian:before {
content: "\e68d";
}
.icondingyue:before {
content: "\e668";
}
.iconxiaotumoshi:before {
content: "\e65d";
}
.iconweixiang:before {
content: "\e671";
}
.iconxia:before {
content: "\e694";
}
.iconxia1:before {
content: "\e796";
}
.icontongzhiblue:before {
content: "\e702";
}
.icontongzhi1:before {
content: "\e669";
}
.iconyibu:before {
content: "\e666";
}
.iconquxiaozhiding:before {
content: "\e918";
}
.iconzhiding:before {
content: "\e676";
}
.iconshousuo:before {
content: "\e819";
}
.iconshousuo1:before {
content: "\e689";
}
.iconfile-apk:before {
content: "\e665";
}
.iconshangchuansudu:before {
content: "\e663";
}
.iconxiazaisudu:before {
content: "\e664";
}
.iconarrow-bottom-2-icon-copy:before {
content: "\e93d";
}
.iconarrow-left-1-icon:before {
content: "\e923";
}
.iconarrow-left-2-icon:before {
content: "\e924";
}
.iconarrow-right-1-icon:before {
content: "\e925";
}
.iconarrow-right-2-icon:before {
content: "\e926";
}
.iconreload-1-icon:before {
content: "\e93b";
}
.iconarrow-top-2-icon-copy:before {
content: "\e93c";
}
.iconDebug2:before {
content: "\e662";
}
.icondebug:before {
content: "\e716";
}
.iconyonghu:before {
content: "\e661";
}
.iconright:before {
content: "\e660";
}
.iconfenzhi1:before {
content: "\e65f";
}
.iconcheckbox-full:before {
content: "\e65e";
}
.icondian:before {
content: "\e602";
}
.iconfanhui:before {
content: "\e65c";
}
.iconwifi:before {
content: "\e65b";
}
.iconyouxian:before {
content: "\e698";
}
.iconcrown2:before {
content: "\e659";
}
.icontxt:before {
content: "\e6a6";
}
.iconpubuliumoshi:before {
content: "\e65a";
}
.icongengduo:before {
content: "\e63a";
}
.iconliebiaomoshi:before {
content: "\e700";
}
.iconpaixu:before {
content: "\e706";
}
.iconsuoluetumoshi:before {
content: "\e636";
}
.iconArrow-Down2:before {
content: "\e740";
}
.iconArrow-Right2:before {
content: "\e742";
}
.iconxiaoxituisong:before {
content: "\e638";
}
.iconfenxiang1:before {
content: "\e635";
}
.iconbiaozhang:before {
content: "\e6af";
}
.iconfenxiang:before {
content: "\e6c9";
}
.iconmenuoff:before {
content: "\e77c";
}
.iconmenuon:before {
content: "\e77d";
}
.iconxuanzhuan:before {
content: "\e68a";
}
.iconsafebox:before {
content: "\e634";
}
.iconweifa:before {
content: "\e601";
}
.iconchuanbo:before {
content: "\e745";
}
.iconui:before {
content: "\e600";
}
.iconali:before {
content: "\e631";
}
.iconrss:before {
content: "\e62f";
}
.iconchuanshu:before {
content: "\e630";
}
.iconanlixiangqinganniu:before {
content: "\e633";
}
.iconinfo_circle:before {
content: "\e77e";
}
.iconrpasswoed:before {
content: "\e6fa";
}
.iconnight:before {
content: "\e62d";
}
.iconday:before {
content: "\e62e";
}
.iconrss_music:before {
content: "\e7ca";
}
.iconrss_game:before {
content: "\e7ce";
}
.iconrstop:before {
content: "\e770";
}
.iconrsearch:before {
content: "\e775";
}
.iconrvip:before {
content: "\e776";
}
.iconrpic:before {
content: "\e778";
}
.iconrsuccess:before {
content: "\e77b";
}
.iconclose:before {
content: "\e7fd";
}
.iconzuixiaohua:before {
content: "\e7ff";
}
.iconleft_circle:before {
content: "\e77f";
}
.iconright_circle:before {
content: "\e783";
}
.iconfullscreen:before {
content: "\e7ec";
}
.iconfolderadd:before {
content: "\e7d2";
}
.iconnotification:before {
content: "\e7df";
}
.iconsync:before {
content: "\e786";
}
.iconpiechart:before {
content: "\e78f";
}
.iconuser:before {
content: "\e7ae";
}
.iconcheck:before {
content: "\e7fc";
}
.iconsort_ascend:before {
content: "\e62a";
}
.iconsort_descend:before {
content: "\e62b";
}
.iconsort:before {
content: "\e62c";
}
.iconsearch:before {
content: "\e8f0";
}
.icondown:before {
content: "\e7eb";
}
.iconempty:before {
content: "\e629";
}
.iconfile_img2:before {
content: "\e628";
}
.iconfile_xci:before {
content: "\e626";
}
.iconfile_nsp:before {
content: "\e627";
}
.iconfile_bin:before {
content: "\e624";
}
.iconfile_dmg:before {
content: "\e625";
}
.iconcalendar:before {
content: "\e7d3";
}
.icondesktop:before {
content: "\e843";
}
.iconstart:before {
content: "\e658";
}
.iconfile_txt2:before {
content: "\e622";
}
.iconfile_video:before {
content: "\e621";
}
.iconcloud_success:before {
content: "\e620";
}
.iconcopy:before {
content: "\e61b";
}
.iconpercentage:before {
content: "\e7e3";
}
.iconscissor:before {
content: "\e7e6";
}
.iconcomment:before {
content: "\e8e8";
}
.iconhourglass:before {
content: "\e7c7";
}
.iconrss_video:before {
content: "\e90f";
}
.iconfail:before {
content: "\e6e1";
}
.iconlogoff:before {
content: "\e61d";
}
.iconjindu:before {
content: "\e667";
}
.iconcloud_error:before {
content: "\e63b";
}
.iconlink2:before {
content: "\e61e";
}
.iconrecover:before {
content: "\e61f";
}
.iconfile_ts:before {
content: "\e61c";
}
.iconfile_ssa:before {
content: "\e61a";
}
.iconfile_wmv:before {
content: "\e619";
}
.iconfile_asf:before {
content: "\e613";
}
.iconfile_ass:before {
content: "\e614";
}
.iconfile_rmvb:before {
content: "\e615";
}
.iconfile_srt:before {
content: "\e616";
}
.iconfile_stl:before {
content: "\e617";
}
.iconfile-scc:before {
content: "\e618";
}
.iconfile-god:before {
content: "\e60d";
}
.iconfile-vmdk:before {
content: "\e60e";
}
.iconfile-gho:before {
content: "\e60f";
}
.iconfile-iso:before {
content: "\e610";
}
.iconfile-mds:before {
content: "\e611";
}
.iconfile-vhd:before {
content: "\e612";
}
.iconfile-cue:before {
content: "\e60a";
}
.iconfile-ogg:before {
content: "\e60c";
}
.iconfile-wav:before {
content: "\e607";
}
.iconfile-ape:before {
content: "\e608";
}
.iconfile-flac:before {
content: "\e609";
}
.iconfile-mkv:before {
content: "\e606";
}
.iconfile-bt:before {
content: "\e605";
}
.iconfile-file:before {
content: "\e604";
}
.iconfile-image:before {
content: "\e603";
}
.iconrss-item:before {
content: "\e910";
}
.iconrss-xby:before {
content: "\e911";
}
.iconpoweroff:before {
content: "\e78c";
}
.iconlogout:before {
content: "\e78d";
}
.iconsetting:before {
content: "\e78e";
}
.iconbulb:before {
content: "\e7c5";
}
.iconcluster:before {
content: "\e7d7";
}
.iconcamera:before {
content: "\e7dd";
}
.iconlink:before {
content: "\e7e2";
}
.iconinstagram:before {
content: "\e87f";
}
.iconwechat:before {
content: "\e883";
}
.iconapartment:before {
content: "\e897";
}
.iconrobot:before {
content: "\e898";
}
.iconcameraadd:before {
content: "\e8ea";
}
.iconlogin:before {
content: "\e8ef";
}
.iconplus:before {
content: "\e8fe";
}
.iconclear:before {
content: "\e900";
}
.iconpartition:before {
content: "\e90e";
}
.iconrest:before {
content: "\e7c4";
}
.iconhome:before {
content: "\e7c6";
}
.iconcloud-server:before {
content: "\e7dc";
}
.iconcloud-sync:before {
content: "\e7de";
}
.iconupload:before {
content: "\e7f0";
}
.iconpause:before {
content: "\e7fe";
}
.iconcrown:before {
content: "\e842";
}
.iconset:before {
content: "\e623";
}
.iconwenjian:before {
content: "\e637";
}
.iconfolder:before {
content: "\e7d1";
}
.iconedit-square:before {
content: "\e791";
}
.icondelete:before {
content: "\e7c3";
}
.iconcloud-upload:before {
content: "\e7d9";
}
.iconcloud:before {
content: "\e7da";
}
.iconcloud-download:before {
content: "\e7db";
}
.icondownload:before {
content: "\e7ef";
}
.iconfile-img:before {
content: "\e639";
}
.iconfile-folder:before {
content: "\e60b";
}
.iconfile-audio:before {
content: "\e632";
}
.iconfile-7z:before {
content: "\e63c";
}
.iconfile-ai:before {
content: "\e63d";
}
.iconfile-avi:before {
content: "\e63e";
}
.iconfile-bmp:before {
content: "\e63f";
}
.iconfile-eps:before {
content: "\e640";
}
.iconfile-exe:before {
content: "\e641";
}
.iconfile-flv:before {
content: "\e642";
}
.iconfile-doc:before {
content: "\e643";
}
.iconfile-gif:before {
content: "\e644";
}
.iconfile-mov:before {
content: "\e645";
}
.iconfile-html:before {
content: "\e646";
}
.iconfile-mp4:before {
content: "\e647";
}
.iconfile-pdf:before {
content: "\e648";
}
.iconfile-mp3:before {
content: "\e649";
}
.iconfile-ppt:before {
content: "\e64a";
}
.iconfile-png:before {
content: "\e64b";
}
.iconfile-psd:before {
content: "\e64c";
}
.iconfile-rar:before {
content: "\e64d";
}
.iconfile-svg:before {
content: "\e64e";
}
.iconfile-swf:before {
content: "\e64f";
}
.iconfile-rp:before {
content: "\e650";
}
.iconfile-tif:before {
content: "\e651";
}
.iconfile-txt:before {
content: "\e652";
}
.iconfile-zip:before {
content: "\e653";
}
.iconfile-jpg:before {
content: "\e654";
}
.iconfile-wps:before {
content: "\e655";
}
.iconfile-tar:before {
content: "\e656";
}
.iconfile-xsl:before {
content: "\e657";
}
================================================
FILE: public/lang/en.js
================================================
videojs.addLanguage('en', {
"Audio Player": "Audio Player",
"Video Player": "Video Player",
"Play": "Play",
"Pause": "Pause",
"Replay": "Replay",
"Current Time": "Current Time",
"Duration": "Duration",
"Remaining Time": "Remaining Time",
"Stream Type": "Stream Type",
"LIVE": "LIVE",
"Seek to live, currently behind live": "Seek to live, currently behind live",
"Seek to live, currently playing live": "Seek to live, currently playing live",
"Loaded": "Loaded",
"Progress": "Progress",
"Progress Bar": "Progress Bar",
"progress bar timing: currentTime={1} duration={2}": "{1} of {2}",
"Fullscreen": "Fullscreen",
"Non-Fullscreen": "Exit Fullscreen",
"Mute": "Mute",
"Unmute": "Unmute",
"Playback Rate": "Playback Rate",
"Subtitles": "Subtitles",
"subtitles off": "subtitles off",
"Captions": "Captions",
"captions off": "captions off",
"Chapters": "Chapters",
"Descriptions": "Descriptions",
"descriptions off": "descriptions off",
"Audio Track": "Audio Track",
"Volume Level": "Volume Level",
"You aborted the media playback": "You aborted the media playback",
"A network error caused the media download to fail part-way.": "A network error caused the media download to fail part-way.",
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "The media could not be loaded, either because the server or network failed or because the format is not supported.",
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.",
"No compatible source was found for this media.": "No compatible source was found for this media.",
"The media is encrypted and we do not have the keys to decrypt it.": "The media is encrypted and we do not have the keys to decrypt it.",
"Play Video": "Play Video",
"Close": "Close",
"Close Modal Dialog": "Close Modal Dialog",
"Modal Window": "Modal Window",
"This is a modal window": "This is a modal window",
"This modal can be closed by pressing the Escape key or activating the close button.": "This modal can be closed by pressing the Escape key or activating the close button.",
", opens captions settings dialog": ", opens captions settings dialog",
", opens subtitles settings dialog": ", opens subtitles settings dialog",
", opens descriptions settings dialog": ", opens descriptions settings dialog",
", selected": ", selected",
"captions settings": "captions settings",
"subtitles settings": "subtitles settings",
"descriptions settings": "descriptions settings",
"Text": "Text",
"White": "White",
"Black": "Black",
"Red": "Red",
"Green": "Green",
"Blue": "Blue",
"Yellow": "Yellow",
"Magenta": "Magenta",
"Cyan": "Cyan",
"Background": "Background",
"Window": "Window",
"Transparent": "Transparent",
"Semi-Transparent": "Semi-Transparent",
"Opaque": "Opaque",
"Font Size": "Font Size",
"Text Edge Style": "Text Edge Style",
"None": "None",
"Raised": "Raised",
"Depressed": "Depressed",
"Uniform": "Uniform",
"Dropshadow": "Dropshadow",
"Font Family": "Font Family",
"Proportional Sans-Serif": "Proportional Sans-Serif",
"Monospace Sans-Serif": "Monospace Sans-Serif",
"Proportional Serif": "Proportional Serif",
"Monospace Serif": "Monospace Serif",
"Casual": "Casual",
"Script": "Script",
"Small Caps": "Small Caps",
"Reset": "Reset",
"restore all settings to the default values": "restore all settings to the default values",
"Done": "Done",
"Caption Settings Dialog": "Caption Settings Dialog",
"Beginning of dialog window. Escape will cancel and close the window.": "Beginning of dialog window. Escape will cancel and close the window.",
"End of dialog window.": "End of dialog window.",
"{1} is loading.": "{1} is loading.",
"Exit Picture-in-Picture": "Exit Picture-in-Picture",
"Picture-in-Picture": "Picture-in-Picture"
});
================================================
FILE: public/lang/zh-CN.js
================================================
videojs.addLanguage('zh-CN', {
"Play": "播放",
"Pause": "暂停",
"Current Time": "当前时间",
"Duration": "时长",
"Remaining Time": "剩余时间",
"Stream Type": "媒体流类型",
"LIVE": "直播",
"Loaded": "加载完成",
"Progress": "进度",
"Fullscreen": "全屏",
"Non-Fullscreen": "退出全屏",
"Picture-in-Picture": "画中画",
"Exit Picture-in-Picture": "退出画中画",
"Mute": "静音",
"Unmute": "取消静音",
"Playback Rate": "播放速度",
"Subtitles": "字幕",
"subtitles off": "关闭字幕",
"Captions": "内嵌字幕",
"captions off": "关闭内嵌字幕",
"Chapters": "节目段落",
"Close Modal Dialog": "关闭弹窗",
"Descriptions": "描述",
"descriptions off": "关闭描述",
"Audio Track": "音轨",
"You aborted the media playback": "视频播放被终止",
"A network error caused the media download to fail part-way.": "网络错误导致视频下载中途失败。",
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "视频因格式不支持或者服务器或网络的问题无法加载。",
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "由于视频文件损坏或是该视频使用了你的浏览器不支持的功能,播放终止。",
"No compatible source was found for this media.": "无法找到此视频兼容的源。",
"The media is encrypted and we do not have the keys to decrypt it.": "视频已加密,无法解密。",
"Play Video": "播放视频",
"Close": "关闭",
"Modal Window": "弹窗",
"This is a modal window": "这是一个弹窗",
"This modal can be closed by pressing the Escape key or activating the close button.": "可以按ESC按键或启用关闭按钮来关闭此弹窗。",
", opens captions settings dialog": ", 开启标题设置弹窗",
", opens subtitles settings dialog": ", 开启字幕设置弹窗",
", opens descriptions settings dialog": ", 开启描述设置弹窗",
", selected": ", 选择",
"captions settings": "字幕设定",
"Audio Player": "音频播放器",
"Video Player": "视频播放器",
"Replay": "重新播放",
"Progress Bar": "进度条",
"Volume Level": "音量",
"subtitles settings": "字幕设定",
"descriptions settings": "描述设定",
"Text": "文字",
"White": "白",
"Black": "黑",
"Red": "红",
"Green": "绿",
"Blue": "蓝",
"Yellow": "黄",
"Magenta": "紫红",
"Cyan": "青",
"Background": "背景",
"Window": "窗口",
"Transparent": "透明",
"Semi-Transparent": "半透明",
"Opaque": "不透明",
"Font Size": "字体尺寸",
"Text Edge Style": "字体边缘样式",
"None": "无",
"Raised": "浮雕",
"Depressed": "压低",
"Uniform": "均匀",
"Dropshadow": "下阴影",
"Font Family": "字体库",
"Proportional Sans-Serif": "比例无细体",
"Monospace Sans-Serif": "单间隔无细体",
"Proportional Serif": "比例细体",
"Monospace Serif": "单间隔细体",
"Casual": "舒适",
"Script": "手写体",
"Small Caps": "小型大写字体",
"Reset": "重置",
"restore all settings to the default values": "恢复全部设定至预设值",
"Done": "完成",
"Caption Settings Dialog": "字幕设定窗口",
"Beginning of dialog window. Escape will cancel and close the window.": "打开对话窗口。Escape键将取消并关闭对话窗口",
"End of dialog window.": "结束对话窗口",
"Seek to live, currently behind live": "尝试直播,当前为延时播放",
"Seek to live, currently playing live": "尝试直播,当前为实时播放",
"progress bar timing: currentTime={1} duration={2}": "{1}/{2}",
"{1} is loading.": "正在加载 {1}。",
"Open quality selector menu":"选择清晰度"
});
================================================
FILE: public/main.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>阿里云盘小白羊版</title>
<meta name="data-spm" content="aliyundrive" />
<link rel="icon" href="favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="iconfont.css" />
<script charset="UTF-8" src="pinyinlite_full.min.js"></script>
<script src="wasm_exec.js" data-manual></script>
<script>
const go = new window.Go()
WebAssembly.instantiateStreaming(fetch('wasm.wasm'), go.importObject).then((res) => {
go.run(res.instance)
})
</script>
<script type="module" crossorigin src="index.js"></script>
<link rel="stylesheet" href="style.css" />
</head>
<body class="usertheme">
<div id="app"></div>
<link id="usercsslink" rel="stylesheet" />
</body>
</html>
================================================
FILE: public/main2.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>阿里云盘小白羊版</title>
<meta name="data-spm" content="aliyundrive" />
<link rel="icon" href="favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="iconfont.css" />
<link rel="stylesheet" href="prism-vsc-dark-plus.css" />
<script src="prism.js" data-manual></script>
<script src="video.min.js" data-manual></script>
<script src="lang/zh-CN.js" data-manual></script>
<link rel="stylesheet" href="video-js.min.css" />
<script src="silvermine-videojs-quality-selector.min.js" data-manual></script>
<link rel="stylesheet" href="silvermine-videojs-quality-selector.css" />
<script type="module" crossorigin src="index.js"></script>
<link rel="stylesheet" href="style.css" />
</head>
<body class="usertheme">
<div id="app"></div>
<script src="https://g.alicdn.com/IMM/office-js/1.1.5/aliyun-web-office-sdk.min.js"></script>
<link id="usercsslink" rel="stylesheet" />
</body>
</html>
================================================
FILE: public/prism-vsc-dark-plus.css
================================================
pre[class*='language-'],
code[class*='language-'] {
color: #e4e4e4;
font-size: 14px;
text-shadow: none;
font-family: Menlo, Monaco, Consolas, 'Andale Mono', 'Ubuntu Mono', 'Courier New', monospace, Segoe WPC, Segoe UI, Microsoft YaHei, sans-serif;
font-feature-settings: 'liga' 0, 'calt' 0;
direction: ltr;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*='language-']::selection,
code[class*='language-']::selection,
pre[class*='language-'] *::selection,
code[class*='language-'] *::selection {
text-shadow: none;
background: #75a7ca;
}
@media print {
pre[class*='language-'],
code[class*='language-'] {
text-shadow: none;
}
}
pre[class*='language-'] {
padding: 1em;
margin: 0.5em 0;
overflow: auto;
background: #1e1e1e;
}
:not(pre) > code[class*='language-'] {
padding: 0.1em 0.3em;
border-radius: 0.3em;
color: #db4c69;
background: #f9f2f4;
}
/*********************************************************
* Tokens
*/
.namespace {
opacity: 0.7;
}
.token.doctype .token.doctype-tag {
color: #569cd6;
}
.token.doctype .token.name {
color: #9cdcfe;
}
.token.comment,
.token.prolog {
color: #6a9955;
}
.token.punctuation,
.language-html .language-css .token.punctuation,
.language-html .language-javascript .token.punctuation {
color: #d4d4d4;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.inserted,
.token.unit {
color: #b5cea8;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.deleted {
color: #ffa726;
}
.language-css .token.string.url {
text-decoration: underline;
}
.token.operator,
.token.entity {
color: #d4d4d4;
}
.token.operator.arrow {
color: #569cd6;
}
.token.atrule {
color: #f3a281;
}
.token.atrule .token.rule {
color: #c586c0;
}
.token.atrule .token.url {
color: #9cdcfe;
}
.token.atrule .token.url .token.function {
color: #dcdcaa;
}
.token.atrule .token.url .token.punctuation {
color: #d4d4d4;
}
.token.keyword {
color: #569cd6;
}
.token.keyword.module,
.token.keyword.control-flow {
color: #c586c0;
}
.token.function,
.token.function .token.maybe-class-name {
color: #dcdcaa;
}
.token.regex {
color: #d16969;
}
.token.important {
color: #569cd6;
}
.token.italic {
font-style: italic;
}
.token.constant {
color: #9cdcfe;
}
.token.class-name,
.token.maybe-class-name {
color: #4ec9b0;
}
.token.console {
color: #9cdcfe;
}
.token.parameter {
color: #9cdcfe;
}
.token.interpolation {
color: #9cdcfe;
}
.token.punctuation.interpolation-punctuation {
color: #569cd6;
}
.token.boolean {
color: #569cd6;
}
.token.property,
.token.variable,
.token.imports .token.maybe-class-name,
.token.exports .token.maybe-class-name {
color: #9cdcfe;
}
.token.selector {
color: #d7ba7d;
}
.token.escape {
color: #d7ba7d;
}
.token.tag {
color: #569cd6;
}
.token.tag .token.punctuation {
color: #808080;
}
.token.cdata {
color: #808080;
}
.token.attr-name {
color: #9cdcfe;
}
.token.attr-value,
.token.attr-value .token.punctuation {
color: #f3a281;
}
.token.attr-value .token.punctuation.attr-equals {
color: #d4d4d4;
}
.token.entity {
color: #569cd6;
}
.token.namespace {
color: #4ec9b0;
}
/*********************************************************
* Language Specific
*/
pre[class*='language-javascript'],
code[class*='language-javascript'],
pre[class*='language-jsx'],
code[class*='language-jsx'],
pre[class*='language-typescript'],
code[class*='language-typescript'],
pre[class*='language-tsx'],
code[class*='language-tsx'] {
color: #9cdcfe;
}
pre[class*='language-css'],
code[class*='language-css'] {
color: #f3a281;
}
pre[class*='language-html'],
code[class*='language-html'] {
color: #d4d4d4;
}
.language-regex .token.anchor {
color: #dcdcaa;
}
.language-html .token.punctuation {
color: #808080;
}
/*********************************************************
* Line highlighting
*/
pre[data-line] {
position: relative;
}
pre[class*='language-'] > code[class*='language-'] {
position: relative;
z-index: 1;
}
.line-highlight {
position: absolute;
left: 0;
right: 0;
padding: inherit 0;
margin-top: 1em;
background: #f7ebc6;
box-shadow: inset 5px 0 0 #f7d87c;
z-index: 0;
pointer-events: none;
line-height: inherit;
white-space: pre;
}
/* works for line-numbers below 1000 lines */
pre[class*='language-'].line-numbers {
position: relative;
padding-left: 3.8em;
counter-reset: linenumber;
}
pre[class*='language-'].line-numbers > code {
position: relative;
white-space: inherit;
}
.line-numbers .line-numbers-rows {
position: absolute;
pointer-events: none;
top: 0;
font-size: 100%;
left: -3.8em;
width: 3em; /* works for line-numbers below 1000 lines */
letter-spacing: -1px;
border-right: 1px solid #999;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.line-numbers-rows > span {
display: block;
counter-increment: linenumber;
}
.line-numbers-rows > span:before {
content: counter(linenumber);
color: #999;
display: block;
padding-right: 0.8em;
text-align: right;
}
================================================
FILE: public/prism.js
================================================
/* PrismJS 1.24.1
https://prismjs.com/download.html#themes=prism-twilight&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apex+apl+applescript+aql+arduino+arff+asciidoc+aspnet+asm6502+autohotkey+autoit+bash+basic+batch+bbcode+birb+bison+bnf+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cfscript+chaiscript+cil+clojure+cmake+cobol+coffeescript+concurnas+csp+coq+crystal+css-extras+csv+cypher+d+dart+dataweave+dax+dhall+diff+django+dns-zone-file+docker+dot+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+false+firestore-security-rules+flow+fortran+ftl+gml+gcode+gdscript+gedcom+gherkin+git+glsl+go+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+hoon+http+hpkp+hsts+ichigojam+icon+icu-message-format+idris+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jexl+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keyman+kotlin+kumir+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+log+lolcode+lua+makefile+markdown+markup-templating+matlab+mel+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nevod+nginx+nim+nix+nsis+objectivec+ocaml+opencl+openqasm+oz+parigp+parser+pascal+pascaligo+psl+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plsql+powerquery+powershell+processing+prolog+promql+properties+protobuf+pug+puppet+pure+purebasic+purescript+python+qsharp+q+qml+qore+r+racket+jsx+tsx+reason+regex+rego+renpy+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+sml+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+squirrel+stan+iecst+stylus+swift+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+turtle+twig+typescript+typoscript+unrealscript+uri+v+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+wiki+wolfram+xeora+xml-doc+xojo+xquery+yaml+yang+zig&plugins=line-numbers+show-invisibles+normalize-whitespace+treeview */
var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,n=0,e={},M={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof W?new W(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++n}),e.__id},clone:function t(e,r){var a,n;switch(r=r||{},M.util.type(e)){case"Object":if(n=M.util.objId(e),r[n])return r[n];for(var i in a={},r[n]=a,e)e.hasOwnProperty(i)&&(a[i]=t(e[i],r));return a;case"Array":return n=M.util.objId(e),r[n]?r[n]:(a=[],r[n]=a,e.forEach(function(e,n){a[n]=t(e,r)}),a);default:return e}},getLanguage:function(e){for(;e&&!c.test(e.className);)e=e.parentElement;return e?(e.className.match(c)||[,"none"])[1].toLowerCase():"none"},currentScript:function(){if("undefined"==typeof document)return null;if("currentScript"in document)return document.currentScript;try{throw new Error}catch(e){var n=(/at [^(\r\n]*\((.*):.+:.+\)$/i.exec(e.stack)||[])[1];if(n){var t=document.getElementsByTagName("script");for(var r in t)if(t[r].src==n)return t[r]}return null}},isActive:function(e,n,t){for(var r="no-"+n;e;){var a=e.classList;if(a.contains(n))return!0;if(a.contains(r))return!1;e=e.parentElement}return!!t}},languages:{plain:e,plaintext:e,text:e,txt:e,extend:function(e,n){var t=M.util.clone(M.languages[e]);for(var r in n)t[r]=n[r];return t},insertBefore:function(t,e,n,r){var a=(r=r||M.languages)[t],i={};for(var l in a)if(a.hasOwnProperty(l)){if(l==e)for(var o in n)n.hasOwnProperty(o)&&(i[o]=n[o]);n.hasOwnProperty(l)||(i[l]=a[l])}var s=r[t];return r[t]=i,M.languages.DFS(M.languages,function(e,n){n===s&&e!=t&&(this[e]=i)}),i},DFS:function e(n,t,r,a){a=a||{};var i=M.util.objId;for(var l in n)if(n.hasOwnProperty(l)){t.call(n,l,n[l],r||l);var o=n[l],s=M.util.type(o);"Object"!==s||a[i(o)]?"Array"!==s||a[i(o)]||(a[i(o)]=!0,e(o,t,l,a)):(a[i(o)]=!0,e(o,t,null,a))}}},plugins:{},highlightAll:function(e,n){M.highlightAllUnder(document,e,n)},highlightAllUnder:function(e,n,t){var r={callback:t,container:e,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};M.hooks.run("before-highlightall",r),r.elements=Array.prototype.slice.apply(r.container.querySelectorAll(r.selector)),M.hooks.run("before-all-elements-highlight",r);for(var a,i=0;a=r.elements[i++];)M.highlightElement(a,!0===n,r.callback)},highlightElement:function(e,n,t){var r=M.util.getLanguage(e),a=M.languages[r];e.className=e.className.replace(c,"").replace(/\s+/g," ")+" language-"+
gitextract_g6ltbs2_/ ├── .gitignore ├── .prettierrc ├── README.md ├── adrive sdk/ │ ├── ReadMe.md │ ├── account.md │ ├── aims.md │ ├── album.md │ ├── archive.md │ ├── book.md │ ├── contact.md │ ├── drive.md │ ├── file.md │ ├── filedir.md │ ├── fileupload.md │ ├── image.md │ ├── member.md │ ├── note.md │ ├── offline.md │ ├── recyclebin.md │ ├── reddot.md │ ├── sbox.md │ ├── search.md │ ├── sfiia.md │ ├── share.md │ ├── timeline.md │ ├── token.md │ ├── user.md │ └── video.md ├── changelog.txt ├── crx/ │ ├── devtools.html │ ├── devtools.js │ └── manifest.json ├── doc/ │ ├── info.md │ ├── v2.8.x 使用PotPlayer.md │ └── v2.8.x 阿里云盘小白羊版和官方性能测试.md ├── electron-builder.json ├── nano-staged.mjs ├── package.json ├── public/ │ ├── comlink.js │ ├── iconfont.css │ ├── lang/ │ │ ├── en.js │ │ └── zh-CN.js │ ├── main.html │ ├── main2.html │ ├── prism-vsc-dark-plus.css │ ├── prism.js │ ├── sha1filework.js │ ├── silvermine-videojs-quality-selector.css │ ├── wasm.wasm │ └── wasm_exec.js ├── src/ │ ├── main/ │ │ ├── index.ts │ │ ├── mainfile.ts │ │ └── window.ts │ ├── preload/ │ │ ├── index.ts │ │ └── preload-env.d.ts │ └── renderer/ │ ├── App.vue │ ├── aliapi/ │ │ ├── alihttp.ts │ │ ├── alimodels.ts │ │ ├── archive.ts │ │ ├── batch.ts │ │ ├── dirfilelist.ts │ │ ├── dirlist.ts │ │ ├── file.ts │ │ ├── filecmd.ts │ │ ├── fileicon.ts │ │ ├── filewalk.ts │ │ ├── following.ts │ │ ├── models.ts │ │ ├── server.tsx │ │ ├── share.ts │ │ ├── sharelist.ts │ │ ├── trash.ts │ │ ├── upload.ts │ │ ├── uploaddisk.ts │ │ ├── uploadhash.ts │ │ ├── uploadhashpool.ts │ │ ├── uploadmem.ts │ │ ├── user.ts │ │ └── utils.ts │ ├── assets/ │ │ ├── antd.css │ │ ├── fileitem.css │ │ └── global.css │ ├── down/ │ │ ├── DownDowned.vue │ │ ├── DownDowning.vue │ │ ├── DownM3U8.vue │ │ ├── DownSync.vue │ │ ├── DownUploaded.vue │ │ ├── DownUploading.vue │ │ ├── downdal.ts │ │ ├── downingstore.ts │ │ ├── downmenu.ts │ │ ├── index.vue │ │ ├── uploadedstore.ts │ │ └── uploadingstore.ts │ ├── env.d.ts │ ├── global.d.ts │ ├── layout/ │ │ ├── MyLoading.vue │ │ ├── MyModal.vue │ │ ├── MySplit.vue │ │ ├── MySwitch.vue │ │ ├── MySwitchTab.vue │ │ ├── MyTags.vue │ │ ├── PageCode.vue │ │ ├── PageHelp.vue │ │ ├── PageImage.vue │ │ ├── PageLoading.vue │ │ ├── PageMain.vue │ │ ├── PageOffice.vue │ │ ├── PageVideo.vue │ │ ├── PageVideoXBT.vue │ │ ├── PageWorker.vue │ │ └── pagemain.ts │ ├── main.ts │ ├── pan/ │ │ ├── PanLeft.vue │ │ ├── PanRight.vue │ │ ├── index.vue │ │ ├── menus/ │ │ │ ├── DirLeftMenu.vue │ │ │ ├── DirTopPath.vue │ │ │ ├── FileRightMenu.vue │ │ │ ├── FileTopbtn.vue │ │ │ ├── PanTopbtn.vue │ │ │ ├── TrashRightMenu.vue │ │ │ └── TrashTopbtn.vue │ │ ├── pandal.ts │ │ ├── panfilestore.ts │ │ ├── pantreestore.ts │ │ └── topbtns/ │ │ ├── AlphaModal.vue │ │ ├── ArchiveModal.vue │ │ ├── ArchivePasswordModal.vue │ │ ├── CopyFileTreeModal.vue │ │ ├── CreatNewDirModal.vue │ │ ├── CreatNewDirMultiModal.vue │ │ ├── CreatNewFileModal.vue │ │ ├── CreatNewShareLinkModal.vue │ │ ├── DLNAPlayerModal.vue │ │ ├── DaoRuShareLinkModal.vue │ │ ├── DaoRuShareLinkMultiModal.vue │ │ ├── DownloadModal.vue │ │ ├── M3U8DownloadModal.vue │ │ ├── RenameModal.vue │ │ ├── RenameMultiModal.vue │ │ ├── SearchPanModal.vue │ │ ├── SelectPanDirModal.vue │ │ ├── ShuXingModal.vue │ │ ├── ShuXingMultiModal.vue │ │ ├── UploadModal.vue │ │ ├── renamemulti.ts │ │ └── topbtn.ts │ ├── pic/ │ │ ├── PicLeft.vue │ │ ├── PicRight.vue │ │ └── index.vue │ ├── rss/ │ │ ├── ScanDAL.ts │ │ ├── appsame/ │ │ │ ├── AppSame.vue │ │ │ └── same.ts │ │ ├── index.vue │ │ ├── rssdrivecopy/ │ │ │ ├── RssDriveCopy.vue │ │ │ └── drivecopy.ts │ │ ├── rssjiami/ │ │ │ ├── RssJiaMi.vue │ │ │ └── jiami.ts │ │ ├── rssrename/ │ │ │ └── RssRename.vue │ │ ├── rssscanclean/ │ │ │ ├── RssScanClean.vue │ │ │ └── ScanClean.ts │ │ ├── rssscanenmpty/ │ │ │ ├── RssScanEnmpty.vue │ │ │ └── scanenmpty.ts │ │ ├── rssscanpunish/ │ │ │ ├── RssScanPunish.vue │ │ │ └── scanpunish.ts │ │ ├── rssscansame/ │ │ │ ├── RssScanSame.vue │ │ │ └── scansame.ts │ │ ├── rssusercopy/ │ │ │ ├── RssUserCopy.vue │ │ │ └── usercopy.ts │ │ └── rssxima/ │ │ ├── RssXiMa.vue │ │ └── xima.ts │ ├── setting/ │ │ ├── SettingDebug.vue │ │ ├── SettingDown.vue │ │ ├── SettingLog.vue │ │ ├── SettingPan.vue │ │ ├── SettingPlay.vue │ │ ├── SettingProxy.vue │ │ ├── SettingUI.vue │ │ ├── SettingUpload.vue │ │ ├── ShutDown.vue │ │ ├── index.vue │ │ └── settingstore.ts │ ├── share/ │ │ ├── following/ │ │ │ ├── FollowingDAL.ts │ │ │ ├── MyFollowingRight.vue │ │ │ ├── MyFollowingStore.ts │ │ │ ├── OtherFollowingRight.vue │ │ │ └── OtherFollowingStore.ts │ │ ├── index.vue │ │ └── share/ │ │ ├── EditShareLinkModal.vue │ │ ├── MyShareRight.vue │ │ ├── MyShareStore.ts │ │ ├── OtherShareRight.vue │ │ ├── OtherShareStore.ts │ │ ├── ShareDAL.ts │ │ ├── ShareSiteRight.vue │ │ └── ShowShareLinkModal.vue │ ├── store/ │ │ ├── appstore.ts │ │ ├── footstore.ts │ │ ├── index.ts │ │ ├── keyboardstore.ts │ │ ├── logstore.ts │ │ ├── modalstore.ts │ │ ├── protobuf.ts.bak │ │ ├── serverstore.ts │ │ ├── treestore.ts │ │ └── winstore.ts │ ├── transfer/ │ │ ├── uploaddal.ts │ │ ├── uploadingdal.ts │ │ └── uploadingdata.ts │ ├── user/ │ │ ├── UserInfo.vue │ │ ├── UserLogin.vue │ │ ├── UserSpaceModal.vue │ │ ├── userdal.ts │ │ └── userstore.ts │ ├── utils/ │ │ ├── antdtree.ts │ │ ├── appcache.ts │ │ ├── config.ts │ │ ├── db.ts │ │ ├── dbcache.ts │ │ ├── dbdown.ts │ │ ├── dbupload.ts │ │ ├── debounce.ts │ │ ├── debuglog.ts │ │ ├── electronhelper.ts │ │ ├── filehelper.ts │ │ ├── filenameorder.ts │ │ ├── foot.ts │ │ ├── format.ts │ │ ├── idhelper.ts │ │ ├── keyboardhelper.ts │ │ ├── levemap.ts │ │ ├── message.ts │ │ ├── modal.ts │ │ ├── openfile.ts │ │ ├── selecthelper.ts │ │ ├── sha1workerpool.ts │ │ ├── shareurl.ts │ │ ├── utils.ts │ │ └── worker.ts │ └── workerpage/ │ ├── uidownload.ts │ ├── uiupload.ts │ ├── uploader.ts │ └── workercmd.ts ├── tsconfig.json ├── types.d.ts ├── v2.10.19性能测试.md ├── v2.11.11自定义播放软件.md ├── 开源代码统计.md └── 源码开发打包帮助.md
SYMBOL INDEX (1070 symbols across 104 files)
FILE: public/comlink.js
method serialize (line 29) | serialize(obj) {
method deserialize (line 34) | deserialize(port) {
method serialize (line 44) | serialize({ value }) {
method deserialize (line 61) | deserialize(serialized) {
function expose (line 75) | function expose(obj, ep = self) {
function isMessagePort (line 146) | function isMessagePort(endpoint) {
function closeEndPoint (line 149) | function closeEndPoint(endpoint) {
function wrap (line 153) | function wrap(ep, target) {
function throwIfProxyReleased (line 156) | function throwIfProxyReleased(isReleased) {
function createProxy (line 161) | function createProxy(ep, path = [], target = function () { }) {
function myFlat (line 231) | function myFlat(arr) {
function processArguments (line 234) | function processArguments(argumentList) {
function transfer (line 239) | function transfer(obj, transfers) {
function proxy (line 243) | function proxy(obj) {
function windowEndpoint (line 246) | function windowEndpoint(w, context = self, targetOrigin = "*") {
function toWireValue (line 253) | function toWireValue(value) {
function fromWireValue (line 275) | function fromWireValue(value) {
function requestResponseMessage (line 283) | function requestResponseMessage(ep, msg, transfers) {
function generateUUID (line 299) | function generateUUID() {
FILE: public/prism.js
function o (line 3) | function o(e){l.highlightedCode=e,M.hooks.run("before-insert",l),l.eleme...
function W (line 3) | function W(e,n,t,r){this.type=e,this.content=n,this.alias=t,this.length=...
function z (line 3) | function z(e,n,t,r){e.lastIndex=n;var a=e.exec(t);if(a&&r&&a[1]){var i=a...
function i (line 3) | function i(){var e={value:null,prev:null,next:null},n={value:null,prev:e...
function I (line 3) | function I(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a...
function q (line 3) | function q(e,n,t){for(var r=n.next,a=0;a<t&&r!==e.tail;a++)r=r.next;(n.n...
function r (line 3) | function r(){M.manual||M.highlightAll()}
function i (line 17) | function i(e){return RegExp(e.replace(/<CLASS-NAME>/g,function(){return ...
function i (line 25) | function i(t){for(var n={},i=0,e=(t=t.split(" ")).length;i<e;i++)n[t[i]]...
function a (line 26) | function a(e,s){return e.replace(/<<(\d+)>>/g,function(e,n){return"(?:"+...
function t (line 26) | function t(e,n,s){return RegExp(a(e,n),s||"")}
function e (line 26) | function e(e,n){for(var s=0;s<n;s++)e=e.replace(/<<self>>/g,function(){r...
function l (line 26) | function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}
function U (line 26) | function U(e,n){return{interpolation:{pattern:t("((?:^|[^{])(?:\\{\\{)*)...
function v (line 63) | function v(e,n){return"___"+e.toUpperCase()+n+"___"}
function a (line 66) | function a(e,n){return e=e.replace(/<OPT>/g,function(){return t}).replac...
function r (line 67) | function r(e,a){return RegExp(e.replace(/<ID>/g,function(){return n}),a)}
function l (line 94) | function l(n){return o[s+n]}
function c (line 94) | function c(n,t){t=t||0;for(var e=0;e<n.length;e++){var a=l(e+t);if(!a||a...
function f (line 94) | function f(n,t){for(var e=1,a=s;a<o.length;a++){var r=o[a],i=r.content;i...
function m (line 94) | function m(n,t){var e=n.alias;e?Array.isArray(e)||(n.alias=e=[e]):n.alia...
function s (line 108) | function s(e,t){return t<=0?"[]":e.replace(/<SELF>/g,function(){return s...
function e (line 125) | function e(a,e){return RegExp(a.replace(/<ID>/g,function(){return"(?!\\s...
function t (line 130) | function t(e,t){if(u.languages[e])return{pattern:RegExp("((?:"+t+")\\s*)...
function s (line 130) | function s(e,t,n){var r={code:e,grammar:t,language:n};return u.hooks.run...
function d (line 130) | function d(e){var t={};t["interpolation-punctuation"]=i;var n=u.tokenize...
function c (line 130) | function c(a,e,i){var t=u.tokenize(a,{interpolation:{pattern:RegExp(r),l...
function f (line 130) | function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(...
function o (line 134) | function o(n,o){return RegExp(n.replace(/<nonId>/g,"\\s\\x00-\\x1f\\x22-...
function n (line 141) | function n(e){return RegExp("(\\()"+e+"(?=[\\s\\)])")}
function a (line 141) | function a(e){return RegExp("([\\s([])"+e+"(?=[\\s)])")}
function n (line 147) | function n(n){return n=n.replace(/<inner>/g,function(){return"(?:\\\\.|[...
function t (line 157) | function t(e){return"string"==typeof e?e:Array.isArray(e)?e.map(t).join(...
function a (line 194) | function a(e,r){return e.replace(/<<(\d+)>>/g,function(e,n){return"(?:"+...
function n (line 194) | function n(e,n,r){return RegExp(a(e,n),r||"")}
function n (line 200) | function n(t,n){return t=t.replace(/<S>/g,function(){return"(?:\\s|//.*(...
function n (line 209) | function n(t,n){var e={"section-header":{pattern:/^ ?\*{3}.+?\*{3}/,alia...
function i (line 232) | function i(e,t,a){return{pattern:RegExp("<#"+e+"[\\s\\S]*?#>"),alias:"bl...
function o (line 236) | function o(e,n){n=(n||"").replace(/m/g,"")+"m";var r="([:\\-,[{]\\s*(?:\...
function e (line 240) | function e(n,e){return RegExp(n.replace(/<MOD>/g,function(){return"(?:\\...
function n (line 241) | function n(e){return e.replace(/__/g,function(){return"(?:[\\w-]+|'[^'\n...
function a (line 258) | function a(a,e){n.languages[a]&&n.languages.insertBefore(a,"comment",{"d...
function e (line 262) | function e(e){return function(){return e}}
function u (line 263) | function u(e){if(0!=(e=e.filter(function(e){var n=function(e){return e?w...
function f (line 264) | function f(r,e){var i=r[e];switch(Prism.util.type(i)){case"RegExp":var a...
function s (line 264) | function s(r){if(r&&!r.tab){for(var e in i)i.hasOwnProperty(e)&&(r[e]=i[...
function e (line 265) | function e(e){this.defaults=i({},e)}
function s (line 265) | function s(e){for(var n=0,t=0;t<e.length;++t)e.charCodeAt(t)=="\t".charC...
FILE: public/sha1filework.js
function fileSha1 (line 27) | async function fileSha1(localFilePath, access_token) {
function FileSystemErrorMessage (line 87) | function FileSystemErrorMessage(code, message) {
FILE: public/wasm_exec.js
method writeSync (line 45) | writeSync(fd, buf) {
method write (line 54) | write(fd, buf, offset, length, position, callback) {
method chmod (line 62) | chmod(path, mode, callback) { callback(enosys()); }
method chown (line 63) | chown(path, uid, gid, callback) { callback(enosys()); }
method close (line 64) | close(fd, callback) { callback(enosys()); }
method fchmod (line 65) | fchmod(fd, mode, callback) { callback(enosys()); }
method fchown (line 66) | fchown(fd, uid, gid, callback) { callback(enosys()); }
method fstat (line 67) | fstat(fd, callback) { callback(enosys()); }
method fsync (line 68) | fsync(fd, callback) { callback(null); }
method ftruncate (line 69) | ftruncate(fd, length, callback) { callback(enosys()); }
method lchown (line 70) | lchown(path, uid, gid, callback) { callback(enosys()); }
method link (line 71) | link(path, link, callback) { callback(enosys()); }
method lstat (line 72) | lstat(path, callback) { callback(enosys()); }
method mkdir (line 73) | mkdir(path, perm, callback) { callback(enosys()); }
method open (line 74) | open(path, flags, mode, callback) { callback(enosys()); }
method read (line 75) | read(fd, buffer, offset, length, position, callback) { callback(enosys()...
method readdir (line 76) | readdir(path, callback) { callback(enosys()); }
method readlink (line 77) | readlink(path, callback) { callback(enosys()); }
method rename (line 78) | rename(from, to, callback) { callback(enosys()); }
method rmdir (line 79) | rmdir(path, callback) { callback(enosys()); }
method stat (line 80) | stat(path, callback) { callback(enosys()); }
method symlink (line 81) | symlink(path, link, callback) { callback(enosys()); }
method truncate (line 82) | truncate(path, length, callback) { callback(enosys()); }
method unlink (line 83) | unlink(path, callback) { callback(enosys()); }
method utimes (line 84) | utimes(path, atime, mtime, callback) { callback(enosys()); }
method getuid (line 90) | getuid() { return -1; }
method getgid (line 91) | getgid() { return -1; }
method geteuid (line 92) | geteuid() { return -1; }
method getegid (line 93) | getegid() { return -1; }
method getgroups (line 94) | getgroups() { throw enosys(); }
method umask (line 97) | umask() { throw enosys(); }
method cwd (line 98) | cwd() { throw enosys(); }
method chdir (line 99) | chdir() { throw enosys(); }
method getRandomValues (line 106) | getRandomValues(b) {
method now (line 114) | now() {
method constructor (line 136) | constructor() {
method run (line 451) | async run(instance) {
method _resume (line 486) | _resume() {
method _makeFuncWrapper (line 496) | _makeFuncWrapper(id) {
FILE: src/main/index.ts
constant DEBUGGING (line 37) | const DEBUGGING = !app.isPackaged
function createMenu (line 172) | function createMenu() {
FILE: src/main/mainfile.ts
constant DEBUGGING (line 4) | const DEBUGGING = !app.isPackaged
function getAsarPath (line 8) | function getAsarPath(fileName: string) {
function getResourcesPath (line 34) | function getResourcesPath(fileName: string) {
function getCrxPath (line 68) | function getCrxPath() {
function getUserDataPath (line 95) | function getUserDataPath(fileName: string) {
FILE: src/main/window.ts
constant DEBUGGING (line 5) | const DEBUGGING = !app.isPackaged
constant DEVTOOL (line 6) | const DEVTOOL = DEBUGGING || true
function createMainWindow (line 29) | function createMainWindow() {
function ShowErrorAndRelanch (line 116) | function ShowErrorAndRelanch(title: string, errmsg: string) {
function ShowErrorAndExit (line 133) | function ShowErrorAndExit(title: string, errmsg: string) {
function ShowError (line 150) | function ShowError(title: string, errmsg: string) {
function createTray (line 170) | function createTray() {
function creatUpload (line 218) | function creatUpload() {
function creatDownload (line 240) | function creatDownload() {
function creatElectronWindow (line 264) | function creatElectronWindow(width: number, height: number, center: bool...
function creatUploadPort (line 324) | function creatUploadPort() {
function creatDownloadPort (line 333) | function creatDownloadPort() {
FILE: src/preload/index.ts
function createRightMenu (line 130) | function createRightMenu() {
function isEleEditable (line 149) | function isEleEditable(e: any): boolean {
FILE: src/preload/preload-env.d.ts
type ProcessEnv (line 3) | interface ProcessEnv {
type Window (line 9) | interface Window {
FILE: src/renderer/aliapi/alihttp.ts
type IUrlRespData (line 9) | interface IUrlRespData {
function BlobToString (line 15) | function BlobToString(body: Blob, encoding: string): Promise<string> {
function BlobToBuff (line 25) | function BlobToBuff(body: Blob): Promise<ArrayBuffer | undefined> {
function HttpCodeBreak (line 36) | function HttpCodeBreak(code: number): Boolean {
function Sleep (line 47) | function Sleep(msTime: number): Promise<{ success: true; time: number }> {
class AliHttp (line 61) | class AliHttp {
method IsSuccess (line 65) | static IsSuccess(code: number): Boolean {
method CatchError (line 69) | static async CatchError(error: any, token: ITokenInfo | undefined): Pr...
method Get (line 142) | static async Get(url: string, user_id: string): Promise<IUrlRespData> {
method _Get (line 153) | static _Get(url: string, user_id: string): Promise<IUrlRespData> {
method GetString (line 180) | static async GetString(url: string, user_id: string, fileSize: number,...
method _GetString (line 191) | private static _GetString(url: string, user_id: string, fileSize: numb...
method GetBlob (line 264) | static async GetBlob(url: string, user_id: string): Promise<IUrlRespDa...
method _GetBlob (line 275) | private static _GetBlob(url: string, user_id: string): Promise<IUrlRes...
method Post (line 301) | static async Post(url: string, postData: any, user_id: string, share_t...
method _Post (line 313) | private static _Post(url: string, postData: any, user_id: string, shar...
method PostString (line 348) | static async PostString(url: string, postData: any, user_id: string, s...
method _PostString (line 359) | private static _PostString(url: string, postData: any, user_id: string...
FILE: src/renderer/aliapi/alimodels.ts
type IAliFileVideoMeta (line 1) | interface IAliFileVideoMeta {
type IAliFileAudioMeta (line 8) | interface IAliFileAudioMeta {
type IAliFileItem (line 18) | interface IAliFileItem {
type IAliOtherFollowingModel (line 85) | interface IAliOtherFollowingModel {
type IAliMyFollowingMessageModel (line 95) | interface IAliMyFollowingMessageModel {
type IAliMyFollowingModel (line 110) | interface IAliMyFollowingModel {
type IAliShareItem (line 123) | interface IAliShareItem {
type IAliShareAnonymous (line 149) | interface IAliShareAnonymous {
type IAliShareFileItem (line 170) | interface IAliShareFileItem {
type IAliGetForderSizeModel (line 201) | interface IAliGetForderSizeModel {
type IAliGetDirModel (line 209) | interface IAliGetDirModel {
type IAliGetFileModel (line 223) | interface IAliGetFileModel {
FILE: src/renderer/aliapi/archive.ts
type ILinkTxtFile (line 3) | interface ILinkTxtFile {
type ILinkTxt (line 9) | interface ILinkTxt {
type IArchiveData (line 16) | interface IArchiveData {
class AliArchive (line 23) | class AliArchive {
method ApiGetFileList (line 25) | static ApiGetFileList(result: IArchiveData, file_list: any): void {
method ApiArchiveList (line 57) | static async ApiArchiveList(user_id: string, drive_id: string, file_id...
method ApiArchiveStatus (line 103) | static async ApiArchiveStatus(user_id: string, drive_id: string, file_...
method ApiArchiveUncompress (line 140) | static async ApiArchiveUncompress(user_id: string, drive_id: string, f...
FILE: src/renderer/aliapi/batch.ts
function RunBatch (line 4) | async function RunBatch(title: string, list: any[], max: number, func: (...
FILE: src/renderer/aliapi/dirfilelist.ts
type IAliFileResp (line 12) | interface IAliFileResp {
function NewIAliFileResp (line 26) | function NewIAliFileResp(user_id: string, drive_id: string, dirID: strin...
class AliDirFileList (line 41) | class AliDirFileList {
method getFileInfo (line 46) | static getFileInfo(item: IAliFileItem, downUrl: string): IAliGetFileMo...
method ApiDirFileList (line 132) | static async ApiDirFileList(user_id: string, drive_id: string, dirID: ...
method _ApiDirFileListOnePage (line 218) | private static async _ApiDirFileListOnePage(orderby: string, order: st...
method _ApiDirFileListCount (line 243) | private static async _ApiDirFileListCount(dir: IAliFileResp, type: str...
method _ApiFavoriteFileListCount (line 269) | private static async _ApiFavoriteFileListCount(dir: IAliFileResp): Pro...
method _ApiFavorFileListOnePage (line 294) | private static async _ApiFavorFileListOnePage(orderby: string, order: ...
method _ApiTrashFileListOnePage (line 314) | private static async _ApiTrashFileListOnePage(orderby: string, order: ...
method _ApiDeleteedFileListOnePage (line 331) | static async _ApiDeleteedFileListOnePage(orderby: string, order: strin...
method _ApiSearchFileListOnePage (line 342) | static async _ApiSearchFileListOnePage(orderby: string, order: string,...
method _ApiSearchFileListCount (line 419) | static async _ApiSearchFileListCount(dir: IAliFileResp): Promise<numbe...
method _ApiVideoListRecent (line 502) | static async _ApiVideoListRecent(dir: IAliFileResp): Promise<boolean> {
method _ApiVideoListOnePage (line 509) | static async _ApiVideoListOnePage(orderby: string, order: string, dir:...
method _ApiVideoFileListOnePage (line 524) | static async _ApiVideoFileListOnePage(orderby: string, order: string, ...
method _FileListOnePage (line 541) | static _FileListOnePage(orderby: string, order: string, dir: IAliFileR...
method ApiDirFileSize (line 646) | static async ApiDirFileSize(user_id: string, drive_id: string, file_id...
FILE: src/renderer/aliapi/dirlist.ts
type IAliDirResp (line 11) | interface IAliDirResp {
type IDirDataResp (line 21) | interface IDirDataResp {
type IAliDirBatchResp (line 31) | interface IAliDirBatchResp {
class AliDirList (line 38) | class AliDirList {
method ApiFastAllDirList (line 40) | static async ApiFastAllDirList(user_id: string, drive_id: string): Pro...
method ApiBatchDirFileList (line 151) | static async ApiBatchDirFileList(user_id: string, drive_id: string, di...
method ApiFastAllDirListByTime (line 220) | static async ApiFastAllDirListByTime(user_id: string, drive_id: string...
method _ApiDirFileListInfo (line 331) | static async _ApiDirFileListInfo(user_id: string, drive_id: string) {
method ApiFastAllDirListByPID (line 361) | static async ApiFastAllDirListByPID(user_id: string, drive_id: string)...
FILE: src/renderer/aliapi/file.ts
class AliFile (line 10) | class AliFile {
method ApiFileInfo (line 12) | static async ApiFileInfo(user_id: string, drive_id: string, file_id: s...
method ApiFileInfoByPath (line 35) | static async ApiFileInfoByPath(user_id: string, drive_id: string, file...
method ApiFileDownloadUrl (line 58) | static async ApiFileDownloadUrl(user_id: string, drive_id: string, fil...
method ApiVideoPreviewUrl (line 113) | static async ApiVideoPreviewUrl(user_id: string, drive_id: string, fil...
method ApiAudioPreviewUrl (line 177) | static async ApiAudioPreviewUrl(user_id: string, drive_id: string, fil...
method ApiOfficePreViewUrl (line 216) | static async ApiOfficePreViewUrl(user_id: string, drive_id: string, fi...
method ApiGetFile (line 237) | static async ApiGetFile(user_id: string, drive_id: string, file_id: st...
method ApiFileGetPath (line 260) | static async ApiFileGetPath(user_id: string, drive_id: string, file_id...
method ApiFileGetPathString (line 306) | static async ApiFileGetPathString(user_id: string, drive_id: string, f...
method ApiFileGetFolderSize (line 330) | static async ApiFileGetFolderSize(user_id: string, drive_id: string, f...
method ApiFileDownText (line 349) | static async ApiFileDownText(user_id: string, drive_id: string, file_i...
method ApiBiXueTuBatch (line 364) | static async ApiBiXueTuBatch(user_id: string, drive_id: string, file_i...
method ApiUpdateVideoTime (line 428) | static async ApiUpdateVideoTime(user_id: string, drive_id: string, fil...
FILE: src/renderer/aliapi/filecmd.ts
class AliFileCmd (line 8) | class AliFileCmd {
method ApiCreatNewForder (line 10) | static async ApiCreatNewForder(user_id: string, drive_id: string, pare...
method ApiTrashBatch (line 34) | static async ApiTrashBatch(user_id: string, drive_id: string, file_idL...
method ApiDeleteBatch (line 42) | static async ApiDeleteBatch(user_id: string, drive_id: string, file_id...
method ApiRenameBatch (line 50) | static async ApiRenameBatch(user_id: string, drive_id: string, file_id...
method ApiFavorBatch (line 63) | static async ApiFavorBatch(user_id: string, drive_id: string, isfavor:...
method ApiTrashCleanBatch (line 71) | static async ApiTrashCleanBatch(user_id: string, drive_id: string, ism...
method ApiTrashRestoreBatch (line 79) | static async ApiTrashRestoreBatch(user_id: string, drive_id: string, i...
method ApiFileColorBatch (line 87) | static async ApiFileColorBatch(user_id: string, drive_id: string, colo...
method ApiRecoverBatch (line 95) | static async ApiRecoverBatch(user_id: string, resumeList: { drive_id: ...
method ApiMoveBatch (line 134) | static async ApiMoveBatch(user_id: string, drive_id: string, file_idLi...
method ApiCopyBatch (line 143) | static async ApiCopyBatch(user_id: string, drive_id: string, file_idLi...
method ApiGetFileBatch (line 152) | static async ApiGetFileBatch(user_id: string, drive_id: string, file_i...
FILE: src/renderer/aliapi/fileicon.ts
function getFileIcon (line 1) | function getFileIcon(category: string | undefined, ext: string | undefin...
FILE: src/renderer/aliapi/filewalk.ts
class AliFileWalk (line 6) | class AliFileWalk {
method ApiWalkFileList (line 7) | static async ApiWalkFileList(user_id: string, drive_id: string, dirID:...
method _ApiWalkFileListOnePage (line 34) | private static async _ApiWalkFileListOnePage(orderby: string, order: s...
method _FileListOnePage (line 52) | private static _FileListOnePage(dir: IAliFileResp, resp: IUrlRespData) {
FILE: src/renderer/aliapi/following.ts
type IAliOtherFollowingResp (line 7) | interface IAliOtherFollowingResp {
type IAliMyFollowingResp (line 15) | interface IAliMyFollowingResp {
class AliFollowing (line 23) | class AliFollowing {
method ApiOtherFollowingListAll (line 25) | static async ApiOtherFollowingListAll(user_id: string): Promise<IAliOt...
method ApiOtherFollowingListOnePage (line 43) | static async ApiOtherFollowingListOnePage(dir: IAliOtherFollowingResp)...
method _OtherFollowingListOnePage (line 56) | private static _OtherFollowingListOnePage(dir: IAliOtherFollowingResp,...
method ApiMyFollowingListAll (line 93) | static async ApiMyFollowingListAll(user_id: string): Promise<IAliMyFol...
method ApiMyFollowingListOnePage (line 111) | static async ApiMyFollowingListOnePage(dir: IAliMyFollowingResp): Prom...
method _MyFollowingListOnePage (line 123) | private static _MyFollowingListOnePage(dir: IAliMyFollowingResp, resp:...
method ApiSetFollowing (line 179) | static async ApiSetFollowing(user_id: string, followingid: string, isF...
method ApiSetFollowingMarkRead (line 194) | static async ApiSetFollowingMarkRead(user_id: string, followingid: str...
method ApiOtherFollowingClassListAll (line 209) | static async ApiOtherFollowingClassListAll() {
FILE: src/renderer/aliapi/models.ts
type IDownloadUrl (line 2) | interface IDownloadUrl {
type IVideoPreviewUrl (line 11) | interface IVideoPreviewUrl {
type IOfficePreViewUrl (line 30) | interface IOfficePreViewUrl {
type IVideoXBTUrl (line 38) | interface IVideoXBTUrl {
type IUploadCreat (line 44) | interface IUploadCreat {
type IUploadInfo (line 60) | interface IUploadInfo {
type IAliBatchResult (line 74) | interface IAliBatchResult {
type IBatchResult (line 106) | interface IBatchResult {
type IAliGetAlbumModel (line 126) | interface IAliGetAlbumModel {
type IAliUserDriveDetails (line 138) | interface IAliUserDriveDetails {
type IAliUserDriveCapacity (line 148) | interface IAliUserDriveCapacity {
type IStateUploadFile (line 159) | interface IStateUploadFile {
FILE: src/renderer/aliapi/server.tsx
type IServerRespData (line 12) | interface IServerRespData {
class ServerHttp (line 17) | class ServerHttp {
method PostToServer (line 19) | static async PostToServer(postData: any): Promise<IServerRespData> {
method Post (line 38) | static async Post(postData: any, isfirst = true): Promise<IServerRespD...
method Sleep (line 70) | static Sleep(msTime: number) {
method CheckUpgrade (line 87) | static async CheckUpgrade(showUpgred: boolean): Promise<void> {
method AutoDownload (line 157) | static async AutoDownload(appNewUrl: string): Promise<boolean> {
FILE: src/renderer/aliapi/share.ts
type IAliShareFileResp (line 12) | interface IAliShareFileResp {
type UpdateShareModel (line 25) | interface UpdateShareModel {
class AliShare (line 32) | class AliShare {
method ApiGetShareAnonymous (line 34) | static async ApiGetShareAnonymous(share_id: string): Promise<IAliShare...
method ApisSubscription (line 93) | static async ApisSubscription(user_id: string, share_id: string): Prom...
method ApiGetShareToken (line 107) | static async ApiGetShareToken(share_id: string, pwd: string): Promise<...
method ApiShareFileList (line 146) | static async ApiShareFileList(share_id: string, share_token: string, d...
method ApiShareFileListOnePage (line 168) | static async ApiShareFileListOnePage(dir: IAliShareFileResp, share_tok...
method _ShareFileListOnePage (line 185) | private static _ShareFileListOnePage(dir: IAliShareFileResp, resp: IUr...
method ApiCreatShare (line 235) | static async ApiCreatShare(user_id: string, drive_id: string, expirati...
method ApiCreatShareBatch (line 263) | static async ApiCreatShareBatch(user_id: string, drive_id: string, exp...
method ApiCancelShareBatch (line 287) | static async ApiCancelShareBatch(user_id: string, share_idList: string...
method ApiUpdateShareBatch (line 295) | static async ApiUpdateShareBatch(user_id: string, share_idList: string...
method ApiSaveShareFilesBatch (line 327) | static async ApiSaveShareFilesBatch(share_id: string, share_token: str...
FILE: src/renderer/aliapi/sharelist.ts
type IAliShareResp (line 8) | interface IAliShareResp {
class AliShareList (line 16) | class AliShareList {
method ApiShareListAll (line 18) | static async ApiShareListAll(user_id: string): Promise<IAliShareResp> {
method ApiShareListOnePage (line 36) | static async ApiShareListOnePage(dir: IAliShareResp): Promise<boolean> {
method _ShareListOnePage (line 50) | static _ShareListOnePage(dir: IAliShareResp, resp: IUrlRespData): bool...
method ApiShareListUntilShareID (line 106) | static async ApiShareListUntilShareID(user_id: string, share_id: strin...
FILE: src/renderer/aliapi/trash.ts
class AliTrash (line 7) | class AliTrash {
method ApiTrashFileListOnePageForClean (line 9) | static async ApiTrashFileListOnePageForClean(orderby: string, order: s...
method ApiFavorFileListOnePageForClean (line 27) | static async ApiFavorFileListOnePageForClean(orderby: string, order: s...
method ApiDirFileListNoLock (line 46) | static async ApiDirFileListNoLock(user_id: string, drive_id: string, d...
method _ApiDirFileListOnePage (line 73) | static async _ApiDirFileListOnePage(orderby: string, order: string, di...
method _FileListOnePage (line 92) | static _FileListOnePage(dir: IAliFileResp, resp: IUrlRespData): boolean {
FILE: src/renderer/aliapi/upload.ts
class AliUpload (line 5) | class AliUpload {
method UploadCreatFileWithPreHash (line 7) | static async UploadCreatFileWithPreHash(user_id: string, drive_id: str...
method UploadCreatFileWithFolders (line 113) | static async UploadCreatFileWithFolders(user_id: string, drive_id: str...
method UploadFileCheckHash (line 237) | static async UploadFileCheckHash(user_id: string, drive_id: string, fi...
method UploadFileDelete (line 253) | static async UploadFileDelete(user_id: string, drive_id: string, file_...
method UploadFileComplete (line 267) | static async UploadFileComplete(user_id: string, drive_id: string, fil...
method UploadFilePartUrl (line 308) | static async UploadFilePartUrl(user_id: string, drive_id: string, file...
method UploadFileListUploadedParts (line 364) | static async UploadFileListUploadedParts(user_id: string, drive_id: st...
method isNetworkError (line 399) | static isNetworkError(e: Error): boolean {
FILE: src/renderer/aliapi/uploaddisk.ts
class AliUploadDisk (line 20) | class AliUploadDisk {
method UploadOneFile (line 22) | static async UploadOneFile(uploadInfo: IUploadInfo, fileui: IUploading...
method UploadOneFileBig (line 55) | static async UploadOneFileBig(uploadInfo: IUploadInfo, fileui: IUpload...
method UploadOneFilePartNode (line 136) | static UploadOneFilePartNode(user_id: string, UploadID: number, fileHa...
method _WriteToRequest (line 207) | static async _WriteToRequest(req: any, fileHandle: FileHandle, winfo: ...
method UploadOneFilePartNodeXHR (line 245) | static UploadOneFilePartNodeXHR(user_id: string, UploadID: number, fil...
method _ReadPartBuffer (line 315) | static async _ReadPartBuffer(fileHandle: FileHandle, winfo: { UploadID...
method GetFileUploadSpeed (line 342) | static GetFileUploadSpeed(UploadID: number): number {
method DelFileUploadSpeed (line 347) | static DelFileUploadSpeed(UploadID: number): void {
method GetFileUploadSpeedTotal (line 352) | static GetFileUploadSpeedTotal(): number {
FILE: src/renderer/aliapi/uploadhash.ts
constant CPU (line 11) | const CPU = Math.min(8, Math.max(4, os.cpus().length / 2))
class AliUploadHash (line 16) | class AliUploadHash {
method GetBuffHashProof (line 18) | static async GetBuffHashProof(access_token: string, buff: Buffer): Pro...
method GetFilePreHash (line 34) | static async GetFilePreHash(filePath: string): Promise<string> {
method GetFileHashProof (line 52) | static async GetFileHashProof(prehash: string, access_token: string, f...
method GetFileHashProofWorker (line 108) | static async GetFileHashProofWorker(prehash: string, access_token: str...
method GetFileHashProofSpeed (line 191) | static GetFileHashProofSpeed(UploadID: number): number {
FILE: src/renderer/aliapi/uploadhashpool.ts
class AliUploadHashPool (line 12) | class AliUploadHashPool {
method GetFileHashProofSpeed (line 13) | static GetFileHashProofSpeed(UploadID: number) {
method GetBuffHashProof (line 18) | static async GetBuffHashProof(access_token: string, buff: Buffer): Pro...
method GetFilePreHash (line 34) | static async GetFilePreHash(filePath: string): Promise<string> {
method GetFileHashProofWorker (line 52) | static async GetFileHashProofWorker(prehash: string, access_token: str...
FILE: src/renderer/aliapi/uploadmem.ts
class AliUploadMem (line 7) | class AliUploadMem {
method UploadMem (line 9) | static async UploadMem(user_id: string, drive_id: string, parent_file_...
FILE: src/renderer/aliapi/user.ts
class AliUser (line 12) | class AliUser {
method _ApiTokenRefresh (line 14) | static async _ApiTokenRefresh(token: ITokenInfo, showMessage: boolean)...
method ApiTokenRefreshAccount (line 68) | static async ApiTokenRefreshAccount(token: ITokenInfo, showMessage: bo...
method ApiUserInfo (line 123) | static async ApiUserInfo(token: ITokenInfo): Promise<boolean> {
method ApiUserVip (line 145) | static async ApiUserVip(token: ITokenInfo): Promise<boolean> {
method ApiUserPic (line 170) | static async ApiUserPic(token: ITokenInfo): Promise<boolean> {
method ApiUserDriveDetails (line 187) | static async ApiUserDriveDetails(user_id: string): Promise<IAliUserDri...
method ApiUserDriveFileCount (line 215) | static async ApiUserDriveFileCount(user_id: string, category: string, ...
method ApiUserCapacityDetails (line 244) | static async ApiUserCapacityDetails(user_id: string): Promise<IAliUser...
FILE: src/renderer/aliapi/utils.ts
type Drive (line 10) | type Drive = 'pan' | 'pic' | 'safe'
function GetDriveID (line 13) | function GetDriveID(user_id: string, drive: Drive): string {
function GetDriveID2 (line 29) | function GetDriveID2(token: ITokenInfo, driveName: string): string {
function _ApiBatch (line 43) | async function _ApiBatch(postData: string, user_id: string, share_token:...
type AsyncType (line 78) | type AsyncType = '解压' | '复制' | '导入分享' | '回收站还原' | '异步' | '放回收站' | '彻底删除'
function ApiBatch (line 80) | async function ApiBatch(title: string, batchList: string[], user_id: str...
function ApiBatchMaker (line 170) | function ApiBatchMaker(url: string, idList: string[], bodymake: (file_id...
function ApiBatchMaker2 (line 184) | function ApiBatchMaker2(url: string, idList: string[], namelist: string[...
function ApiBatchSuccess (line 198) | async function ApiBatchSuccess(title: string, batchList: string[], user_...
function ApiWaitAsyncTask (line 206) | async function ApiWaitAsyncTask(title: string, user_id: string, taskList...
function ApiGetAsyncTask (line 225) | async function ApiGetAsyncTask(user_id: string, async_task_id: string): ...
function ApiGetAsyncTaskUnzip (line 246) | async function ApiGetAsyncTaskUnzip(user_id: string, drive_id: string, f...
FILE: src/renderer/down/downdal.ts
type DownloadState (line 3) | type DownloadState =
type IStateDownFile (line 12) | interface IStateDownFile {
type IStateDownProgress (line 35) | interface IStateDownProgress {
type IAriaDownProgress (line 48) | interface IAriaDownProgress {
class DownDAL (line 60) | class DownDAL {
method aAddDownload (line 61) | static aAddDownload(fileList: IAliGetFileModel[], savepath: string, ne...
method aSpeedEvent (line 62) | static async aSpeedEvent() {}
method mSpeedEvent (line 63) | static mSpeedEvent(list: IAriaDownProgress[]) {}
method QueryIsDowning (line 64) | static QueryIsDowning() {
method QuerySelectedIsDowning (line 68) | static QuerySelectedIsDowning() {
method aReloadDowning (line 73) | static async aReloadDowning() {}
method aReloadDowned (line 76) | static async aReloadDowned() {}
method aClearDowned (line 79) | static async aClearDowned() {
method DowningState (line 84) | static DowningState(all: boolean, start: boolean) {}
method DowningOrder (line 86) | static DowningOrder() {}
method DowningDelete (line 87) | static DowningDelete(all: boolean) {}
method DownedDelete (line 88) | static DownedDelete(all: boolean) {}
FILE: src/renderer/down/downingstore.ts
type Item (line 5) | type Item = IStateDownFile
type DownState (line 7) | interface DownState {
type State (line 19) | type State = DownState
constant KEY (line 20) | const KEY = 'DownID'
method ListDataCount (line 32) | ListDataCount(state: State): number {
method IsListSelected (line 36) | IsListSelected(state: State): boolean {
method ListSelectedCount (line 39) | ListSelectedCount(state: State): number {
method ListDataSelectCountInfo (line 42) | ListDataSelectCountInfo(state: State): string {
method IsListSelectedAll (line 45) | IsListSelectedAll(state: State): boolean {
method ListStats (line 49) | ListStats(state: State) {
method aLoadListData (line 58) | aLoadListData(list: Item[]) {
method mRefreshListDataShow (line 81) | mRefreshListDataShow(refreshRaw: boolean) {
method mSelectAll (line 102) | mSelectAll() {
method mMouseSelect (line 106) | mMouseSelect(key: string, Ctrl: boolean, Shift: boolean) {
method mKeyboardSelect (line 112) | mKeyboardSelect(key: string, Ctrl: boolean, Shift: boolean) {
method GetSelected (line 120) | GetSelected() {
method GetSelectedFirst (line 124) | GetSelectedFirst() {
method mSetFocus (line 129) | mSetFocus(key: string) {
method mGetFocus (line 134) | mGetFocus() {
method mGetFocusNext (line 139) | mGetFocusNext(position: string) {
FILE: src/renderer/down/downmenu.ts
function topStartDown (line 5) | function topStartDown(isdown: boolean) {
function topStartDownAll (line 11) | function topStartDownAll(isdown: boolean) {
function topStopDown (line 18) | function topStopDown(isdown: boolean) {
function topStopDownAll (line 24) | function topStopDownAll(isdown: boolean) {
function topDeleteDown (line 31) | function topDeleteDown(isdown: boolean) {
function topDeleteDownAll (line 39) | function topDeleteDownAll(isdown: boolean) {
function topDeleteDowned (line 47) | function topDeleteDowned(isdown: boolean) {
function topDeleteDownedAll (line 55) | function topDeleteDownedAll(isdown: boolean) {
FILE: src/renderer/down/uploadedstore.ts
type Item (line 5) | type Item = IStateUploadTask
type UploadedState (line 7) | interface UploadedState {
type State (line 23) | type State = UploadedState
constant KEY (line 24) | const KEY = 'TaskID'
method IsListSelected (line 38) | IsListSelected(state: State): boolean {
method ListSelectedCount (line 41) | ListSelectedCount(state: State): number {
method ListDataSelectCountInfo (line 44) | ListDataSelectCountInfo(state: State): string {
method IsListSelectedAll (line 47) | IsListSelectedAll(state: State): boolean {
method aLoadListData (line 54) | aLoadListData(list: Item[], count: number) {
method mRefreshListDataShow (line 78) | mRefreshListDataShow(refreshRaw: boolean) {
method mSelectAll (line 99) | mSelectAll() {
method mMouseSelect (line 103) | mMouseSelect(key: number, Ctrl: boolean, Shift: boolean) {
method mKeyboardSelect (line 109) | mKeyboardSelect(key: number, Ctrl: boolean, Shift: boolean) {
method GetSelected (line 117) | GetSelected() {
method GetSelectedFirst (line 121) | GetSelectedFirst() {
method mSetFocus (line 126) | mSetFocus(key: number) {
method mGetFocus (line 131) | mGetFocus() {
method mGetFocusNext (line 136) | mGetFocusNext(position: string) {
method mDeleteFiles (line 139) | mDeleteFiles(taskidlist: number[]) {
FILE: src/renderer/down/uploadingstore.ts
type IUploadingModel (line 5) | interface IUploadingModel {
type Item (line 29) | type Item = IUploadingModel
type UploadingState (line 31) | interface UploadingState {
type State (line 52) | type State = UploadingState
constant KEY (line 53) | let KEY: 'UploadID' | 'TaskID' = 'UploadID'
method IsListSelected (line 69) | IsListSelected(state: State): boolean {
method ListSelectedCount (line 72) | ListSelectedCount(state: State): number {
method ListDataSelectCountInfo (line 75) | ListDataSelectCountInfo(state: State): string {
method IsListSelectedAll (line 78) | IsListSelectedAll(state: State): boolean {
method aLoadListData (line 85) | aLoadListData(TaskID: number, TaskName: string, list: Item[], count: num...
method mShowTask (line 118) | mShowTask(TaskID: number, TaskName: string) {
method mRefreshListDataShow (line 124) | mRefreshListDataShow(refreshRaw: boolean) {
method mSelectAll (line 145) | mSelectAll() {
method mMouseSelect (line 149) | mMouseSelect(key: number, Ctrl: boolean, Shift: boolean) {
method mKeyboardSelect (line 155) | mKeyboardSelect(key: number, Ctrl: boolean, Shift: boolean) {
method GetSelected (line 163) | GetSelected() {
method GetSelectedFirst (line 167) | GetSelectedFirst() {
method mSetFocus (line 172) | mSetFocus(key: number) {
method mGetFocus (line 177) | mGetFocus() {
method mGetFocusNext (line 182) | mGetFocusNext(position: string) {
method mDeleteFiles (line 185) | mDeleteFiles(idList: number[]) {
FILE: src/renderer/env.d.ts
type TaskState (line 11) | enum TaskState {
type CheckNameMode (line 20) | type CheckNameMode =
type FileType (line 26) | type FileType =
type UploadStates (line 30) | type UploadStates =
type DownloadStates (line 45) | type DownloadStates =
FILE: src/renderer/global.d.ts
type Window (line 4) | interface Window {
FILE: src/renderer/layout/pagemain.ts
function PageMain (line 14) | function PageMain() {
function timeEvent (line 79) | function timeEvent() {
FILE: src/renderer/pan/pandal.ts
type PanSelectedData (line 11) | interface PanSelectedData {
class PanDAL (line 24) | class PanDAL {
method aReLoadDrive (line 26) | static async aReLoadDrive(user_id: string, drive_id: string): Promise<...
method aReLoadDriveSave (line 53) | static async aReLoadDriveSave(OneDriver: IDriverModel, error: string):...
method RefreshPanTreeAllNode (line 65) | static RefreshPanTreeAllNode(drive_id: string) {
method GetPanTreeAllNode (line 79) | static GetPanTreeAllNode(drive_id: string, treeExpandedKeys: string[])...
method aTreeScrollToDir (line 94) | static aTreeScrollToDir(dirID: string) {
method aReLoadOneDirToShow (line 99) | static async aReLoadOneDirToShow(drive_id: string, file_id: string, se...
method GetDirFileList (line 173) | static GetDirFileList(user_id: string, drive_id: string, dirID: string...
method aReLoadOneDirToRefreshTree (line 211) | static aReLoadOneDirToRefreshTree(user_id: string, drive_id: string, d...
method GetPanSelectedData (line 261) | static GetPanSelectedData(istree: boolean): PanSelectedData {
method updateQuickFile (line 282) | static updateQuickFile(list: { key: string; title: string }[]) {
method deleteQuickFile (line 303) | static deleteQuickFile(key: string) {
method getQuickFileList (line 317) | static getQuickFileList() {
method aReLoadQuickFile (line 325) | static aReLoadQuickFile(user_id: string) {
method aUpdateDirFileSize (line 332) | static async aUpdateDirFileSize(): Promise<void> {
FILE: src/renderer/pan/panfilestore.ts
type Item (line 11) | type Item = IAliGetFileModel
type GridItem (line 13) | interface GridItem {
type PanFileState (line 18) | interface PanFileState {
type State (line 49) | type State = PanFileState
constant KEY (line 50) | const KEY = 'file_id'
method ListDataCount (line 74) | ListDataCount(state: State): number {
method IsListSelected (line 78) | IsListSelected(state: State): boolean {
method IsListSelectedMulti (line 82) | IsListSelectedMulti(state: State): boolean {
method ListSelectedCount (line 85) | ListSelectedCount(state: State): number {
method ListDataSelectCountInfo (line 88) | ListDataSelectCountInfo(state: State): string {
method IsListSelectedAll (line 92) | IsListSelectedAll(state: State): boolean {
method IsListSelectedFavAll (line 96) | IsListSelectedFavAll(state: State): boolean {
method SelectDirType (line 112) | SelectDirType(state: State): string {
method FileOrderDesc (line 122) | FileOrderDesc(state: State): string {
method mSaveDirFileLoading (line 143) | mSaveDirFileLoading(drive_id: string, dirID: string, dirName: string) {
method mSaveDirFileLoadingPart (line 168) | mSaveDirFileLoadingPart(pageIndex: number, partDir: IAliFileResp, itemsT...
method mSaveDirFileLoadingFinish (line 181) | mSaveDirFileLoadingFinish(drive_id: string, dirID: string, list: Item[],...
method mSearchListData (line 210) | mSearchListData(value: string) {
method mOrderListData (line 216) | mOrderListData(value: string) {
method mGridListData (line 224) | mGridListData(value: string, column: number) {
method mRefreshListDataShow (line 231) | mRefreshListDataShow(refreshRaw: boolean) {
method mSelectAll (line 284) | mSelectAll() {
method mMouseSelect (line 289) | mMouseSelect(key: string, Ctrl: boolean, Shift: boolean) {
method mKeyboardSelect (line 296) | mKeyboardSelect(key: string, Ctrl: boolean, Shift: boolean) {
method mRangSelect (line 302) | mRangSelect(lastkey: string, file_idList: string[]) {
method GetSelected (line 312) | GetSelected() {
method GetSelectedID (line 316) | GetSelectedID() {
method GetSelectedParentDirID (line 320) | GetSelectedParentDirID() {
method GetSelectedFirst (line 324) | GetSelectedFirst(): Item | undefined {
method mSetFocus (line 329) | mSetFocus(key: string) {
method mGetFocus (line 334) | mGetFocus(): string {
method mGetFocusNext (line 339) | mGetFocusNext(position: string): string {
method mDeleteFiles (line 343) | mDeleteFiles(dirID: string, file_idList: string[], needDelDir: boolean) {
method mFavorFiles (line 372) | mFavorFiles(isfavor: boolean, file_idList: string[]) {
method mColorFiles (line 385) | mColorFiles(color: string, file_idList: string[]) {
method mRenameFiles (line 398) | mRenameFiles(fileList: { file_id: string; parent_file_id: string; name: ...
method mSaveFileScrollTo (line 412) | mSaveFileScrollTo(file_id: string) {
FILE: src/renderer/pan/pantreestore.ts
type PanTreeState (line 7) | interface PanTreeState {
type State (line 28) | type State = PanTreeState
method mTreeSelected (line 66) | mTreeSelected(key: string) {
method mTreeExpand (line 71) | mTreeExpand(key: string) {
method mTreeExpandAll (line 87) | mTreeExpandAll(keyList: string[], isExpaned: boolean) {
method mSaveUser (line 102) | mSaveUser(user_id: string, drive_id: string) {
method mShowDir (line 107) | mShowDir(dir: IAliGetDirModel, dirPath: IAliGetDirModel[], treeSelectedK...
method mSaveTreeAllNode (line 111) | mSaveTreeAllNode(drive_id: string, root: TreeNodeData, rootMap: Map<stri...
method mSaveTreeOneDirNode (line 125) | mSaveTreeOneDirNode(drive_id: string, dirID: string, dirNode: TreeNodeDa...
method mRenameFiles (line 142) | mRenameFiles(fileList: { file_id: string; parent_file_id: string; name: ...
method mSaveQuick (line 176) | mSaveQuick(list: { key: string; title: string }[]) {
method mSaveTreeScrollTo (line 191) | mSaveTreeScrollTo(dirID: string) {
FILE: src/renderer/pan/topbtns/renamemulti.ts
type TreeNodeData (line 1) | interface TreeNodeData {
function NewRenameConfigData (line 14) | function NewRenameConfigData() {
function RunAllNode (line 32) | function RunAllNode(nodeList: TreeNodeData[], func: (node: TreeNodeData)...
function Split (line 45) | function Split(text: string, search: string) {
function Replace (line 65) | function Replace(text: string, search: string, newtext: string) {
function fixext (line 74) | function fixext(ext: string) {
function RunReplace (line 78) | function RunReplace(isDir: boolean, title: string, config: any) {
function RunDelete (line 164) | function RunDelete(isDir: boolean, title: string, config: any) {
function RunAdd (line 335) | function RunAdd(isDir: boolean, title: string, config: any) {
function RunIndex (line 412) | function RunIndex(isDir: boolean, title: string, config: any, nodeIndex:...
function RunOthers (line 436) | function RunOthers(isDir: boolean, title: string, config: any, sj1Base: ...
function RunReplaceName (line 506) | function RunReplaceName(renameConfig: any, treeData: TreeNodeData[], che...
FILE: src/renderer/pan/topbtns/topbtn.ts
function handleUpload (line 22) | function handleUpload(uploadType: string) {
function menuDownload (line 45) | function menuDownload(istree: boolean) {
function menuFavSelectFile (line 71) | async function menuFavSelectFile(istree: boolean, isFavor: boolean) {
function menuTrashSelectFile (line 109) | async function menuTrashSelectFile(istree: boolean, isDelete: boolean) {
function topRestoreSelectedFile (line 153) | async function topRestoreSelectedFile() {
function menuCopySelectedFile (line 202) | function menuCopySelectedFile(istree: boolean, copyby: string) {
function dropMoveSelectedFile (line 272) | function dropMoveSelectedFile(movetodirid: string) {
function menuFileColorChange (line 323) | async function menuFileColorChange(istree: boolean, color: string) {
function menuCreatShare (line 349) | function menuCreatShare(istree: boolean, shareby: string) {
function topFavorDeleteAll (line 391) | async function topFavorDeleteAll() {
function topTrashDeleteAll (line 428) | async function topTrashDeleteAll() {
function topRecoverSelectedFile (line 466) | async function topRecoverSelectedFile() {
function topSearchAll (line 528) | async function topSearchAll(word: string) {
function menuJumpToDir (line 545) | async function menuJumpToDir() {
function menuVideoXBT (line 559) | function menuVideoXBT() {
function menuDLNA (line 574) | function menuDLNA() {
function menuM3U8Download (line 583) | function menuM3U8Download() {
function menuCopyFileName (line 592) | function menuCopyFileName() {
function menuCopyFileTree (line 616) | function menuCopyFileTree() {
FILE: src/renderer/rss/ScanDAL.ts
type TreeNodeData (line 8) | interface TreeNodeData {
type FileData (line 21) | interface FileData {
type FileNodeData (line 33) | interface FileNodeData {
type ScanTreeDataModel (line 38) | interface ScanTreeDataModel {
type IScanDriverModel (line 45) | interface IScanDriverModel {
function NewScanDriver (line 59) | function NewScanDriver(drive_id: string): IScanDriverModel {
function ResetScanDriver (line 71) | function ResetScanDriver(data: IScanDriverModel) {
function GetScanDriver (line 81) | function GetScanDriver(drive_id: string, children: IAliGetDirModel[]): I...
function LoadScanDir (line 117) | function LoadScanDir(user_id: string, drive_id: string, totalDirCount: R...
function GetAllDir (line 130) | async function GetAllDir(user_id: string, drive_id: string) {
function TreeSelectAll (line 186) | function TreeSelectAll(checkedKeys: Ref<string[]>, checkedKeysBak: strin...
function TreeSelectOne (line 194) | function TreeSelectOne(selectedKeys: string[], checkedKeys: Ref<string[]...
function TreeCheckFileChild (line 208) | function TreeCheckFileChild(node: TreeNodeData, checkedKeys: Ref<string[...
function GetFileChildNode (line 240) | function GetFileChildNode(keys: string[], node: TreeNodeData) {
FILE: src/renderer/rss/appsame/same.ts
function GetDuplicateInfo (line 10) | async function GetDuplicateInfo(user_id: string, PanData: IScanDriverMod...
function GetSameFile (line 29) | async function GetSameFile(user_id: string, PanData: IScanDriverModel, P...
function GetParentPath (line 82) | function GetParentPath(PanData: IScanDriverModel, file_id: string) {
function ApiDuplicateList (line 97) | async function ApiDuplicateList(user_id: string, drive_id: string, categ...
FILE: src/renderer/rss/rssdrivecopy/drivecopy.ts
type ICopyTreeInfo (line 7) | interface ICopyTreeInfo {
function NewCopyTreeInfo (line 17) | function NewCopyTreeInfo(onlyDir: boolean) {
type ICopyTreeNode (line 31) | interface ICopyTreeNode {
function LoadDir (line 40) | async function LoadDir(dirID: string, DirData: ICopyTreeInfo, treeData: ...
FILE: src/renderer/rss/rssjiami/jiami.ts
function DoXiMa (line 9) | async function DoXiMa(dirPath: string, breakSmall: boolean, matchExtList...
function GetAllFiles (line 50) | async function GetAllFiles(dir: string, breakSmall: boolean, fileList: s...
FILE: src/renderer/rss/rssscanclean/ScanClean.ts
function GetCleanFile (line 12) | async function GetCleanFile(user_id: string, PanData: IScanDriverModel, ...
function ApiBatchDirFileList (line 90) | async function ApiBatchDirFileList(user_id: string, drive_id: string, di...
function GetTreeNodes (line 160) | function GetTreeNodes(PanData: IScanDriverModel, parent_file_id: string,...
function DeleteFromScanClean (line 188) | function DeleteFromScanClean(PanData: IScanDriverModel, idList: string[]) {
function GetTreeCheckedSize (line 207) | function GetTreeCheckedSize(PanData: IScanDriverModel, checkedKeys: stri...
FILE: src/renderer/rss/rssscanenmpty/scanenmpty.ts
function GetEnmptyDir (line 8) | async function GetEnmptyDir(user_id: string, PanData: IScanDriverModel, ...
function TestEnmptyDir (line 41) | async function TestEnmptyDir(user_id: string, PanData: IScanDriverModel,...
function ApiTestEnmptyDir (line 59) | async function ApiTestEnmptyDir(user_id: string, drive_id: string, idLis...
function GetTreeNodes (line 105) | function GetTreeNodes(PanData: IScanDriverModel, parent_file_id: string,...
FILE: src/renderer/rss/rssscanpunish/scanpunish.ts
function GetWeiGuiFile (line 10) | async function GetWeiGuiFile(user_id: string, PanData: IScanDriverModel,...
function ApiBatchDirFileList (line 107) | async function ApiBatchDirFileList(user_id: string, drive_id: string, di...
function GetTreeNodes (line 176) | function GetTreeNodes(PanData: IScanDriverModel, parent_file_id: string,...
function DeleteFromScanDataPunish (line 211) | function DeleteFromScanDataPunish(PanData: IScanDriverModel, idList: str...
function GetTreeCheckedSize (line 230) | function GetTreeCheckedSize(PanData: IScanDriverModel, checkedKeys: stri...
FILE: src/renderer/rss/rssscansame/scansame.ts
function GetSameFile (line 11) | async function GetSameFile(user_id: string, PanData: IScanDriverModel, P...
function GetParentPath (line 92) | function GetParentPath(PanData: IScanDriverModel, file_id: string) {
function ApiBatchDirFileList (line 107) | async function ApiBatchDirFileList(user_id: string, drive_id: string, di...
function ApiWalkDirFileList (line 177) | async function ApiWalkDirFileList(user_id: string, drive_id: string, fil...
function DeleteFromSameData (line 222) | function DeleteFromSameData(PanData: IScanDriverModel, idList: string[]) {
FILE: src/renderer/rss/rssusercopy/usercopy.ts
type ICopyTreeInfo (line 8) | interface ICopyTreeInfo {
function NewCopyTreeInfo (line 17) | function NewCopyTreeInfo(onlyDir: boolean) {
type ICopyTreeNode (line 30) | interface ICopyTreeNode {
function LoadDir (line 38) | async function LoadDir(dirID: string, DirData: ICopyTreeInfo, treeData: ...
function LoadCopy (line 75) | async function LoadCopy(LeftData: ICopyTreeInfo, LeftCheckedKeys: string...
function LoadChildDir (line 97) | async function LoadChildDir(user_id: string, drive_id: string, node: ICo...
function GetTreeNodes (line 125) | function GetTreeNodes(treeData: ICopyTreeNode[], treeDataMap: Map<string...
FILE: src/renderer/rss/rssxima/xima.ts
function DoXiMa (line 9) | async function DoXiMa(dirPath: string, breakSmall: boolean, matchExtList...
function GetAllFiles (line 50) | async function GetAllFiles(dir: string, breakSmall: boolean, fileList: s...
FILE: src/renderer/setting/settingstore.ts
type ProxyType (line 8) | type ProxyType = 'none' | 'http' | 'https' | 'socks4' | 'socks4a' | 'soc...
type SettingState (line 10) | interface SettingState {
function _loadSetting (line 201) | function _loadSetting(val: any) {
function LoadSetting (line 270) | function LoadSetting() {
function defaultValue (line 287) | function defaultValue(val: any, check: any[]) {
function defaultString (line 292) | function defaultString(val: any, check: string) {
function defaultBool (line 297) | function defaultBool(val: any, check: boolean) {
function defaultNumber (line 302) | function defaultNumber(val: any, check: number) {
function defaultNumberSub (line 307) | function defaultNumberSub(val: any, check: number, min: number, max: num...
function SaveSetting (line 317) | function SaveSetting() {
method updateStore (line 334) | updateStore(partial: Partial<SettingState>) {
method updateFileColor (line 350) | updateFileColor(key: string, title: string) {
method getProxy (line 359) | getProxy() {
method WebSetProxy (line 370) | WebSetProxy() {
FILE: src/renderer/share/following/FollowingDAL.ts
class FollowingDAL (line 8) | class FollowingDAL {
method aReloadOtherFollowingList (line 10) | static async aReloadOtherFollowingList(user_id: string, force: boolean...
method aReloadMyFollowing (line 50) | static async aReloadMyFollowing(user_id: string, force: boolean): Prom...
method aSetFollowing (line 66) | static async aSetFollowing(user_id: string, followingid: string, isFol...
method aSetFollowingBatch (line 73) | static async aSetFollowingBatch(user_id: string, idList: string[], isF...
method aSetFollowingText (line 85) | static aSetFollowingText(user_id: string, text: string, isFollowing: b...
FILE: src/renderer/share/following/MyFollowingStore.ts
type Item (line 7) | type Item = IAliMyFollowingModel
type MyFollowingState (line 9) | interface MyFollowingState {
type State (line 32) | type State = MyFollowingState
constant KEY (line 33) | const KEY = 'user_id'
method ListDataCount (line 49) | ListDataCount(state: State): number {
method IsListSelected (line 53) | IsListSelected(state: State): boolean {
method ListSelectedCount (line 56) | ListSelectedCount(state: State): number {
method ListDataSelectCountInfo (line 59) | ListDataSelectCountInfo(state: State): string {
method IsListSelectedAll (line 62) | IsListSelectedAll(state: State): boolean {
method aLoadListData (line 69) | aLoadListData(list: Item[]) {
method mSearchListData (line 101) | mSearchListData(value: string) {
method mSetFollowing (line 107) | mSetFollowing(followingid: string, isFollowing: boolean) {
method mRefreshListDataShow (line 131) | mRefreshListDataShow(refreshRaw: boolean) {
method mSelectAll (line 169) | mSelectAll() {
method mMouseSelect (line 173) | mMouseSelect(key: string, Ctrl: boolean, Shift: boolean) {
method mKeyboardSelect (line 179) | mKeyboardSelect(key: string, Ctrl: boolean, Shift: boolean) {
method GetSelected (line 187) | GetSelected() {
method GetSelectedFirst (line 191) | GetSelectedFirst() {
method mSetFocus (line 196) | mSetFocus(key: string) {
method mGetFocus (line 201) | mGetFocus() {
method mGetFocusNext (line 206) | mGetFocusNext(position: string) {
FILE: src/renderer/share/following/OtherFollowingStore.ts
type FollowingState (line 4) | interface FollowingState {
method aSaveOtherFollowingList (line 22) | aSaveOtherFollowingList(key: string, color: string, list: IAliOtherFollo...
FILE: src/renderer/share/share/MyShareStore.ts
type Item (line 9) | type Item = IAliShareItem
type MyShareState (line 11) | interface MyShareState {
type State (line 30) | type State = MyShareState
constant KEY (line 31) | const KEY = 'share_id'
method ListDataCount (line 46) | ListDataCount(state: State): number {
method IsListSelected (line 50) | IsListSelected(state: State): boolean {
method ListSelectedCount (line 53) | ListSelectedCount(state: State): number {
method ListDataSelectCountInfo (line 56) | ListDataSelectCountInfo(state: State): string {
method IsListSelectedAll (line 59) | IsListSelectedAll(state: State): boolean {
method ListStats (line 63) | ListStats(state: State) {
method aLoadListData (line 84) | aLoadListData(list: Item[]) {
method mSearchListData (line 113) | mSearchListData(value: string) {
method mOrderListData (line 119) | mOrderListData(value: string) {
method mGetOrder (line 125) | mGetOrder(order: string, list: Item[]) {
method mRefreshListDataShow (line 144) | mRefreshListDataShow(refreshRaw: boolean) {
method mSelectAll (line 183) | mSelectAll() {
method mMouseSelect (line 187) | mMouseSelect(key: string, Ctrl: boolean, Shift: boolean) {
method mKeyboardSelect (line 193) | mKeyboardSelect(key: string, Ctrl: boolean, Shift: boolean) {
method GetSelected (line 201) | GetSelected() {
method GetSelectedFirst (line 205) | GetSelectedFirst() {
method mSetFocus (line 210) | mSetFocus(key: string) {
method mGetFocus (line 215) | mGetFocus() {
method mGetFocusNext (line 220) | mGetFocusNext(position: string) {
method mDeleteFiles (line 223) | mDeleteFiles(share_idList: string[]) {
method mUpdateShare (line 238) | mUpdateShare(success: UpdateShareModel[]) {
FILE: src/renderer/share/share/OtherShareStore.ts
type IOtherShareLinkModel (line 7) | interface IOtherShareLinkModel {
type Item (line 21) | type Item = IOtherShareLinkModel
type OtherShareState (line 23) | interface OtherShareState {
type State (line 42) | type State = OtherShareState
constant KEY (line 43) | const KEY = 'share_id'
method ListDataCount (line 58) | ListDataCount(state: State): number {
method IsListSelected (line 62) | IsListSelected(state: State): boolean {
method ListSelectedCount (line 65) | ListSelectedCount(state: State): number {
method ListDataSelectCountInfo (line 68) | ListDataSelectCountInfo(state: State): string {
method IsListSelectedAll (line 71) | IsListSelectedAll(state: State): boolean {
method aLoadListData (line 78) | aLoadListData(list: Item[]) {
method mSearchListData (line 107) | mSearchListData(value: string) {
method mOrderListData (line 113) | mOrderListData(value: string) {
method mGetOrder (line 119) | mGetOrder(order: string, list: Item[]) {
method mRefreshListDataShow (line 126) | mRefreshListDataShow(refreshRaw: boolean) {
method mSelectAll (line 165) | mSelectAll() {
method mMouseSelect (line 169) | mMouseSelect(key: string, Ctrl: boolean, Shift: boolean) {
method mKeyboardSelect (line 175) | mKeyboardSelect(key: string, Ctrl: boolean, Shift: boolean) {
method GetSelected (line 183) | GetSelected() {
method GetSelectedFirst (line 187) | GetSelectedFirst() {
method mSetFocus (line 192) | mSetFocus(key: string) {
method mGetFocus (line 197) | mGetFocus() {
method mGetFocusNext (line 202) | mGetFocusNext(position: string) {
method mDeleteFiles (line 205) | mDeleteFiles(share_idList: string[]) {
FILE: src/renderer/share/share/ShareDAL.ts
class ShareDAL (line 14) | class ShareDAL {
method aLoadFromDB (line 16) | static async aLoadFromDB(): Promise<void> {
method aReloadMyShare (line 26) | static async aReloadMyShare(user_id: string, force: boolean): Promise<...
method aReloadMyShareUntilShareID (line 38) | static async aReloadMyShareUntilShareID(user_id: string, share_id: str...
method aReloadOtherShare (line 47) | static async aReloadOtherShare(): Promise<void> {
method SaveOtherShare (line 71) | static async SaveOtherShare(password: string, info: IAliShareAnonymous...
method SaveOtherShareText (line 107) | static async SaveOtherShareText(text: string): Promise<boolean> {
method SaveOtherShareRefresh (line 127) | static async SaveOtherShareRefresh(): Promise<boolean> {
method DeleteOtherShare (line 154) | static async DeleteOtherShare(selectKeys: string[]): Promise<void> {
method aLoadShareSite (line 161) | static aLoadShareSite() {
method SaveShareSite (line 166) | static SaveShareSite(list: IShareSiteModel[]) {
FILE: src/renderer/store/appstore.ts
type IPageOffice (line 5) | interface IPageOffice {
type IPageCode (line 13) | interface IPageCode {
type IPageImage (line 23) | interface IPageImage {
type IPageVideoXBT (line 33) | interface IPageVideoXBT {
type IPageVideo (line 40) | interface IPageVideo {
type AppState (line 47) | interface AppState {
method GetAppTabMenu (line 84) | GetAppTabMenu(state: AppState): string {
method updateStore (line 90) | updateStore(partial: Partial<AppState>) {
method toggleTheme (line 94) | toggleTheme(theme: string) {
method toggleDark (line 104) | toggleDark(dark: boolean) {
method togglePage (line 114) | togglePage(page: string) {
method resetTab (line 118) | resetTab() {
method toggleTab (line 132) | toggleTab(tab: string) {
method toggleTabMenu (line 140) | toggleTabMenu(tab: string, menu: string) {
method toggleTabSetting (line 150) | toggleTabSetting(tab: string, menu: string) {
method toggleTabNext (line 160) | toggleTabNext() {
method toggleTabNextMenu (line 191) | toggleTabNextMenu() {
FILE: src/renderer/store/footstore.ts
type AsyncModel (line 9) | interface AsyncModel {
type FootState (line 25) | interface FootState {
method GetIsRunning (line 67) | GetIsRunning(state: FootState): boolean {
method GetSpaceInfo (line 75) | GetSpaceInfo(state: FootState): string {
method GetInfo (line 82) | GetInfo(state: FootState): string {
method updateStore (line 95) | updateStore(partial: Partial<FootState>) {
method mDeleteTask (line 100) | mDeleteTask(key: string) {
method mAddTask (line 104) | mAddTask(user_id: string, key: string, type: AsyncType, title: string, t...
method mAddTaskZip (line 109) | mAddTaskZip(user_id: string, key: string, type: AsyncType, title: string...
method aUpdateTask (line 114) | aUpdateTask() {
method mClearTask (line 145) | mClearTask() {
method mSaveUploadingInfo (line 153) | mSaveUploadingInfo(total: number) {
method mSaveAudioUrl (line 157) | mSaveAudioUrl(url: string) {
method mSaveLoading (line 161) | mSaveLoading(title: string) {
method mSaveUserInfo (line 164) | mSaveUserInfo(token: ITokenInfo) {
method mSaveDirInfo (line 167) | mSaveDirInfo(drive: Drive, info: string) {
FILE: src/renderer/store/keyboardstore.ts
type KeyboardMessage (line 3) | interface KeyboardMessage {
type KeyboardState (line 19) | interface KeyboardState {
method updateStore (line 33) | updateStore(partial: Partial<KeyboardState>) {
method KeyDown (line 36) | KeyDown(event: KeyboardEvent) {
FILE: src/renderer/store/logstore.ts
type LogState (line 3) | interface LogState {
method logRefresh (line 15) | logRefresh(time: number) {
FILE: src/renderer/store/modalstore.ts
type ModalState (line 4) | interface ModalState {
method showModal (line 16) | showModal(modalName: string, modalData: any) {
FILE: src/renderer/store/serverstore.ts
type IShareSiteModel (line 4) | interface IShareSiteModel {
type ServerState (line 10) | interface ServerState {
method mSaveShareSiteList (line 23) | mSaveShareSiteList(shareSiteList: IShareSiteModel[]) {
method mSaveHelpUrl (line 27) | mSaveHelpUrl(url: string) {
FILE: src/renderer/store/treestore.ts
type TreeNodeData (line 9) | interface TreeNodeData {
type DirData (line 19) | interface DirData {
type IDriverModel (line 27) | interface IDriverModel {
class TreeStore (line 47) | class TreeStore {
method ConvertToOneDriver (line 49) | static async ConvertToOneDriver(drive_id: string, children: DirData[],...
method SaveOneDriver (line 124) | static async SaveOneDriver(OneDriver: IDriverModel): Promise<void> {
method SaveOneDirFileList (line 139) | static async SaveOneDirFileList(oneDir: IAliFileResp, hasFiles: boolea...
method GetDirOrder (line 206) | static GetDirOrder(drive_id: string, file_id: string): string {
method SaveDirOrder (line 218) | static SaveDirOrder(drive_id: string, file_id: string, order: string):...
method GetTreeDataToShow (line 233) | static GetTreeDataToShow(driverData: IDriverModel, node: TreeNodeData,...
method GetDriver (line 272) | static GetDriver(drive_id: string): IDriverModel | undefined {
method GetDir (line 277) | static GetDir(drive_id: string, file_id: string): IAliGetDirModel | un...
method GetDirPath (line 295) | static GetDirPath(drive_id: string, file_id: string): IAliGetDirModel[] {
method GetDirChildDirID (line 332) | static GetDirChildDirID(drive_id: string, file_id: string): string[] {
method RenameDirs (line 342) | static RenameDirs(drive_id: string, fileList: { file_id: string; paren...
method DeleteDirs (line 355) | static DeleteDirs(drive_id: string, file_idList: string[]): void {
method GetDirSizeNeedRefresh (line 378) | static GetDirSizeNeedRefresh(drive_id: string, maxCacheTime: number = ...
method SaveDirSizeNeedRefresh (line 398) | static SaveDirSizeNeedRefresh(drive_id: string, dirSizeList: { dirID: ...
method ClearDirSize (line 415) | static ClearDirSize(drive_id: string, parentDirIDList: string[]) {
function _RefreshAllDirTotalSizeFunc (line 433) | function _RefreshAllDirTotalSizeFunc(drive_id: string): void {
function TotalSize (line 442) | function TotalSize(file_id: string, DirTotalSizeMap: { [key: string]: nu...
FILE: src/renderer/store/winstore.ts
type WinState (line 3) | interface WinState {
method GetListHeight (line 15) | GetListHeight(state: WinState): string {
method GetListHeightNumber (line 18) | GetListHeightNumber(state: WinState): number {
method updateStore (line 24) | updateStore(partial: Partial<WinState>) {
FILE: src/renderer/transfer/uploaddal.ts
class UploadDAL (line 6) | class UploadDAL {
method aReloadUploaded (line 8) | static async aReloadUploaded() {
method aClearUploaded (line 19) | static async aClearUploaded() {
method UploadedDelete (line 25) | static async UploadedDelete(all: boolean) {
FILE: src/renderer/transfer/uploadingdal.ts
class UploadingDAL (line 13) | class UploadingDAL {
method QueryIsUploading (line 15) | static QueryIsUploading() {
method aReloadUploading (line 20) | static async aReloadUploading() {
method mUploadingRefresh (line 31) | static mUploadingRefresh() {
method aUploadingStart (line 56) | static async aUploadingStart(all: boolean, isToStart: boolean) {
method aUploadingStartOne (line 87) | static async aUploadingStartOne(TaskOrUploadID: number) {
method aUploadingDelete (line 107) | static async aUploadingDelete(all: boolean) {
method mUploadingShowTask (line 131) | static mUploadingShowTask(TaskID: number = 0) {
method mUploadingShowTaskBack (line 148) | static mUploadingShowTaskBack() {
method aUploadingEvent (line 154) | static async aUploadingEvent(ReportList: IStateUploadInfo[], ErrorList...
method aUploadingAppendFiles (line 177) | static async aUploadingAppendFiles(TaskID: number, UploadID: number, C...
method aUploadLocalFiles (line 182) | static async aUploadLocalFiles(user_id: string, drive_id: string, pare...
FILE: src/renderer/transfer/uploadingdata.ts
function SaveStopToDB (line 21) | function SaveStopToDB() {
class UploadingData (line 33) | class UploadingData {
method QueryIsUploading (line 35) | static QueryIsUploading(): boolean {
method GetTaskUniqueID (line 45) | static GetTaskUniqueID(): Set<string> {
method GetTaskIsStop (line 55) | static GetTaskIsStop(TaskID: number): boolean {
method GetTaskFileIsStop (line 59) | static GetTaskFileIsStop(UploadID: number): boolean {
method GetTask (line 63) | static GetTask(TaskID: number): IStateUploadTask | undefined {
method GetTaskFile (line 67) | static GetTaskFile(TaskID: number, UploadID: number): IStateUploadTask...
method GetTaskFileInfo (line 78) | static GetTaskFileInfo(UploadID: number): IStateUploadInfo | undefined {
method StartTask (line 83) | static StartTask(TaskID: number, isToStart: boolean): boolean {
method StartTaskFile (line 116) | static StartTaskFile(TaskID: number, UploadID: number, isToStart: bool...
method ReloadUploading (line 155) | static async ReloadUploading(): Promise<void> {
method UploadingShowList (line 215) | static UploadingShowList(): { showList: IUploadingModel[]; count: numb...
method UploadingShowOneItem (line 274) | static UploadingShowOneItem(item: IStateUploadTaskFile, now: number, l...
method UploadingShowListDir (line 327) | static UploadingShowListDir(showTaskID: number): { showList: IUploadin...
method UploadingShowProgress (line 345) | static UploadingShowProgress(): void {
method UploadingAddTask (line 373) | static async UploadingAddTask(taskList: IStateUploadTask[]): Promise<v...
method UploadingStartTask (line 379) | static async UploadingStartTask(TaskIDList: number[], isToStart: boole...
method UploadingStartTaskFile (line 395) | static async UploadingStartTaskFile(TaskID: number, UploadIDList: numb...
method UploadingDeleteTask (line 445) | static async UploadingDeleteTask(TaskIDList: number[]): Promise<number...
method UploadingDeleteTaskFile (line 479) | static async UploadingDeleteTaskFile(TaskID: number, UploadIDList: num...
method UploadingEventSave (line 517) | static async UploadingEventSave(ReportList: IStateUploadInfo[], ErrorL...
method UploadingEventRunningCheck (line 634) | static UploadingEventRunningCheck(RunningKeys: number[], StopKeys: num...
method UploadingEventSendList (line 659) | static UploadingEventSendList(RunningKeys: number[], LoadingKeys: numb...
method _GetSendList (line 673) | private static _GetSendList(RunningKeys: number[], LoadingKeys: number...
method UploadingAppendFilesSave (line 789) | static async UploadingAppendFilesSave(TaskID: number, UploadID: number...
FILE: src/renderer/user/userdal.ts
class UserDAL (line 11) | class UserDAL {
method aLoadFromDB (line 13) | static async aLoadFromDB() {
method aRefreshAllUserToken (line 62) | static async aRefreshAllUserToken() {
method GetUserToken (line 77) | static GetUserToken(user_id: string): ITokenInfo {
method GetUserTokenFromDB (line 111) | static async GetUserTokenFromDB(user_id: string) {
method ClearUserTokenMap (line 120) | static async ClearUserTokenMap() {
method GetUserList (line 124) | static GetUserList() {
method SaveUserToken (line 134) | static SaveUserToken(token: ITokenInfo) {
method UserLogin (line 147) | static async UserLogin(token: ITokenInfo) {
method UserLogOff (line 179) | static async UserLogOff(user_id: string): Promise<boolean> {
method UserClearFromDB (line 203) | static async UserClearFromDB(user_id: string): Promise<void> {
method UserChange (line 209) | static async UserChange(user_id: string): Promise<boolean> {
method UserRefreshByUserFace (line 226) | static async UserRefreshByUserFace(user_id: string, force: boolean): P...
method CurrUserToken (line 252) | static CurrUserToken(): string {
FILE: src/renderer/user/userstore.ts
type ITokenInfo (line 5) | interface ITokenInfo {
type UserState (line 41) | interface UserState {
method GetUserToken (line 55) | GetUserToken(state: UserState): ITokenInfo {
method userLogin (line 61) | userLogin(user_id: string) {
method userLogOff (line 65) | userLogOff() {
FILE: src/renderer/utils/antdtree.ts
function treeSelectToExpand (line 4) | function treeSelectToExpand(keys: any[], info: { event: string; selected...
FILE: src/renderer/utils/appcache.ts
class AppCache (line 10) | class AppCache {
method LoadDirSize (line 12) | static async LoadDirSize(dir: string): Promise<number> {
method DeleteDir (line 39) | static DeleteDir(dir: string): Promise<void> {
method aLoadCacheSize (line 47) | static async aLoadCacheSize(): Promise<void> {
method aClearCache (line 57) | static async aClearCache(delby: string): Promise<void> {
FILE: src/renderer/utils/config.ts
class Config (line 1) | class Config {
FILE: src/renderer/utils/db.ts
type ICache (line 5) | interface ICache {
class XBYDB3 (line 11) | class XBYDB3 extends Dexie {
method constructor (line 20) | constructor() {
method getValueString (line 44) | async getValueString(key: string): Promise<string> {
method saveValueString (line 51) | async saveValueString(key: string, value: string): Promise<string> {
method saveValueStringBatch (line 56) | async saveValueStringBatch(keys: string[], values: string[]): Promise<...
method getValueNumber (line 61) | async getValueNumber(key: string): Promise<number> {
method saveValueNumber (line 68) | async saveValueNumber(key: string, value: number): Promise<string> {
method getValueBool (line 73) | async getValueBool(key: string): Promise<boolean> {
method saveValueBool (line 80) | async saveValueBool(key: string, value: boolean): Promise<string> {
method getValueObject (line 85) | async getValueObject(key: string): Promise<object | undefined> {
method saveValueObject (line 92) | async saveValueObject(key: string, value: object): Promise<string | vo...
method saveValueObjectBatch (line 97) | async saveValueObjectBatch(keys: string[], values: object[]): Promise<...
method deleteValueObject (line 102) | async deleteValueObject(key: string): Promise<void> {
method getUser (line 107) | async getUser(user_id: string): Promise<ITokenInfo | undefined> {
method getUserAll (line 114) | async getUserAll(): Promise<ITokenInfo[]> {
method deleteUser (line 122) | async deleteUser(user_id: string): Promise<void> {
method saveUser (line 127) | async saveUser(token: ITokenInfo): Promise<string | void> {
method getOtherShare (line 132) | async getOtherShare(share_id: string): Promise<IOtherShareLinkModel | ...
method getOtherShareAll (line 137) | async getOtherShareAll(): Promise<IOtherShareLinkModel[]> {
method deleteOtherShareBatch (line 143) | async deleteOtherShareBatch(share_id_list: string[]): Promise<void> {
method saveOtherShare (line 148) | async saveOtherShare(share: IOtherShareLinkModel): Promise<string | vo...
FILE: src/renderer/utils/dbcache.ts
type IStateFileHash (line 4) | interface IStateFileHash {
class XBYDB3Cache (line 12) | class XBYDB3Cache extends Dexie {
method constructor (line 17) | constructor() {
method saveLog (line 34) | async saveLog(value: IStateDebugLog) {
method getLogAll (line 39) | async getLogAll(): Promise<IStateDebugLog[]> {
method deleteLogAll (line 46) | async deleteLogAll(): Promise<void> {
method deleteLogOutCount (line 51) | async deleteLogOutCount(max: number): Promise<number> {
method getFileHashList (line 60) | async getFileHashList(size: number, mtime: number): Promise<IStateFile...
method getFileHash (line 65) | async getFileHash(size: number, mtime: number, prehash: string, name: ...
method saveFileHash (line 76) | async saveFileHash(value: IStateFileHash) {
FILE: src/renderer/utils/dbdown.ts
type IDowningInfo (line 3) | interface IDowningInfo {
class XBYDB3Down (line 16) | class XBYDB3Down extends Dexie {
method constructor (line 26) | constructor() {
method getDowningGzip (line 46) | async getDowningGzip(key: string): Promise<Buffer | undefined> {
method deleteDowningGzip (line 53) | async deleteDowningGzip(key: string): Promise<void> {
method saveDowningGzip (line 58) | async saveDowningGzip(key: string, value: Buffer): Promise<string | vo...
method deleteDowningGzipAll (line 63) | async deleteDowningGzipAll(): Promise<void> {
method getDownedGzip (line 68) | async getDownedGzip(key: string): Promise<Buffer | undefined> {
method deleteDownedGzip (line 75) | async deleteDownedGzip(key: string): Promise<void> {
method saveDownedGzip (line 80) | async saveDownedGzip(key: string, value: Buffer): Promise<string | voi...
method deleteDownedGzipAll (line 85) | async deleteDownedGzipAll(): Promise<void> {
method getDowningInfo (line 90) | async getDowningInfo(key: string): Promise<IDowningInfo | undefined> {
method deleteDowningInfo (line 97) | async deleteDowningInfo(key: string): Promise<void> {
method saveDowningInfo (line 102) | async saveDowningInfo(key: string, value: IDowningInfo): Promise<strin...
method deleteDowningInfoAll (line 107) | async deleteDowningInfoAll(): Promise<void> {
method getDowningProgress (line 112) | async getDowningProgress(key: string): Promise<object | undefined> {
method deleteDowningProgress (line 119) | async deleteDowningProgress(key: string): Promise<void> {
method saveDowningProgress (line 124) | async saveDowningProgress(key: string, value: object): Promise<string ...
method deleteDowningProgressAll (line 129) | async deleteDowningProgressAll(): Promise<void> {
FILE: src/renderer/utils/dbupload.ts
type IStateUploadTaskFile (line 4) | interface IStateUploadTaskFile {
type IStateUploadTask (line 27) | interface IStateUploadTask {
type UploadState (line 57) | type UploadState =
type IStateUploadInfo (line 66) | interface IStateUploadInfo {
type IUploadingUI (line 96) | interface IUploadingUI {
class XBYDB3Upload (line 110) | class XBYDB3Upload extends Dexie {
method constructor (line 116) | constructor() {
method getUploadTask (line 139) | async getUploadTask(key: number): Promise<IStateUploadTask | undefined> {
method getUploadTaskAll (line 147) | async getUploadTaskAll(): Promise<IStateUploadTask[]> {
method getUploadTaskAllKeys (line 155) | async getUploadTaskAllKeys(): Promise<number[]> {
method getUploadTaskCount (line 163) | async getUploadTaskCount(): Promise<number> {
method deleteUploadTask (line 171) | async deleteUploadTask(key: number): Promise<void> {
method deleteUploadTaskBatch (line 178) | async deleteUploadTaskBatch(keys: number[]): Promise<void> {
method deleteUploadInfo (line 186) | async deleteUploadInfo(key: number): Promise<void> {
method deleteUploadInfoBatch (line 193) | async deleteUploadInfoBatch(keys: number[]): Promise<void> {
method saveUploadTask (line 200) | async saveUploadTask(value: IStateUploadTask) {
method saveUploadTaskBatch (line 206) | async saveUploadTaskBatch(values: IStateUploadTask[]) {
method clearUploadTaskAll (line 214) | async clearUploadTaskAll(): Promise<void> {
method saveUploadInfo (line 222) | async saveUploadInfo(value: IStateUploadInfo) {
method saveUploadInfoBatch (line 228) | async saveUploadInfoBatch(values: IStateUploadInfo[]) {
method getUploadInfoAll (line 235) | async getUploadInfoAll(): Promise<IStateUploadInfo[]> {
method getUploaded (line 244) | async getUploaded(key: number): Promise<IStateUploadTask | undefined> {
method getUploadedByTop (line 251) | async getUploadedByTop(limit: number): Promise<IStateUploadTask[]> {
method getUploadedCount (line 258) | async getUploadedCount(): Promise<number> {
method deleteUploaded (line 265) | async deleteUploaded(key: number): Promise<number> {
method deleteUploadedBatch (line 270) | async deleteUploadedBatch(keys: number[]): Promise<number> {
method saveUploaded (line 276) | async saveUploaded(value: IStateUploadTask) {
method saveUploadedBatch (line 282) | async saveUploadedBatch(values: IStateUploadTask[]) {
method deleteUploadedOutCount (line 290) | async deleteUploadedOutCount(max: number): Promise<number> {
method clearUploadedAll (line 299) | async clearUploadedAll(): Promise<void> {
method getUploadObj (line 305) | async getUploadObj(key: string): Promise<object | undefined> {
method saveUploadObj (line 312) | async saveUploadObj(key: string, value: object): Promise<string | void> {
FILE: src/renderer/utils/debounce.ts
function debounce (line 4) | function debounce(func: Function, wait: number, immediate: boolean = tru...
function throttle (line 44) | function throttle(func: Function, wait: number, immediate: boolean = tru...
function clickWait (line 50) | function clickWait(cmdkey: string, wait: number = -1): boolean {
function clickWaitDelete (line 64) | function clickWaitDelete(cmdkey: string): void {
FILE: src/renderer/utils/debuglog.ts
type IStateDebugLog (line 4) | interface IStateDebugLog {
class DebugLogC (line 11) | class DebugLogC {
method mSaveLogClear (line 14) | mSaveLogClear() {
method mSaveDanger (line 24) | mSaveDanger(logmessage: string, err: any = undefined) {
method mSaveWarning (line 28) | mSaveWarning(logmessage: string, err: any = undefined) {
method mSaveSuccess (line 32) | mSaveSuccess(logmessage: string, err: any = undefined) {
method mSaveLog (line 36) | mSaveLog(logtype: string, logmessage: string, err: any) {
method aLoadFromDB (line 75) | async aLoadFromDB() {
FILE: src/renderer/utils/electronhelper.ts
function getFromClipboard (line 3) | function getFromClipboard(): string {
function copyToClipboard (line 7) | function copyToClipboard(text: string): void {
function openExternal (line 10) | function openExternal(url: string): void {
function LoadElectronPath (line 31) | function LoadElectronPath(): void {
function getUserData (line 51) | function getUserData(): string {
function getResourcesPath (line 57) | function getResourcesPath(fileName: string): string {
function getAppNewPath (line 66) | function getAppNewPath(): string {
function SetProgressBar (line 85) | function SetProgressBar(value: number, by: string): void {
FILE: src/renderer/utils/filehelper.ts
function OpenFileHandle (line 5) | async function OpenFileHandle(filepath: string): Promise<{ handle: any; ...
function FileSystemErrorMessage (line 17) | function FileSystemErrorMessage(code: string, message: string): string {
function ClearFileName (line 73) | function ClearFileName(fileName: string): string {
function CheckFileName (line 91) | function CheckFileName(fileName: string): string {
function CleanStringForCmd (line 109) | function CleanStringForCmd(title: string) {
function CheckWindowsBreakPath (line 115) | function CheckWindowsBreakPath(filePath: string) {
FILE: src/renderer/utils/filenameorder.ts
function OrderNode (line 5) | function OrderNode(order: string, list: DirData[]) {
function OrderDir (line 18) | function OrderDir(orderby: string, order: string, list: IAliGetFileModel...
function OrderFile (line 30) | function OrderFile(orderby: string, order: string, list: IAliGetFileMode...
function OrderByTimeAsc (line 43) | function OrderByTimeAsc(list: { time: number; name: string }[]) {
function OrderByTimeDesc (line 52) | function OrderByTimeDesc(list: { time: number; name: string }[]) {
function OrderBySizeAsc (line 60) | function OrderBySizeAsc(list: { size: number; name: string }[]) {
function OrderBySizeDesc (line 68) | function OrderBySizeDesc(list: { size: number; name: string }[]) {
function OrderByNameAsc (line 76) | function OrderByNameAsc(list: { name: string }[]) {
function OrderByNameDesc (line 82) | function OrderByNameDesc(list: { name: string }[]) {
function _OrderName (line 92) | function _OrderName(a: string, b: string) {
function replaceHanNumber (line 100) | function replaceHanNumber(a: string): string {
FILE: src/renderer/utils/foot.ts
function FootLoading (line 3) | function FootLoading(msg: string, key: string) {
FILE: src/renderer/utils/format.ts
function humanSize (line 4) | function humanSize(bytes: number | string | undefined): string {
function humanSizeSpeed (line 17) | function humanSizeSpeed(bytes: number | string | undefined): string {
function humanCount (line 31) | function humanCount(bytes: number) {
function humanTimeAgo (line 40) | function humanTimeAgo(value: number | string | undefined): string {
function humanDateTime (line 72) | function humanDateTime(value: number | string | undefined): string {
function humanDateTimeYMD (line 92) | function humanDateTimeYMD(value: number | string | undefined): string {
function humanDateTimeDateStr (line 107) | function humanDateTimeDateStr(value: string | undefined): string {
function humanDateTimeDateStrYMD (line 125) | function humanDateTimeDateStrYMD(value: string | undefined): string {
function humanTime (line 139) | function humanTime(value: number | string | undefined): string {
function humanTimeFM (line 154) | function humanTimeFM(value: number | string | undefined): string {
function humanExpiration (line 168) | function humanExpiration(expiration: string | undefined, timenow: number...
function GetKeyHashHex (line 182) | function GetKeyHashHex(full: string): string {
function GetKeyHashNumber (line 233) | function GetKeyHashNumber(full: string): number {
function StringsToMap (line 283) | function StringsToMap(list: string[]): Map<string, boolean> {
function guid (line 293) | function guid(): string {
function randomSharePassword (line 301) | function randomSharePassword(): string {
function b64encode (line 309) | function b64encode(str: string): string {
function b64decode (line 318) | function b64decode(base64: string): string {
function B64decode (line 326) | function B64decode(b64str: string): string {
function B64encode (line 338) | function B64encode(str: string): string {
function Sleep (line 351) | function Sleep(msTime: number) {
function Unicode (line 365) | function Unicode(str: string): string {
FILE: src/renderer/utils/keyboardhelper.ts
function TestCtrlShift (line 5) | function TestCtrlShift(key: string, event: KeyboardMessage, fun: any): b...
function TestCtrl (line 13) | function TestCtrl(key: string, event: KeyboardMessage, fun: any): boolean {
function TestShift (line 21) | function TestShift(key: string, event: KeyboardMessage, fun: any): boole...
function TestAlt (line 29) | function TestAlt(key: string, event: KeyboardMessage, fun: any): boolean {
function TestKey (line 37) | function TestKey(key: string, event: KeyboardMessage, fun: any): boolean {
function TestKeyboardScroll (line 45) | function TestKeyboardScroll(event: KeyboardMessage, vlist: any, store: a...
function TestKeyboardSelect (line 88) | function TestKeyboardSelect(event: KeyboardMessage, viewlist: any, store...
function onHideRightMenu (line 169) | function onHideRightMenu(): void {
function onHideRightMenuScroll (line 197) | function onHideRightMenuScroll() {
function onShowRightMenu (line 201) | function onShowRightMenu(menukey: string, clientX: number, clientY: numb...
FILE: src/renderer/utils/levemap.ts
type Dir (line 5) | interface Dir {
function GetDirSize (line 16) | function GetDirSize(file_id: string) {
function SetDirSizeMap (line 31) | function SetDirSizeMap(file_id: string, size: number) {
function SetDirSizeObject (line 51) | function SetDirSizeObject(file_id: string, size: number) {
function LoadObject (line 70) | async function LoadObject() {
function CreatMap (line 82) | async function CreatMap() {
function CreatObject (line 97) | async function CreatObject() {
FILE: src/renderer/utils/message.ts
function getCount (line 5) | function getCount(msg: string) {
class message (line 11) | class message {
method info (line 12) | static info(msg: string, duration: number = 3, key: string = '') {
method error (line 23) | static error(msg: string, duration: number = 3, key: string = '') {
method success (line 34) | static success(msg: string, duration: number = 3, key: string = '') {
method warning (line 45) | static warning(msg: string, duration: number = 3, key: string = '') {
method loading (line 56) | static loading(msg: string, duration: number = 3, key: string = '') {
FILE: src/renderer/utils/modal.ts
function modalCloseAll (line 4) | function modalCloseAll() {
function modalUserSpace (line 8) | function modalUserSpace() {
function modalCreatNewFile (line 11) | function modalCreatNewFile() {
function modalCreatNewDir (line 14) | function modalCreatNewDir(dirtype: string, parentdirid: string = '', cal...
function modalCreatNewShareLink (line 18) | function modalCreatNewShareLink(sharetype: string, filelist: IAliGetFile...
function modalDaoRuShareLink (line 22) | function modalDaoRuShareLink() {
function modalDaoRuShareLinkMulti (line 25) | function modalDaoRuShareLinkMulti() {
function modalRename (line 29) | function modalRename(istree: boolean, ismulti: boolean) {
function modalEditShareLink (line 33) | function modalEditShareLink(sharelist: IAliShareItem[]) {
function modalShowShareLink (line 37) | function modalShowShareLink(share_id: string, share_pwd: string, share_t...
function modalSelectPanDir (line 41) | function modalSelectPanDir(selecttype: string, selectid: string, callbac...
function modalShuXing (line 45) | function modalShuXing(istree: boolean, ismulti: boolean) {
function modalSearchPan (line 50) | function modalSearchPan() {
function modalDLNAPlayer (line 54) | function modalDLNAPlayer() {
function modalM3U8Download (line 57) | function modalM3U8Download() {
function modalCopyFileTree (line 61) | function modalCopyFileTree(filelist: IAliGetFileModel[]) {
function modalArchive (line 65) | function modalArchive(user_id: string, drive_id: string, file_id: string...
function modalArchivePassword (line 69) | function modalArchivePassword(user_id: string, drive_id: string, file_id...
function modalUpload (line 73) | function modalUpload(file_id: string, filelist: string[]) {
function modalDownload (line 77) | function modalDownload(istree: boolean) {
FILE: src/renderer/utils/openfile.ts
function menuOpenFile (line 16) | async function menuOpenFile(file: IAliGetFileModel): Promise<void> {
function Archive (line 69) | async function Archive(drive_id: string, file_id: string, file_name: str...
function Video (line 121) | async function Video(drive_id: string, file_id: string, name: string, we...
function Image (line 242) | async function Image(drive_id: string, file_id: string, name: string): P...
function Office (line 269) | async function Office(drive_id: string, file_id: string, name: string): ...
function Audio (line 286) | async function Audio(drive_id: string, file_id: string, name: string, we...
function Code (line 305) | async function Code(drive_id: string, file_id: string, name: string, cod...
function PrismExt (line 324) | function PrismExt(fileExt: string): string {
FILE: src/renderer/utils/selecthelper.ts
function GetSelectedList (line 4) | function GetSelectedList<K, T>(list: T[], keyName: string, selectedMap: ...
function GetSelectedListID (line 14) | function GetSelectedListID<K, T>(list: T[], keyName: string, selectedMap...
function SelectAll (line 25) | function SelectAll<K, T>(list: T[], keyName: string, selectedOld: Set<K>...
function GetFocusNext (line 39) | function GetFocusNext<T>(list: any[], keyName: string, focusKey: T, posi...
function MouseSelectOne (line 65) | function MouseSelectOne<T>(list: any[], keyName: string, selectedOld: Se...
function KeyboardSelectOne (line 137) | function KeyboardSelectOne<T>(list: any[], keyName: string, selectedOld:...
FILE: src/renderer/utils/sha1workerpool.ts
constant MAXSIZE (line 1) | const MAXSIZE = Math.max(2, navigator.hardwareConcurrency - 1)
type Sha1Model (line 3) | interface Sha1Model {
class Sha1WorkerPool (line 9) | class Sha1WorkerPool {
method Init (line 14) | public Init() {
method StartWithCallback (line 25) | public StartWithCallback(args: Sha1Model, callback: (result: any, work...
method FinishWithCallback (line 41) | public FinishWithCallback(worker: Worker) {
FILE: src/renderer/utils/shareurl.ts
function GetShareUrlFormate (line 3) | function GetShareUrlFormate(share_name: string, share_url: string, share...
type IID (line 17) | interface IID {
function ParseShareIDList (line 23) | function ParseShareIDList(txt: string): IID[] {
function ParseShareIDOne (line 35) | function ParseShareIDOne(txt: string): IID {
function GetShareID (line 42) | function GetShareID(txt: string): IID {
FILE: src/renderer/utils/utils.ts
function ArrayCopyReverse (line 1) | function ArrayCopyReverse(arr: any[]): any[] {
function ArrayCopy (line 8) | function ArrayCopy(arr: any[]): any[] {
function MapKeyToArray (line 16) | function MapKeyToArray<T>(map: Map<T, any>): T[] {
function MapValueToArray (line 25) | function MapValueToArray<T>(map: Map<any, T>): T[] {
function ArrayToMap (line 34) | function ArrayToMap<T>(keyname: string, arr: T[]) {
function ArrayKeyList (line 44) | function ArrayKeyList<T>(keyname: string, arr: any[]): T[] {
function BlobToString (line 52) | function BlobToString(body: Blob, encoding: string): Promise<string> {
function BlobToBuff (line 62) | function BlobToBuff(body: Blob): Promise<ArrayBuffer | undefined> {
function GzipObject (line 74) | function GzipObject(input: object): Buffer {
function UnGzipObject (line 78) | function UnGzipObject(input: Buffer): object {
function HanToPin (line 82) | function HanToPin(input: string): string {
function GetOssExpires (line 103) | function GetOssExpires(downUrl: string) {
function hashCode (line 116) | function hashCode(key: string) {
function md5Code (line 124) | function md5Code(key: string) {
FILE: src/renderer/utils/worker.ts
function WorkerUploadFiles (line 1) | async function WorkerUploadFiles(ingoredList: string[], user_id: string,...
FILE: src/renderer/workerpage/uidownload.ts
function DownloadTrigger (line 1) | function DownloadTrigger() {
FILE: src/renderer/workerpage/uiupload.ts
function UploadCmd (line 13) | async function UploadCmd(Command: string, IsAll: boolean, UploadIDList: ...
function UploadAdd (line 51) | function UploadAdd(UploadList: IUploadingUI[]) {
function UploadReport (line 78) | async function UploadReport(): Promise<void> {
FILE: src/renderer/workerpage/uploader.ts
function StartUpload (line 17) | async function StartUpload(fileui: IUploadingUI): Promise<void> {
type ReadConfig (line 126) | interface ReadConfig {
function creatDirAndReadChildren (line 136) | async function creatDirAndReadChildren(fileui: IUploadingUI): Promise<vo...
function readChildren (line 180) | async function readChildren(parentDirPartPath: string, parentDirName: st...
function AddFiles (line 198) | async function AddFiles(addFileList: IStateUploadTaskFile[], fileList: s...
function AddDirs (line 243) | async function AddDirs(addFileList: IStateUploadTaskFile[], addDirList: ...
constant MAXFILE (line 271) | const MAXFILE = 20
constant MAXDIR (line 272) | const MAXDIR = 20
function readChildrenDiGui (line 273) | async function readChildrenDiGui(addFileList: IStateUploadTaskFile[], ad...
function readDir (line 335) | async function readDir(fullDirPath: string, ingoredList: string[]): Prom...
function checkFileSize (line 370) | async function checkFileSize(fileui: IUploadingUI): Promise<void> {
function reloadUploadUrl (line 400) | async function reloadUploadUrl(uploadInfo: IUploadInfo, fileui: IUploadi...
function checkPreHashAndGetPartlist (line 431) | async function checkPreHashAndGetPartlist(uploadInfo: IUploadInfo, fileu...
FILE: src/renderer/workerpage/workercmd.ts
function WorkerPage (line 11) | function WorkerPage(type: string) {
function LoadAllDirList (line 59) | function LoadAllDirList(user_id: string, drive_id: string): void {
FILE: types.d.ts
type ProcessEnv (line 3) | interface ProcessEnv {
type Window (line 10) | interface Window {
Condensed preview — 250 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,359K chars).
[
{
"path": ".gitignore",
"chars": 77,
"preview": "node_modules\n.DS_Store\ndist\ndist-ssr\n*.local\n.debug.env\n\ntmp\n**/.tmp\nrelease\n"
},
{
"path": ".prettierrc",
"chars": 522,
"preview": "{\n \"singleQuote\": true,\n \"printWidth\": 260,\n \"semi\": false,\n \"quoteProps\": \"as-needed\",\n \"jsxSingleQuote\": false,\n "
},
{
"path": "README.md",
"chars": 2174,
"preview": "# 阿里云盘小白羊版\n\n#### 项目说明\n\n基于阿里云盘网页版开发的PC客户端,支持win7-11,macOS,linux\n\n> **04.14:[v2.12.14版已发布](https://github.com/liupan1890/a"
},
{
"path": "adrive sdk/ReadMe.md",
"chars": 82,
"preview": "### 阿里云盘接口\n\n> 2022-03整理的阿里云盘SDK接口数据\n\n仅用来记录官方提供的接口参数,共整理了144个,比较全了,与编程语言无关,方便大家据此开发"
},
{
"path": "adrive sdk/account.md",
"chars": 1965,
"preview": "#### 刷新 token\n\nPOST: `https://auth.aliyundrive.com/v2/account/token`\n\n```json\n{ \"grant_type\": \"refresh_token\", \"app_id\":"
},
{
"path": "adrive sdk/aims.md",
"chars": 9491,
"preview": "#### 探索-列出图片分类最多的前几个分类\n\nPOST: `https://api.aliyundrive.com/v2/aims/list_hints`\n\n```json\n{ \"user_id\": \"9400000000bc480bbc"
},
{
"path": "adrive sdk/album.md",
"chars": 7167,
"preview": "#### 创建相册\n\nPOST: `https://api.aliyundrive.com/adrive/v1/album/create`\n\n```json\n{ \"name\": \"未命名\", \"description\": \"\" }\n```\n"
},
{
"path": "adrive sdk/archive.md",
"chars": 5237,
"preview": "#### 在线打开压缩包\n\nPOST: `https://api.aliyundrive.com/v2/archive/list`\n\n```json\n{ \"archive_type\": \"zip\", \"domain_id\": \"bj29\","
},
{
"path": "adrive sdk/book.md",
"chars": 3752,
"preview": "#### 列出图书\n\nPOST: `https://api.aliyundrive.com/adrive/v2/book/list`\n\n```json\n{ \"book_progress_type\": \"ALL\", \"limit\": 1, \""
},
{
"path": "adrive sdk/contact.md",
"chars": 1653,
"preview": "#### 通讯录列出\n\nPOST: `https://api.aliyundrive.com/adrive/v1/contact/list`\n\n```json\n{}\n```\n\nResponse:\n\n```json\n{\n \"items\": "
},
{
"path": "adrive sdk/drive.md",
"chars": 4057,
"preview": "#### 全部 drive\n\nPOST: `https://api.aliyundrive.com/v2/drive/list`\n\n```json\n{ \"owner\": \"ccff000000004d75b5788a481eed8386\" "
},
{
"path": "adrive sdk/file.md",
"chars": 22039,
"preview": "#### 一个文件的信息\n\nPOST: `https://api.aliyundrive.com/v2/file/get`\n\n```json\n{\n \"drive_id\": \"9600002\",\n \"office_thumbnail_pr"
},
{
"path": "adrive sdk/filedir.md",
"chars": 1845,
"preview": "#### 文件夹大小\n\nPOST: `https://api.aliyundrive.com/adrive/v1/file/get_folder_size_info`\n\n```json\n{ \"drive_id\": \"9600002\", \"f"
},
{
"path": "adrive sdk/fileupload.md",
"chars": 4295,
"preview": "#### 上传文件 pre_hash\n\nPOST: `https://api.aliyundrive.com/v2/file/create_with_proof`\n\n```json\n{\n \"auto_rename\": true,\n \"c"
},
{
"path": "adrive sdk/image.md",
"chars": 5942,
"preview": "#### 探索-人物列表\n\nPOST: `https://api.aliyundrive.com/v2/image/list_facegroups`\n\n```json\n{ \"drive_id\": \"9600002\", \"limit\": 10"
},
{
"path": "adrive sdk/member.md",
"chars": 6009,
"preview": "#### 列出已订阅\n\nPOST: `https://api.aliyundrive.com/adrive/v1/member/list_following`\n\n```json\n{ \"limit\": 50, \"order_by\": \"upd"
},
{
"path": "adrive sdk/note.md",
"chars": 9050,
"preview": "#### 笔记-drive_id\n\nPOST: `https://api.aliyundrive.com/anote/v1/drive/info`\n\n```json\n\n```\n\nResponse:\n\n```json\n{ \"user_id\":"
},
{
"path": "adrive sdk/offline.md",
"chars": 168,
"preview": "#### 离线任务列表\n\nPOST: `https://api.aliyundrive.com/adrive/v1/offline/jobsList`\n\n```json\n{}\n```\n\nResponse:\n\n```json\n{ \"maxRe"
},
{
"path": "adrive sdk/recyclebin.md",
"chars": 2906,
"preview": "#### 列出回收站\n\nPOST: `https://api.aliyundrive.com/v2/recyclebin/list`\n\n```json\n{ \"fields\": \"*\", \"all\": false, \"drive_id\": \""
},
{
"path": "adrive sdk/reddot.md",
"chars": 698,
"preview": "#### 订阅的账号有更新\n\nPOST: `https://api.aliyundrive.com/adrive/v1/reddot/get`\n\n```json\n{}\n```\n\nResponse:\n\n```json\n{\n \"items\":"
},
{
"path": "adrive sdk/sbox.md",
"chars": 717,
"preview": "#### 保险箱\n\nPOST: `https://api.aliyundrive.com/v2/sbox/get`\n\n```json\n{}\n```\n\nResponse:\n\n```json\n{ \"drive_id\": \"9600002\", \""
},
{
"path": "adrive sdk/search.md",
"chars": 1912,
"preview": "#### 首页 widgets\n\nPOST: `https://api.aliyundrive.com/v2/file/search`\n\n```json\n//截图\n{\n \"return_total_count\": true,\n \"ima"
},
{
"path": "adrive sdk/sfiia.md",
"chars": 1363,
"preview": "#### 文件中的图片\n\nPOST: `https://api.aliyundrive.com/adrive/v1/sfiia/get_recommends`\n\n```json\n{ \"drive_id\": \"9600002\" }\n```\n\n"
},
{
"path": "adrive sdk/share.md",
"chars": 17459,
"preview": "#### 我创建的分享链接\n\nPOST: `https://api.aliyundrive.com/adrive/v3/share_link/list`\n\n```json\n{ \"category\": \"file,album\", \"order"
},
{
"path": "adrive sdk/timeline.md",
"chars": 1731,
"preview": "#### 用户信息\n\nPOST: `https://api.aliyundrive.com/adrive/v1/timeline/user/get`\n\n```json\n{ \"user_id\": \"9400000000bc480bbcbbb1"
},
{
"path": "adrive sdk/token.md",
"chars": 1410,
"preview": "#### 网页版登录\n\nPOST: `https://api.aliyundrive.com/token/get`\n\n```json\n{ \"code\": \"f98788cef51641728f2aad9c64a96a63\", \"loginT"
},
{
"path": "adrive sdk/user.md",
"chars": 12644,
"preview": "#### 首页 widgets\n\nPOST: `https://api.aliyundrive.com/apps/v1/users/apps/widgets`\n\n```json\n\n```\n\nResponse:\n\n```json\n最近转存,你"
},
{
"path": "adrive sdk/video.md",
"chars": 8803,
"preview": "#### 放映室-列出全部专辑\n\nPOST: `https://api.aliyundrive.com/adrive/v2/video/list`\n\n```json\n{ \"use_compilation\": true, \"duration\""
},
{
"path": "changelog.txt",
"chars": 7107,
"preview": "\n\n#### 2022/10/24\n\n注:因上传下载功能尚未做完,本次仅同步代码不发布安装包\n0. 恢复文件上传功能,支持单次上传百万个文件/文件夹,优化上传任务的数据库文件体积过大的问题\n1. 优化sha1并发计算逻辑,增加文件sha1"
},
{
"path": "crx/devtools.html",
"chars": 125,
"preview": "<!DOCTYPE html>\n<html>\n\n<head></head>\n\n<body>\n <script type=\"text/javascript\" src=\"devtools.js\"></script>\n</body>\n\n</"
},
{
"path": "crx/devtools.js",
"chars": 2158,
"preview": "chrome.devtools.network.onRequestFinished.addListener(function (detail) {\n let url = detail.request.url;\n\n let isbreak"
},
{
"path": "crx/manifest.json",
"chars": 215,
"preview": "{\n \"manifest_version\": 3,\n \"name\": \"demo\",\n \"version\": \"1.0.0\",\n \"description\": \"demo\",\n \"devtools_page\":"
},
{
"path": "doc/info.md",
"chars": 1,
"preview": "\n"
},
{
"path": "doc/v2.8.x 使用PotPlayer.md",
"chars": 2461,
"preview": "#### window系统上,在v2.8.15版本开始支持使用Potplayer替换掉默认的MPV播放器\n\n这里是临时的复制文件方式,使用Potplayer,在以后以后的版本中会在设置里增加一个设置,让用户手动选择potplayer.exe"
},
{
"path": "doc/v2.8.x 阿里云盘小白羊版和官方性能测试.md",
"chars": 2333,
"preview": "阿里云盘小白羊版和官方性能测试\n====\n\n阿里云盘小白羊版 v2.8.22终于实现了文件上传所以做个能测试(上传测试和下载测试)\n>测试方法,就是简单的选择文件上传,用手机人工计时\n>\n>测试平台:联想Y7000笔记本,i5-8300H,"
},
{
"path": "electron-builder.json",
"chars": 556,
"preview": "{\n \"appId\": \"YouAppID\",\n \"asar\": true,\n \"directories\": {\n \"output\": \"release\"\n },\n \"files\": [\n \"dist\"\n ],\n "
},
{
"path": "nano-staged.mjs",
"chars": 350,
"preview": "export default {\n // eslint\n '*.{js,ts,tsx,jsx}': ['prettier --write', 'eslint --cache --fix'],\n '*.{vue}': ['styleli"
},
{
"path": "package.json",
"chars": 1411,
"preview": "{\n \"name\": \"alixby\",\n \"version\": \"3.05.23\",\n \"main\": \"dist/main/index.js\",\n \"author\": \"\",\n \"license\": \"\",\n \"script"
},
{
"path": "public/comlink.js",
"chars": 11869,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n type"
},
{
"path": "public/iconfont.css",
"chars": 11235,
"preview": "@font-face {\n font-family: 'iconfont';\n src: url('iconfont.woff2') format('woff2');\n}\n\n.iconfont {\n font-family: \"ico"
},
{
"path": "public/lang/en.js",
"chars": 4094,
"preview": "videojs.addLanguage('en', {\n \"Audio Player\": \"Audio Player\",\n \"Video Player\": \"Video Player\",\n \"Play\": \"Play\",\n \"Pau"
},
{
"path": "public/lang/zh-CN.js",
"chars": 3012,
"preview": "videojs.addLanguage('zh-CN', {\n \"Play\": \"播放\",\n \"Pause\": \"暂停\",\n \"Current Time\": \"当前时间\",\n \"Duration\": \"时长\",\n \"Remaini"
},
{
"path": "public/main.html",
"chars": 869,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>阿里云盘小白羊版</title>\n <meta name=\"data-"
},
{
"path": "public/main2.html",
"chars": 1091,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>阿里云盘小白羊版</title>\n <meta name=\"data-"
},
{
"path": "public/prism-vsc-dark-plus.css",
"chars": 5373,
"preview": "pre[class*='language-'],\ncode[class*='language-'] {\n color: #e4e4e4;\n font-size: 14px;\n text-shadow: none;\n font-fam"
},
{
"path": "public/prism.js",
"chars": 521577,
"preview": "/* PrismJS 1.24.1\nhttps://prismjs.com/download.html#themes=prism-twilight&languages=markup+css+clike+javascript+abap+abn"
},
{
"path": "public/sha1filework.js",
"chars": 4077,
"preview": "const worker = self\nconst fspromises = global.require('fs/promises')\nvar crypto = global.require('crypto')\nlet running ="
},
{
"path": "public/silvermine-videojs-quality-selector.css",
"chars": 574,
"preview": ".vjs-quality-selector .vjs-menu-button {\n margin: 0;\n padding: 0;\n height: 100%;\n width: 100%;\n}\n.vjs-quality-select"
},
{
"path": "public/wasm_exec.js",
"chars": 15672,
"preview": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
},
{
"path": "src/main/index.ts",
"chars": 15192,
"preview": "import { getCrxPath, getResourcesPath, getUserDataPath } from './mainfile'\nimport { release } from 'os'\nimport { AppWind"
},
{
"path": "src/main/mainfile.ts",
"chars": 201190,
"preview": "const { app } = require('electron')\nconst path = require('path')\nconst { existsSync, mkdirSync, writeFileSync, copyFileS"
},
{
"path": "src/main/window.ts",
"chars": 11137,
"preview": "import { app, BrowserWindow, dialog, Menu, MessageChannelMain, nativeTheme, Tray } from 'electron'\nimport { getAsarPath,"
},
{
"path": "src/preload/index.ts",
"chars": 3812,
"preview": "import Electron, { ipcRenderer } from 'electron'\n\nwindow.Electron = Electron\nprocess.noAsar = true\nwindow.platform = pro"
},
{
"path": "src/preload/preload-env.d.ts",
"chars": 730,
"preview": "/* eslint-disable no-unused-vars */\ndeclare namespace NodeJS {\n interface ProcessEnv {\n NODE_ENV: 'development' | 'p"
},
{
"path": "src/renderer/App.vue",
"chars": 1267,
"preview": "<script lang=\"ts\">\nimport { h } from 'vue'\nimport { useAppStore } from './store'\nimport PageLoading from './layout/PageL"
},
{
"path": "src/renderer/aliapi/alihttp.ts",
"chars": 14035,
"preview": "import { ITokenInfo } from '../user/userstore'\nimport UserDAL from '../user/userdal'\nimport axios, { AxiosResponse } fro"
},
{
"path": "src/renderer/aliapi/alimodels.ts",
"chars": 4928,
"preview": "export interface IAliFileVideoMeta {\n bitrate?: string\n clarity?: string\n code_name?: string\n duration?: string\n fp"
},
{
"path": "src/renderer/aliapi/archive.ts",
"chars": 6863,
"preview": "import AliHttp from './alihttp'\n\nexport interface ILinkTxtFile {\n key: string\n name: string\n size: number\n sha1: str"
},
{
"path": "src/renderer/aliapi/batch.ts",
"chars": 861,
"preview": "import message from '../utils/message'\n\n\nexport async function RunBatch(title: string, list: any[], max: number, func: ("
},
{
"path": "src/renderer/aliapi/dirfilelist.ts",
"chars": 27872,
"preview": "import { usePanFileStore, useSettingStore } from '../store'\nimport TreeStore from '../store/treestore'\nimport DebugLog f"
},
{
"path": "src/renderer/aliapi/dirlist.ts",
"chars": 18017,
"preview": "import DebugLog from '../utils/debuglog'\nimport { MapValueToArray } from '../utils/utils'\nimport AliHttp from './alihttp"
},
{
"path": "src/renderer/aliapi/file.ts",
"chars": 17343,
"preview": "import { useSettingStore } from '../store'\nimport DebugLog from '../utils/debuglog'\nimport message from '../utils/messag"
},
{
"path": "src/renderer/aliapi/filecmd.ts",
"chars": 8238,
"preview": "import DebugLog from '../utils/debuglog'\nimport message from '../utils/message'\nimport AliHttp from './alihttp'\nimport {"
},
{
"path": "src/renderer/aliapi/fileicon.ts",
"chars": 3174,
"preview": "export default function getFileIcon(category: string | undefined, ext: string | undefined, mimext: string | undefined, m"
},
{
"path": "src/renderer/aliapi/filewalk.ts",
"chars": 3345,
"preview": "import DebugLog from '../utils/debuglog'\nimport AliHttp, { IUrlRespData } from './alihttp'\nimport { IAliFileItem } from "
},
{
"path": "src/renderer/aliapi/following.ts",
"chars": 6987,
"preview": "import { humanTimeAgo } from '../utils/format'\nimport message from '../utils/message'\nimport DebugLog from '../utils/deb"
},
{
"path": "src/renderer/aliapi/models.ts",
"chars": 3405,
"preview": "\nexport interface IDownloadUrl {\n drive_id: string\n file_id: string\n expire_sec: number\n url: string\n size: number\n"
},
{
"path": "src/renderer/aliapi/server.tsx",
"chars": 6107,
"preview": "import { B64decode, b64decode } from '../utils/format'\nimport axios, { AxiosResponse } from 'axios'\nimport Config from '"
},
{
"path": "src/renderer/aliapi/share.ts",
"chars": 13882,
"preview": "import DebugLog from '../utils/debuglog'\nimport { humanDateTime, humanExpiration, humanSize } from '../utils/format'\nimp"
},
{
"path": "src/renderer/aliapi/sharelist.ts",
"chars": 4231,
"preview": "import DebugLog from '../utils/debuglog'\nimport { humanDateTime, humanExpiration, Sleep } from '../utils/format'\nimport "
},
{
"path": "src/renderer/aliapi/trash.ts",
"chars": 5030,
"preview": "import DebugLog from '../utils/debuglog'\nimport message from '../utils/message'\nimport AliHttp, { IUrlRespData } from '."
},
{
"path": "src/renderer/aliapi/upload.ts",
"chars": 14573,
"preview": "import DebugLog from '../utils/debuglog'\nimport AliHttp from './alihttp'\nimport { IUploadCreat, IUploadInfo } from './mo"
},
{
"path": "src/renderer/aliapi/uploaddisk.ts",
"chars": 12723,
"preview": "import { IUploadingUI } from '../utils/dbupload'\nimport DebugLog from '../utils/debuglog'\nimport { OpenFileHandle } from"
},
{
"path": "src/renderer/aliapi/uploadhash.ts",
"chars": 7065,
"preview": "import { Sleep } from '../utils/format'\nimport { IUploadingUI } from '../utils/dbupload'\nimport { OpenFileHandle } from "
},
{
"path": "src/renderer/aliapi/uploadhashpool.ts",
"chars": 4762,
"preview": "import { IUploadingUI } from '../utils/dbupload'\nimport { OpenFileHandle } from '../utils/filehelper'\nimport DBCache fro"
},
{
"path": "src/renderer/aliapi/uploadmem.ts",
"chars": 1673,
"preview": "import UserDAL from '../user/userdal'\nimport DebugLog from '../utils/debuglog'\nimport axios from 'axios'\nimport AliUploa"
},
{
"path": "src/renderer/aliapi/user.ts",
"chars": 10487,
"preview": "import UserDAL from '../user/userdal'\nimport { humanDateTime, humanDateTimeDateStr, humanSize, Sleep } from '../utils/fo"
},
{
"path": "src/renderer/aliapi/utils.ts",
"chars": 10371,
"preview": "import { ITokenInfo, useFootStore } from '../store'\nimport UserDAL from '../user/userdal'\nimport DebugLog from '../utils"
},
{
"path": "src/renderer/assets/antd.css",
"chars": 4971,
"preview": ".ant-tree,\n.ant-tree-switcher,\n.ant-tree-show-line .ant-tree-switcher {\n background: transparent !important;\n}\n\n.ant-tr"
},
{
"path": "src/renderer/assets/fileitem.css",
"chars": 10704,
"preview": ".fileitem {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n align-items: center;\n height: 50px;\n overfl"
},
{
"path": "src/renderer/assets/global.css",
"chars": 23555,
"preview": "html {\n min-width: 100vw;\n min-height: 100vh;\n overflow: hidden;\n}\nbody {\n font-family: -apple-system, BlinkMacSyste"
},
{
"path": "src/renderer/down/DownDowned.vue",
"chars": 622,
"preview": "<script setup lang=\"ts\">\nconst handleClick = () => {}\n</script>\n\n<template>\n <div style=\"height: 7px\"></div>\n <div cla"
},
{
"path": "src/renderer/down/DownDowning.vue",
"chars": 1903,
"preview": "<script setup lang=\"ts\">\nconst handleClick = () => {}\n</script>\n\n<template>\n <div style=\"height: 7px\"></div>\n <div cla"
},
{
"path": "src/renderer/down/DownM3U8.vue",
"chars": 1916,
"preview": "<script setup lang=\"ts\">\nconst handleClick = () => {}\n</script>\n\n<template>\n <div style=\"height: 7px\"></div>\n <div cla"
},
{
"path": "src/renderer/down/DownSync.vue",
"chars": 1305,
"preview": "<script setup lang=\"ts\">\nconst handleClick = () => {}\n</script>\n\n<template>\n <div style=\"height: 7px\"></div>\n <div cla"
},
{
"path": "src/renderer/down/DownUploaded.vue",
"chars": 9575,
"preview": "<script setup lang=\"ts\">\nimport { KeyboardState, useAppStore, useKeyboardStore, usePanFileStore, useWinStore } from '../"
},
{
"path": "src/renderer/down/DownUploading.vue",
"chars": 12193,
"preview": "<script setup lang=\"ts\">\nimport { KeyboardState, useAppStore, useKeyboardStore, useWinStore } from '../store'\nimport { o"
},
{
"path": "src/renderer/down/downdal.ts",
"chars": 1753,
"preview": "import { IAliGetFileModel } from '../aliapi/alimodels'\n\ndeclare type DownloadState =\n | '排队中' // 排队中, 等待下载\n | 'running"
},
{
"path": "src/renderer/down/downingstore.ts",
"chars": 4573,
"preview": "import { GetFocusNext, GetSelectedList, KeyboardSelectOne, MouseSelectOne, SelectAll } from '../utils/selecthelper'\nimpo"
},
{
"path": "src/renderer/down/downmenu.ts",
"chars": 1234,
"preview": "import DownDAL from './downdal'\nimport UploadDAL from '../transfer/uploaddal'\nimport UploadingDAL from '../transfer/uplo"
},
{
"path": "src/renderer/down/index.vue",
"chars": 2352,
"preview": "<script setup lang=\"ts\">\nimport { useAppStore } from '../store'\nimport DownSync from './DownSync.vue'\nimport DownDowning"
},
{
"path": "src/renderer/down/uploadedstore.ts",
"chars": 4915,
"preview": "import { defineStore } from 'pinia'\nimport { GetSelectedList, GetFocusNext, SelectAll, MouseSelectOne, KeyboardSelectOne"
},
{
"path": "src/renderer/down/uploadingstore.ts",
"chars": 5875,
"preview": "import { defineStore } from 'pinia'\nimport { GetSelectedList, GetFocusNext, SelectAll, MouseSelectOne, KeyboardSelectOne"
},
{
"path": "src/renderer/env.d.ts",
"chars": 1577,
"preview": "/* eslint-disable no-unused-vars */\n/// <reference types=\"vite/client\" />\n\ndeclare module '*.vue' {\n import { DefineCom"
},
{
"path": "src/renderer/global.d.ts",
"chars": 722,
"preview": "export {}\ndeclare global {\n // eslint-disable-next-line no-unused-vars\n interface Window {\n Go: any\n require: an"
},
{
"path": "src/renderer/layout/MyLoading.vue",
"chars": 448,
"preview": "<script lang=\"ts\" setup></script>\n<template>\n <div class=\"arco-spin\">\n <div class=\"arco-spin-icon\">\n <svg viewB"
},
{
"path": "src/renderer/layout/MyModal.vue",
"chars": 6241,
"preview": "<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nimport { useModalStore } from '../store'\nimport UserSpaceModal "
},
{
"path": "src/renderer/layout/MySplit.vue",
"chars": 2275,
"preview": "<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue'\nimport { useWinStore, WinState } from '../store'\n\nexport d"
},
{
"path": "src/renderer/layout/MySwitch.vue",
"chars": 1284,
"preview": "<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n props: { value: Boolean },\n"
},
{
"path": "src/renderer/layout/MySwitchTab.vue",
"chars": 4152,
"preview": "<script lang=\"ts\">\nimport { defineComponent, nextTick, PropType, ref, toRefs, watch } from 'vue'\n\nexport default defineC"
},
{
"path": "src/renderer/layout/MyTags.vue",
"chars": 2106,
"preview": "<script lang=\"ts\">\nimport message from '../utils/message'\nimport { defineComponent, PropType, ref } from 'vue'\n\nexport d"
},
{
"path": "src/renderer/layout/PageCode.vue",
"chars": 3772,
"preview": "<script lang=\"ts\">\nimport AliFile from '../aliapi/file'\nimport { useAppStore } from '../store'\nimport message from '../u"
},
{
"path": "src/renderer/layout/PageHelp.vue",
"chars": 1909,
"preview": "<script lang=\"ts\">\nimport { defineComponent, onMounted } from 'vue'\nimport { CreatMap, CreatObject, LoadObject } from '."
},
{
"path": "src/renderer/layout/PageImage.vue",
"chars": 15068,
"preview": "<script lang=\"ts\">\nimport { useAppStore } from '../store'\nimport { defineComponent, nextTick, onMounted, onUnmounted, re"
},
{
"path": "src/renderer/layout/PageLoading.vue",
"chars": 2165,
"preview": "<script setup lang=\"ts\"></script>\n<template>\n <div class=\"desktop-loading\">\n <div class=\"desktop-loading-container\">"
},
{
"path": "src/renderer/layout/PageMain.vue",
"chars": 18289,
"preview": "<script setup lang=\"ts\">\nimport { onMounted, onUnmounted, ref } from 'vue'\nimport { useAppStore, useKeyboardStore, Keybo"
},
{
"path": "src/renderer/layout/PageOffice.vue",
"chars": 1985,
"preview": "<script lang=\"ts\">\nimport { useAppStore } from '../store'\nimport { defineComponent, onMounted } from 'vue'\n\ndeclare name"
},
{
"path": "src/renderer/layout/PageVideo.vue",
"chars": 6690,
"preview": "<script lang=\"ts\">\nimport AliFile from '../aliapi/file'\nimport { useAppStore } from '../store'\nimport { defineComponent,"
},
{
"path": "src/renderer/layout/PageVideoXBT.vue",
"chars": 14204,
"preview": "<script lang=\"ts\">\nimport { IAliFileAudioMeta, IAliFileItem, IAliFileVideoMeta } from '../aliapi/alimodels'\nimport AliFi"
},
{
"path": "src/renderer/layout/PageWorker.vue",
"chars": 717,
"preview": "<script setup lang=\"ts\">\nconst handleHideClick = (_e: any) => {\n window.close()\n}\n</script>\n<template>\n <a-layout styl"
},
{
"path": "src/renderer/layout/pagemain.ts",
"chars": 4882,
"preview": "import ServerHttp from '../aliapi/server'\nimport { useAppStore, useFootStore, useSettingStore } from '../store'\nimport A"
},
{
"path": "src/renderer/main.ts",
"chars": 4337,
"preview": "import { createApp } from 'vue'\nimport App from './App.vue'\nimport ArcoVue from '@arco-design/web-vue'\nimport store, { u"
},
{
"path": "src/renderer/pan/PanLeft.vue",
"chars": 12870,
"preview": "<script setup lang=\"ts\">\nimport { computed, ref, watchEffect } from 'vue'\n\nimport { Tree as AntdTree } from 'ant-design-"
},
{
"path": "src/renderer/pan/PanRight.vue",
"chars": 44016,
"preview": "<!-- eslint-disable no-irregular-whitespace -->\n<script setup lang=\"ts\">\nimport { IAliGetFileModel } from '../aliapi/ali"
},
{
"path": "src/renderer/pan/index.vue",
"chars": 309,
"preview": "<script setup lang=\"ts\">\nimport MySplit from '../layout/MySplit.vue'\nimport PanLeft from './PanLeft.vue'\nimport PanRight"
},
{
"path": "src/renderer/pan/menus/DirLeftMenu.vue",
"chars": 3921,
"preview": "<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nimport { menuTrashSelectFile, menuCopySelectedFile, menuCreatSh"
},
{
"path": "src/renderer/pan/menus/DirTopPath.vue",
"chars": 3008,
"preview": "<script lang=\"ts\">\nimport { usePanTreeStore, useSettingStore } from '../../store'\nimport { defineComponent } from 'vue'\n"
},
{
"path": "src/renderer/pan/menus/FileRightMenu.vue",
"chars": 6627,
"preview": "<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { menuFavSelectFile, menuTrashSelectFile, menuCopySelec"
},
{
"path": "src/renderer/pan/menus/FileTopbtn.vue",
"chars": 5411,
"preview": "<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { menuDownload, menuFavSelectFile, menuTrashSelectFile,"
},
{
"path": "src/renderer/pan/menus/PanTopbtn.vue",
"chars": 2440,
"preview": "<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { handleUpload } from '../topbtns/topbtn'\n\nimport { mod"
},
{
"path": "src/renderer/pan/menus/TrashRightMenu.vue",
"chars": 1256,
"preview": "<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nimport { topRestoreSelectedFile, topRecoverSelectedFile, menuTr"
},
{
"path": "src/renderer/pan/menus/TrashTopbtn.vue",
"chars": 1329,
"preview": "<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nimport { topTrashDeleteAll, topRestoreSelectedFile, menuTrashSe"
},
{
"path": "src/renderer/pan/pandal.ts",
"chars": 12041,
"preview": "import { IAliGetDirModel } from '../aliapi/alimodels'\nimport AliFile from '../aliapi/file'\nimport AliDirFileList from '."
},
{
"path": "src/renderer/pan/panfilestore.ts",
"chars": 13348,
"preview": "import { defineStore } from 'pinia'\nimport { IAliGetFileModel } from '../aliapi/alimodels'\nimport { ArrayToMap } from '."
},
{
"path": "src/renderer/pan/pantreestore.ts",
"chars": 6228,
"preview": "import { defineStore } from 'pinia'\nimport { IAliGetDirModel } from '../aliapi/alimodels'\nimport { h } from 'vue'\nimport"
},
{
"path": "src/renderer/pan/topbtns/AlphaModal.vue",
"chars": 2089,
"preview": "<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue'\n\nexport default defineComponent({\n setup(props) {\n con"
},
{
"path": "src/renderer/pan/topbtns/ArchiveModal.vue",
"chars": 11285,
"preview": "<script lang=\"ts\">\nimport { computed, defineComponent, h, ref } from 'vue'\nimport message from '../../utils/message'\nimp"
},
{
"path": "src/renderer/pan/topbtns/ArchivePasswordModal.vue",
"chars": 3550,
"preview": "<script lang=\"ts\">\nimport message from '../../utils/message'\nimport { modalArchive, modalCloseAll } from '../../utils/mo"
},
{
"path": "src/renderer/pan/topbtns/CopyFileTreeModal.vue",
"chars": 13600,
"preview": "<script lang=\"ts\">\nimport { IAliGetFileModel } from '../../aliapi/alimodels'\nimport { modalCloseAll } from '../../utils/"
},
{
"path": "src/renderer/pan/topbtns/CreatNewDirModal.vue",
"chars": 5766,
"preview": "<script lang=\"ts\">\nimport AliFileCmd from '../../aliapi/filecmd'\nimport { usePanTreeStore, useSettingStore } from '../.."
},
{
"path": "src/renderer/pan/topbtns/CreatNewDirMultiModal.vue",
"chars": 1153,
"preview": "<script lang=\"ts\">\nimport { modalCloseAll } from '../../utils/modal'\nimport { defineComponent, ref } from 'vue'\n\nexport "
},
{
"path": "src/renderer/pan/topbtns/CreatNewFileModal.vue",
"chars": 4417,
"preview": "<script lang=\"ts\">\nimport AliUploadMem from '../../aliapi/uploadmem'\nimport { usePanTreeStore } from '../../store'\nimpor"
},
{
"path": "src/renderer/pan/topbtns/CreatNewShareLinkModal.vue",
"chars": 7772,
"preview": "<script lang=\"ts\">\nimport { IAliGetFileModel } from '../../aliapi/alimodels'\nimport { modalCloseAll } from '../../utils/"
},
{
"path": "src/renderer/pan/topbtns/DLNAPlayerModal.vue",
"chars": 5193,
"preview": "<script lang=\"ts\">\nimport AliFile from '../../aliapi/file'\nimport { usePanFileStore, usePanTreeStore } from '../../store"
},
{
"path": "src/renderer/pan/topbtns/DaoRuShareLinkModal.vue",
"chars": 4929,
"preview": "<script lang=\"ts\">\nimport AliShare from '../../aliapi/share'\nimport { getFromClipboard } from '../../utils/electronhelpe"
},
{
"path": "src/renderer/pan/topbtns/DaoRuShareLinkMultiModal.vue",
"chars": 4840,
"preview": "<script lang=\"ts\">\nimport AliShare from '../../aliapi/share'\nimport { getFromClipboard } from '../../utils/electronhelpe"
},
{
"path": "src/renderer/pan/topbtns/DownloadModal.vue",
"chars": 1525,
"preview": "<script lang=\"ts\">\nimport { modalCloseAll } from '../../utils/modal'\nimport { defineComponent, ref, reactive } from 'vue"
},
{
"path": "src/renderer/pan/topbtns/M3U8DownloadModal.vue",
"chars": 4985,
"preview": "<script lang=\"ts\">\nimport AliFile from '../../aliapi/file'\nimport { IVideoPreviewUrl } from '../../aliapi/models'\nimport"
},
{
"path": "src/renderer/pan/topbtns/RenameModal.vue",
"chars": 5268,
"preview": "<script lang=\"ts\">\nimport { IAliGetFileModel } from '../../aliapi/alimodels'\nimport AliFileCmd from '../../aliapi/filecm"
},
{
"path": "src/renderer/pan/topbtns/RenameMultiModal.vue",
"chars": 43708,
"preview": "<script lang=\"ts\">\nimport { modalCloseAll } from '../../utils/modal'\nimport { computed, defineComponent, h, reactive, re"
},
{
"path": "src/renderer/pan/topbtns/SearchPanModal.vue",
"chars": 7812,
"preview": "<script lang=\"ts\">\nimport { usePanTreeStore } from '../../store'\nimport message from '../../utils/message'\nimport { moda"
},
{
"path": "src/renderer/pan/topbtns/SelectPanDirModal.vue",
"chars": 10616,
"preview": "<script lang=\"ts\">\nimport { modalCloseAll } from '../../utils/modal'\nimport { computed, defineComponent, h, PropType, re"
},
{
"path": "src/renderer/pan/topbtns/ShuXingModal.vue",
"chars": 13420,
"preview": "<script lang=\"ts\">\nimport { IAliFileItem, IAliGetForderSizeModel } from '../../aliapi/alimodels'\nimport AliFile from '.."
},
{
"path": "src/renderer/pan/topbtns/ShuXingMultiModal.vue",
"chars": 1153,
"preview": "<script lang=\"ts\">\nimport { modalCloseAll } from '../../utils/modal'\nimport { defineComponent, ref } from 'vue'\n\nexport "
},
{
"path": "src/renderer/pan/topbtns/UploadModal.vue",
"chars": 4125,
"preview": "<script lang=\"ts\">\nimport { usePanTreeStore, useSettingStore } from '../../store'\nimport message from '../../utils/messa"
},
{
"path": "src/renderer/pan/topbtns/renamemulti.ts",
"chars": 21967,
"preview": "export interface TreeNodeData {\n key: string\n title: string\n rawtitle: string\n newtitle: string\n isLeaf: boolean\n "
},
{
"path": "src/renderer/pan/topbtns/topbtn.ts",
"chars": 19988,
"preview": "import { IAliGetFileModel } from '../../aliapi/alimodels'\nimport AliFile from '../../aliapi/file'\nimport AliFileCmd from"
},
{
"path": "src/renderer/pic/PicLeft.vue",
"chars": 1140,
"preview": "<script setup lang=\"ts\">\nimport 'ant-design-vue/es/tree/style/css'\nimport MySwitchTab from '../layout/MySwitchTab.vue'\ni"
},
{
"path": "src/renderer/pic/PicRight.vue",
"chars": 88,
"preview": "<script lang=\"ts\" setup></script>\n<template>\n <div></div>\n</template>\n\n<style></style>\n"
},
{
"path": "src/renderer/pic/index.vue",
"chars": 309,
"preview": "<script setup lang=\"ts\">\nimport MySplit from '../layout/MySplit.vue'\nimport PicLeft from './PicLeft.vue'\nimport PicRight"
},
{
"path": "src/renderer/rss/ScanDAL.ts",
"chars": 7509,
"preview": "import { h, Ref } from 'vue'\nimport AliDirList from '../aliapi/dirlist'\nimport { IAliGetDirModel } from '../aliapi/alimo"
},
{
"path": "src/renderer/rss/appsame/AppSame.vue",
"chars": 9313,
"preview": "<script setup lang=\"ts\">\nimport message from '../../utils/message'\nimport { humanSize } from '../../utils/format'\nimport"
},
{
"path": "src/renderer/rss/appsame/same.ts",
"chars": 4780,
"preview": "import AliHttp from '../../aliapi/alihttp'\nimport { IAliFileItem, IAliGetDirModel, IAliGetFileModel } from '../../aliapi"
},
{
"path": "src/renderer/rss/index.vue",
"chars": 3526,
"preview": "<script setup lang=\"ts\">\nimport { useAppStore } from '../store'\nimport RssScanClean from './rssscanclean/RssScanClean.vu"
},
{
"path": "src/renderer/rss/rssdrivecopy/RssDriveCopy.vue",
"chars": 10494,
"preview": "<script setup lang=\"ts\">\nimport message from '../../utils/message'\nimport { computed, reactive, ref, watch } from 'vue'\n"
},
{
"path": "src/renderer/rss/rssdrivecopy/drivecopy.ts",
"chars": 2084,
"preview": "import { IAliGetFileModel } from '../../aliapi/alimodels'\nimport AliFile from '../../aliapi/file'\nimport message from '."
},
{
"path": "src/renderer/rss/rssjiami/RssJiaMi.vue",
"chars": 6062,
"preview": "<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { useSettingStore } from '../../store'\nimport { Sleep } from '"
},
{
"path": "src/renderer/rss/rssjiami/jiami.ts",
"chars": 3134,
"preview": "import { FileSystemErrorMessage } from '../../utils/filehelper'\nimport DebugLog from '../../utils/debuglog'\nimport messa"
},
{
"path": "src/renderer/rss/rssrename/RssRename.vue",
"chars": 2578,
"preview": "<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { useSettingStore } from '../../store'\nimport message from '.."
},
{
"path": "src/renderer/rss/rssscanclean/RssScanClean.vue",
"chars": 9508,
"preview": "<script setup lang=\"ts\">\nimport message from '../../utils/message'\nimport { humanSize } from '../../utils/format'\nimport"
},
{
"path": "src/renderer/rss/rssscanclean/ScanClean.ts",
"chars": 8557,
"preview": "import AliHttp from '../../aliapi/alihttp'\nimport { IAliGetDirModel } from '../../aliapi/alimodels'\nimport { IAliDirBatc"
},
{
"path": "src/renderer/rss/rssscanenmpty/RssScanEnmpty.vue",
"chars": 7998,
"preview": "<script setup lang=\"ts\">\nimport message from '../../utils/message'\nimport { computed, ref, watch } from 'vue'\nimport MyL"
},
{
"path": "src/renderer/rss/rssscanenmpty/scanenmpty.ts",
"chars": 4388,
"preview": "import AliHttp from '../../aliapi/alihttp'\nimport { IAliGetDirModel } from '../../aliapi/alimodels'\nimport DebugLog from"
},
{
"path": "src/renderer/rss/rssscanpunish/RssScanPunish.vue",
"chars": 10329,
"preview": "<script setup lang=\"ts\">\nimport message from '../../utils/message'\nimport { humanSize } from '../../utils/format'\nimport"
},
{
"path": "src/renderer/rss/rssscanpunish/scanpunish.ts",
"chars": 9484,
"preview": "import AliHttp from '../../aliapi/alihttp'\nimport { IAliGetDirModel } from '../../aliapi/alimodels'\nimport { IAliDirBatc"
},
{
"path": "src/renderer/rss/rssscansame/RssScanSame.vue",
"chars": 9586,
"preview": "<script setup lang=\"ts\">\nimport message from '../../utils/message'\nimport { humanSize } from '../../utils/format'\nimport"
},
{
"path": "src/renderer/rss/rssscansame/scansame.ts",
"chars": 8575,
"preview": "import AliHttp from '../../aliapi/alihttp'\nimport { IAliGetDirModel } from '../../aliapi/alimodels'\nimport { IAliDirBatc"
},
{
"path": "src/renderer/rss/rssusercopy/RssUserCopy.vue",
"chars": 10501,
"preview": "<script setup lang=\"ts\">\nimport message from '../../utils/message'\nimport { computed, reactive, ref, watch } from 'vue'\n"
},
{
"path": "src/renderer/rss/rssusercopy/usercopy.ts",
"chars": 4233,
"preview": "import { IAliGetFileModel } from '../../aliapi/alimodels'\nimport AliFile from '../../aliapi/file'\nimport message from '."
},
{
"path": "src/renderer/rss/rssxima/RssXiMa.vue",
"chars": 4687,
"preview": "<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { useSettingStore } from '../../store'\nimport { Sleep } from '"
},
{
"path": "src/renderer/rss/rssxima/xima.ts",
"chars": 3133,
"preview": "import { FileSystemErrorMessage } from '../../utils/filehelper'\nimport DebugLog from '../../utils/debuglog'\nimport messa"
},
{
"path": "src/renderer/setting/SettingDebug.vue",
"chars": 5728,
"preview": "<script setup lang=\"ts\">\nimport useSettingStore from './settingstore'\nimport AppCache from '../utils/appcache'\nimport My"
},
{
"path": "src/renderer/setting/SettingDown.vue",
"chars": 5576,
"preview": "<script setup lang=\"ts\">\nimport useSettingStore from './settingstore'\nimport MySwitch from '../layout/MySwitch.vue'\ncons"
},
{
"path": "src/renderer/setting/SettingLog.vue",
"chars": 2304,
"preview": "<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport message from '../utils/message'\nimport DebugLog from '../"
},
{
"path": "src/renderer/setting/SettingPan.vue",
"chars": 7793,
"preview": "<script setup lang=\"ts\">\nimport useSettingStore from './settingstore'\nimport MySwitch from '../layout/MySwitch.vue'\ncons"
},
{
"path": "src/renderer/setting/SettingPlay.vue",
"chars": 8410,
"preview": "<script setup lang=\"ts\">\nimport useSettingStore from './settingstore'\nimport MySwitch from '../layout/MySwitch.vue'\ncons"
},
{
"path": "src/renderer/setting/SettingProxy.vue",
"chars": 5403,
"preview": "<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport useSettingStore from './settingstore'\nimport MySwitch from '.."
},
{
"path": "src/renderer/setting/SettingUI.vue",
"chars": 1973,
"preview": "<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport useSettingStore from './settingstore'\nimport MySwitch from '.."
},
{
"path": "src/renderer/setting/SettingUpload.vue",
"chars": 6267,
"preview": "<script setup lang=\"ts\">\nimport useSettingStore from './settingstore'\nimport MySwitch from '../layout/MySwitch.vue'\nimpo"
},
{
"path": "src/renderer/setting/ShutDown.vue",
"chars": 2044,
"preview": "<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue'\nimport { useAppStore } from '../store'\n\nlet IsOnShutDownin"
},
{
"path": "src/renderer/setting/index.vue",
"chars": 6588,
"preview": "<script setup lang=\"ts\">\nimport { computed, onMounted, onUnmounted } from 'vue'\nimport SettingPlay from './SettingPlay.v"
},
{
"path": "src/renderer/setting/settingstore.ts",
"chars": 12011,
"preview": "import { defineStore } from 'pinia'\nimport DebugLog from '../utils/debuglog'\nimport { getResourcesPath } from '../utils/"
},
{
"path": "src/renderer/share/following/FollowingDAL.ts",
"chars": 4548,
"preview": "import AliFollowing from '../../aliapi/following'\nimport { IAliOtherFollowingModel } from '../../aliapi/alimodels'\nimpor"
},
{
"path": "src/renderer/share/following/MyFollowingRight.vue",
"chars": 10654,
"preview": "<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { useAppStore, useMyFollowingStore, useKeyboardStore, Keyboard"
},
{
"path": "src/renderer/share/following/MyFollowingStore.ts",
"chars": 6913,
"preview": "import fuzzysort from 'fuzzysort'\nimport { defineStore } from 'pinia'\nimport { IAliMyFollowingModel } from '../../aliapi"
},
{
"path": "src/renderer/share/following/OtherFollowingRight.vue",
"chars": 7808,
"preview": "<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { useAppStore, useOtherFollowingStore, FollowingState, useKeyb"
},
{
"path": "src/renderer/share/following/OtherFollowingStore.ts",
"chars": 1020,
"preview": "import { defineStore } from 'pinia'\nimport { IAliOtherFollowingModel } from '../../aliapi/alimodels'\n\nexport declare int"
},
{
"path": "src/renderer/share/index.vue",
"chars": 2768,
"preview": "<script setup lang=\"ts\">\nimport ShareSiteRight from './share/ShareSiteRight.vue'\nimport MyShareRight from './share/MySha"
},
{
"path": "src/renderer/share/share/EditShareLinkModal.vue",
"chars": 7368,
"preview": "<script lang=\"ts\">\nimport { defineComponent, PropType, ref } from 'vue'\nimport dayjs from 'dayjs'\nimport { useMyShareSto"
},
{
"path": "src/renderer/share/share/MyShareRight.vue",
"chars": 15006,
"preview": "<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { IAliShareItem } from '../../aliapi/alimodels'\nimport { useAp"
},
{
"path": "src/renderer/share/share/MyShareStore.ts",
"chars": 9089,
"preview": "import fuzzysort from 'fuzzysort'\nimport { defineStore } from 'pinia'\nimport { IAliShareItem } from '../../aliapi/alimod"
},
{
"path": "src/renderer/share/share/OtherShareRight.vue",
"chars": 12197,
"preview": "<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { useAppStore, useKeyboardStore, KeyboardState, useOtherShareS"
},
{
"path": "src/renderer/share/share/OtherShareStore.ts",
"chars": 7153,
"preview": "import fuzzysort from 'fuzzysort'\nimport { defineStore } from 'pinia'\nimport { GetSelectedList, GetFocusNext, SelectAll,"
},
{
"path": "src/renderer/share/share/ShareDAL.ts",
"chars": 5499,
"preview": "import AliShareList from '../../aliapi/sharelist'\nimport DB from '../../utils/db'\nimport { humanDateTime, humanExpiratio"
},
{
"path": "src/renderer/share/share/ShareSiteRight.vue",
"chars": 1421,
"preview": "<script setup lang=\"ts\">\nimport { useServerStore } from '../../store'\nimport { openExternal } from '../../utils/electron"
},
{
"path": "src/renderer/share/share/ShowShareLinkModal.vue",
"chars": 15740,
"preview": "<script lang=\"ts\">\nimport { computed, defineComponent, h, PropType, ref } from 'vue'\nimport dayjs from 'dayjs'\nimport me"
},
{
"path": "src/renderer/store/appstore.ts",
"chars": 6004,
"preview": "import DebugLog from '../utils/debuglog'\nimport { onHideRightMenu } from '../utils/keyboardhelper'\nimport { defineStore "
},
{
"path": "src/renderer/store/footstore.ts",
"chars": 5211,
"preview": "import { ApiGetAsyncTask, ApiGetAsyncTaskUnzip, AsyncType, Drive } from '../aliapi/utils'\nimport PanDAL from '../pan/pan"
},
{
"path": "src/renderer/store/index.ts",
"chars": 1703,
"preview": "import { createPinia } from 'pinia'\nimport useAppStore from './appstore'\nimport useKeyboardStore from './keyboardstore'\n"
},
{
"path": "src/renderer/store/keyboardstore.ts",
"chars": 1118,
"preview": "import { defineStore } from 'pinia'\n\nexport interface KeyboardMessage {\n \n Code: string\n \n Key: string\n Ctrl: boole"
}
]
// ... and 50 more files (download for full content)
About this extraction
This page contains the full source code of the liupan1890/aliyunpan GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 250 files (2.1 MB), approximately 572.7k tokens, and a symbol index with 1070 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.