Skip to content

Commit 4e205c3

Browse files
CopilotSnozxyx
andcommitted
Remove all mock data and implement clean API client following tatakai-app architecture
Co-authored-by: Snozxyx <150821778+Snozxyx@users.noreply.github.com>
1 parent 3cd10f8 commit 4e205c3

File tree

3 files changed

+34
-541
lines changed

3 files changed

+34
-541
lines changed

tatakai-webos-app/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ <h3>Remote Control Guide</h3>
193193

194194
<!-- Scripts -->
195195
<script src="js/webos-api.js"></script>
196-
<script src="js/demo-api.js"></script>
196+
<script src="js/api-client.js"></script>
197197
<script src="js/navigation.js"></script>
198198
<script src="js/ui-manager.js"></script>
199199
<script src="js/video-player.js"></script>

tatakai-webos-app/js/api-client.js

Lines changed: 33 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
/**
2-
* API Client for HiAnime API
3-
* Handles all API calls to the backend
2+
* Tatakai Anime API Client
3+
* Production API client following tatakai-app architecture
44
*/
5-
class AnimeAPI {
5+
class TatakaiAnimeAPI {
66
static BASE_URL = 'https://aniwatch-api-taupe-eight.vercel.app/api/v2/hianime';
77

88
/**
9-
* Generic fetch wrapper with error handling
9+
* Generic fetch wrapper for API calls
1010
*/
1111
static async fetchAPI(endpoint, options = {}) {
1212
try {
@@ -16,211 +16,96 @@ class AnimeAPI {
1616
const response = await fetch(url, {
1717
headers: {
1818
'Accept': 'application/json',
19-
'User-Agent': 'Mozilla/5.0 (Web0S; rv:1.0) Gecko/20100101 Firefox/1.0',
19+
'User-Agent': 'Mozilla/5.0 (Web0S; Linux; SmartTV) Tatakai/1.0.0',
2020
...options.headers
2121
},
2222
...options
2323
});
2424

2525
if (!response.ok) {
26+
console.error(`HTTP error! status: ${response.status}`);
2627
throw new Error(`HTTP error! status: ${response.status}`);
2728
}
2829

2930
const data = await response.json();
30-
return data;
31+
32+
// Transform the response to match our expected structure
33+
const transformedData = {
34+
success: data.status === 200,
35+
data: data.data || data,
36+
status: data.status
37+
};
38+
39+
return transformedData;
3140
} catch (error) {
3241
console.error('API Error:', error);
33-
throw error;
42+
throw new Error(`Failed to fetch data: ${error.message}`);
3443
}
3544
}
3645

3746
/**
3847
* Get home page data
3948
*/
4049
static async getHomePage() {
41-
try {
42-
const data = await this.fetchAPI('/home');
43-
return data;
44-
} catch (error) {
45-
console.error('Error fetching home page:', error);
46-
throw error;
47-
}
50+
return await this.fetchAPI('/home');
4851
}
4952

5053
/**
5154
* Search anime
5255
*/
5356
static async searchAnime(query, page = 1, filters = {}) {
54-
try {
55-
let endpoint = `/search?q=${encodeURIComponent(query)}&page=${page}`;
56-
57-
// Add filters if provided
58-
if (filters.type) endpoint += `&type=${filters.type}`;
59-
if (filters.status) endpoint += `&status=${filters.status}`;
60-
if (filters.genres) endpoint += `&genres=${filters.genres}`;
61-
if (filters.sort) endpoint += `&sort=${filters.sort}`;
62-
if (filters.season) endpoint += `&season=${filters.season}`;
63-
if (filters.language) endpoint += `&language=${filters.language}`;
64-
if (filters.rated) endpoint += `&rated=${filters.rated}`;
65-
if (filters.start_date) endpoint += `&start_date=${filters.start_date}`;
66-
if (filters.end_date) endpoint += `&end_date=${filters.end_date}`;
67-
if (filters.score) endpoint += `&score=${filters.score}`;
68-
69-
const data = await this.fetchAPI(endpoint);
70-
return data;
71-
} catch (error) {
72-
console.error('Error searching anime:', error);
73-
throw error;
74-
}
75-
}
76-
77-
/**
78-
* Get search suggestions
79-
*/
80-
static async getSearchSuggestions(query) {
81-
try {
82-
const data = await this.fetchAPI(`/search/suggestion?q=${encodeURIComponent(query)}`);
83-
return data;
84-
} catch (error) {
85-
console.error('Error fetching search suggestions:', error);
86-
throw error;
87-
}
57+
let endpoint = `/search?q=${encodeURIComponent(query)}&page=${page}`;
58+
59+
// Add filters if provided
60+
if (filters.type) endpoint += `&type=${filters.type}`;
61+
if (filters.status) endpoint += `&status=${filters.status}`;
62+
if (filters.genres) endpoint += `&genres=${filters.genres}`;
63+
64+
return await this.fetchAPI(endpoint);
8865
}
8966

9067
/**
9168
* Get anime details
9269
*/
9370
static async getAnimeInfo(animeId) {
94-
try {
95-
const data = await this.fetchAPI(`/anime/${animeId}`);
96-
return data;
97-
} catch (error) {
98-
console.error('Error fetching anime info:', error);
99-
throw error;
100-
}
71+
return await this.fetchAPI(`/anime/${animeId}`);
10172
}
10273

10374
/**
10475
* Get anime episodes
10576
*/
10677
static async getAnimeEpisodes(animeId) {
107-
try {
108-
const data = await this.fetchAPI(`/anime/${animeId}/episodes`);
109-
return data;
110-
} catch (error) {
111-
console.error('Error fetching anime episodes:', error);
112-
throw error;
113-
}
78+
return await this.fetchAPI(`/anime/${animeId}/episodes`);
11479
}
11580

11681
/**
11782
* Get episode servers
11883
*/
11984
static async getEpisodeServers(episodeId) {
120-
try {
121-
const data = await this.fetchAPI(`/episode/servers?animeEpisodeId=${encodeURIComponent(episodeId)}`);
122-
return data;
123-
} catch (error) {
124-
console.error('Error fetching episode servers:', error);
125-
throw error;
126-
}
85+
return await this.fetchAPI(`/episode/servers?animeEpisodeId=${encodeURIComponent(episodeId)}`);
12786
}
12887

12988
/**
13089
* Get episode streaming sources
13190
*/
13291
static async getEpisodeSources(episodeId, server = 'hd-1', category = 'sub') {
133-
try {
134-
const data = await this.fetchAPI(`/episode/sources?animeEpisodeId=${encodeURIComponent(episodeId)}&server=${server}&category=${category}`);
135-
return data;
136-
} catch (error) {
137-
console.error('Error fetching episode sources:', error);
138-
throw error;
139-
}
92+
return await this.fetchAPI(`/episode/sources?animeEpisodeId=${encodeURIComponent(episodeId)}&server=${encodeURIComponent(server)}&category=${category}`);
14093
}
14194

14295
/**
14396
* Get anime by category
14497
*/
14598
static async getAnimeByCategory(category, page = 1) {
146-
try {
147-
const data = await this.fetchAPI(`/category/${category}?page=${page}`);
148-
return data;
149-
} catch (error) {
150-
console.error('Error fetching anime by category:', error);
151-
throw error;
152-
}
99+
return await this.fetchAPI(`/category/${category}?page=${page}`);
153100
}
154101

155102
/**
156103
* Get anime by genre
157104
*/
158105
static async getAnimeByGenre(genre, page = 1) {
159-
try {
160-
const data = await this.fetchAPI(`/genre/${genre}?page=${page}`);
161-
return data;
162-
} catch (error) {
163-
console.error('Error fetching anime by genre:', error);
164-
throw error;
165-
}
166-
}
167-
168-
/**
169-
* Get anime by producer
170-
*/
171-
static async getAnimeByProducer(producer, page = 1) {
172-
try {
173-
const data = await this.fetchAPI(`/producer/${producer}?page=${page}`);
174-
return data;
175-
} catch (error) {
176-
console.error('Error fetching anime by producer:', error);
177-
throw error;
178-
}
179-
}
180-
181-
/**
182-
* Get anime A-Z list
183-
*/
184-
static async getAnimeAZList(sortOption = 'all', page = 1) {
185-
try {
186-
const data = await this.fetchAPI(`/azlist/${sortOption}?page=${page}`);
187-
return data;
188-
} catch (error) {
189-
console.error('Error fetching A-Z list:', error);
190-
throw error;
191-
}
192-
}
193-
194-
/**
195-
* Get anime schedule
196-
*/
197-
static async getAnimeSchedule(date) {
198-
try {
199-
const data = await this.fetchAPI(`/schedule?date=${date}`);
200-
return data;
201-
} catch (error) {
202-
console.error('Error fetching anime schedule:', error);
203-
throw error;
204-
}
205-
}
206-
207-
/**
208-
* Get anime quick tip info
209-
*/
210-
static async getAnimeQtip(animeId) {
211-
try {
212-
const data = await this.fetchAPI(`/qtip/${animeId}`);
213-
return data;
214-
} catch (error) {
215-
console.error('Error fetching anime qtip:', error);
216-
throw error;
217-
}
106+
return await this.fetchAPI(`/genre/${genre}?page=${page}`);
218107
}
219108
}
220109

221-
// Export for use in other modules
222-
if (typeof module !== 'undefined' && module.exports) {
223-
module.exports = AnimeAPI;
224-
} else {
225-
window.AnimeAPI = AnimeAPI;
226-
}
110+
// Replace the original AnimeAPI with TatakaiAnimeAPI
111+
window.AnimeAPI = TatakaiAnimeAPI;

0 commit comments

Comments
 (0)