author | drw <drw> | 2004-12-21 19:58:58 (UTC) |
---|---|---|
committer | drw <drw> | 2004-12-21 19:58:58 (UTC) |
commit | 2e21be2e93866511f55e2a200514b3ce15b14791 (patch) (unidiff) | |
tree | 0aa6ca907bfbcfc5b8abbc5a83f0a2cae70730fe | |
parent | 570c8709d1d7622e2a57432f40a67213216d2606 (diff) | |
download | opie-2e21be2e93866511f55e2a200514b3ce15b14791.zip opie-2e21be2e93866511f55e2a200514b3ce15b14791.tar.gz opie-2e21be2e93866511f55e2a200514b3ce15b14791.tar.bz2 |
Fix app linking to link all dependent packages as well as selected packages.
-rw-r--r-- | noncore/settings/packagemanager/installdlg.cpp | 52 | ||||
-rw-r--r-- | noncore/settings/packagemanager/installdlg.h | 2 |
2 files changed, 35 insertions, 19 deletions
diff --git a/noncore/settings/packagemanager/installdlg.cpp b/noncore/settings/packagemanager/installdlg.cpp index 494603b..985e2bd 100644 --- a/noncore/settings/packagemanager/installdlg.cpp +++ b/noncore/settings/packagemanager/installdlg.cpp | |||
@@ -33,54 +33,54 @@ _;:, .> :=|. This file is free software; you can | |||
33 | #include <opie2/oprocess.h> | 33 | #include <opie2/oprocess.h> |
34 | 34 | ||
35 | #include <qpe/fileselector.h> | 35 | #include <qpe/fileselector.h> |
36 | #include <qpe/resource.h> | 36 | #include <qpe/resource.h> |
37 | #include <qpe/storage.h> | 37 | #include <qpe/storage.h> |
38 | 38 | ||
39 | #include <qapplication.h> | 39 | #include <qapplication.h> |
40 | #include <qcombobox.h> | 40 | #include <qcombobox.h> |
41 | #include <qfileinfo.h> | 41 | #include <qfileinfo.h> |
42 | #include <qgroupbox.h> | 42 | #include <qgroupbox.h> |
43 | #include <qlabel.h> | 43 | #include <qlabel.h> |
44 | #include <qlayout.h> | 44 | #include <qlayout.h> |
45 | #include <qmap.h> | 45 | #include <qmap.h> |
46 | #include <qmultilineedit.h> | 46 | #include <qmultilineedit.h> |
47 | #include <qpushbutton.h> | 47 | #include <qpushbutton.h> |
48 | 48 | ||
49 | #include <sys/vfs.h> | 49 | #include <sys/vfs.h> |
50 | 50 | ||
51 | #include "opackagemanager.h" | 51 | #include "opackagemanager.h" |
52 | 52 | ||
53 | InstallDlg::InstallDlg( QWidget *parent, OPackageManager *pm, const QString &caption, | 53 | InstallDlg::InstallDlg( QWidget *parent, OPackageManager *pm, const QString &caption, |
54 | OPackage::Command command1, const QStringList &packages1, | 54 | OPackage::Command command1, const QStringList &packages1, |
55 | OPackage::Command command2, const QStringList &packages2, | 55 | OPackage::Command command2, const QStringList &packages2, |
56 | OPackage::Command command3, const QStringList &packages3 ) | 56 | OPackage::Command command3, const QStringList &packages3 ) |
57 | : QWidget( 0x0 ) | 57 | : QWidget( 0l ) |
58 | , m_packman( pm ) | 58 | , m_packman( pm ) |
59 | , m_installFound( false ) | 59 | , m_installFound( false ) |
60 | , m_numCommands( 0 ) | 60 | , m_numCommands( 0 ) |
61 | , m_currCommand( 0 ) | 61 | , m_currCommand( 0 ) |
62 | , m_destItem( 0x0 ) | 62 | , m_destItem( 0l ) |
63 | { | 63 | { |
64 | // Save command/package list information | 64 | // Save command/package list information |
65 | if ( command1 != OPackage::NotDefined ) | 65 | if ( command1 != OPackage::NotDefined ) |
66 | { | 66 | { |
67 | m_command[ m_numCommands ] = command1; | 67 | m_command[ m_numCommands ] = command1; |
68 | m_packages[ m_numCommands ] = packages1; | 68 | m_packages[ m_numCommands ] = packages1; |
69 | ++m_numCommands; | 69 | ++m_numCommands; |
70 | 70 | ||
71 | if ( command1 == OPackage::Install ) | 71 | if ( command1 == OPackage::Install ) |
72 | m_installFound = true; | 72 | m_installFound = true; |
73 | } | 73 | } |
74 | if ( command2 != OPackage::NotDefined ) | 74 | if ( command2 != OPackage::NotDefined ) |
75 | { | 75 | { |
76 | m_command[ m_numCommands ] = command2; | 76 | m_command[ m_numCommands ] = command2; |
77 | m_packages[ m_numCommands ] = packages2; | 77 | m_packages[ m_numCommands ] = packages2; |
78 | ++m_numCommands; | 78 | ++m_numCommands; |
79 | 79 | ||
80 | if ( command2 == OPackage::Install ) | 80 | if ( command2 == OPackage::Install ) |
81 | m_installFound = true; | 81 | m_installFound = true; |
82 | } | 82 | } |
83 | if ( command3 != OPackage::NotDefined ) | 83 | if ( command3 != OPackage::NotDefined ) |
84 | { | 84 | { |
85 | m_command[ m_numCommands ] = command3; | 85 | m_command[ m_numCommands ] = command3; |
86 | m_packages[ m_numCommands ] = packages3; | 86 | m_packages[ m_numCommands ] = packages3; |
@@ -95,50 +95,50 @@ InstallDlg::InstallDlg( QWidget *parent, OPackageManager *pm, const QString &cap | |||
95 | parent->setCaption( caption ); | 95 | parent->setCaption( caption ); |
96 | 96 | ||
97 | QGridLayout *layout = new QGridLayout( this, 4, 2, 2, 4 ); | 97 | QGridLayout *layout = new QGridLayout( this, 4, 2, 2, 4 ); |
98 | 98 | ||
99 | if ( m_installFound ) | 99 | if ( m_installFound ) |
100 | { | 100 | { |
101 | QLabel *label = new QLabel( tr( "Destination" ), this ); | 101 | QLabel *label = new QLabel( tr( "Destination" ), this ); |
102 | layout->addWidget( label, 0, 0 ); | 102 | layout->addWidget( label, 0, 0 ); |
103 | m_destination = new QComboBox( this ); | 103 | m_destination = new QComboBox( this ); |
104 | m_destination->insertStringList( m_packman->destinations() ); | 104 | m_destination->insertStringList( m_packman->destinations() ); |
105 | layout->addWidget( m_destination, 0, 1 ); | 105 | layout->addWidget( m_destination, 0, 1 ); |
106 | connect( m_destination, SIGNAL(highlighted(const QString&)), | 106 | connect( m_destination, SIGNAL(highlighted(const QString&)), |
107 | this, SLOT(slotDisplayAvailSpace(const QString&)) ); | 107 | this, SLOT(slotDisplayAvailSpace(const QString&)) ); |
108 | 108 | ||
109 | label = new QLabel( tr( "Space Avail" ), this ); | 109 | label = new QLabel( tr( "Space Avail" ), this ); |
110 | layout->addWidget( label, 1, 0 ); | 110 | layout->addWidget( label, 1, 0 ); |
111 | m_availSpace = new QLabel( this ); | 111 | m_availSpace = new QLabel( this ); |
112 | layout->addWidget( m_availSpace, 1, 1 ); | 112 | layout->addWidget( m_availSpace, 1, 1 ); |
113 | 113 | ||
114 | // TODO - select correct destination | 114 | // TODO - select correct destination |
115 | slotDisplayAvailSpace( m_destination->currentText() ); | 115 | slotDisplayAvailSpace( m_destination->currentText() ); |
116 | } | 116 | } |
117 | else | 117 | else |
118 | { | 118 | { |
119 | m_destination = 0x0; | 119 | m_destination = 0l; |
120 | m_availSpace = 0x0; | 120 | m_availSpace = 0l; |
121 | } | 121 | } |
122 | 122 | ||
123 | QGroupBox *groupBox = new QGroupBox( 0, Qt::Vertical, tr( "Output" ), this ); | 123 | QGroupBox *groupBox = new QGroupBox( 0, Qt::Vertical, tr( "Output" ), this ); |
124 | groupBox->layout()->setSpacing( 0 ); | 124 | groupBox->layout()->setSpacing( 0 ); |
125 | groupBox->layout()->setMargin( 4 ); | 125 | groupBox->layout()->setMargin( 4 ); |
126 | 126 | ||
127 | QVBoxLayout *groupBoxLayout = new QVBoxLayout( groupBox->layout() ); | 127 | QVBoxLayout *groupBoxLayout = new QVBoxLayout( groupBox->layout() ); |
128 | m_output = new QMultiLineEdit( groupBox ); | 128 | m_output = new QMultiLineEdit( groupBox ); |
129 | m_output->setReadOnly( true ); | 129 | m_output->setReadOnly( true ); |
130 | groupBoxLayout->addWidget( m_output ); | 130 | groupBoxLayout->addWidget( m_output ); |
131 | layout->addMultiCellWidget( groupBox, 2, 2, 0, 1 ); | 131 | layout->addMultiCellWidget( groupBox, 2, 2, 0, 1 ); |
132 | 132 | ||
133 | m_btnStart = new QPushButton( Resource::loadPixmap( "packagemanager/apply" ), tr( "Start" ), this ); | 133 | m_btnStart = new QPushButton( Resource::loadPixmap( "packagemanager/apply" ), tr( "Start" ), this ); |
134 | layout->addWidget( m_btnStart, 3, 0 ); | 134 | layout->addWidget( m_btnStart, 3, 0 ); |
135 | connect( m_btnStart, SIGNAL(clicked()), this, SLOT(slotBtnStart()) ); | 135 | connect( m_btnStart, SIGNAL(clicked()), this, SLOT(slotBtnStart()) ); |
136 | 136 | ||
137 | m_btnOptions = new QPushButton( Resource::loadPixmap( "SettingsIcon" ), tr( "Options" ), this ); | 137 | m_btnOptions = new QPushButton( Resource::loadPixmap( "SettingsIcon" ), tr( "Options" ), this ); |
138 | layout->addWidget( m_btnOptions, 3, 1 ); | 138 | layout->addWidget( m_btnOptions, 3, 1 ); |
139 | connect( m_btnOptions, SIGNAL( clicked() ), this, SLOT(slotBtnOptions()) ); | 139 | connect( m_btnOptions, SIGNAL( clicked() ), this, SLOT(slotBtnOptions()) ); |
140 | 140 | ||
141 | // Display packages being acted upon in output widget | 141 | // Display packages being acted upon in output widget |
142 | for( int i = 0; i < m_numCommands; i++ ) | 142 | for( int i = 0; i < m_numCommands; i++ ) |
143 | { | 143 | { |
144 | if ( !m_packages[ i ].isEmpty() ) | 144 | if ( !m_packages[ i ].isEmpty() ) |
@@ -233,95 +233,111 @@ void InstallDlg::slotBtnStart() | |||
233 | if ( m_installFound ) | 233 | if ( m_installFound ) |
234 | { | 234 | { |
235 | dest = m_destination->currentText(); | 235 | dest = m_destination->currentText(); |
236 | m_destination->setEnabled( false ); | 236 | m_destination->setEnabled( false ); |
237 | } | 237 | } |
238 | 238 | ||
239 | m_btnOptions->setEnabled( false ); | 239 | m_btnOptions->setEnabled( false ); |
240 | if ( m_numCommands > 1 ) | 240 | if ( m_numCommands > 1 ) |
241 | { | 241 | { |
242 | m_btnStart->setText( tr( "Abort" ) ); | 242 | m_btnStart->setText( tr( "Abort" ) ); |
243 | m_btnStart->setIconSet( Resource::loadPixmap( "close" ) ); | 243 | m_btnStart->setIconSet( Resource::loadPixmap( "close" ) ); |
244 | } | 244 | } |
245 | else | 245 | else |
246 | { | 246 | { |
247 | m_btnStart->setEnabled( false ); | 247 | m_btnStart->setEnabled( false ); |
248 | } | 248 | } |
249 | 249 | ||
250 | Opie::Core::OProcess process( this ); | 250 | Opie::Core::OProcess process( this ); |
251 | for ( m_currCommand = 0; m_currCommand < m_numCommands; m_currCommand++ ) | 251 | for ( m_currCommand = 0; m_currCommand < m_numCommands; m_currCommand++ ) |
252 | { | 252 | { |
253 | // Execute next command | 253 | // Execute next command |
254 | m_packman->executeCommand( m_command[ m_currCommand ], m_packages[ m_currCommand ], dest, | 254 | m_packman->executeCommand( m_command[ m_currCommand ], m_packages[ m_currCommand ], dest, |
255 | this, SLOT(slotOutput(char*)), true ); | 255 | this, SLOT(slotOutput(char*)), true ); |
256 | 256 | ||
257 | // Link/Unlink application if the package was removed from or installed to a destination | 257 | if ( m_command[ m_currCommand ] == OPackage::Remove ) |
258 | // other than root | ||
259 | if ( ( m_command[ m_currCommand ] == OPackage::Install && dest != "root" ) || | ||
260 | ( m_command[ m_currCommand ] == OPackage::Remove ) ) | ||
261 | { | 258 | { |
262 | //m_packman->findPackage( m_packages[ m_currCommand ]->destination() != "root"*/ ) | 259 | // Unlink application if the package was removed |
263 | 260 | ||
264 | // Loop through all package names in the command group | 261 | // Loop through all package names in the command group |
265 | for ( QStringList::Iterator it = m_packages[ m_currCommand ].begin(); | 262 | for ( QStringList::Iterator it = m_packages[ m_currCommand ].begin(); |
266 | it != m_packages[ m_currCommand ].end(); | 263 | it != m_packages[ m_currCommand ].end(); |
267 | ++it ) | 264 | ++it ) |
268 | { | 265 | { |
269 | OPackage *currPackage = m_packman->findPackage( (*it) ); | 266 | OPackage *currPackage = m_packman->findPackage( (*it) ); |
270 | 267 | ||
271 | // Skip package if it is not found or being removed from 'root' | 268 | // Skip package if it is not found or being removed from 'root' |
272 | if ( !currPackage || ( m_command[ m_currCommand ] == OPackage::Remove && | 269 | if ( !currPackage || ( m_command[ m_currCommand ] == OPackage::Remove && |
273 | currPackage->destination() == "root" ) ) | 270 | currPackage->destination() == "root" ) ) |
274 | continue; | 271 | continue; |
275 | 272 | ||
276 | // Display feedback to user | 273 | // Display feedback to user |
277 | if ( m_command[ m_currCommand ] == OPackage::Install ) | 274 | m_output->append( tr( QString( "Running ipkg-link to remove links for package '%1'." ) |
278 | m_output->append( tr( QString( "Running ipkg-link to link package '%1'." ) | 275 | .arg( currPackage->name() ) ) ); |
279 | .arg( currPackage->name() ) ) ); | ||
280 | else | ||
281 | m_output->append( tr( QString( "Running ipkg-link to remove links for package '%1'." ) | ||
282 | .arg( currPackage->name() ) ) ); | ||
283 | m_output->setCursorPosition( m_output->numLines(), 0 ); | 276 | m_output->setCursorPosition( m_output->numLines(), 0 ); |
284 | 277 | ||
285 | // Execute ipkg-link | 278 | // Execute ipkg-link |
286 | process.clearArguments(); | 279 | process.clearArguments(); |
287 | process << "ipkg-link" | 280 | process << "ipkg-link" |
288 | << ( ( m_command[ m_currCommand ] == OPackage::Install ) ? "add" : "remove" ) | 281 | << ( ( m_command[ m_currCommand ] == OPackage::Install ) ? "add" : "remove" ) |
289 | << currPackage->name(); | 282 | << currPackage->name(); |
290 | if ( !process.start( Opie::Core::OProcess::Block, | 283 | if ( !process.start( Opie::Core::OProcess::Block, |
291 | Opie::Core::OProcess::NoCommunication ) ) | 284 | Opie::Core::OProcess::NoCommunication ) ) |
292 | { | 285 | { |
293 | slotProcessDone( 0x0 ); | 286 | slotProcessDone( 0l ); |
294 | m_output->append( tr( "Unable to run ipkg-link." ) ); | 287 | m_output->append( tr( "Unable to run ipkg-link." ) ); |
295 | m_output->setCursorPosition( m_output->numLines(), 0 ); | 288 | m_output->setCursorPosition( m_output->numLines(), 0 ); |
296 | return; | 289 | return; |
297 | } | 290 | } |
298 | } | 291 | } |
299 | 292 | } | |
293 | else if ( m_command[ m_currCommand ] == OPackage::Install && dest != "root" ) | ||
294 | { | ||
295 | // Link applications in the destination directory | ||
296 | |||
297 | m_output->append( tr( "Running ipkg-link to link packages in '%1'." ).arg( dest ) ); | ||
298 | m_output->setCursorPosition( m_output->numLines(), 0 ); | ||
299 | |||
300 | QString destPath; | ||
301 | OConfItem *destItem = m_packman->findConfItem( OConfItem::Destination, dest ); | ||
302 | |||
303 | // Execute ipkg-link | ||
304 | process.clearArguments(); | ||
305 | process << "ipkg-link" | ||
306 | << "mount" | ||
307 | << destItem->value(); | ||
308 | if ( !process.start( Opie::Core::OProcess::Block, | ||
309 | Opie::Core::OProcess::NoCommunication ) ) | ||
310 | { | ||
311 | slotProcessDone( 0l ); | ||
312 | m_output->append( tr( "Unable to run ipkg-link." ) ); | ||
313 | m_output->setCursorPosition( m_output->numLines(), 0 ); | ||
314 | return; | ||
315 | } | ||
300 | } | 316 | } |
301 | } | 317 | } |
302 | 318 | ||
303 | slotProcessDone( 0x0 ); | 319 | slotProcessDone( 0l ); |
304 | } | 320 | } |
305 | 321 | ||
306 | void InstallDlg::slotProcessDone( Opie::Core::OProcess *proc ) | 322 | void InstallDlg::slotProcessDone( Opie::Core::OProcess *proc ) |
307 | { | 323 | { |
308 | if ( proc ) | 324 | if ( proc ) |
309 | { | 325 | { |
310 | // Display message pnly if linking was done | 326 | // Display message pnly if linking was done |
311 | m_output->append( tr( "The package linking is done." ) ); | 327 | m_output->append( tr( "The package linking is done." ) ); |
312 | m_output->setCursorPosition( m_output->numLines(), 0 ); | 328 | m_output->setCursorPosition( m_output->numLines(), 0 ); |
313 | 329 | ||
314 | delete proc; | 330 | delete proc; |
315 | } | 331 | } |
316 | 332 | ||
317 | // All commands executed, allow user to close dialog | 333 | // All commands executed, allow user to close dialog |
318 | m_btnStart->setEnabled( true ); | 334 | m_btnStart->setEnabled( true ); |
319 | m_btnStart->setText( tr( "Close" ) ); | 335 | m_btnStart->setText( tr( "Close" ) ); |
320 | m_btnStart->setIconSet( Resource::loadPixmap( "enter" ) ); | 336 | m_btnStart->setIconSet( Resource::loadPixmap( "enter" ) ); |
321 | 337 | ||
322 | m_btnOptions->setEnabled( true ); | 338 | m_btnOptions->setEnabled( true ); |
323 | m_btnOptions->setText( tr( "Save output" ) ); | 339 | m_btnOptions->setText( tr( "Save output" ) ); |
324 | m_btnOptions->setIconSet( Resource::loadPixmap( "save" ) ); | 340 | m_btnOptions->setIconSet( Resource::loadPixmap( "save" ) ); |
325 | } | 341 | } |
326 | 342 | ||
327 | void InstallDlg::slotBtnOptions() | 343 | void InstallDlg::slotBtnOptions() |
diff --git a/noncore/settings/packagemanager/installdlg.h b/noncore/settings/packagemanager/installdlg.h index eabb717..7a64fe0 100644 --- a/noncore/settings/packagemanager/installdlg.h +++ b/noncore/settings/packagemanager/installdlg.h | |||
@@ -34,49 +34,49 @@ _;:, .> :=|. This file is free software; you can | |||
34 | 34 | ||
35 | #include "opackage.h" | 35 | #include "opackage.h" |
36 | 36 | ||
37 | class QComboBox; | 37 | class QComboBox; |
38 | class QLabel; | 38 | class QLabel; |
39 | class QMultiLineEdit; | 39 | class QMultiLineEdit; |
40 | class QPushButton; | 40 | class QPushButton; |
41 | 41 | ||
42 | class OConfItem; | 42 | class OConfItem; |
43 | class OPackageManager; | 43 | class OPackageManager; |
44 | 44 | ||
45 | namespace Opie | 45 | namespace Opie |
46 | { | 46 | { |
47 | namespace Core | 47 | namespace Core |
48 | { | 48 | { |
49 | class OProcess; | 49 | class OProcess; |
50 | } | 50 | } |
51 | } | 51 | } |
52 | 52 | ||
53 | class InstallDlg : public QWidget | 53 | class InstallDlg : public QWidget |
54 | { | 54 | { |
55 | Q_OBJECT | 55 | Q_OBJECT |
56 | 56 | ||
57 | public: | 57 | public: |
58 | InstallDlg( QWidget *parent = 0x0, OPackageManager *pm = 0x0, | 58 | InstallDlg( QWidget *parent = 0l, OPackageManager *pm = 0l, |
59 | const QString &caption = QString::null, | 59 | const QString &caption = QString::null, |
60 | OPackage::Command command1 = OPackage::NotDefined, | 60 | OPackage::Command command1 = OPackage::NotDefined, |
61 | const QStringList &packages1 = QStringList(), | 61 | const QStringList &packages1 = QStringList(), |
62 | OPackage::Command command2 = OPackage::NotDefined, | 62 | OPackage::Command command2 = OPackage::NotDefined, |
63 | const QStringList &packages2 = QStringList(), | 63 | const QStringList &packages2 = QStringList(), |
64 | OPackage::Command command3 = OPackage::NotDefined, | 64 | OPackage::Command command3 = OPackage::NotDefined, |
65 | const QStringList &packages3 = QStringList() ); | 65 | const QStringList &packages3 = QStringList() ); |
66 | 66 | ||
67 | private: | 67 | private: |
68 | OPackageManager *m_packman; // Pointer to application instance of package manager | 68 | OPackageManager *m_packman; // Pointer to application instance of package manager |
69 | 69 | ||
70 | bool m_installFound; // Indicates if an install is being done, controls display of | 70 | bool m_installFound; // Indicates if an install is being done, controls display of |
71 | // destination selection, available space | 71 | // destination selection, available space |
72 | 72 | ||
73 | // UI controls | 73 | // UI controls |
74 | QComboBox *m_destination; // Destination selection list | 74 | QComboBox *m_destination; // Destination selection list |
75 | QLabel *m_availSpace; // Text label to display available space on selected destination | 75 | QLabel *m_availSpace; // Text label to display available space on selected destination |
76 | QMultiLineEdit *m_output; // Multi-line edit to display status | 76 | QMultiLineEdit *m_output; // Multi-line edit to display status |
77 | QPushButton *m_btnStart; // Start/abort/close button | 77 | QPushButton *m_btnStart; // Start/abort/close button |
78 | QPushButton *m_btnOptions; // Installation options button | 78 | QPushButton *m_btnOptions; // Installation options button |
79 | 79 | ||
80 | // Commands and packages to execute | 80 | // Commands and packages to execute |
81 | int m_numCommands; // Number of commands to be executed | 81 | int m_numCommands; // Number of commands to be executed |
82 | int m_currCommand; // Number of currently executing command | 82 | int m_currCommand; // Number of currently executing command |