| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import AsyncStorage from '@react-native-async-storage/async-storage';
- import { Song } from '@/types/song';
- export const addToFavoritesStorage = async (song: Song): Promise<boolean> => {
- try {
- const stored = await AsyncStorage.getItem('favorites');
- const parsed: Song[] = stored ? JSON.parse(stored) : [];
- const updatedFavorites = [...parsed, song];
- await AsyncStorage.setItem('favorites', JSON.stringify(updatedFavorites));
- return true;
- } catch (error) {
- console.error('Error adding to favorites:', error);
- return false;
- }
- };
- export interface FavoriteFolder {
- id: string;
- name: string;
- songs: Song[];
- expanded: boolean;
- }
- const STORAGE_KEY = 'favoritesFolders';
- // 폴더 저장
- export const saveFavoriteFolders = async (folders: FavoriteFolder[]): Promise<void> => {
- try {
- await AsyncStorage.setItem(STORAGE_KEY, JSON.stringify(folders));
- } catch (error) {
- console.error('Error saving favorite folders:', error);
- }
- };
- // 폴더 불러오기
- export const loadFavoriteFolders = async (): Promise<FavoriteFolder[]> => {
- try {
- const stored = await AsyncStorage.getItem(STORAGE_KEY);
- return stored ? JSON.parse(stored) : [];
- } catch (error) {
- console.error('Error loading favorite folders:', error);
- return [];
- }
- };
- // 폴더 초기화
- export const clearFavoriteFolders = async (): Promise<void> => {
- try {
- await AsyncStorage.removeItem(STORAGE_KEY);
- } catch (error) {
- console.error('Error clearing favorite folders:', error);
- }
- };
- // 🔹 폴더에 노래 추가
- export const addSongToFolder = async (
- folderId: string,
- song: Song
- ): Promise<FavoriteFolder[] | null> => {
- try {
- const folders = await loadFavoriteFolders();
- const updated = folders.map((folder) => {
- if (folder.id === folderId) {
- const isDuplicate = folder.songs.some((s) => s.no === song.no);
- if (!isDuplicate) {
- return { ...folder, songs: [...folder.songs, song] };
- }
- }
- return folder;
- });
- await saveFavoriteFolders(updated);
- return updated;
- } catch (error) {
- console.error('Error adding song to folder:', error);
- return null;
- }
- };
- // 🔸 폴더에서 노래 삭제
- export const removeSongFromFolder = async (
- folderId: string,
- songNo: string
- ): Promise<FavoriteFolder[] | null> => {
- try {
- const folders = await loadFavoriteFolders();
- const updated = folders.map((folder) => {
- if (folder.id === folderId) {
- return {
- ...folder,
- songs: folder.songs.filter((s) => s.no !== songNo),
- };
- }
- return folder;
- });
- await saveFavoriteFolders(updated);
- return updated;
- } catch (error) {
- console.error('Error removing song from folder:', error);
- return null;
- }
- };
|