OSDN Git Service

開発版0.0.1a初リリース時♪
authorwordring <kouichi_pm@users.osdn.me>
Tue, 25 Aug 2015 18:16:31 +0000 (03:16 +0900)
committerwordring <kouichi_pm@users.osdn.me>
Tue, 25 Aug 2015 18:16:31 +0000 (03:16 +0900)
languages/japanese/japanese.cpp
proxy/index.html
proxy/main.cpp
proxy/proxy.pro
proxy/tmservice.cpp
proxy/tmservice.h
third-party/lib/ipadic/mecabrc [new file with mode: 0644]

index c99745a..67166c2 100644 (file)
@@ -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();
index 2ecde39..c2054dd 100644 (file)
@@ -3,7 +3,7 @@
 
 <head>
 <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-<title>Welcome to wordring-tm.</title>
+<title>Wordring 翻訳メモリー</title>
 
 <script type="text/javascript">
 window.wordring = {
@@ -32,17 +32,70 @@ window.onload = function() {
 
 }
 </script>
+<style type="text/css">
+
+body {
+       font-family: "ヒラギノ角ゴ ProN W3", "Hiragino Kaku Gothic ProN", "メイリオ", Meiryo, sans-serif;
+       color: #666666;
+       padding: 1em 2em 2em 2em;
+}
+
+a { color: #3b7960; }
+a:visited { color: #3b7960; }
+a:hover {      color: #c85179; }
+
+img {
+       max-width: 100%;
+}
+h1 {
+       
+}
+h2 {
+       font-weight: 100;
+       font-size: 1em;
+       background-color: #bed2c3;
+       margin-top: 1em;
+}
+hr {
+       height: 1px;
+       background-color: #bed2c3;
+       border: none;
+       color: #bed2c3;
+}
+</style>
 </head>
 
 <body>
 
+<h1>Wordring 翻訳メモリー</h1>
+
+<h2>以下のフォームにURLを入力して移動できます</h2>
 <form name="url_form">
 Enter URL:<input type="text" name="url_input"><input type="submit" value="Enter">
 </form>
+
+<h2>以下のサイトで試してみてください</h2>
 <ul>
 <li><a id="sqlite" href="http://www.sqlite.org/">www.sqlite.org</a></li>
-<li><a id="qt" href="http://www.qt.io/">www.qt.io</a></li>
+<li><a id="qt" href="http://doc.qt.io/">doc.qt.io</a></li>
 </ul>
+<p>
+リンクをクリックして移動してください。<br>
+いずれのサイトも文書をオープンソース・ライセンスで公開しています。
+(※いずれのサイトもサイトのデザインはオープンソースでありませんが、このプログラムは文章以外を共有しません。)
+</p>
+
+<h2>Wordring 翻訳メモリーのサイト</h2>
+<p><a href="http://wordring.net/">wordring.net</a></p>
+
+<h2>Wordring 翻訳メモリーの開発サイト</h2>
+<p><a href="http://osdn.jp">OSDN</a>で開発しています。</p>
+<ul>
+       <li><a href="http://osdn.jp/projects/wordring-tm/releases/">ダウンロード</a></li>
+       <li><a href="http://osdn.jp/projects/wordring-tm/howto/usage">使い方</a></li>
+       <li><a href="http://osdn.jp/projects/wordring-tm/">開発コミュニティ</a></li>
+</ul>
+
 </body>
 
 </html>
index 1d90a0d..f6dcb98 100644 (file)
 #include <QLinkedList>
 #include <QFont>
 #include <QDir>
+#include <QFile>
+
+#include <windows.h>
 
 #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);
index f9686bf..c0148c9 100644 (file)
@@ -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
index c0259c6..5f30f20 100644 (file)
@@ -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 += "<p>The system goes into internal mode.</p>";
        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();
+}
 
 
 
index f48e0c4..876a164 100644 (file)
@@ -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 (file)
index 0000000..771caf2
--- /dev/null
@@ -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