迁移以设备名称命名的配置文件
This commit is contained in:
parent
fdb5649ed2
commit
970db48e17
|
@ -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)
|
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()),
|
std::string ver(get_version()),
|
||||||
name(""),
|
name(""),
|
||||||
val("");
|
val("");
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "scanner.h"
|
#include "scanner.h"
|
||||||
|
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
|
#include <Shlwapi.h> // for PathFileExistsW
|
||||||
#include "../sdk/hginclude/huagaoxxx_warraper_ex.h"
|
#include "../sdk/hginclude/huagaoxxx_warraper_ex.h"
|
||||||
#include <sane/sane_option_definitions.h>
|
#include <sane/sane_option_definitions.h>
|
||||||
#include "../../code_device/hgsane/sane_hg_mdw.h"
|
#include "../../code_device/hgsane/sane_hg_mdw.h"
|
||||||
|
@ -11,6 +12,10 @@
|
||||||
#include "DlgSetting.h"
|
#include "DlgSetting.h"
|
||||||
#include "gb_json.h"
|
#include "gb_json.h"
|
||||||
|
|
||||||
|
#pragma comment(lib, "Shlwapi.lib")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static IMPLEMENT_OPTION_STRING_COMPARE(compare_sane_opt);
|
static IMPLEMENT_OPTION_STRING_COMPARE(compare_sane_opt);
|
||||||
|
|
||||||
#define SET_SANE_OPT_ID(id, id_name, name, val, extension) \
|
#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();
|
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)
|
void scanner::update_config(void)
|
||||||
{
|
{
|
||||||
std::string notice("");
|
std::string notice("");
|
||||||
|
@ -439,10 +469,15 @@ int scanner::open(void)
|
||||||
ret = hg_sane_middleware::instance()->open_device(name.c_str(), &handle_);
|
ret = hg_sane_middleware::instance()->open_device(name.c_str(), &handle_);
|
||||||
if (ret == SANE_STATUS_GOOD)
|
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);
|
callback::reg_callback(handle_, this);
|
||||||
scanner_name_ = local_trans::a2u(name.c_str(), CP_UTF8);
|
scanner_name_ = local_trans::a2u(name.c_str(), CP_UTF8);
|
||||||
ret = init_options_id();
|
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();
|
apply_config();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -459,7 +494,6 @@ int scanner::close(void)
|
||||||
if (handle_)
|
if (handle_)
|
||||||
{
|
{
|
||||||
hg_sane_middleware::instance()->close_device(handle_);
|
hg_sane_middleware::instance()->close_device(handle_);
|
||||||
// save_config((cfg_path_ + scanner_name_ + L".cfg").c_str());
|
|
||||||
}
|
}
|
||||||
handle_ = NULL;
|
handle_ = NULL;
|
||||||
ex_id_ = EXTENSION_ID_BASE;
|
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_start_api = inner_sane_start;
|
||||||
api.sane_strstatus_api = inner_sane_strstatus;
|
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_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();
|
cfg_->begin_setting();
|
||||||
indicator_.reset();
|
indicator_.reset();
|
||||||
if (indicator)
|
if (indicator)
|
||||||
|
@ -2478,6 +2515,7 @@ int scanner::last_error(void)
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
|
|
||||||
std::mutex g_lock_;
|
std::mutex g_lock_;
|
||||||
|
std::string g_path_file_("");
|
||||||
FILE* g_file_ = NULL;
|
FILE* g_file_ = NULL;
|
||||||
|
|
||||||
void init_log(void)
|
void init_log(void)
|
||||||
|
@ -2496,7 +2534,8 @@ void init_log(void)
|
||||||
last = name;
|
last = name;
|
||||||
path += last;
|
path += last;
|
||||||
path += "_twain.log";
|
path += "_twain.log";
|
||||||
g_file_ = fopen(path.c_str(), "wb");
|
g_file_ = fopen(path.c_str(), "a+b");
|
||||||
|
g_path_file_ = path;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2505,13 +2544,31 @@ void init_log(void)
|
||||||
|
|
||||||
GetModuleFileNameA(NULL, name, _countof(name) - 1);
|
GetModuleFileNameA(NULL, name, _countof(name) - 1);
|
||||||
path = std::string(name) + "_twain.log";
|
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_)
|
if (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;
|
unsigned short bom = 0x0feff;
|
||||||
fwrite(&bom, sizeof(bom), 1, g_file_);
|
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)
|
void close_log(void)
|
||||||
{
|
{
|
||||||
|
@ -2528,7 +2585,23 @@ void log(const wchar_t* info)
|
||||||
fwrite(info, 2, lstrlenW(info), g_file_);
|
fwrite(info, 2, lstrlenW(info), g_file_);
|
||||||
fflush(g_file_);
|
fflush(g_file_);
|
||||||
if (ftell(g_file_) > 10 * 1024 * 1024)
|
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_);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,7 @@ class scanner : public ISaneInvoker, virtual public refer
|
||||||
std::unique_ptr<dlg_setting> setting_;
|
std::unique_ptr<dlg_setting> setting_;
|
||||||
gb::sane_config* cfg_;
|
gb::sane_config* cfg_;
|
||||||
|
|
||||||
|
void transport_config_file(void);
|
||||||
void update_config(void);
|
void update_config(void);
|
||||||
void load_config(const wchar_t* file);
|
void load_config(const wchar_t* file);
|
||||||
void save_config(const wchar_t* file);
|
void save_config(const wchar_t* file);
|
||||||
|
|
Loading…
Reference in New Issue