Skip to content

Commit d9b2c8e

Browse files
committed
Added shortcut API endpoint without metadata type (#149)
1 parent f07b00a commit d9b2c8e

3 files changed

Lines changed: 32 additions & 11 deletions

File tree

api/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ All the endpoints will respond with `200` if successful or:
2222

2323
### Metadata
2424
- `POST \metadata\{type}\{uri}` Retrieve metadata. `type` can be one of `episode`, `track`, `album`, `show`, `artist` or `playlist`, `uri` is the standard Spotify uri.
25+
- `POST \metadata\{uri}` Retrieve metadata. `uri` is the standard Spotify uri, the type will be guessed based on the provided uri.
2526

2627
### Search
2728
- `POST \search\{query}` Make a search.
@@ -50,3 +51,5 @@ The currently available events are:
5051
`curl -X POST -d "uri=spotify:track:xxxxxxxxxxxxxxxxxxxxxx&play=true" http://localhost:24879/player/load`
5152

5253
`curl -X POST http://localhost:24879/metadata/track/spotify:track:xxxxxxxxxxxxxxxxxxxxxx`
54+
55+
`curl -X POST http://localhost:24879/metadata/spotify:track:xxxxxxxxxxxxxxxxxxxxxx`

api/src/main/java/xyz/gianlu/librespot/api/ApiServer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ public ApiServer(@NotNull ApiConfiguration conf, @NotNull SessionWrapper wrapper
2424

2525
handler = new RoutingHandler();
2626
handler.post("/player/{cmd}", new PlayerHandler(wrapper))
27-
.post("/metadata/{type}/{uri}", new MetadataHandler(wrapper))
27+
.post("/metadata/{type}/{uri}", new MetadataHandler(wrapper, true))
28+
.post("/metadata/{uri}", new MetadataHandler(wrapper, false))
2829
.post("/search/{query}", new SearchHandler(wrapper))
2930
.post("/token/{scope}", new TokensHandler(wrapper))
3031
.get("/events", events);

api/src/main/java/xyz/gianlu/librespot/api/handlers/MetadataHandler.java

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@
2424
*/
2525
public final class MetadataHandler extends AbsSessionHandler {
2626
private static final Logger LOGGER = Logger.getLogger(MetadataHandler.class);
27+
private final boolean needsType;
2728

28-
public MetadataHandler(@NotNull SessionWrapper wrapper) {
29+
public MetadataHandler(@NotNull SessionWrapper wrapper, boolean needsType) {
2930
super(wrapper);
31+
this.needsType = needsType;
3032
}
3133

3234
@Override
@@ -38,24 +40,30 @@ public void handleRequest(@NotNull HttpServerExchange exchange, @NotNull Session
3840
}
3941

4042
Map<String, Deque<String>> params = Utils.readParameters(exchange);
43+
String uri = Utils.getFirstString(params, "uri");
44+
if (uri == null) {
45+
Utils.invalidParameter(exchange, "uri");
46+
return;
47+
}
48+
49+
MetadataType type;
4150
String typeStr = Utils.getFirstString(params, "type");
4251
if (typeStr == null) {
43-
Utils.invalidParameter(exchange, "type");
44-
return;
52+
if (needsType) {
53+
Utils.invalidParameter(exchange, "type");
54+
return;
55+
}
56+
57+
type = MetadataType.guessTypeFromUri(uri);
58+
} else {
59+
type = MetadataType.parse(typeStr);
4560
}
4661

47-
MetadataType type = MetadataType.parse(typeStr);
4862
if (type == null) {
4963
Utils.invalidParameter(exchange, "type");
5064
return;
5165
}
5266

53-
String uri = Utils.getFirstString(params, "uri");
54-
if (uri == null) {
55-
Utils.invalidParameter(exchange, "uri");
56-
return;
57-
}
58-
5967
try {
6068
JsonObject obj = handle(session, type, uri);
6169
exchange.getResponseSender().send(obj.toString());
@@ -126,5 +134,14 @@ private static MetadataType parse(@NotNull String val) {
126134

127135
return null;
128136
}
137+
138+
@Nullable
139+
public static MetadataType guessTypeFromUri(@NotNull String uri) {
140+
for (MetadataType type : values())
141+
if (uri.contains(type.val))
142+
return type;
143+
144+
return null;
145+
}
129146
}
130147
}

0 commit comments

Comments
 (0)