-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupdateVersion.js
153 lines (133 loc) · 4.98 KB
/
updateVersion.js
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
const fs = require("fs-extra");
const path = require("path");
const axios = require("axios");
const sharp = require("sharp");
// Configuration
const outputDir = "downloads"; // Dossier pour les images téléchargées
const convertedDir = "../Review Express/public/img/portraits"; // Dossier pour les images converties
const staticDir = "static"; // Dossier pour les fichiers JSON
const apiURL =
"https://api.github.com/repos/Mar-7th/StarRailRes/contents/image/character_portrait"; // URL de l'API pour lister les fichiers
const CDN =
"https://raw.githubusercontent.com/Mar-7th/StarRailRes/refs/heads/master/"; // URL de base pour les fichiers JSON
// Liens des fichiers JSON
const jsonUrls = [
`${CDN}index_min/fr/characters.json`,
`${CDN}index_min/en/characters.json`,
`${CDN}index_min/fr/properties.json`,
`${CDN}index_min/en/properties.json`,
`${CDN}index_min/fr/relic_sets.json`,
`${CDN}index_min/en/relic_sets.json`,
`${CDN}index_min/fr/light_cones.json`,
`${CDN}index_min/en/light_cones.json`,
`${CDN}index_min/fr/relics.json`,
`${CDN}index_min/en/relics.json`,
`${CDN}index_min/fr/character_ranks.json`,
`${CDN}index_min/en/character_ranks.json`,
`${CDN}index_min/fr/light_cone_ranks.json`,
`${CDN}index_min/en/light_cone_ranks.json`,
];
// Fonction pour télécharger les images
async function downloadImages() {
try {
// Vérifier si le dossier de sortie pour les téléchargements existe, sinon le créer
await fs.ensureDir(outputDir);
// Récupérer la liste des fichiers dans le répertoire GitHub
const response = await axios.get(apiURL, {
headers: {
Accept: "application/vnd.github.v3+json",
},
});
// Télécharger chaque image
for (const file of response.data) {
// Vérifier si c'est une image
if (file.name.match(/\.(jpg|jpeg|png|gif)$/i)) {
const fileURL = file.download_url; // URL de téléchargement direct
const outputPath = path.join(outputDir, file.name);
const imageResponse = await axios.get(fileURL, {
responseType: "arraybuffer",
});
await fs.writeFile(outputPath, imageResponse.data);
console.log(`Downloaded ${file.name} to ${outputPath}`);
}
}
} catch (error) {
console.error("Error downloading images:", error);
}
}
// Fonction pour convertir les images
async function convertImages() {
try {
// Vérifier si le dossier de sortie pour les conversions existe, sinon le créer
await fs.ensureDir(convertedDir);
// Lire tous les fichiers du dossier d'entrée
const files = await fs.readdir(outputDir);
// Traiter chaque fichier
for (const file of files) {
const filePath = path.join(outputDir, file);
const outputFilePath = path.join(
convertedDir,
path.parse(file).name + ".webp"
);
// Vérifier si le fichier est une image
if (/\.(jpg|jpeg|png|gif)$/i.test(file)) {
// Redimensionner et convertir en .webp
await sharp(filePath)
.resize({ height: 470 }) // Ajuster la hauteur selon vos besoins
.webp() // Convertir en .webp
.toFile(outputFilePath); // Enregistrer le fichier converti
console.log(`Converted ${file} to ${outputFilePath}`);
} else {
console.log(`${file} is not an image, skipping.`);
}
}
} catch (error) {
console.error("Error converting images:", error);
}
}
// Fonction pour télécharger les fichiers JSON
async function downloadJSONFiles() {
try {
// Vérifier si le dossier pour les fichiers JSON existe, sinon le créer
await fs.ensureDir(staticDir);
// Télécharger chaque fichier JSON
for (const url of jsonUrls) {
const language = url.includes("/fr/") ? "FR" : "EN"; // Déterminer la langue
const fileName = path.basename(url, ".json"); // Obtenir le nom de fichier sans extension
const outputName = `${fileName}${language}.json`; // Nouveau nom de fichier
const outputPath = path.join(staticDir, outputName); // Chemin complet du fichier de sortie
const jsonResponse = await axios.get(url);
const jsonData = Object.values(jsonResponse.data);
// Ajout des deux objets si le fichier est relic_sets.json
if (
(fileName === "relic_sets" || fileName === "light_cones") &&
language === "FR"
) {
jsonData.push(
{
id: "999",
name: "",
icon: "icon/path/None.png",
},
{
id: "0",
name: "",
icon: "icon/path/None.png",
}
);
}
await fs.writeFile(outputPath, JSON.stringify(jsonData, null, 2));
console.log(`Downloaded and renamed to ${outputName} in ${staticDir}`);
}
} catch (error) {
console.error("Error downloading JSON files:", error);
}
}
// Fonction principale pour télécharger et convertir les images et les JSON
async function main() {
await downloadImages();
await convertImages();
await downloadJSONFiles();
}
// Lancer le traitement
main();