diff options
| author | Peng Wu <alexepico@gmail.com> | 2020-09-21 15:37:18 +0800 |
|---|---|---|
| committer | Peng Wu <alexepico@gmail.com> | 2020-09-21 15:37:18 +0800 |
| commit | 2ab5cf72ffe5d71c3bb182fec7b78133991beedd (patch) | |
| tree | 5cdb2c064409a655c5f500ed194de036272183c2 /src | |
| parent | 5bb4e1afcb01dcd2aa90702cd3268b22589f8d66 (diff) | |
refactor m_parser variable in class CloudCandidates
Diffstat (limited to 'src')
| -rw-r--r-- | src/PYConfig.cc | 2 | ||||
| -rw-r--r-- | src/PYConfig.h | 5 | ||||
| -rw-r--r-- | src/PYPCloudCandidates.cc | 62 | ||||
| -rw-r--r-- | src/PYPCloudCandidates.h | 9 | ||||
| -rw-r--r-- | src/PYPConfig.cc | 16 |
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 (); } } |
