From 970db48e17244c73c1a8dada5cb18c358d0d0dbf Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Sat, 8 Oct 2022 17:20:16 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E4=BB=A5=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E5=91=BD=E5=90=8D=E7=9A=84=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sane/gb_json.cpp | 3 ++ sane/scanner.cpp | 91 +++++++++++++++++++++++++++++++++++++++++++----- sane/scanner.h | 1 + 3 files changed, 86 insertions(+), 9 deletions(-) diff --git a/sane/gb_json.cpp b/sane/gb_json.cpp index 6e8ff60..b3ee341 100644 --- a/sane/gb_json.cpp +++ b/sane/gb_json.cpp @@ -1133,6 +1133,9 @@ namespace gb } void sane_config::update(bool(__stdcall* is_float)(int, void*), void* param, const char* (__stdcall* t2n)(const char*), std::string* discard) { + if (!jsn_) + return; + std::string ver(get_version()), name(""), val(""); diff --git a/sane/scanner.cpp b/sane/scanner.cpp index 7125dc0..de50b3c 100644 --- a/sane/scanner.cpp +++ b/sane/scanner.cpp @@ -1,6 +1,7 @@ #include "scanner.h" #include +#include // for PathFileExistsW #include "../sdk/hginclude/huagaoxxx_warraper_ex.h" #include #include "../../code_device/hgsane/sane_hg_mdw.h" @@ -11,6 +12,10 @@ #include "DlgSetting.h" #include "gb_json.h" +#pragma comment(lib, "Shlwapi.lib") + + + static IMPLEMENT_OPTION_STRING_COMPARE(compare_sane_opt); #define SET_SANE_OPT_ID(id, id_name, name, val, extension) \ @@ -344,6 +349,31 @@ COM_API_IMPLEMENT(scanner, long, release(void)) return refer::release(); } +void scanner::transport_config_file(void) +{ + size_t pos = scanner_name_.find(L" - "); + std::wstring pid(L"G"), old(L""); + + if (pos == std::wstring::npos) + return; + + pid += scanner_name_.substr(pos + 3); + if (scanner_name_.find(L"HUAGOSCAN ") != std::wstring::npos) + { + old = local_trans::a2u("\345\215\216\351\253\230\346\211\253\346\217\217\344\273\252\342\200\224", CP_UTF8); + } + else if (scanner_name_.find(L"LANXUMSCAN ") != std::wstring::npos) + { + old = local_trans::a2u("\347\253\213\346\200\235\350\276\260\346\211\253\346\217\217\344\273\252\342\200\224", CP_UTF8); + pid += L"S"; + } + old += pid; + if (PathFileExistsW((cfg_path_ + old).c_str())) + { + log_info((L"Rename config file '" + old + L"' to '" + scanner_name_.substr(0, pos) + L"'\r\n").c_str(), 0); + MoveFileW((cfg_path_ + old).c_str(), (cfg_path_ + scanner_name_.substr(0, pos)).c_str()); + } +} void scanner::update_config(void) { std::string notice(""); @@ -439,10 +469,15 @@ int scanner::open(void) ret = hg_sane_middleware::instance()->open_device(name.c_str(), &handle_); if (ret == SANE_STATUS_GOOD) { + size_t pid = scanner_name_.find(L" - "); + if (pid == -1) + pid = scanner_name_.length(); + + transport_config_file(); callback::reg_callback(handle_, this); scanner_name_ = local_trans::a2u(name.c_str(), CP_UTF8); ret = init_options_id(); - load_config((cfg_path_ + scanner_name_ + L".cfg").c_str()); + load_config((cfg_path_ + scanner_name_.substr(0, pid) + L".cfg").c_str()); apply_config(); } else @@ -459,7 +494,6 @@ int scanner::close(void) if (handle_) { hg_sane_middleware::instance()->close_device(handle_); - // save_config((cfg_path_ + scanner_name_ + L".cfg").c_str()); } handle_ = NULL; ex_id_ = EXTENSION_ID_BASE; @@ -2355,9 +2389,12 @@ COM_API_IMPLEMENT(scanner, bool, ui_show_setting(HWND parent, bool with_scan, bo api.sane_start_api = inner_sane_start; api.sane_strstatus_api = inner_sane_strstatus; - setting_.reset(new dlg_setting(parent, &api, handle_, with_scan, scanner_name_.c_str())); + size_t pid = scanner_name_.find(L" - "); + if (pid == -1) + pid = scanner_name_.length(); + setting_.reset(new dlg_setting(parent, &api, handle_, with_scan, scanner_name_.substr(0, pid).c_str())); setting_->set_ui_event_notify(&scanner::ui_callback, this); - setting_->set_config(cfg_, (cfg_path_ + scanner_name_).c_str()); + setting_->set_config(cfg_, (cfg_path_ + scanner_name_.substr(0, pid)).c_str()); cfg_->begin_setting(); indicator_.reset(); if (indicator) @@ -2478,6 +2515,7 @@ int scanner::last_error(void) #include std::mutex g_lock_; +std::string g_path_file_(""); FILE* g_file_ = NULL; void init_log(void) @@ -2496,7 +2534,8 @@ void init_log(void) last = name; path += last; path += "_twain.log"; - g_file_ = fopen(path.c_str(), "wb"); + g_file_ = fopen(path.c_str(), "a+b"); + g_path_file_ = path; } else { @@ -2505,12 +2544,30 @@ void init_log(void) GetModuleFileNameA(NULL, name, _countof(name) - 1); path = std::string(name) + "_twain.log"; - g_file_ = fopen(path.c_str(), "wb"); + g_file_ = fopen(path.c_str(), "a+b"); + g_path_file_ = path; } if (g_file_) { - unsigned short bom = 0x0feff; - fwrite(&bom, sizeof(bom), 1, g_file_); + fseek(g_file_, 0, SEEK_END); + if (ftell(g_file_)) + { + std::wstring sep(L"\r\n\r\n\r\n=================================================\r\n"); + fwrite(sep.c_str(), 2, sep.length(), g_file_); + } + else + { + unsigned short bom = 0x0feff; + fwrite(&bom, sizeof(bom), 1, g_file_); + } + + time_t now = time(NULL); + struct tm* t = localtime(&now); + wchar_t ts[128] = { 0 }; + + swprintf_s(ts, _countof(ts) - 1, L"==================%04d-%02d-%02d %02d:%02d:%02d==================\r\n" + , t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); + fwrite(ts, 2, lstrlenW(ts), g_file_); } } void close_log(void) @@ -2528,7 +2585,23 @@ void log(const wchar_t* info) fwrite(info, 2, lstrlenW(info), g_file_); fflush(g_file_); if (ftell(g_file_) > 10 * 1024 * 1024) - fseek(g_file_, 0, SEEK_SET); + { + fclose(g_file_); + remove(g_path_file_.c_str()); + g_file_ = fopen(g_path_file_.c_str(), "a+b"); + if (g_file_) + { + unsigned short bom = 0x0feff; + time_t now = time(NULL); + struct tm* t = localtime(&now); + wchar_t ts[128] = { 0 }; + + swprintf_s(ts, _countof(ts) - 1, L"==================%04d-%02d-%02d %02d:%02d:%02d (Truncated when size > 10MB) ==================\r\n" + , t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); + fwrite(&bom, sizeof(bom), 1, g_file_); + fwrite(ts, 2, lstrlenW(ts), g_file_); + } + } } } diff --git a/sane/scanner.h b/sane/scanner.h index 7851577..a4c86e0 100644 --- a/sane/scanner.h +++ b/sane/scanner.h @@ -53,6 +53,7 @@ class scanner : public ISaneInvoker, virtual public refer std::unique_ptr setting_; gb::sane_config* cfg_; + void transport_config_file(void); void update_config(void); void load_config(const wchar_t* file); void save_config(const wchar_t* file);