summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2020-09-21 15:37:18 +0800
committerPeng Wu <alexepico@gmail.com>2020-09-21 15:37:18 +0800
commit2ab5cf72ffe5d71c3bb182fec7b78133991beedd (patch)
tree5cdb2c064409a655c5f500ed194de036272183c2 /src
parent5bb4e1afcb01dcd2aa90702cd3268b22589f8d66 (diff)
refactor m_parser variable in class CloudCandidates
Diffstat (limited to 'src')
-rw-r--r--src/PYConfig.cc2
-rw-r--r--src/PYConfig.h5
-rw-r--r--src/PYPCloudCandidates.cc62
-rw-r--r--src/PYPCloudCandidates.h9
-rw-r--r--src/PYPConfig.cc16
5 files changed, 54 insertions, 40 deletions
diff --git a/src/PYConfig.cc b/src/PYConfig.cc
index 005d488..6baf690 100644
--- a/src/PYConfig.cc
+++ b/src/PYConfig.cc
@@ -75,7 +75,7 @@ Config::initDefaultValues (void)
m_enable_cloud_input = FALSE;
m_cloud_candidates_number = 1;
- m_cloud_input_source = BAIDU;
+ m_cloud_input_source = CLOUD_INPUT_SOURCE_BAIDU;
m_cloud_request_delay_time = 600;
}
diff --git a/src/PYConfig.h b/src/PYConfig.h
index 92a68e9..315f646 100644
--- a/src/PYConfig.h
+++ b/src/PYConfig.h
@@ -39,8 +39,9 @@ typedef enum {
} DisplayStyle;
enum CloudInputSource{
- BAIDU = 0,
- GOOGLE
+ CLOUD_INPUT_SOURCE_BAIDU = 0,
+ CLOUD_INPUT_SOURCE_GOOGLE,
+ CLOUD_INPUT_SOURCE_UNKNOWN
};
class Config {
diff --git a/src/PYPCloudCandidates.cc b/src/PYPCloudCandidates.cc
index 6be6564..a9daddf 100644
--- a/src/PYPCloudCandidates.cc
+++ b/src/PYPCloudCandidates.cc
@@ -335,8 +335,9 @@ CloudCandidates::CloudCandidates (PhoneticEditor * editor) : m_input_mode(FullPi
m_source_event_id = 0;
m_message = NULL;
- m_baidu_parser = new BaiduCloudCandidatesResponseJsonParser ();
- m_google_parser = new GoogleCloudCandidatesResponseJsonParser ();
+ m_input_source = CLOUD_INPUT_SOURCE_UNKNOWN;
+
+ m_parser = NULL;
}
CloudCandidates::~CloudCandidates ()
@@ -356,15 +357,32 @@ CloudCandidates::~CloudCandidates ()
m_session = NULL;
}
- if (m_baidu_parser) {
- delete m_baidu_parser;
- m_baidu_parser = NULL;
+ if (m_parser) {
+ delete m_parser;
+ m_parser = NULL;
}
+}
+
+void
+CloudCandidates::resetCloudResponseParser ()
+{
+ CloudInputSource input_source = m_editor->m_config.cloudInputSource ();
- if (m_google_parser) {
- delete m_google_parser;
- m_google_parser = NULL;
+ if (m_input_source == input_source)
+ return;
+
+ /* cloud input option is changed */
+ if (m_parser) {
+ delete m_parser;
+ m_parser = NULL;
}
+
+ m_input_source = input_source;
+
+ if (input_source == CLOUD_INPUT_SOURCE_BAIDU)
+ m_parser = new BaiduCloudCandidatesResponseJsonParser;
+ else if (input_source == CLOUD_INPUT_SOURCE_GOOGLE)
+ m_parser = new GoogleCloudCandidatesResponseJsonParser;
}
gboolean
@@ -545,11 +563,11 @@ CloudCandidates::cloudSyncRequest (const gchar* request_str, std::vector<Enhance
guint cloud_source = m_editor->m_config.cloudInputSource ();
guint cloud_candidates_number = m_editor->m_config.cloudCandidatesNumber ();
- if (cloud_source == BAIDU)
- queryRequest= g_strdup_printf (BAIDU_URL_TEMPLATE, request_str, cloud_candidates_number);
- else if (cloud_source == GOOGLE)
- queryRequest= g_strdup_printf (GOOGLE_URL_TEMPLATE, request_str, cloud_candidates_number);
- SoupMessage *msg = soup_message_new ("GET", queryRequest);
+ if (cloud_source == CLOUD_INPUT_SOURCE_BAIDU)
+ query_request= g_strdup_printf (BAIDU_URL_TEMPLATE, request_str, cloud_candidates_number);
+ else if (cloud_source == CLOUD_INPUT_SOURCE_GOOGLE)
+ query_request= g_strdup_printf (GOOGLE_URL_TEMPLATE, request_str, cloud_candidates_number);
+ SoupMessage *msg = soup_message_new ("GET", query_request);
GInputStream *stream = soup_session_send (m_session, msg, NULL, error);
@@ -560,17 +578,11 @@ void
CloudCandidates::processCloudResponse (GInputStream *stream, std::vector<EnhancedCandidate> & candidates)
{
guint retval;
- CloudCandidatesResponseJsonParser *parser = NULL;
String text;
gchar annotation[MAX_PINYIN_LEN + 1];
- guint cloud_source = m_editor->m_config.cloudInputSource ();
-
- if (cloud_source == BAIDU)
- parser = m_baidu_parser;
- else if (cloud_source == GOOGLE)
- parser = m_google_parser;
- retval = parser->parse (stream);
+ resetCloudResponseParser ();
+ retval = m_parser->parse (stream);
/* no annotation if there is NETWORK_ERROR, process before detecting parsed annotation */
if (retval == PARSER_NETWORK_ERROR) {
@@ -579,8 +591,8 @@ CloudCandidates::processCloudResponse (GInputStream *stream, std::vector<Enhance
}
}
- if (parser->getAnnotation ())
- strncpy (annotation, parser->getAnnotation (), MAX_PINYIN_LEN);
+ if (m_parser->getAnnotation ())
+ strncpy (annotation, m_parser->getAnnotation (), MAX_PINYIN_LEN);
else /* the request might have been cancelled */
return;
@@ -593,10 +605,10 @@ CloudCandidates::processCloudResponse (GInputStream *stream, std::vector<Enhance
}
/* ignore annotation match while using Baidu source */
- if (cloud_source == BAIDU || !g_strcmp0 (annotation, text)) {
+ if (!g_strcmp0 (annotation, text)) {
if (retval == PARSER_NOERR) {
/* update to the cached candidates list */
- std::vector<std::string> &updated = parser->getStringCandidates ();
+ std::vector<std::string> &updated = m_parser->getStringCandidates ();
assert (m_candidates.size () == updated.size ());
for (guint i = 0; i < m_candidates.size (); ++i) {
diff --git a/src/PYPCloudCandidates.h b/src/PYPCloudCandidates.h
index aaccdba..ce8d55a 100644
--- a/src/PYPCloudCandidates.h
+++ b/src/PYPCloudCandidates.h
@@ -33,8 +33,7 @@
-class BaiduCloudCandidatesResponseJsonParser;
-class GoogleCloudCandidatesResponseJsonParser;
+class CloudCandidatesResponseParser;
namespace PY {
@@ -82,12 +81,14 @@ private:
/* get internal full pinyin representation */
String getFullPinyin ();
+
+ void resetCloudResponseParser ();
private:
SoupSession *m_session;
InputMode m_input_mode;
- BaiduCloudCandidatesResponseJsonParser *m_baidu_parser;
- GoogleCloudCandidatesResponseJsonParser *m_google_parser;
+ CloudInputSource m_input_source;
+ CloudCandidatesResponseParser *m_parser;
protected:
std::vector<EnhancedCandidate> m_candidates;
};
diff --git a/src/PYPConfig.cc b/src/PYPConfig.cc
index fb1ec00..9f014bc 100644
--- a/src/PYPConfig.cc
+++ b/src/PYPConfig.cc
@@ -156,7 +156,7 @@ LibPinyinConfig::initDefaultValues (void)
m_enable_cloud_input = FALSE;
m_cloud_candidates_number = 1;
- m_cloud_input_source = BAIDU;
+ m_cloud_input_source = CLOUD_INPUT_SOURCE_BAIDU;
m_cloud_request_delay_time = 600;
}
@@ -509,9 +509,9 @@ PinyinConfig::readDefaultValues (void)
g_warn_if_reached ();
}
m_cloud_input_source = read (CONFIG_CLOUD_INPUT_SOURCE, 0);
- if (m_cloud_input_source != BAIDU &&
- m_cloud_input_source != GOOGLE) {
- m_cloud_input_source = BAIDU;
+ if (m_cloud_input_source < CLOUD_INPUT_SOURCE_BAIDU ||
+ m_cloud_input_source >= CLOUD_INPUT_SOURCE_UNKNOWN) {
+ m_cloud_input_source = CLOUD_INPUT_SOURCE_BAIDU;
g_warn_if_reached ();
}
m_cloud_request_delay_time = read (CONFIG_CLOUD_REQUEST_DELAY_TIME, 600);
@@ -593,10 +593,10 @@ PinyinConfig::valueChanged (const std::string &schema_id,
}
}
else if (CONFIG_CLOUD_INPUT_SOURCE == name) {
- m_cloud_input_source = normalizeGVariant (value, BAIDU);
- if (m_cloud_input_source != BAIDU &&
- m_cloud_input_source != GOOGLE) {
- m_cloud_input_source = BAIDU;
+ m_cloud_input_source = normalizeGVariant (value, CLOUD_INPUT_SOURCE_BAIDU);
+ if (m_cloud_input_source < CLOUD_INPUT_SOURCE_BAIDU ||
+ m_cloud_input_source >= CLOUD_INPUT_SOURCE_UNKNOWN) {
+ m_cloud_input_source = CLOUD_INPUT_SOURCE_BAIDU;
g_warn_if_reached ();
}
}