Skip to content

Commit db0811d

Browse files
author
li-guohao
committed
feat: 支持直接复制AList浏览器路径而不是相对路径进行导入。
1 parent 9c4010b commit db0811d

4 files changed

Lines changed: 31 additions & 11 deletions

File tree

CHANGELOG.MD

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
更新日志文档,版本顺序从新到旧,最新版本在最前(上)面。
44

5+
# 0.12.2
6+
7+
## 优化
8+
9+
- alist路径支持直接复制浏览器的URL,而无需去特意复制相对路径。
10+
511
# 0.12.1
612

713
## 新特性

console/src/views/AListControl.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const http = axios.create({
1212
1313
const doPostImportPath = () => {
1414
if (!path.value) {
15-
window.alert('请输入alist的相对路径,比如:/PKPK/LP-Raws/');
15+
window.alert('请输入alist的浏览器路径,比如:https://domain.com/PKPK/LP-Raws');
1616
return;
1717
}
1818
// basic64 编码

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
group=run.ikaros.plugin.alist
22
description=A ikaros plugin for alist.
3-
version=0.12.1
3+
version=0.12.2

src/main/java/run/ikaros/plugin/alist/AListEndpoint.java

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,23 @@
1010
import org.springframework.web.reactive.function.server.ServerResponse;
1111
import reactor.core.publisher.Mono;
1212
import run.ikaros.api.custom.GroupVersionKind;
13-
import run.ikaros.api.custom.ReactiveCustomClient;
1413
import run.ikaros.api.endpoint.CustomEndpoint;
1514
import run.ikaros.api.infra.utils.StringUtils;
1615

1716
import java.net.URLDecoder;
18-
import java.nio.charset.Charset;
1917
import java.nio.charset.StandardCharsets;
2018
import java.util.Arrays;
2119
import java.util.Base64;
2220
import java.util.Objects;
2321

2422
import static org.springdoc.core.fn.builders.content.Builder.contentBuilder;
25-
import static org.springdoc.core.fn.builders.encoding.Builder.encodingBuilder;
26-
import static org.springdoc.core.fn.builders.schema.Builder.schemaBuilder;
2723

2824
@Slf4j
2925
@Component
3026
public class AListEndpoint implements CustomEndpoint {
3127

3228
private GroupVersionKind groupVersionKind =
33-
new GroupVersionKind("plugin.ikaros.run", "v1alpha1", AListPlugin.NAME);
29+
new GroupVersionKind("plugin.ikaros.run", "v1alpha1", AListPlugin.NAME);
3430

3531
private final AListClient aListClient;
3632

@@ -41,8 +37,8 @@ public AListEndpoint(AListClient aListClient) {
4137
@Override
4238
public RouterFunction<ServerResponse> endpoint() {
4339
var tag = groupVersionKind.group()
44-
+ "/" + groupVersionKind.version()
45-
+ "/" + groupVersionKind.kind();
40+
+ "/" + groupVersionKind.version()
41+
+ "/" + groupVersionKind.kind();
4642
return SpringdocRouteBuilder.route()
4743
.POST("/alist/import", this::doImportFilesFromAList,
4844
builder -> builder.operationId("ImportAlistFiles")
@@ -53,7 +49,7 @@ public RouterFunction<ServerResponse> endpoint() {
5349
.content(contentBuilder()
5450
.mediaType(MediaType.APPLICATION_JSON_VALUE))
5551
.implementation(AListImportPostBody.class)))
56-
.build();
52+
.build();
5753
}
5854

5955
Mono<ServerResponse> doImportFilesFromAList(ServerRequest request) {
@@ -62,8 +58,10 @@ Mono<ServerResponse> doImportFilesFromAList(ServerRequest request) {
6258
.map(AListImportPostBody::getPath)
6359
.map(path -> new String(Base64.getDecoder().decode(path), StandardCharsets.UTF_8))
6460
.map(path -> URLDecoder.decode(path, StandardCharsets.UTF_8))
65-
.doOnSuccess(s -> log.debug("paths: {}", s))
61+
.doOnSuccess(s -> log.debug("path: {}", s))
6662
.filter(StringUtils::isNotBlank)
63+
.flatMap(this::removeHttpPrefixIfExists)
64+
.doOnSuccess(s -> log.debug("relative path: {}", s))
6765
.map(path -> Arrays.stream(path.split("/")).filter(StringUtils::isNotBlank).toList())
6866
.doOnSuccess(strings -> log.debug("strings size: {}", strings.size()))
6967
.filter(Objects::nonNull)
@@ -73,6 +71,22 @@ Mono<ServerResponse> doImportFilesFromAList(ServerRequest request) {
7371
.switchIfEmpty(ServerResponse.notFound().build());
7472
}
7573

74+
/**
75+
* 支持直接复制AList浏览器URL,而无需去区分是不是相对路径。
76+
*
77+
* @param path 浏览器URL
78+
* @return 相对路径
79+
*/
80+
private Mono<String> removeHttpPrefixIfExists(String path) {
81+
if (path.startsWith("http://") || path.startsWith("https://")) {
82+
return aListClient.getToken()
83+
.map(AListToken::getUrl)
84+
.map(url -> path.replace(url, ""))
85+
.map(p -> p.startsWith("/") ? p : "/" + p);
86+
}
87+
return Mono.just(path);
88+
}
89+
7690
@Override
7791
public GroupVersionKind groupVersionKind() {
7892
return groupVersionKind;

0 commit comments

Comments
 (0)