search.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. const API = require("./API/API");
  2. const api = API();
  3. function formatUtcTime(v) { // 时间格式化
  4. if (!v) {
  5. return ''
  6. }
  7. let date = new Date(v);
  8. date = new Date(date.valueOf());
  9. return date.getFullYear() +
  10. "-" + ((date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1)) +
  11. "-" + (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) +
  12. " " + (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) +
  13. ":" + (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) +
  14. ":" + (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
  15. }
  16. async function attribute(m) { // 属性
  17. var info = await api.property(m.id, false, cookie);
  18. $ui.showCode(`文件名: ${m.name}\n文件大小: ${(info.size/1024/1024).toFixed(2)}M\n创建时间: ${formatUtcTime(info.created_at)}\n更新时间: ${formatUtcTime(info.updated_at)}\n查询时间: ${formatUtcTime(info.query_date)}\n储存节点: ${info.policy}`);
  19. }
  20. async function make_share(m) { // 分享文件、分享文件夹
  21. var new_pwd = "";
  22. var char = 'abcdefghijklmnopqrstuvwxyz1234567890';
  23. for (var i = 0; i < 6; i++) {
  24. j = Math.floor(Math.random() * char.length);
  25. new_pwd += char.charAt(j);
  26. }
  27. $ui.toast("已随机生成密码, 可自行修改");
  28. var password = await $input.text({
  29. title: '输入分享密码',
  30. hint: "分享密码",
  31. value: new_pwd
  32. })
  33. if (password != null) {
  34. var data = await api.share(m.id, false, password, true, 0, cookie);
  35. $ui.toast("分享成功");
  36. $ui.showCode(`链接: ${data}\n密码: ${password}`);
  37. } else {
  38. $ui.toast("取消分享");
  39. }
  40. }
  41. async function file_rename(m) { // 重新命名文件
  42. var new_name = await $input.text({
  43. title: '修改文件名',
  44. hint: "新文件名",
  45. value: m.name
  46. })
  47. var data = await api.rename(m.id, true, new_name, cookie);
  48. if (data) {
  49. $ui.toast("重新命名成功!");
  50. } else {
  51. $ui.toast("重新命名失败!");
  52. }
  53. }
  54. async function file_down(m) { // 文件下载
  55. var url = await api.download(m.id, cookie);
  56. if (url != false) {
  57. $ui.browser(url);
  58. $ui.toast("开始下载...");
  59. } else {
  60. $ui.toast("获取失败");
  61. }
  62. }
  63. async function file_delete(m) { // 删除文件
  64. var data = await object_delete(m.id, true, cookie);
  65. if (data) {
  66. $ui.toast("删除文件成功!");
  67. } else {
  68. $ui.toast("删除文件失败!");
  69. }
  70. }
  71. module.exports = {
  72. type: 'list',
  73. beforeCreate() {
  74. // cookie = `cloudreve-session=${$prefs.get("moCookie")}`;
  75. getCookie();
  76. },
  77. async fetch({args}) {
  78. var list = await api.search(args.keyword, cookie);
  79. this.title = `搜索 “${args.keyword}” 如下:`;
  80. var data = [];
  81. if (list != false) {
  82. data = list.map(m => {
  83. return {
  84. title: m.name,
  85. onClick: async () => {
  86. var type = ['.flv', '.mp4', '.ts'];
  87. var video = false;
  88. type.forEach(f => {m.name.includes(f) ? video=true : null});
  89. if (video) {
  90. var url = await api.preview(m.id, cookie);
  91. $router.to($route('@video', {url: url, title: m.name}));
  92. } else {
  93. $ui.toast("不是视频");
  94. }
  95. },
  96. onLongClick: async () => {
  97. var selected = await $input.select({
  98. title: '选择哪一个',
  99. options: [
  100. {title: '文件下载', fun: file_down},
  101. {title: '重新命名', fun: file_rename},
  102. {title: '分享文件', fun: make_share},
  103. {title: '删除文件', fun: file_delete},
  104. {title: '属性', fun: attribute},
  105. ]
  106. })
  107. selected != null ? selected.fun(m) : null;
  108. }
  109. }
  110. })
  111. }
  112. if (data.length == 0) {
  113. data.splice(0, 0, {
  114. title: '没有文件',
  115. style: 'category'
  116. })
  117. } else {
  118. data.splice(0, 0, {
  119. title: `搜索 “${args.keyword}” 如下 (单点预览、长按更多操作)`,
  120. style: 'category'
  121. })
  122. }
  123. return data;
  124. }
  125. }