-rw-r--r-- | noncore/settings/aqpkg/ipkg.cpp | 22 | ||||
-rw-r--r-- | noncore/settings/aqpkg/ipkg.h | 2 |
2 files changed, 24 insertions, 0 deletions
diff --git a/noncore/settings/aqpkg/ipkg.cpp b/noncore/settings/aqpkg/ipkg.cpp index 407abe9..7afe04f 100644 --- a/noncore/settings/aqpkg/ipkg.cpp +++ b/noncore/settings/aqpkg/ipkg.cpp | |||
@@ -34,16 +34,17 @@ using namespace std; | |||
34 | #include <opie/oprocess.h> | 34 | #include <opie/oprocess.h> |
35 | 35 | ||
36 | #include "utils.h" | 36 | #include "utils.h" |
37 | #include "ipkg.h" | 37 | #include "ipkg.h" |
38 | #include "global.h" | 38 | #include "global.h" |
39 | 39 | ||
40 | Ipkg :: Ipkg() | 40 | Ipkg :: Ipkg() |
41 | { | 41 | { |
42 | proc = 0; | ||
42 | } | 43 | } |
43 | 44 | ||
44 | Ipkg :: ~Ipkg() | 45 | Ipkg :: ~Ipkg() |
45 | { | 46 | { |
46 | } | 47 | } |
47 | 48 | ||
48 | // Option is what we are going to do - install, upgrade, download, reinstall | 49 | // Option is what we are going to do - install, upgrade, download, reinstall |
49 | // package is the package name to install - either a fully qualified path and ipk | 50 | // package is the package name to install - either a fully qualified path and ipk |
@@ -132,16 +133,19 @@ bool Ipkg :: runIpkg( ) | |||
132 | } | 133 | } |
133 | 134 | ||
134 | // Execute command | 135 | // Execute command |
135 | dependantPackages = new QList<QString>; | 136 | dependantPackages = new QList<QString>; |
136 | dependantPackages->setAutoDelete( true ); | 137 | dependantPackages->setAutoDelete( true ); |
137 | 138 | ||
138 | ret = executeIpkgCommand( commands, option ); | 139 | ret = executeIpkgCommand( commands, option ); |
139 | 140 | ||
141 | if ( aborted ) | ||
142 | return false; | ||
143 | |||
140 | if ( option == "install" || option == "reinstall" ) | 144 | if ( option == "install" || option == "reinstall" ) |
141 | { | 145 | { |
142 | // If we are not removing packages and make links option is selected | 146 | // If we are not removing packages and make links option is selected |
143 | // create the links | 147 | // create the links |
144 | createLinks = true; | 148 | createLinks = true; |
145 | if ( flags & MAKE_LINKS ) | 149 | if ( flags & MAKE_LINKS ) |
146 | { | 150 | { |
147 | emit outputText( " " ); | 151 | emit outputText( " " ); |
@@ -251,18 +255,27 @@ void Ipkg :: removeStatusEntry() | |||
251 | 255 | ||
252 | // Remove old status file and put tmp stats file in its place | 256 | // Remove old status file and put tmp stats file in its place |
253 | remove( statusFile ); | 257 | remove( statusFile ); |
254 | rename( outStatusFile, statusFile ); | 258 | rename( outStatusFile, statusFile ); |
255 | } | 259 | } |
256 | 260 | ||
257 | int Ipkg :: executeIpkgCommand( QStringList &cmd, const QString option ) | 261 | int Ipkg :: executeIpkgCommand( QStringList &cmd, const QString option ) |
258 | { | 262 | { |
263 | // If one is already running - should never be but just to be safe | ||
264 | if ( proc ) | ||
265 | { | ||
266 | delete proc; | ||
267 | proc = 0; | ||
268 | } | ||
269 | |||
259 | // OK we're gonna use OProcess to run this thing | 270 | // OK we're gonna use OProcess to run this thing |
260 | proc = new OProcess(); | 271 | proc = new OProcess(); |
272 | aborted = false; | ||
273 | |||
261 | 274 | ||
262 | // Connect up our slots | 275 | // Connect up our slots |
263 | connect(proc, SIGNAL(processExited(OProcess *)), | 276 | connect(proc, SIGNAL(processExited(OProcess *)), |
264 | this, SLOT( processFinished())); | 277 | this, SLOT( processFinished())); |
265 | 278 | ||
266 | connect(proc, SIGNAL(receivedStdout(OProcess *, char *, int)), | 279 | connect(proc, SIGNAL(receivedStdout(OProcess *, char *, int)), |
267 | this, SLOT(commandStdout(OProcess *, char *, int))); | 280 | this, SLOT(commandStdout(OProcess *, char *, int))); |
268 | 281 | ||
@@ -312,20 +325,29 @@ void Ipkg::commandStderr(OProcess*, char *buffer, int buflen) | |||
312 | lineStr=lineStr.left( buflen ); | 325 | lineStr=lineStr.left( buflen ); |
313 | emit outputText( lineStr ); | 326 | emit outputText( lineStr ); |
314 | buffer[0] = '\0'; | 327 | buffer[0] = '\0'; |
315 | } | 328 | } |
316 | 329 | ||
317 | void Ipkg::processFinished() | 330 | void Ipkg::processFinished() |
318 | { | 331 | { |
319 | delete proc; | 332 | delete proc; |
333 | proc = 0; | ||
320 | finished = true; | 334 | finished = true; |
321 | } | 335 | } |
322 | 336 | ||
323 | 337 | ||
338 | void Ipkg :: abort() | ||
339 | { | ||
340 | if ( proc ) | ||
341 | { | ||
342 | proc->kill(); | ||
343 | aborted = true; | ||
344 | } | ||
345 | } | ||
324 | 346 | ||
325 | /* | 347 | /* |
326 | int Ipkg :: executeIpkgCommand( QString &cmd, const QString option ) | 348 | int Ipkg :: executeIpkgCommand( QString &cmd, const QString option ) |
327 | { | 349 | { |
328 | FILE *fp = NULL; | 350 | FILE *fp = NULL; |
329 | char line[130]; | 351 | char line[130]; |
330 | QString lineStr, lineStrOld; | 352 | QString lineStr, lineStrOld; |
331 | int ret = false; | 353 | int ret = false; |
diff --git a/noncore/settings/aqpkg/ipkg.h b/noncore/settings/aqpkg/ipkg.h index 25bae59..f08667b 100644 --- a/noncore/settings/aqpkg/ipkg.h +++ b/noncore/settings/aqpkg/ipkg.h | |||
@@ -54,20 +54,22 @@ public: | |||
54 | 54 | ||
55 | signals: | 55 | signals: |
56 | void outputText( const QString &text ); | 56 | void outputText( const QString &text ); |
57 | 57 | ||
58 | public slots: | 58 | public slots: |
59 | void commandStdout(OProcess*, char *buffer, int buflen); | 59 | void commandStdout(OProcess*, char *buffer, int buflen); |
60 | void commandStderr(OProcess*, char *buffer, int buflen); | 60 | void commandStderr(OProcess*, char *buffer, int buflen); |
61 | void processFinished(); | 61 | void processFinished(); |
62 | void abort(); | ||
62 | 63 | ||
63 | 64 | ||
64 | private: | 65 | private: |
65 | bool createLinks; | 66 | bool createLinks; |
67 | bool aborted; | ||
66 | QString option; | 68 | QString option; |
67 | QString package; | 69 | QString package; |
68 | QString destination; | 70 | QString destination; |
69 | QString destDir; | 71 | QString destDir; |
70 | QString runtimeDir; | 72 | QString runtimeDir; |
71 | OProcess *proc; | 73 | OProcess *proc; |
72 | int flags; | 74 | int flags; |
73 | bool finished; | 75 | bool finished; |