|
|
@@ -2,12 +2,13 @@ import axios, { all } from "axios"
|
|
|
import pRetry, { AbortError } from "p-retry"
|
|
|
import { parse } from "node-html-parser"
|
|
|
import tmp from "tmp"
|
|
|
-import fs from "fs"
|
|
|
+import fs, { readFileSync } from "fs"
|
|
|
import path from "path"
|
|
|
import { execFileSync, spawn } from "child_process"
|
|
|
import printf from "printf"
|
|
|
import chalk from "chalk"
|
|
|
import PQueue from "p-queue"
|
|
|
+import { setTimeout } from "timers/promises"
|
|
|
|
|
|
async function fetchModels() {
|
|
|
console.log("fetching models")
|
|
|
@@ -152,8 +153,9 @@ async function fetchProps(model, firmware) {
|
|
|
buildProp += line + "\n"
|
|
|
}
|
|
|
})
|
|
|
-
|
|
|
- fs.writeFileSync(path.join(tmpDir.name, "build.prop"), buildProp)
|
|
|
+ if (!buildProp.includes("ro.product.system.device=generic")) {
|
|
|
+ fs.writeFileSync(path.join(tmpDir.name, "build.prop"), buildProp)
|
|
|
+ }
|
|
|
fs.writeFileSync(
|
|
|
path.join(tmpDir.name, "vendor-build.prop"),
|
|
|
vendorBuildProp
|
|
|
@@ -202,18 +204,60 @@ if (!fs.existsSync("dist")) {
|
|
|
fs.mkdirSync("dist")
|
|
|
}
|
|
|
|
|
|
-const queue = new PQueue({ concurrency: 32 })
|
|
|
+const queue = new PQueue({ concurrency: 2 })
|
|
|
|
|
|
-const models = await fetchModels()
|
|
|
-models.forEach(model => {
|
|
|
- queue.add(() => fetchFirmwares(model))
|
|
|
-})
|
|
|
-await queue.onIdle()
|
|
|
-fs.writeFileSync("models.json", JSON.stringify(models, null, 2))
|
|
|
+// const models = await fetchModels()
|
|
|
+// models.forEach(model => {
|
|
|
+// queue.add(() => fetchFirmwares(model))
|
|
|
+// })
|
|
|
+// await queue.onIdle()
|
|
|
+// fs.writeFileSync("models.json", JSON.stringify(models, null, 2))
|
|
|
+const models = JSON.parse(fs.readFileSync("models.json").toString())
|
|
|
|
|
|
+// models.forEach(model => {
|
|
|
+// model.firmwares.forEach(firmware => {
|
|
|
+// queue.add(() => fetchProps(model, firmware))
|
|
|
+// })
|
|
|
+// })
|
|
|
+// await queue.onIdle()
|
|
|
+
|
|
|
+console.log(
|
|
|
+ models.map(model => model.firmwares.length).reduce((a, b) => a + b, 0)
|
|
|
+)
|
|
|
+
|
|
|
+const missingModels = []
|
|
|
+const missingFirmwares = []
|
|
|
models.forEach(model => {
|
|
|
model.firmwares.forEach(firmware => {
|
|
|
- queue.add(() => fetchProps(model, firmware))
|
|
|
+ const pifPath = path.join(
|
|
|
+ "dist",
|
|
|
+ `${printf("%05d", model.id)}_${printf("%05d", firmware.id)}.json`
|
|
|
+ )
|
|
|
+ if (!fs.existsSync(pifPath)) {
|
|
|
+ if (missingModels.findIndex(m => m.id === model.id) === -1) {
|
|
|
+ missingModels.push(model)
|
|
|
+ missingFirmwares.push([model, firmware])
|
|
|
+ }
|
|
|
+ }
|
|
|
})
|
|
|
})
|
|
|
-await queue.onIdle()
|
|
|
+console.log(`missing: ${missingModels.length}`)
|
|
|
+missingFirmwares.sort((a, b) => a[0].id - b[0].id)
|
|
|
+
|
|
|
+missingFirmwares.forEach(([model, firmware]) => {
|
|
|
+ console.log(
|
|
|
+ `https://desktop.firmware.mobi/device:${model.id}/firmware:${firmware.id}`
|
|
|
+ )
|
|
|
+})
|
|
|
+
|
|
|
+missingFirmwares
|
|
|
+ .reverse()
|
|
|
+ .forEach(([model, firmware]) => {
|
|
|
+ // queue.add(() => fetchProps(model, firmware))
|
|
|
+ })
|
|
|
+await queue.onIdle()
|
|
|
+
|
|
|
+// console.log(
|
|
|
+// `https://desktop.firmware.mobi/device:${missingFirmwares[0][0].id}/firmware:${missingFirmwares[0][1].id}`
|
|
|
+// )
|
|
|
+// await fetchProps(missingFirmwares[0][0], missingFirmwares[0][1])
|