144 lines
6.1 KiB
C++
144 lines
6.1 KiB
C++
#include "offline_opt.h"
|
|
|
|
|
|
#include <json/gb_json.h>
|
|
#include <huagao/hgscanner_error.h>
|
|
#include <huagao/brand.h>
|
|
#include <lang/app_language.h>
|
|
#include <sane/sane_ex.h>
|
|
#include <hginclude/utils.h>
|
|
#include <string.h>
|
|
#include "../scanner_manager.h" // for version
|
|
#include "user.h"
|
|
|
|
static std::string device_opt_json[] = {
|
|
"{\"company\":{\"cat\":\"base\",\"group\":\"\\u5173\\u4e8e\",\"title\":\"\\u5236\\u9020\\u5546\",\"desc\":\"\\u8bbe\\u5907\\u5236\\u9020\\u5546\",\"type\":\"string\",\"fix-id\":34891,\"auth\":0,\"readonly\":true,\"size\":128,\"auto\":false,\"cur\":\"0\",\"default\":\"0\"},\"copyright\":{\"cat\":\"base\",\"group\":\"\\u5173\\u4e8e\",\"title\":\"\\u7248\\u672c\\u4fe1\\u606f\",\"desc\":\"\\u7248\\u6743\\u58f0\\u660e\\u7b49\\u4fe1\\u606f\",\"type\":\"string\",\"fix-id\":34892,\"auth\":0,\"readonly\":true,\"size\":128,\"auto\":false,\"cur\":\"0\",\"default\":\"0\"},\"co-url\":{\"cat\":\"base\",\"group\":\"\\u5173\\u4e8e\",\"title\":\"\\u516c\\u53f8\\u7f51\\u5740\",\"desc\":\"\\u516c\\u53f8\\u5b98\\u7f51\\u6216\\u552e\\u540e\\u670d\\u52a1\\u7f51\\u7ad9\\u5730\\u5740\",\"type\":\"string\",\"fix-id\":34893,\"auth\":0,\"readonly\":true,\"size\":256,\"auto\":false,\"cur\":\"0\",\"default\":\"0\"},\"co-tel\":{\"cat\":\"base\",\"group\":\"\\u5173\\u4e8e\",\"title\":\"\\u516c\\u53f8\\u7535\\u8bdd\",\"desc\":\"\\u516c\\u53f8\\u8054\\u7cfb\\u7535\\u8bdd\",\"type\":\"string\",\"fix-id\":34894,\"auth\":0,\"readonly\":true,\"size\":129,\"auto\":false,\"cur\":\"0\",\"default\":\"0\"},\"co-addr\":{\"cat\":\"base\",\"group\":\"\\u5173\\u4e8e\",\"title\":\"\\u516c\\u53f8\\u5730\\u5740\",\"desc\":\"\\u516c\\u53f8\\u5730\\u5740\",\"type\":\"string\",\"fix-id\":34895,\"auth\":0,\"readonly\":true,\"size\":128,\"auto\":false,\"cur\":\"0\",\"default\":\"0\"},\"co-gps\":{\"cat\":\"base\",\"group\":\"\\u5173\\u4e8e\",\"title\":\"\\u516c\\u53f8GPS\",\"desc\":\"\\u516c\\u53f8\\u5730\\u56fe\\u5730\\u5740\",\"type\":\"string\",\"fix-id\":34896,\"auth\":0,\"readonly\":true,\"size\":256,\"auto\":false,\"cur\":\"0\",\"default\":\"0\"},\"drv-ver\":{\"cat\":\"base\",\"group\":\"\\u5173\\u4e8e\",\"title\":\"\\u9a71\\u52a8\\u7248\\u672c\\u53f7\",\"desc\":\"PC\\u7aef\\u9a71\\u52a8\\u7a0b\\u5e8f\\u7248\\u672c\",\"type\":\"string\",\"fix-id\":34890,\"auth\":0,\"readonly\":true,\"size\":48,\"auto\":false,\"cur\":\"0\",\"default\":\"0\"},\"login\":{\"cat\":\"advanced\",\"group\":\"\\u7528\\u6237\",\"title\":\"\\u767b\\u5f55\",\"desc\":\"\\u7528\\u6237\\u767b\\u5f55\\u64cd\\u4f5c\",\"type\":\"string\",\"fix-id\":39168,\"auth\":0,\"visible\":1,\"size\":64,\"auto\":false,\"cur\":\"false\",\"default\":\"false\"},\"logout\":{\"cat\":\"advanced\",\"group\":\"\\u7528\\u6237\",\"title\":\"\\u767b\\u51fa\",\"desc\":\"\\u7528\\u6237\\u767b\\u51fa\\u64cd\\u4f5c\",\"type\":\"string\",\"fix-id\":39169,\"auth\":0,\"visible\":1,\"size\":64,\"auto\":false,\"cur\":\"false\",\"default\":\"false\"},\"drv-log\":{\"cat\":\"advanced\",\"group\":\"\\u7528\\u6237\",\"title\":\"\\u9a71\\u52a8\\u65e5\\u5fd7\",\"desc\":\"PC\\u7aef\\u9a71\\u52a8\\u5de5\\u4f5c\\u65e5\\u5fd7\",\"type\":\"string\",\"fix-id\":39171,\"auth\":10,\"visible\":1,\"size\":256,\"auto\":false,\"ownread\":true,\"cur\":\"0\",\"default\":\"0\"}}"
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// offline_opts ...
|
|
offline_opts::offline_opts(hguser* user) : user_(user)
|
|
{
|
|
int hh = 0, hl = 0, lh = 0, ll = 0;
|
|
hg_scanner_mgr::get_version(&hh, &hl, &lh, &ll);
|
|
drv_ver_ = std::to_string(hh)
|
|
+ "." + std::to_string(hl)
|
|
+ "." + std::to_string(lh)
|
|
+ "." + std::to_string(ll);
|
|
|
|
init();
|
|
set_where("offline_opts");
|
|
}
|
|
offline_opts::~offline_opts()
|
|
{
|
|
}
|
|
|
|
void offline_opts::init(void)
|
|
{
|
|
gb_json* child = nullptr, * jsn = new gb_json();
|
|
std::string text("");
|
|
|
|
for (auto& v : device_opt_json)
|
|
text += v;
|
|
jsn->attach_text(&text[0]);
|
|
|
|
|
|
#define INIT_SIMPLE_VAL(n, v) \
|
|
jsn->get_value(SANE_STD_OPT_NAME_##n, child); \
|
|
if (child) \
|
|
{ \
|
|
child->set_value("cur", v); \
|
|
child->set_value("default", v); \
|
|
\
|
|
child->release(); \
|
|
}
|
|
|
|
INIT_SIMPLE_VAL(MANUFACTURER , COMPANY_NAME);
|
|
INIT_SIMPLE_VAL(CO_URL , BRAND_COMPANY_URL);
|
|
INIT_SIMPLE_VAL(CO_TEL , BRAND_COMPANY_TEL);
|
|
INIT_SIMPLE_VAL(CO_ADDR , BRAND_COMPANY_ADDRESS);
|
|
INIT_SIMPLE_VAL(CO_GPS , BRAND_URL_GPS);
|
|
INIT_SIMPLE_VAL(COPYRIGHT , BRAND_COPYRIGHT);
|
|
INIT_SIMPLE_VAL(DRIVER_VERSION , drv_ver_.c_str());
|
|
|
|
text = std::move(jsn->to_string());
|
|
set_opt_json_text(&text[0]);
|
|
|
|
jsn->release();
|
|
}
|
|
|
|
char* offline_opts::get_value(const char* name, void* value, size_t* size, int* err)
|
|
{
|
|
std::string ret("");
|
|
|
|
if (IS_SANE_OPT(name, DRIVER_LOG))
|
|
{
|
|
if (user_ && user_->has_privilege(USER_PRIVILEGE_LOCAL_MGR))
|
|
{
|
|
int e = utils::copy_log_file_to((char*)value);
|
|
|
|
ret = (char*)value;
|
|
if (err)
|
|
*err = e;
|
|
}
|
|
else if (err)
|
|
*err = SCANNER_ERR_ACCESS_DENIED;
|
|
}
|
|
else if (err)
|
|
*err = SCANNER_ERR_NO_DATA;
|
|
|
|
if (size)
|
|
*size = ret.length();
|
|
if (ret.length())
|
|
{
|
|
char* buf = (char*)malloc(ret.length() + 1);
|
|
|
|
memcpy(buf, ret.c_str(), ret.length());
|
|
buf[ret.length()] = 0;
|
|
|
|
return buf;
|
|
}
|
|
else
|
|
return nullptr;
|
|
}
|
|
int offline_opts::set_value(const char* name, void* value)
|
|
{
|
|
int ret = SCANNER_ERR_NO_DATA;
|
|
|
|
if (IS_SANE_OPT(name, DRIVER_LOG))
|
|
{
|
|
if (user_ && user_->has_privilege(USER_PRIVILEGE_LOCAL_MGR))
|
|
{
|
|
ret = utils::clear_log_file();
|
|
}
|
|
else
|
|
{
|
|
ret = SCANNER_ERR_ACCESS_DENIED;
|
|
}
|
|
}
|
|
else if (IS_SANE_OPT(name, LOGIN) || IS_SANE_OPT(name, LOGOUT))
|
|
{
|
|
char* n = (char*)value,
|
|
* pwd = n + 32;
|
|
|
|
scanner_err ret = IS_SANE_OPT(name, LOGIN) ? (scanner_err)user_->login(n, pwd) : (scanner_err)user_->logout(n, pwd);
|
|
|
|
if (ret == SCANNER_ERR_OK)
|
|
ret = SCANNER_ERR_RELOAD_OPT_PARAM;
|
|
}
|
|
else if (IS_SANE_OPT(name, MANUFACTURER)
|
|
|| IS_SANE_OPT(name, CO_URL)
|
|
|| IS_SANE_OPT(name, CO_TEL)
|
|
|| IS_SANE_OPT(name, CO_ADDR)
|
|
|| IS_SANE_OPT(name, CO_GPS)
|
|
|| IS_SANE_OPT(name, COPYRIGHT)
|
|
|| IS_SANE_OPT(name, DRIVER_VERSION)
|
|
)
|
|
ret = SCANNER_ERR_ACCESS_DENIED;
|
|
|
|
return ret;
|
|
}
|
|
void offline_opts::enable(const char* name, bool able)
|
|
{
|
|
|
|
} |