x1ongzhu hace 1 año
padre
commit
8d3b9fcdf3
Se han modificado 4 ficheros con 88 adiciones y 12 borrados
  1. 28 0
      cate.js
  2. BIN
      dist.zip
  3. 56 12
      index.js
  4. 4 0
      scripts/gen_pif_custom.sh

+ 28 - 0
cate.js

@@ -0,0 +1,28 @@
+import fs from "fs"
+import path from "path"
+fs.readdirSync("dist").forEach(file => {
+    const pif = JSON.parse(
+        fs
+            .readFileSync(path.join("dist", file), "utf-8")
+            .toString()
+            .replace(/\/\/.*/g, "")
+    )
+
+    try {
+        const release = parseInt(pif.RELEASE.split(".")[0])
+        if (isNaN(release)) {
+            throw new Error("NaN")
+        }
+        const dir = path.join("dist", release.toString())
+        if (!fs.existsSync(dir)) {
+            fs.mkdirSync(dir)
+        }
+        fs.copyFileSync(path.join("dist", file), path.join(dir, file))
+    } catch (e) {
+        const dir = path.join("dist", "unkown")
+        if (!fs.existsSync(dir)) {
+            fs.mkdirSync(dir)
+        }
+        fs.copyFileSync(path.join("dist", file), path.join(dir, file))
+    }
+})

BIN
dist.zip


+ 56 - 12
index.js

@@ -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])

+ 4 - 0
scripts/gen_pif_custom.sh

@@ -119,6 +119,7 @@ esac;
 [ -z "$MANUFACTURER" ] && MANUFACTURER=$(file_getprop vendor-build.prop ro.product.vendor.manufacturer);
 [ -z "$MODEL" ] && MODEL=$(file_getprop vendor-build.prop ro.product.vendor.model);
 [ -z "$FINGERPRINT" ] && FINGERPRINT=$(file_getprop vendor-build.prop ro.vendor.build.fingerprint);
+[ -z "$FINGERPRINT" ] && FINGERPRINT=$(file_getprop build.prop ro.bootimage.build.fingerprint);
 [ -z "$BRAND" ] && BRAND=$(file_getprop vendor-build.prop ro.product.vendor.brand);
 [ -z "$PRODUCT" ] && PRODUCT=$(file_getprop vendor-build.prop ro.product.vendor.name);
 [ -z "$DEVICE" ] && DEVICE=$(file_getprop vendor-build.prop ro.product.vendor.device);
@@ -149,6 +150,9 @@ if ! $ALLFIELDS; then
   item "Parsing build UTC date ...";
   UTC=$(file_getprop build.prop ro.build.date.utc);
   [ -z "$UTC" ] && UTC=$(file_getprop system-build.prop ro.build.date.utc);
+  [ -z "$UTC" ] && UTC=$(file_getprop product-build.prop ro.product.build.date.utc);
+  [ -z "$UTC" ] && UTC=$(file_getprop vendor-build.prop ro.vendor.build.date.utc);
+  [ -z "$UTC" ] && UTC=$(file_getprop build.prop ro.bootimage.build.date.utc);
   date -r $UTC
 fi;