~vbursian/research-assistant/intervers

« back to all changes in this revision

Viewing changes to RADist/CommonDist.cpp

  • Committer: Viktor Bursian
  • Date: 2013-06-06 15:10:08 UTC
  • Revision ID: vbursian@gmail.com-20130606151008-6641eh62f0lgx8jt
Tags: version_0.3.0
versionĀ 0.3.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
////////////////////////////////////////////////////////////////////////////////
 
2
/*! @file CommonDist.cpp   ŠžŠ±Ń‰ŠøŠµ ŠŗŠ»Š°ŃŃŃ‹ Š“Š»Ń ŃŠ¾Š·Š“Š°Š½Šøя Šø ŠøŠ½ŃŃ‚Š°Š»ŃŃ†ŠøŠø Š“ŠøстрŠøŠ±ŃƒŃ‚ŠøŠ²Š¾Š².
 
3
- Uses  QtGui v.4.6  -  http://qt.nokia.com/
 
4
- Uses  RANet - Research Assistant Net Library (based on ANSI C++).
 
5
- Copyright(C) 2011, Viktor E. Bursian, St.Petersburg, Russia.
 
6
                     Viktor.Bursian@mail.ioffe.ru
 
7
*///////////////////////////////////////////////////////////////////////////////
 
8
#include "CommonDist.h"
 
9
#include <QApplication>
 
10
#include <QMessageBox>
 
11
#include <QWizard>
 
12
#include <QVBoxLayout>
 
13
#include <QLabel>
 
14
#include <QTimer>
 
15
#include <QProcess>
 
16
#include <QDebug>
 
