From 68cf5c1c4afebd5bdcf28fa0c1f1b591b8da0f36 Mon Sep 17 00:00:00 2001 From: wordring Date: Wed, 26 Aug 2015 03:16:31 +0900 Subject: [PATCH] =?utf8?q?=E9=96=8B=E7=99=BA=E7=89=880.0.1a=E5=88=9D?= =?utf8?q?=E3=83=AA=E3=83=AA=E3=83=BC=E3=82=B9=E6=99=82=E2=99=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- languages/japanese/japanese.cpp | 5 +-- proxy/index.html | 57 ++++++++++++++++++++++++++++++++-- proxy/main.cpp | 47 ++++++++++++++++++++++------ proxy/proxy.pro | 8 ++--- proxy/tmservice.cpp | 69 +++++++++++++++++++++++++++++++++-------- proxy/tmservice.h | 9 ++++-- third-party/lib/ipadic/mecabrc | 15 +++++++++ 7 files changed, 177 insertions(+), 33 deletions(-) create mode 100644 third-party/lib/ipadic/mecabrc diff --git a/languages/japanese/japanese.cpp b/languages/japanese/japanese.cpp index c99745a..67166c2 100644 --- a/languages/japanese/japanese.cpp +++ b/languages/japanese/japanese.cpp @@ -23,13 +23,14 @@ void JapanesePlugin::set_settings(Settings const *settings) { m_settings = settings; + QByteArray system = "wordring.Japanese.mecab"; QByteArray dic = m_settings->value("Japanese/mecabdic").toByteArray(); QByteArray rc("--rcfile="); rc += dic + "/mecabrc"; dic.prepend("--dicdir="); - char *arg[2] = { rc.data(), dic.data() }; - m_mecab_model = MeCab::Model::create(2, arg); + char *arg[3] = { system.data(), rc.data(), dic.data() }; + m_mecab_model = MeCab::Model::create(3, arg); if(!m_mecab_model) qFatal(MeCab::getLastError()); m_mecab_tagger = m_mecab_model->createTagger(); m_mecab_lattice = m_mecab_model->createLattice(); diff --git a/proxy/index.html b/proxy/index.html index 2ecde39..c2054dd 100644 --- a/proxy/index.html +++ b/proxy/index.html @@ -3,7 +3,7 @@ -Welcome to wordring-tm. +Wordring 翻訳メモリー + +

Wordring 翻訳メモリー

+ +

以下のフォームにURLを入力して移動できます

Enter URL:
+ +

以下のサイトで試してみてください

+

+リンクをクリックして移動してください。
+いずれのサイトも文書をオープンソース・ライセンスで公開しています。 +(※いずれのサイトもサイトのデザインはオープンソースでありませんが、このプログラムは文章以外を共有しません。) +

+ +

Wordring 翻訳メモリーのサイト

+

wordring.net

+ +

Wordring 翻訳メモリーの開発サイト

+

OSDNで開発しています。

+ + diff --git a/proxy/main.cpp b/proxy/main.cpp index 1d90a0d..f6dcb98 100644 --- a/proxy/main.cpp +++ b/proxy/main.cpp @@ -18,12 +18,36 @@ #include #include #include +#include + +#include #include "debug.h" +/* +QFile s_debug_file; +void debug_message(QtMsgType, QMessageLogContext const&, QString const &message) +{ + s_debug_file.write(message.toLocal8Bit().data()); + s_debug_file.write("\r\n"); + //fprintf(stdout, "%s\n", message.toLocal8Bit().data()); +} +*/ int main(int argc, char *argv[]) { SetDebugMemoryLeaks(); +/* + AllocConsole(); + FILE* fp; + freopen_s(&fp, "CON","w",stdout); + freopen_s(&fp, "CON","r",stdin); +*/ +/* s_debug_file.setFileName("wordring_log.txt"); + s_debug_file.open(QIODevice::ReadWrite); + + qInstallMessageHandler(debug_message); +*/ + QApplication a(argc, argv); a.setOrganizationName("wordring"); @@ -37,9 +61,9 @@ int main(int argc, char *argv[]) // Language #ifdef QT_DEBUG settings.setValue( - "Japanese/mecabdic", QString(PROXYSRCDIR) + "/../third-party/lib/ipadic"); + "Japanese/mecabdic", "C:\\Users\\Kouichi\\Documents\\OSDN\\wordring-tm\\third-party\\lib\\ipadic"); #else - if(!settings.contains("Japanese/mecabdic")) +// if(!settings.contains("Japanese/mecabdic")) { QString mecabdic = app_path + "/ipadic"; QDir dir(mecabdic); @@ -57,14 +81,14 @@ int main(int argc, char *argv[]) #ifdef QT_DEBUG settings.setValue("ProxyHandler/jscode", QString(PROXYSRCDIR) + "/tm.js"); #else - if(!settings.contains("ProxyHandler/jscode")) +// if(!settings.contains("ProxyHandler/jscode")) settings.setValue("ProxyHandler/jscode", app_path + "/tm.js"); #endif // DefaultHtmlModule #ifdef QT_DEBUG settings.setValue("DefaultHtmlModule/file", QString(PROXYSRCDIR) + "/index.html"); #else - if(!settings.contains("DefaultHtmlModule/file")) +// if(!settings.contains("DefaultHtmlModule/file")) settings.setValue("DefaultHtmlModule/file", app_path + "/index.html"); #endif // Database @@ -73,15 +97,18 @@ int main(int argc, char *argv[]) QString path = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); settings.setValue("Database/root", path); } -//#ifdef QT_DEBUG - settings.setValue("WordringConnection/url", "ws://localhost:82/ws/tm"); -//#else -// if(!settings.contains("WordringConnection/url")) -// settings.setValue("WordringConnection/url", "ws://tm.wordring.net:80/"); -//#endif +#ifdef QT_DEBUG + settings.setValue("WordringConnection/url", "ws://wordring.net/ws"); +#else + if(!settings.contains("WordringConnection/url")) + settings.setValue("WordringConnection/url", "ws://wordring.net/ws"); +#endif TM::Service *service = new TM::Service(&settings, &a); + + // メインウィンドウ。 MainWindow w(&settings, service); w.setFont(QFont("Meiryo", 10.5)); + service->load_languages(QApplication::applicationDirPath() + "/plugins"); HttpServer *server = new HttpServer(&settings, &w); diff --git a/proxy/proxy.pro b/proxy/proxy.pro index f9686bf..c0148c9 100644 --- a/proxy/proxy.pro +++ b/proxy/proxy.pro @@ -19,8 +19,8 @@ SOURCES += main.cpp\ textwidget.cpp \ tmtext.cpp \ tmdatabase.cpp \ - tmcandidatewidget.cpp \ - tmeditorwidget.cpp + tmcandidatewidget.cpp \ + tmeditorwidget.cpp HEADERS += mainwindow.h \ tmhttp.h \ @@ -29,8 +29,8 @@ HEADERS += mainwindow.h \ textwidget.h \ tmtext.h \ tmdatabase.h \ - tmcandidatewidget.h \ - tmeditorwidget.h + tmcandidatewidget.h \ + tmeditorwidget.h DEFINES += PROXYSRCDIR=\\\"$$PWD\\\" #INCLUDEPATH += $$PWD/../language diff --git a/proxy/tmservice.cpp b/proxy/tmservice.cpp index c0259c6..5f30f20 100644 --- a/proxy/tmservice.cpp +++ b/proxy/tmservice.cpp @@ -33,7 +33,7 @@ TM::WordringConnection::WordringConnection(Settings *settings, Service *service) { } -void TM::WordringConnection::find_sentence( +bool TM::WordringConnection::find_sentence( QString site_name, int scode, int tcode, QString ssentence, qint32 token) { QJsonObject jobject; @@ -49,14 +49,14 @@ void TM::WordringConnection::find_sentence( m_requests.enqueue(json); send(); + + return true; } -void TM::WordringConnection::insert_sentence( +bool TM::WordringConnection::insert_sentence( QString site_name, int scode, int tcode, QString ssentence, QString tsentence, QByteArray word_link) { - if(!m_request_limit) return; // 制限値が0の場合、送信できない。 - QJsonObject jobject; jobject["cmd"] = "insert"; @@ -72,7 +72,7 @@ void TM::WordringConnection::insert_sentence( QJsonDocument jlink = QJsonDocument::fromJson(word_link, &error); assert(error.error == QJsonParseError::NoError); - if(error.error != QJsonParseError::NoError) return; + if(error.error != QJsonParseError::NoError) return false; jobject["json"] = jlink.object(); } @@ -81,22 +81,39 @@ void TM::WordringConnection::insert_sentence( m_requests.enqueue(json); send(); + + return true; } -void TM::WordringConnection::onConnected() { send(); } +void TM::WordringConnection::onConnected() +{ + qDebug() << "WordringConnection::onConnected()"; + send(); +} void TM::WordringConnection::onDisconnected() { + m_service->do_wordring_disconnected(); if(m_socket) m_socket->deleteLater(); m_socket = nullptr; } void TM::WordringConnection::onError(QAbstractSocket::SocketError e) { + qDebug() << "WordringConnection::onError()"; + if(m_socket) qDebug() << "WordringConnection::onError" << m_socket->errorString(); + if(e == QAbstractSocket::RemoteHostClosedError) return; - if(!m_request_limit) return; + //if(!m_request_limit) return; + /* m_request_limit = 0; + static int error_count = 4; + if(m_request_limit == 0) + { + --error_count; + if(!error_count) return; + } QMessageBox mb; mb.setWindowTitle("wordring translation memory"); @@ -107,6 +124,7 @@ void TM::WordringConnection::onError(QAbstractSocket::SocketError e) msg += "

The system goes into internal mode.

"; mb.setText(msg); mb.exec(); + */ } void TM::WordringConnection::onTextMessageReceived(QString const &message) @@ -122,6 +140,7 @@ void TM::WordringConnection::onTextMessageReceived(QString const &message) QString cmd = json["cmd"].toString(); if(cmd == "found") sentence_found(json); + else if(cmd == "not_found") sentence_not_found(json); } @@ -186,7 +205,7 @@ void TM::WordringConnection::sentence_found(QJsonObject json) assert(!ssentence.isEmpty()); assert(!tsentence.isEmpty()); assert(user_id); - //assert(token); + assert(token); if(json.contains("json")) { @@ -203,11 +222,19 @@ void TM::WordringConnection::sentence_found(QJsonObject json) if(ssentence.isEmpty()) return; if(tsentence.isEmpty()) return; if(!user_id) return; - // if(!token) return; + if(!token) return; m_service->sentence_found( site, scode, tcode, ssentence, tsentence, jdata, user_id, token); } +void TM::WordringConnection::sentence_not_found(QJsonObject json) +{ + qint32 token = json["token"].toInt(); + assert(token); + if(!token) return; + m_service->sentence_not_found(token); +} + // Service -------------------------------------------------------------------- TM::Service::Service(Settings *settings, QObject *parent) @@ -399,9 +426,12 @@ void TM::Service::insert_sentence(QString site_name, int scode, int tcode, target_sentence_data->json = sentence->to_json(); // サーバへ登録。 - m_wordring->insert_sentence(site_name, scode, tcode, + if( m_wordring_dispatcher.size() < m_wordring_dispatcher_limit) + { + m_wordring->insert_sentence(site_name, scode, tcode, source_sentence_data->sentence, target_sentence_data->sentence, target_sentence_data->json); + } // データベースへ登録。 QMetaObject::invokeMethod( @@ -442,6 +472,7 @@ void TM::Service::sentence_found( { dispatcher_data_type ddata = m_database_dispatcher.get(token); if(ddata.connection.isNull()) return; + // SocketConnectionに返答する。 ddata.connection->sentence_found(ddata.segment_id, ddata.index, result); } @@ -453,9 +484,11 @@ void TM::Service::sentence_not_found(QString site_name, qint32 scode, qint32 tco if(ddata.connection.isNull()) return; // サーバから検索。 - if(m_wordring_dispatcher_limit < m_wordring_dispatcher.size()) return; - int wordring_token = m_wordring_dispatcher.set(ddata); - m_wordring->find_sentence(site_name, scode, tcode, ssentence, wordring_token); + if(m_wordring_dispatcher.size() < m_wordring_dispatcher_limit) + { + int wordring_token = m_wordring_dispatcher.set(ddata); + m_wordring->find_sentence(site_name, scode, tcode, ssentence, wordring_token); + } } /*! @@ -516,7 +549,17 @@ void TM::Service::sentence_found(QString site, qint32 scode, qint32 tcode, } } +void TM::Service::sentence_not_found(quint32 token) +{ + m_wordring_dispatcher.get(token); +} +void TM::Service::do_wordring_disconnected() +{ + qDebug() << "Service::do_wordring_disconnected()" + << "dispatcer count=" << m_wordring_dispatcher.size(); + m_wordring_dispatcher.clear(); +} diff --git a/proxy/tmservice.h b/proxy/tmservice.h index f48e0c4..876a164 100644 --- a/proxy/tmservice.h +++ b/proxy/tmservice.h @@ -37,6 +37,8 @@ public: int size() const { return m_map.size(); } + void clear() { m_map.clear(); } + int set(T p) { int token = 0; @@ -73,10 +75,10 @@ class WordringConnection : public QObject public: WordringConnection(Settings *settings, Service *service); - void find_sentence(QString site_name, int scode, int tcode, + bool find_sentence(QString site_name, int scode, int tcode, QString ssentence, qint32 token); - void insert_sentence(QString site_name, int scode, int tcode, + bool insert_sentence(QString site_name, int scode, int tcode, QString ssentence, QString tsentence, QByteArray word_link); public slots: @@ -92,6 +94,7 @@ private: void send(); void sentence_found(QJsonObject json); + void sentence_not_found(QJsonObject json); private: Settings *m_settings; @@ -157,6 +160,8 @@ public: void sentence_found(QString site, qint32 scode, qint32 tcode, QString ssentence, QString tsentence, QByteArray json, quint32 user_id, qint32 token); + void sentence_not_found(quint32 token); + void do_wordring_disconnected(); private: Settings *m_settings; diff --git a/third-party/lib/ipadic/mecabrc b/third-party/lib/ipadic/mecabrc new file mode 100644 index 0000000..771caf2 --- /dev/null +++ b/third-party/lib/ipadic/mecabrc @@ -0,0 +1,15 @@ +; +; Configuration file of MeCab +; +; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $; +; +; dicdir = + +; userdic = /home/foo/bar/user.dic + +; output-format-type = wakati +; input-buffer-size = 8192 + +; node-format = %m\n +; bos-format = %S\n +; eos-format = EOS\n -- 2.11.0