Socialify

Folder ..

Viewing AnimeCacheSyncTask.ts
115 lines (96 loc) • 4.1 KB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/* File disabled until further requirements */

// import { FribbMapping } from '../entities/FribbMapping';
// import { fribbMappingRepository } from '../repositories/FribbMappingRepository';
// import { animeCacheRepository } from '../repositories/AnimeCacheRepository';
// import { getFullAnime } from '../utils/anime';
// import { getEpisodeStreamingLinks } from '../utils/stream';
// import Logger from '../utils/logger';
// import { Task } from './TaskManager';

// export class AnimeCacheSyncTask {
//   private readonly DELAY_BETWEEN_ITEMS = 2000; // 2 seconds delay between processing each anime

//   async execute(): Promise<void> {
//     try {
//       Logger.info('Starting anime cache sync', { timestamp: true, prefix: 'AnimeCacheSync' });

//       // Get all FribbMappings
//       const mappings = await fribbMappingRepository.findAll();
//       const totalMappings = mappings.length;
//       let processed = 0;

//       // Process one mapping at a time with delay
//       for (const mapping of mappings) {
//         if (!mapping.mal_id) {
//           processed++;
//           continue;
//         }

//         try {
//           await this.processAnime(mapping);
//           processed++;

//           Logger.info(`Processed ${processed}/${totalMappings} anime entries`, {
//             timestamp: true,
//             prefix: 'AnimeCacheSync',
//           });

//           // Add delay between processing each anime to avoid rate limiting
//           await new Promise((resolve) => setTimeout(resolve, this.DELAY_BETWEEN_ITEMS));
//         } catch (error) {
//           Logger.error(`Error processing MAL ID ${mapping.mal_id}: ${error}`, {
//             timestamp: true,
//             prefix: 'AnimeCacheSync',
//           });
//           // Continue with next anime even if current one fails
//           processed++;
//         }
//       }

//       Logger.success('Anime cache sync completed', { timestamp: true, prefix: 'AnimeCacheSync' });
//     } catch (error) {
//       Logger.error(`Anime cache sync failed: ${error}`, {
//         timestamp: true,
//         prefix: 'AnimeCacheSync',
//       });
//       throw error;
//     }
//   }

//   private async processAnime(mapping: FribbMapping): Promise<void> {
//     // Check if anime is cached
//     const cachedAnime = await animeCacheRepository.getCachedAnime(mapping.mal_id);

//     if (!cachedAnime) {
//       Logger.info(`Caching anime data for MAL ID: ${mapping.mal_id}`, {
//         timestamp: true,
//         prefix: 'AnimeCacheSync',
//       });

//       // Get and cache anime data
//       const anime = await getFullAnime(mapping);
//       if (!anime) return;

//       // Cache streaming links for each episode one by one
//       if (anime.episodes && anime.episodes.episodes.length > 0) {
//         const title = anime.titles.romaji || anime.titles.english || anime.titles.japanese;

//         for (const episode of anime.episodes.episodes) {
//           if (!episode.number) continue;

//           // Check if streaming links are cached
//           const cachedLinks = await animeCacheRepository.getCachedStreamingLinks(
//             mapping.mal_id,
//             episode.number,
//           );

//           if (!cachedLinks) {
//             Logger.info(
//               `Caching streaming links for MAL ID: ${mapping.mal_id}, Episode: ${episode.number}`,
//               { timestamp: true, prefix: 'AnimeCacheSync' },
//             );

//             const links = await getEpisodeStreamingLinks(title, episode.number, mapping.mal_id);
//             if (links.sub.length > 0 || links.dub.length > 0) {
//               await animeCacheRepository.cacheStreamingLinks(mapping.mal_id, episode.number, links);
//             }

//             // Add delay between processing each episode
//             await new Promise((resolve) => setTimeout(resolve, 1000));
//           }
//         }
//       }
//     }
//   }
// }

// export const animeCacheSyncTask: Task = {
//   name: 'AnimeCacheSync',
//   interval: 24 * 60 * 60 * 1000, // 24 hours
//   execute: async () => {
//     const task = new AnimeCacheSyncTask();
//     await task.execute();
//   },
// };