17
namespace RA/*RADist*/ {
 
18
//------------------------------------------------------------------------------
 
19
 
 
20
const QStringList         sProjectInfo::CoreProgFiles4unix
 
21
                              ( QStringList()
 
22
                                << "RA.sh"
 
23
                                << QString("bin")+QDir::separator()+"RA"
 
24
                                << QString("bin")+QDir::separator()+"libRA*.so*"
 
25
                              );
 
26
 
 
27
const QStringList         sProjectInfo::CoreProgFiles4win32
 
28
                              ( QStringList()
 
29
                                << "RA.bat"
 
30
                                << QString("bin")+QDir::separator()+"RA.exe"
 
31
                                << QString("bin")+QDir::separator()+"RA*.dll"
 
32
                              );
 
33
 
 
34
const QStringList         sProjectInfo::CoreProgFiles4all
 
35
                              ( QStringList()
 
36
                                << QString("locales")+QDir::separator()+"RA_*.qm"
 
37
                                << QString("help")+QDir::separator()+"RA.qch"
 
38
                                << QString("help")+QDir::separator()+"RA.qhc"
 
39
                                << QString("help")+QDir::separator()+"images"
 
40
                                << QString("help")+QDir::separator()+"*.html"
 
41
                                << "HistoryLog.txt"
 
42
                                << "License.html"
 
43
                                << "Manual.html"
 
44
                              );
 
45
 
 
46
const QStringList         sProjectInfo::PluginFiles4unix
 
47
                              ( QStringList()
 
48
                                << QString("bin")+QDir::separator()+"librap%1.so"
 
49
                              );
 
50
 
 
51
const QStringList         sProjectInfo::PluginFiles4win32
 
52
                              ( QStringList()
 
53
                                << QString("bin")+QDir::separator()+"rap%1%2.dll"
 
54
                              );
 
55
 
 
56
const QStringList         sProjectInfo::PluginFiles4both
 
57
                              ( QStringList()
 
58
                                << QString("locales")+QDir::separator()+"%1_*.qm"
 
59
                                << QString("extrafiles")+QDir::separator()+"%1"
 
60
                              );
 
61
 
 
62
const QStringList         sProjectInfo::CopySrcFiles
 
63
                              ( QStringList()
 
64
                                << "HistoryLog.txt"
 
65
                                << "License.html"
 
66
                                << "Manual.html"
 
67
                                << "RA.sh"
 
68
                                << "RA.bat"
 
69
                                << "RA.pro"
 
70
                              );
 
71
 
 
72
const QStringList         sProjectInfo::CopySrcDirs
 
73
                              ( QStringList()
 
74
                                << "docs"
 
75
                                << "help"
 
76
                                << "locales"
 
77
                                << "extrafiles"
 
78
                                << "RADist"
 
79
                                << "RAInst"
 
80
                                << "RAGUI"
 
81
                                << "RAMain"
 
82
                                << "RANet"
 
83
                                << "RAPlugins"
 
84
                                << "scripts"
 
85
                              );
 
86
 
 
87
const QStringList         sProjectInfo::CoreSrcFiles
 
88
                              ( QStringList()
 
89
                                << "HistoryLog.txt"
 
90
                                << "License.html"
 
91
                                << "Manual.html"
 
92
                                << "RA.sh"
 
93
                                << "RA.bat"
 
94
                                << "RA.pro"
 
95
                                << "docs"
 
96
                                << "help"
 
97
                                << QString("locales")+QDir::separator()+"RA_*"
 
98
//                                << QString("extrafiles")+QDir::separator()+"core"
 
99
                                << "RADist"
 
100
                                << "RAInst"
 
101
                                << "RAGUI"
 
102
                                << "RAMain"
 
103
                                << "RANet"
 
104
                                << "scripts"
 
105
                              );
 
106
 
 
107
const QStringList         sProjectInfo::PluginSrcFiles
 
108
                              ( QStringList()
 
109
                                << QString("locales")+QDir::separator()+"%1_ru.ts"
 
110
                                << QString("locales")+QDir::separator()+"%1_ru.qm"
 
111
                                << QString("extrafiles")+QDir::separator()+"%1"
 
112
                                << QString("RAPlugins")+QDir::separator()+"%1"
 
113
                              );
 
114
 
 
115
const QStringList         sProjectInfo::Files4install
 
116
                              ( QStringList()
 
117
                                << QString("..")+QDir::separator()
 
118
                                  +"Qt.release"+QDir::separator()
 
119
                                  +"win32"+QDir::separator()
 
120
                                  +"bin"+QDir::separator()+"QtCore4.dll"
 
121
                                << QString("..")+QDir::separator()
 
122
                                  +"Qt.release"+QDir::separator()
 
123
                                  +"win32"+QDir::separator()
 
124
                                  +"bin"+QDir::separator()+"QtGui4.dll"
 
125
                                << QString("..")+QDir::separator()
 
126
                                  +"Qt.release"+QDir::separator()
 
127
                                  +"win32"+QDir::separator()
 
128
                                  +"bin"+QDir::separator()+"libgcc_s_dw2-1.dll"
 
129
                                << QString("..")+QDir::separator()
 
130
                                  +"Qt.release"+QDir::separator()
 
131
                                  +"win32"+QDir::separator()
 
132
                                  +"bin"+QDir::separator()+"mingwm10.dll"
 
133
                                << QString("..")+QDir::separator()
 
134
                                  +"7z"+QDir::separator()+"7za"
 
135
                                << QString("..")+QDir::separator()
 
136
                                  +"7z"+QDir::separator()+"7za.exe"
 
137
                                << QString("RADist")+QDir::separator()
 
138
                                  +"Licenses(briefly).html"
 
139
                                << QString("help")+QDir::separator()
 
140
                                  +"GNU_GPL_3_0.html"
 
141
                                << QString("help")+QDir::separator()
 
142
                                  +"GNU_FDL_1_3.html"
 
143
                              );
 
144
 
 
145
//-------------------------------------------------- sProjectInfo::sPartInfo ---
 
146
 
 
147
sProjectInfo::sPartInfo::sPartInfo ()
 
148
    :Version(-1,-1)
 
149
    ,Todays(false)
 
150
    ,AltPlatformExists(false)
 
151
    ,AltPlatformTodays(false)
 
152
    ,TranslationExists(false)
 
153
    ,TranslationOK(false)
 
154
{
 
155
};
 
156
 
 
157
sProjectInfo::sPartInfo::sPartInfo (rcsVersion  version
 
158
                                   ,QString     user_friendly_name)
 
159
    :Version(version)
 
160
    ,UserFriendlyName(user_friendly_name)
 
161
    ,Todays(false)
 
162
    ,AltPlatformExists(false)
 
163
    ,AltPlatformTodays(false)
 
164
    ,TranslationExists(false)
 
165
    ,TranslationOK(false)
 
166
{
 
167
};
 
168
 
 
169
//------------------------------------------------------------- sProjectInfo ---
 
170
 
 
171
sProjectInfo::sProjectInfo ()
 
172
    :Core(NULL)
 
173
{
 
174
};
 
175
 
 
176
//--------------------------------------------------------------- sReadyPage ---
 
177
 
 
178
sReadyPage::sReadyPage (QString  title
 
179
                       ,QString  button_text)
 
180
{
 
181
  setTitle(title);
 
182
  setCommitPage(true);
 
183
  setButtonText(QWizard::CommitButton,button_text);
 
184
  setButtonText(QWizard::FinishButton,button_text);
 
185
 
 
186
  QVBoxLayout *               Layout = new QVBoxLayout;
 
187
  setLayout(Layout);
 
188
 
 
189
  Layout->addWidget(new QLabel(""));
 
190
};
 
191
 
 
192
//---------------------------------------------------------------- sDoItPage ---
 
193
 
 
194
sDoItPage::sDoItPage (QString  doing_title
 
195
                     ,QString  button_text_while_doing
 
196
                     ,QString  success_title
 
197
                     ,QString  button_text_on_success
 
198
                     ,QString  error_title)
 
199
    :Success(false)
 
200
    ,Done(false)
 
201
    ,SuccessTitle(success_title)
 
202
    ,ErrorTitle(error_title)
 
203
    ,ButtonTextOnSuccess(button_text_on_success)
 
204
{
 
205
  setTitle(doing_title);
 
206
 
 
207
  QVBoxLayout *               Layout = new QVBoxLayout;
 
208
  setLayout(Layout);
 
209
 
 
210
  Report = new QTextEdit;
 
211
  Layout->addWidget(Report);
 
212
 
 
213
  setButtonText(QWizard::NextButton,button_text_while_doing);
 
214
  setButtonText(QWizard::CommitButton,button_text_while_doing);
 
215
  setButtonText(QWizard::FinishButton,button_text_while_doing);
 
216
};
 
217
 
 
218
 
 
219
void  sDoItPage::initializePage ()
 
220
{
 
221
  QList<QWizard::WizardButton> Buttons;
 
222
  Buttons << QWizard::NextButton << QWizard::CommitButton
 
223
                                 << QWizard::FinishButton;
 
224
  wizard()->setButtonLayout(Buttons);
 
225
  QTimer::singleShot(10,this,SLOT(DoIt()));
 
226
};
 
227
 
 
228
 
 
229
bool  sDoItPage::isComplete () const
 
230
{
 
231
  return Done;
 
232
};
 
233
 
 
234
 
 
235
void  sDoItPage::Out (QString  text)
 
236
{
 
237
  Report->insertPlainText(text);
 
238
  Report->moveCursor(QTextCursor::End);
 
239
  Report->repaint();
 
240
};
 
241
 
 
242
 
 
243
void  sDoItPage::DoIt ()
 
244
{
 
245
  Success = Job();
 
246
  if( Success ){
 
247
    setTitle(SuccessTitle);
 
248
    setButtonText(QWizard::NextButton,ButtonTextOnSuccess);
 
249
    setButtonText(QWizard::CommitButton,ButtonTextOnSuccess);
 
250
    setButtonText(QWizard::FinishButton,ButtonTextOnSuccess);
 
251
  }else{
 
252
    setTitle(ErrorTitle);
 
253
    setButtonText(QWizard::NextButton,"OK");
 
254
    setButtonText(QWizard::CommitButton,"OK");
 
255
    setButtonText(QWizard::FinishButton,"OK");
 
256
  };
 
257
  Done=true;
 
258
  emit completeChanged();
 
259
};
 
260
 
 
261
 
 
262
bool  sDoItPage::Execute (QString      prog
 
263
                         ,QStringList  args
 
264
                         ,QString      working_dir
 
265
                         ,int          time_out/*s*/)
 
266
{
 
267
  QProcess *                  Process = new QProcess;
 
268
  int                         t = 0;
 
269
  int                         ExitCode;
 
270
  Out("\n____________________________________________________________\n");
 
271
  Out(prog+"   "+args.join(" ")+"   (in "+working_dir+")\n\n");
 
272
  Process->setWorkingDirectory(working_dir);
 
273
  Process->start( prog , args );
 
274
  if( ! Process->waitForStarted() ){
 
275
    Out("*** ERROR *** cannot start");
 
276
    return false;
 
277
  };
 
278
  while( ! Process->waitForFinished(100) ){
 
279
    t++;
 
280
    Out(QString::fromLocal8Bit(Process->read(100)));
 
281
    if( (time_out > 0) && (t > 10*time_out) ){
 
282
      Out("*** ERROR *** timeout");
 
283
      return false;
 
284
    };
 
285
  };
 
286
  Out(QString::fromLocal8Bit(Process->readAll()));
 
287
  ExitCode = Process->exitCode();
 
288
  Out( QString("\n_______________________________________exit_code_")
 
289
      +QString().setNum(ExitCode)
 
290
      +QString("___\n") );
 
291
  return (ExitCode == 0);
 
292
};
 
293
 
 
294
 
 
295
bool  sDoItPage::Zip (QString      zip_name
 
296
                     ,QStringList  files
 
297
                     ,QString      working_dir
 
298
                     ,int          time_out/*s*/)
 
299
{
 
300
  return Execute(QString("..")+QDir::separator()+"7z"+QDir::separator()+"7za"
 
301
                ,QStringList() << "a" << "-r" << zip_name << files
 
302
//                ,QStringList() << "a" << zip_name << files
 
303
                ,working_dir
 
304
                ,time_out);
 
305
};
 
306
 
 
307
 
 
308
bool  sDoItPage::Unzip (QString      zip_name
 
309
                       ,QString      destination_dir
 
310
                       ,int          time_out/*s*/)
 
311
{
 
312
  return Execute(QString(".")+QDir::separator()+"7za"
 
313
                ,QStringList() << "x" << "-y"
 
314
                               << QString("-o")+destination_dir
 
315
                               << zip_name
 
316
                ,qApp->applicationDirPath()
 
317
                ,time_out);
 
318
};
 
319
 
 
320
//------------------------------------------------------------------------------
 
321
}; //namespace RA/*RADist*/