feat: 添加收藏歌曲
This commit is contained in:
parent
01f7a19de7
commit
35695714ac
@ -1,7 +1,11 @@
|
||||
"use server";
|
||||
|
||||
import {
|
||||
InternetProviderLyricSearchResponse,
|
||||
getSearchResults,
|
||||
} from "@/lib/actions/lyrics";
|
||||
import { LyricSource } from "@/lib/types";
|
||||
import { cookies } from "next/headers";
|
||||
|
||||
export async function searchSongs(
|
||||
_currentState: InternetProviderLyricSearchResponse[],
|
||||
@ -15,3 +19,44 @@ export async function searchSongs(
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
export async function addSong(
|
||||
_: unknown,
|
||||
item: InternetProviderLyricSearchResponse
|
||||
): Promise<unknown> {
|
||||
const token = cookies().get("token");
|
||||
await fetch("https://tachy.daoyoucloud.com/api/songs:create", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"X-App": "danmu-sim",
|
||||
"X-Authenticator": "basic",
|
||||
authorization: "Bearer " + token?.value,
|
||||
"content-type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
artist: item.artist,
|
||||
name: item.name,
|
||||
source: LyricSource.NETEASE,
|
||||
source_id: item.id,
|
||||
}),
|
||||
});
|
||||
const params = new URLSearchParams();
|
||||
params.append('pageSize', '99999');
|
||||
params.append('filter', JSON.stringify({"$and":[{"createdBy":{"id":{"$eq":"{{$user.id}}"}}}]}))
|
||||
const songs = await fetch("https://tachy.daoyoucloud.com/api/songs:list?" + params.toString(), {
|
||||
method: "GET",
|
||||
headers: {
|
||||
"X-App": "danmu-sim",
|
||||
"X-Authenticator": "basic",
|
||||
authorization: "Bearer " + token?.value,
|
||||
"content-type": "application/json",
|
||||
},
|
||||
});
|
||||
const result = await songs.json();
|
||||
console.log(result.data);
|
||||
return result?.data;
|
||||
}
|
||||
|
||||
export async function listSongs() {
|
||||
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { useFormState } from "react-dom";
|
||||
import { searchSongs } from "./actions";
|
||||
import { addSong, searchSongs } from "./actions";
|
||||
|
||||
export default function SearchForm({
|
||||
className,
|
||||
@ -9,6 +9,7 @@ export default function SearchForm({
|
||||
className?: string | undefined;
|
||||
}) {
|
||||
const [items, dispatch] = useFormState(searchSongs, []);
|
||||
const [_, dispatchAdd] = useFormState(addSong, undefined);
|
||||
return (
|
||||
<form className={className} action={dispatch}>
|
||||
<input
|
||||
@ -27,7 +28,12 @@ export default function SearchForm({
|
||||
<span>
|
||||
{item.name} - {item.artist}
|
||||
</span>
|
||||
<button className="text-green-500 hover:text-green-700">
|
||||
<button
|
||||
className="text-green-500 hover:text-green-700"
|
||||
onClick={() => {
|
||||
dispatchAdd(item);
|
||||
}}
|
||||
>
|
||||
添加
|
||||
</button>
|
||||
</div>
|
||||
|
@ -2,16 +2,11 @@
|
||||
|
||||
import Fuse, { type IFuseOptions } from "fuse.js";
|
||||
import axios, { type AxiosResponse } from "axios";
|
||||
import { LyricSource } from "../types";
|
||||
|
||||
const SEARCH_URL = "https://music.163.com/api/search/get";
|
||||
const LYRICS_URL = "https://music.163.com/api/song/lyric";
|
||||
|
||||
enum LyricSource {
|
||||
GENIUS = "Genius",
|
||||
LRCLIB = "lrclib.net",
|
||||
NETEASE = "NetEase",
|
||||
}
|
||||
|
||||
export interface InternetProviderLyricSearchResponse {
|
||||
artist: string;
|
||||
id: string;
|
||||
|
7
lib/types.ts
Normal file
7
lib/types.ts
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
export enum LyricSource {
|
||||
GENIUS = "Genius",
|
||||
LRCLIB = "lrclib.net",
|
||||
NETEASE = "NetEase",
|
||||
QQMUSIC = "QQMusic",
|
||||
}
|
Loading…
Reference in New Issue
Block a user