From f7d8926443684dfd6dca95f88af6766a55cd3719 Mon Sep 17 00:00:00 2001 From: yizhi <946185759@qq.com> Date: Mon, 17 Mar 2025 16:12:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E6=97=B6=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 13 +++++++++++++ cxx/node.cc | 4 ++++ src/cv/download.ts | 15 ++++++++++++--- src/test.ts | 3 ++- thirdpart/cmake-js-util.js | 3 ++- 5 files changed, 33 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b0e9ad2..5889fd6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,6 +37,19 @@ if(CMAKE_JS_RESULT EQUAL 0) OUTPUT_STRIP_TRAILING_WHITESPACE ) endif() + # ReleaseVersion + if(CMAKE_JS_RESULT EQUAL 0) + execute_process( + COMMAND node ${CMAKE_SOURCE_DIR}/thirdpart/cmake-js-util.js --release + RESULT_VARIABLE CMAKE_JS_RESULT + OUTPUT_VARIABLE RELEASE_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(CMAKE_JS_RESULT EQUAL 0) + message(STATUS "RELEASE_VERSION: ${RELEASE_VERSION}") + add_compile_definitions(RELEASE_VERSION="${RELEASE_VERSION}") + endif() + endif() # NAPI if(CMAKE_JS_RESULT EQUAL 0) diff --git a/cxx/node.cc b/cxx/node.cc index 3631847..0912246 100644 --- a/cxx/node.cc +++ b/cxx/node.cc @@ -4,6 +4,10 @@ static Napi::Object Init(Napi::Env env, Napi::Object exports) { +#ifdef RELEASE_VERSION + exports.Set("__release__", Napi::String::New(env, RELEASE_VERSION)); +#endif + InitMatAPI(env, exports); InitVideoCaptureAPI(env, exports); InitUtilAPI(env, exports); diff --git a/src/cv/download.ts b/src/cv/download.ts index b7755fe..bf80616 100644 --- a/src/cv/download.ts +++ b/src/cv/download.ts @@ -3,13 +3,17 @@ import fs from "fs"; import path from "path"; import { C } from "./common"; + + const URLS = { GITHUB: `https://github.com/kangkang520/node-addons/releases/download/cv{{version}}/cv_{{platform}}_{{arch}}.node`, URNAS: `http://git.urnas.cn:5200/yizhi-js-lib/opencv/releases/download/{{version}}/cv_{{platform}}_{{arch}}.node`, } +function releaseVersion() { return require("../../package.json").releaseVersion } + function getURL(template: string) { - const version = require("../../package.json").releaseVersion; + let platform = ""; let arch = ""; switch (os.platform()) { @@ -30,7 +34,7 @@ function getURL(template: string) { throw new Error(`Unsupported architecture: ${os.arch()}, Please compile the addon yourself.`); } - return template.replaceAll("{{version}}", version).replaceAll("{{platform}}", platform).replaceAll("{{arch}}", arch); + return template.replaceAll("{{version}}", releaseVersion()).replaceAll("{{platform}}", platform).replaceAll("{{arch}}", arch); } async function getStream() { @@ -48,7 +52,12 @@ async function getStream() { export async function downloadAddon(savename?: string) { const defaultAddon = path.resolve(process.cwd(), C("ADDON_PATH")); const saveName = savename ? path.resolve(path.dirname(defaultAddon), savename) : defaultAddon; - if (fs.existsSync(saveName)) return saveName; + if (fs.existsSync(saveName)) { + try { + const addon = require(saveName); + if (addon.__release__ === releaseVersion()) return saveName; + } catch (err) { } + } await fs.promises.mkdir(path.dirname(saveName), { recursive: true }); diff --git a/src/test.ts b/src/test.ts index ae76e11..2611c52 100644 --- a/src/test.ts +++ b/src/test.ts @@ -33,8 +33,9 @@ async function testImage() { } async function testMovie() { + await cv.downloadAddon(); const cap = new cv.VideoCapture("test_data/movie.mp4"); - if(cap.grab()){ + if (cap.grab()) { const im = cap.retrieve(); debugger; } diff --git a/thirdpart/cmake-js-util.js b/thirdpart/cmake-js-util.js index 2189177..5c6c334 100644 --- a/thirdpart/cmake-js-util.js +++ b/thirdpart/cmake-js-util.js @@ -15,4 +15,5 @@ function runCmakeJS(args) { if (args.includes("--include")) runCmakeJS(["print-cmakejs-include"]); else if (args.includes("--src")) runCmakeJS(["print-cmakejs-src"]); else if (args.includes("--lib")) runCmakeJS(["print-cmakejs-lib"]); -else if (args.includes("--napi")) console.log(require("node-addon-api").include.replace(/^"/, "").replace(/"$/, "")); \ No newline at end of file +else if (args.includes("--napi")) console.log(require("node-addon-api").include.replace(/^"/, "").replace(/"$/, "")); +else if (args.includes("--release")) console.log(require("../package.json").releaseVersion); \ No newline at end of file