-rw-r--r-- | noncore/settings/aqpkg/global.h | 2 | ||||
-rw-r--r-- | noncore/settings/aqpkg/networkpkgmgr.cpp | 20 | ||||
-rw-r--r-- | noncore/settings/aqpkg/server.cpp | 8 |
3 files changed, 23 insertions, 7 deletions
diff --git a/noncore/settings/aqpkg/global.h b/noncore/settings/aqpkg/global.h index 96ab46c..a4363b4 100644 --- a/noncore/settings/aqpkg/global.h +++ b/noncore/settings/aqpkg/global.h | |||
@@ -1,80 +1,80 @@ | |||
1 | /*************************************************************************** | 1 | /*************************************************************************** |
2 | global.h - description | 2 | global.h - description |
3 | ------------------- | 3 | ------------------- |
4 | begin : Mon Aug 26 2002 | 4 | begin : Mon Aug 26 2002 |
5 | copyright : (C) 2002 by Andy Qua | 5 | copyright : (C) 2002 by Andy Qua |
6 | email : andy.qua@blueyonder.co.uk | 6 | email : andy.qua@blueyonder.co.uk |
7 | ***************************************************************************/ | 7 | ***************************************************************************/ |
8 | 8 | ||
9 | /*************************************************************************** | 9 | /*************************************************************************** |
10 | * * | 10 | * * |
11 | * This program is free software; you can redistribute it and/or modify * | 11 | * This program is free software; you can redistribute it and/or modify * |
12 | * it under the terms of the GNU General Public License as published by * | 12 | * it under the terms of the GNU General Public License as published by * |
13 | * the Free Software Foundation; either version 2 of the License, or * | 13 | * the Free Software Foundation; either version 2 of the License, or * |
14 | * (at your option) any later version. * | 14 | * (at your option) any later version. * |
15 | * * | 15 | * * |
16 | ***************************************************************************/ | 16 | ***************************************************************************/ |
17 | 17 | ||
18 | #ifndef __GLOBAL_H | 18 | #ifndef __GLOBAL_H |
19 | #define __GLOBAL_H | 19 | #define __GLOBAL_H |
20 | 20 | ||
21 | #define VERSION_TEXT "AQPkg Version 0.7" | 21 | #define VERSION_TEXT "AQPkg Version 0.8" |
22 | 22 | ||
23 | // Uncomment the below line to run on a Linux box rather than a Zaurus | 23 | // Uncomment the below line to run on a Linux box rather than a Zaurus |
24 | // box this allows you to change where root is, and where to load config files from | 24 | // box this allows you to change where root is, and where to load config files from |
25 | // #define X86 | 25 | // #define X86 |
26 | 26 | ||
27 | // Sets up location of ipkg.conf and root directory | 27 | // Sets up location of ipkg.conf and root directory |
28 | #ifdef QWS | 28 | #ifdef QWS |
29 | 29 | ||
30 | #ifndef X86 | 30 | #ifndef X86 |
31 | 31 | ||
32 | // Running QT/Embedded on an arm processor | 32 | // Running QT/Embedded on an arm processor |
33 | #define IPKG_CONF "/etc/ipkg.conf" | 33 | #define IPKG_CONF "/etc/ipkg.conf" |
34 | #define ROOT "/" | 34 | #define ROOT "/" |
35 | #define IPKG_DIR "/usr/lib/ipkg/" | 35 | #define IPKG_DIR "/usr/lib/ipkg/" |
36 | 36 | ||
37 | #else | 37 | #else |
38 | 38 | ||
39 | // Running QT/Embedded on a X86 linux box | 39 | // Running QT/Embedded on a X86 linux box |
40 | #define IPKG_CONF "/home/andy/projects/aqpkg/aqpkg/data/ipkg.conf" | 40 | #define IPKG_CONF "/home/andy/projects/aqpkg/aqpkg/data/ipkg.conf" |
41 | #define ROOT "/home/andy/projects/aqpkg/aqpkg/data/root" | 41 | #define ROOT "/home/andy/projects/aqpkg/aqpkg/data/root" |
42 | #define IPKG_DIR "/home/andy/projects/aqpkg/aqpkg/data/" | 42 | #define IPKG_DIR "/home/andy/projects/aqpkg/aqpkg/data/" |
43 | 43 | ||
44 | #endif | 44 | #endif |
45 | 45 | ||
46 | #else | 46 | #else |
47 | 47 | ||
48 | // Running QT on a X86 linux box | 48 | // Running QT on a X86 linux box |
49 | #define IPKG_CONF "/home/andy/projects/aqpkg/aqpkg/data/ipkg.conf" | 49 | #define IPKG_CONF "/home/andy/projects/aqpkg/aqpkg/data/ipkg.conf" |
50 | #define ROOT "/home/andy/projects/aqpkg/aqpkg/data/root" | 50 | #define ROOT "/home/andy/projects/aqpkg/aqpkg/data/root" |
51 | #define IPKG_DIR "/home/andy/projects/aqpkg/aqpkg/data/" | 51 | #define IPKG_DIR "/home/andy/projects/aqpkg/aqpkg/data/" |
52 | 52 | ||
53 | #endif | 53 | #endif |
54 | 54 | ||
55 | 55 | ||
56 | // Uncomment the below line to turn on memory checking | 56 | // Uncomment the below line to turn on memory checking |
57 | //#define _DEBUG 1 | 57 | //#define _DEBUG 1 |
58 | 58 | ||
59 | #ifndef __MEMFILE_C | 59 | #ifndef __MEMFILE_C |
60 | #ifdef _DEBUG | 60 | #ifdef _DEBUG |
61 | void * operator new(unsigned int size,const char *file, int line); | 61 | void * operator new(unsigned int size,const char *file, int line); |
62 | void operator delete(void *p); | 62 | void operator delete(void *p); |
63 | #endif | 63 | #endif |
64 | 64 | ||
65 | #ifdef _DEBUG | 65 | #ifdef _DEBUG |
66 | #define DEBUG_NEW new(__FILE__, __LINE__) | 66 | #define DEBUG_NEW new(__FILE__, __LINE__) |
67 | //#define DEBUG_NEW new | 67 | //#define DEBUG_NEW new |
68 | #else | 68 | #else |
69 | #define DEBUG_NEW new | 69 | #define DEBUG_NEW new |
70 | #endif | 70 | #endif |
71 | 71 | ||
72 | #define new DEBUG_NEW | 72 | #define new DEBUG_NEW |
73 | #endif | 73 | #endif |
74 | 74 | ||
75 | 75 | ||
76 | void AddTrack(long addr, long asize, const char *fname, long lnum); | 76 | void AddTrack(long addr, long asize, const char *fname, long lnum); |
77 | void RemoveTrack(long addr); | 77 | void RemoveTrack(long addr); |
78 | void DumpUnfreed(); | 78 | void DumpUnfreed(); |
79 | 79 | ||
80 | #endif | 80 | #endif |
diff --git a/noncore/settings/aqpkg/networkpkgmgr.cpp b/noncore/settings/aqpkg/networkpkgmgr.cpp index 3d06aef..dee834e 100644 --- a/noncore/settings/aqpkg/networkpkgmgr.cpp +++ b/noncore/settings/aqpkg/networkpkgmgr.cpp | |||
@@ -5,648 +5,658 @@ | |||
5 | copyright : (C) 2002 by Andy Qua | 5 | copyright : (C) 2002 by Andy Qua |
6 | email : andy.qua@blueyonder.co.uk | 6 | email : andy.qua@blueyonder.co.uk |
7 | ***************************************************************************/ | 7 | ***************************************************************************/ |
8 | 8 | ||
9 | /*************************************************************************** | 9 | /*************************************************************************** |
10 | * * | 10 | * * |
11 | * This program is free software; you can redistribute it and/or modify * | 11 | * This program is free software; you can redistribute it and/or modify * |
12 | * it under the terms of the GNU General Public License as published by * | 12 | * it under the terms of the GNU General Public License as published by * |
13 | * the Free Software Foundation; either version 2 of the License, or * | 13 | * the Free Software Foundation; either version 2 of the License, or * |
14 | * (at your option) any later version. * | 14 | * (at your option) any later version. * |
15 | * * | 15 | * * |
16 | ***************************************************************************/ | 16 | ***************************************************************************/ |
17 | 17 | ||
18 | #include <fstream> | 18 | #include <fstream> |
19 | #include <iostream> | 19 | #include <iostream> |
20 | using namespace std; | 20 | using namespace std; |
21 | 21 | ||
22 | #include <unistd.h> | 22 | #include <unistd.h> |
23 | #include <stdlib.h> | 23 | #include <stdlib.h> |
24 | #include <linux/limits.h> | 24 | #include <linux/limits.h> |
25 | 25 | ||
26 | #ifdef QWS | 26 | #ifdef QWS |
27 | #include <qpe/qpeapplication.h> | 27 | #include <qpe/qpeapplication.h> |
28 | #include <qpe/qcopenvelope_qws.h> | 28 | #include <qpe/qcopenvelope_qws.h> |
29 | #include <qpe/config.h> | 29 | #include <qpe/config.h> |
30 | #else | 30 | #else |
31 | #include <qapplication.h> | 31 | #include <qapplication.h> |
32 | #endif | 32 | #endif |
33 | #include <qlabel.h> | 33 | #include <qlabel.h> |
34 | #include <qfile.h> | 34 | #include <qfile.h> |
35 | #include <qmessagebox.h> | 35 | #include <qmessagebox.h> |
36 | 36 | ||
37 | #include "datamgr.h" | 37 | #include "datamgr.h" |
38 | #include "networkpkgmgr.h" | 38 | #include "networkpkgmgr.h" |
39 | #include "installdlgimpl.h" | 39 | #include "installdlgimpl.h" |
40 | #include "ipkg.h" | 40 | #include "ipkg.h" |
41 | #include "inputdlg.h" | 41 | #include "inputdlg.h" |
42 | #include "letterpushbutton.h" | 42 | #include "letterpushbutton.h" |
43 | 43 | ||
44 | #include "global.h" | 44 | #include "global.h" |
45 | 45 | ||
46 | extern int compareVersions( const char *v1, const char *v2 ); | 46 | extern int compareVersions( const char *v1, const char *v2 ); |
47 | 47 | ||
48 | NetworkPackageManager::NetworkPackageManager( DataManager *dataManager, QWidget *parent, const char *name) | 48 | NetworkPackageManager::NetworkPackageManager( DataManager *dataManager, QWidget *parent, const char *name) |
49 | : QWidget(parent, name) | 49 | : QWidget(parent, name) |
50 | { | 50 | { |
51 | dataMgr = dataManager; | 51 | dataMgr = dataManager; |
52 | 52 | ||
53 | #ifdef QWS | 53 | #ifdef QWS |
54 | // read download directory from config file | 54 | // read download directory from config file |
55 | Config cfg( "aqpkg" ); | 55 | Config cfg( "aqpkg" ); |
56 | cfg.setGroup( "settings" ); | 56 | cfg.setGroup( "settings" ); |
57 | currentlySelectedServer = cfg.readEntry( "selectedServer", "local" ); | 57 | currentlySelectedServer = cfg.readEntry( "selectedServer", "local" ); |
58 | showJumpTo = cfg.readBoolEntry( "showJumpTo", "true" ); | 58 | showJumpTo = cfg.readBoolEntry( "showJumpTo", "true" ); |
59 | #endif | 59 | #endif |
60 | 60 | ||
61 | 61 | ||
62 | initGui(); | 62 | initGui(); |
63 | setupConnections(); | 63 | setupConnections(); |
64 | 64 | ||
65 | updateData(); | 65 | updateData(); |
66 | // progressDlg = 0; | 66 | // progressDlg = 0; |
67 | // timerId = startTimer( 100 ); | 67 | // timerId = startTimer( 100 ); |
68 | } | 68 | } |
69 | 69 | ||
70 | NetworkPackageManager::~NetworkPackageManager() | 70 | NetworkPackageManager::~NetworkPackageManager() |
71 | { | 71 | { |
72 | } | 72 | } |
73 | 73 | ||
74 | void NetworkPackageManager :: timerEvent ( QTimerEvent * ) | 74 | void NetworkPackageManager :: timerEvent ( QTimerEvent * ) |
75 | { | 75 | { |
76 | killTimer( timerId ); | 76 | killTimer( timerId ); |
77 | 77 | ||
78 | // showProgressDialog(); | 78 | // showProgressDialog(); |
79 | // Add server names to listbox | 79 | // Add server names to listbox |
80 | updateData(); | 80 | updateData(); |
81 | 81 | ||
82 | // progressDlg->hide(); | 82 | // progressDlg->hide(); |
83 | } | 83 | } |
84 | 84 | ||
85 | void NetworkPackageManager :: updateData() | 85 | void NetworkPackageManager :: updateData() |
86 | { | 86 | { |
87 | serversList->clear(); | 87 | serversList->clear(); |
88 | packagesList->clear(); | 88 | packagesList->clear(); |
89 | 89 | ||
90 | 90 | ||
91 | vector<Server>::iterator it; | 91 | vector<Server>::iterator it; |
92 | int activeItem = -1; | 92 | int activeItem = -1; |
93 | int i; | 93 | int i; |
94 | for ( i = 0, it = dataMgr->getServerList().begin() ; it != dataMgr->getServerList().end() ; ++it, ++i ) | 94 | for ( i = 0, it = dataMgr->getServerList().begin() ; it != dataMgr->getServerList().end() ; ++it, ++i ) |
95 | { | 95 | { |
96 | if ( !it->isServerActive() ) | 96 | if ( !it->isServerActive() ) |
97 | { | 97 | { |
98 | i--; | 98 | i--; |
99 | continue; | 99 | continue; |
100 | } | 100 | } |
101 | serversList->insertItem( it->getServerName() ); | 101 | serversList->insertItem( it->getServerName() ); |
102 | if ( it->getServerName() == currentlySelectedServer ) | 102 | if ( it->getServerName() == currentlySelectedServer ) |
103 | activeItem = i; | 103 | activeItem = i; |
104 | } | 104 | } |
105 | 105 | ||
106 | // set selected server to be active server | 106 | // set selected server to be active server |
107 | if ( activeItem != -1 ) | 107 | if ( activeItem != -1 ) |
108 | serversList->setCurrentItem( activeItem ); | 108 | serversList->setCurrentItem( activeItem ); |
109 | serverSelected( 0 ); | 109 | serverSelected( 0 ); |
110 | } | 110 | } |
111 | 111 | ||
112 | void NetworkPackageManager :: selectLocalPackage( const QString &pkg ) | 112 | void NetworkPackageManager :: selectLocalPackage( const QString &pkg ) |
113 | { | 113 | { |
114 | // First select local server | 114 | // First select local server |
115 | for ( int i = 0 ; i < serversList->count() ; ++i ) | 115 | for ( int i = 0 ; i < serversList->count() ; ++i ) |
116 | { | 116 | { |
117 | if ( serversList->text( i ) == LOCAL_IPKGS ) | 117 | if ( serversList->text( i ) == LOCAL_IPKGS ) |
118 | { | 118 | { |
119 | serversList->setCurrentItem( i ); | 119 | serversList->setCurrentItem( i ); |
120 | break; | 120 | break; |
121 | } | 121 | } |
122 | } | 122 | } |
123 | serverSelected( 0 ); | 123 | serverSelected( 0 ); |
124 | 124 | ||
125 | // Now set the check box of the selected package | 125 | // Now set the check box of the selected package |
126 | for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); | 126 | for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); |
127 | item != 0 ; | 127 | item != 0 ; |
128 | item = (QCheckListItem *)item->nextSibling() ) | 128 | item = (QCheckListItem *)item->nextSibling() ) |
129 | { | 129 | { |
130 | if ( item->text().startsWith( pkg ) ) | 130 | if ( item->text().startsWith( pkg ) ) |
131 | { | 131 | { |
132 | item->setOn( true ); | 132 | item->setOn( true ); |
133 | break; | 133 | break; |
134 | } | 134 | } |
135 | } | 135 | } |
136 | } | 136 | } |
137 | 137 | ||
138 | 138 | ||
139 | void NetworkPackageManager :: initGui() | 139 | void NetworkPackageManager :: initGui() |
140 | { | 140 | { |
141 | QLabel *l = new QLabel( "Servers", this ); | 141 | QLabel *l = new QLabel( "Servers", this ); |
142 | serversList = new QComboBox( this ); | 142 | serversList = new QComboBox( this ); |
143 | packagesList = new QListView( this ); | 143 | packagesList = new QListView( this ); |
144 | update = new QPushButton( "Refresh List", this ); | 144 | update = new QPushButton( "Refresh List", this ); |
145 | download = new QPushButton( "Download", this ); | 145 | download = new QPushButton( "Download", this ); |
146 | upgrade = new QPushButton( "Upgrade", this ); | 146 | upgrade = new QPushButton( "Upgrade", this ); |
147 | apply = new QPushButton( "Apply", this ); | 147 | apply = new QPushButton( "Apply", this ); |
148 | 148 | ||
149 | QVBoxLayout *vbox = new QVBoxLayout( this, 0, -1, "VBox" ); | 149 | QVBoxLayout *vbox = new QVBoxLayout( this, 0, -1, "VBox" ); |
150 | QHBoxLayout *hbox1 = new QHBoxLayout( vbox, -1, "HBox1" ); | 150 | QHBoxLayout *hbox1 = new QHBoxLayout( vbox, -1, "HBox1" ); |
151 | hbox1->addWidget( l ); | 151 | hbox1->addWidget( l ); |
152 | hbox1->addWidget( serversList ); | 152 | hbox1->addWidget( serversList ); |
153 | 153 | ||
154 | QHBoxLayout *hbox3 = new QHBoxLayout( vbox, -1, "HBox1" ); | 154 | QHBoxLayout *hbox3 = new QHBoxLayout( vbox, -1, "HBox1" ); |
155 | QHBoxLayout *hbox4 = new QHBoxLayout( vbox, -1, "HBox1" ); | 155 | QHBoxLayout *hbox4 = new QHBoxLayout( vbox, -1, "HBox1" ); |
156 | 156 | ||
157 | 157 | ||
158 | if ( showJumpTo ) | 158 | if ( showJumpTo ) |
159 | { | 159 | { |
160 | char text[2]; | 160 | char text[2]; |
161 | text[1] = '\0'; | 161 | text[1] = '\0'; |
162 | for ( int i = 0 ; i < 26 ; ++i ) | 162 | for ( int i = 0 ; i < 26 ; ++i ) |
163 | { | 163 | { |
164 | text[0] = 'A' + i; | 164 | text[0] = 'A' + i; |
165 | LetterPushButton *b = new LetterPushButton( text, this ); | 165 | LetterPushButton *b = new LetterPushButton( text, this ); |
166 | connect( b, SIGNAL( released( QString ) ), this, SLOT( letterPushed( QString ) ) ); | 166 | connect( b, SIGNAL( released( QString ) ), this, SLOT( letterPushed( QString ) ) ); |
167 | if ( i < 13 ) | 167 | if ( i < 13 ) |
168 | hbox3->addWidget( b ); | 168 | hbox3->addWidget( b ); |
169 | else | 169 | else |
170 | hbox4->addWidget( b ); | 170 | hbox4->addWidget( b ); |
171 | } | 171 | } |
172 | } | 172 | } |
173 | 173 | ||
174 | vbox->addWidget( packagesList ); | 174 | vbox->addWidget( packagesList ); |
175 | packagesList->addColumn( "Packages" ); | 175 | packagesList->addColumn( "Packages" ); |
176 | 176 | ||
177 | QHBoxLayout *hbox2 = new QHBoxLayout( vbox, -1, "HBox2" ); | 177 | QHBoxLayout *hbox2 = new QHBoxLayout( vbox, -1, "HBox2" ); |
178 | hbox2->addWidget( update ); | 178 | hbox2->addWidget( update ); |
179 | hbox2->addWidget( download ); | 179 | hbox2->addWidget( download ); |
180 | hbox2->addWidget( upgrade ); | 180 | hbox2->addWidget( upgrade ); |
181 | hbox2->addWidget( apply ); | 181 | hbox2->addWidget( apply ); |
182 | } | 182 | } |
183 | 183 | ||
184 | void NetworkPackageManager :: setupConnections() | 184 | void NetworkPackageManager :: setupConnections() |
185 | { | 185 | { |
186 | connect( serversList, SIGNAL(activated( int )), this, SLOT(serverSelected( int ))); | 186 | connect( serversList, SIGNAL(activated( int )), this, SLOT(serverSelected( int ))); |
187 | connect( apply, SIGNAL(released()), this, SLOT(applyChanges()) ); | 187 | connect( apply, SIGNAL(released()), this, SLOT(applyChanges()) ); |
188 | connect( download, SIGNAL(released()), this, SLOT(downloadPackage()) ); | 188 | connect( download, SIGNAL(released()), this, SLOT(downloadPackage()) ); |
189 | connect( upgrade, SIGNAL( released()), this, SLOT(upgradePackages()) ); | 189 | connect( upgrade, SIGNAL( released()), this, SLOT(upgradePackages()) ); |
190 | connect( update, SIGNAL(released()), this, SLOT(updateServer()) ); | 190 | connect( update, SIGNAL(released()), this, SLOT(updateServer()) ); |
191 | } | 191 | } |
192 | 192 | ||
193 | void NetworkPackageManager :: showProgressDialog( char *initialText ) | 193 | void NetworkPackageManager :: showProgressDialog( char *initialText ) |
194 | { | 194 | { |
195 | if ( !progressDlg ) | 195 | if ( !progressDlg ) |
196 | progressDlg = new ProgressDlg( this, "Progress", false ); | 196 | progressDlg = new ProgressDlg( this, "Progress", false ); |
197 | progressDlg->setText( initialText ); | 197 | progressDlg->setText( initialText ); |
198 | progressDlg->show(); | 198 | progressDlg->show(); |
199 | } | 199 | } |
200 | 200 | ||
201 | 201 | ||
202 | void NetworkPackageManager :: serverSelected( int ) | 202 | void NetworkPackageManager :: serverSelected( int ) |
203 | { | 203 | { |
204 | packagesList->clear(); | 204 | packagesList->clear(); |
205 | 205 | ||
206 | // display packages | 206 | // display packages |
207 | QString serverName = serversList->currentText(); | 207 | QString serverName = serversList->currentText(); |
208 | currentlySelectedServer = serverName; | 208 | currentlySelectedServer = serverName; |
209 | 209 | ||
210 | #ifdef QWS | 210 | #ifdef QWS |
211 | // read download directory from config file | 211 | // read download directory from config file |
212 | Config cfg( "aqpkg" ); | 212 | Config cfg( "aqpkg" ); |
213 | cfg.setGroup( "settings" ); | 213 | cfg.setGroup( "settings" ); |
214 | cfg.writeEntry( "selectedServer", currentlySelectedServer ); | 214 | cfg.writeEntry( "selectedServer", currentlySelectedServer ); |
215 | #endif | 215 | #endif |
216 | 216 | ||
217 | Server *s = dataMgr->getServer( serverName ); | 217 | Server *s = dataMgr->getServer( serverName ); |
218 | 218 | ||
219 | vector<Package> &list = s->getPackageList(); | 219 | vector<Package> &list = s->getPackageList(); |
220 | vector<Package>::iterator it; | 220 | vector<Package>::iterator it; |
221 | for ( it = list.begin() ; it != list.end() ; ++it ) | 221 | for ( it = list.begin() ; it != list.end() ; ++it ) |
222 | { | 222 | { |
223 | 223 | ||
224 | QString text = ""; | 224 | QString text = ""; |
225 | 225 | ||
226 | // If the local server, only display installed packages | 226 | // If the local server, only display installed packages |
227 | if ( serverName == LOCAL_SERVER && !it->isInstalled() ) | 227 | if ( serverName == LOCAL_SERVER && !it->isInstalled() ) |
228 | continue; | 228 | continue; |
229 | 229 | ||
230 | text += it->getPackageName(); | 230 | text += it->getPackageName(); |
231 | if ( it->isInstalled() ) | 231 | if ( it->isInstalled() ) |
232 | { | 232 | { |
233 | text += " (installed)"; | 233 | text += " (installed)"; |
234 | 234 | ||
235 | // If a different version of package is available, postfix it with an * | 235 | // If a different version of package is available, postfix it with an * |
236 | if ( it->getVersion() != it->getInstalledVersion() ) | 236 | if ( it->getVersion() != it->getInstalledVersion() ) |
237 | { | 237 | { |
238 | 238 | ||
239 | if ( compareVersions( it->getInstalledVersion(), it->getVersion() ) == 1 ) | 239 | if ( compareVersions( it->getInstalledVersion(), it->getVersion() ) == 1 ) |
240 | text += "*"; | 240 | text += "*"; |
241 | } | 241 | } |
242 | } | 242 | } |
243 | 243 | ||
244 | QCheckListItem *item = new QCheckListItem( packagesList, text, QCheckListItem::CheckBox ); | 244 | QCheckListItem *item = new QCheckListItem( packagesList, text, QCheckListItem::CheckBox ); |
245 | 245 | ||
246 | if ( it->isInstalled() ) | 246 | if ( it->isInstalled() ) |
247 | { | 247 | { |
248 | QString destName = ""; | 248 | QString destName = ""; |
249 | if ( it->getLocalPackage() ) | 249 | if ( it->getLocalPackage() ) |
250 | { | 250 | { |
251 | if ( it->getLocalPackage()->getInstalledTo() ) | 251 | if ( it->getLocalPackage()->getInstalledTo() ) |
252 | destName = it->getLocalPackage()->getInstalledTo()->getDestinationName(); | 252 | destName = it->getLocalPackage()->getInstalledTo()->getDestinationName(); |
253 | } | 253 | } |
254 | else | 254 | else |
255 | { | 255 | { |
256 | if ( it->getInstalledTo() ) | 256 | if ( it->getInstalledTo() ) |
257 | destName = it->getInstalledTo()->getDestinationName(); | 257 | destName = it->getInstalledTo()->getDestinationName(); |
258 | } | 258 | } |
259 | if ( destName != "" ) | 259 | if ( destName != "" ) |
260 | new QCheckListItem( item, QString( "Installed To - " ) + destName ); | 260 | new QCheckListItem( item, QString( "Installed To - " ) + destName ); |
261 | } | 261 | } |
262 | 262 | ||
263 | if ( !it->isPackageStoredLocally() ) | 263 | if ( !it->isPackageStoredLocally() ) |
264 | new QCheckListItem( item, QString( "Description - " ) + it->getDescription() ); | 264 | new QCheckListItem( item, QString( "Description - " ) + it->getDescription() ); |
265 | else | 265 | else |
266 | new QCheckListItem( item, QString( "Filename - " ) + it->getFilename() ); | 266 | new QCheckListItem( item, QString( "Filename - " ) + it->getFilename() ); |
267 | 267 | ||
268 | if ( serverName == LOCAL_SERVER ) | 268 | if ( serverName == LOCAL_SERVER ) |
269 | { | 269 | { |
270 | new QCheckListItem( item, QString( "V. Installed - " ) + it->getVersion() ); | 270 | new QCheckListItem( item, QString( "V. Installed - " ) + it->getVersion() ); |
271 | } | 271 | } |
272 | else | 272 | else |
273 | { | 273 | { |
274 | new QCheckListItem( item, QString( "V. Available - " ) + it->getVersion() ); | 274 | new QCheckListItem( item, QString( "V. Available - " ) + it->getVersion() ); |
275 | if ( it->getLocalPackage() ) | 275 | if ( it->getLocalPackage() ) |
276 | { | 276 | { |
277 | if ( it->isInstalled() ) | 277 | if ( it->isInstalled() ) |
278 | new QCheckListItem( item, QString( "V. Installed - " ) + it->getInstalledVersion() ); | 278 | new QCheckListItem( item, QString( "V. Installed - " ) + it->getInstalledVersion() ); |
279 | } | 279 | } |
280 | } | 280 | } |
281 | packagesList->insertItem( item ); | 281 | packagesList->insertItem( item ); |
282 | } | 282 | } |
283 | 283 | ||
284 | // If the local server or the local ipkgs server disable the download button | 284 | // If the local server or the local ipkgs server disable the download button |
285 | if ( serverName == LOCAL_SERVER ) | 285 | if ( serverName == LOCAL_SERVER ) |
286 | { | 286 | { |
287 | upgrade->setEnabled( false ); | 287 | upgrade->setEnabled( false ); |
288 | download->setText( "Download" ); | 288 | download->setText( "Download" ); |
289 | download->setEnabled( false ); | 289 | download->setEnabled( false ); |
290 | } | 290 | } |
291 | else if ( serverName == LOCAL_IPKGS ) | 291 | else if ( serverName == LOCAL_IPKGS ) |
292 | { | 292 | { |
293 | upgrade->setEnabled( false ); | 293 | upgrade->setEnabled( false ); |
294 | download->setEnabled( true ); | 294 | download->setEnabled( true ); |
295 | download->setText( "Remove" ); | 295 | download->setText( "Remove" ); |
296 | } | 296 | } |
297 | else | 297 | else |
298 | { | 298 | { |
299 | upgrade->setEnabled( true ); | 299 | upgrade->setEnabled( true ); |
300 | download->setEnabled( true ); | 300 | download->setEnabled( true ); |
301 | download->setText( "Download" ); | 301 | download->setText( "Download" ); |
302 | } | 302 | } |
303 | } | 303 | } |
304 | 304 | ||
305 | void NetworkPackageManager :: updateServer() | 305 | void NetworkPackageManager :: updateServer() |
306 | { | 306 | { |
307 | QString serverName = serversList->currentText(); | 307 | QString serverName = serversList->currentText(); |
308 | 308 | ||
309 | // Update the current server | 309 | // Update the current server |
310 | // Display dialog | 310 | // Display dialog |
311 | // ProgressDlg *progDlg = new ProgressDlg( this ); | 311 | // ProgressDlg *progDlg = new ProgressDlg( this ); |
312 | // QString status = "Updating package lists..."; | 312 | // QString status = "Updating package lists..."; |
313 | // progDlg->show(); | 313 | // progDlg->show(); |
314 | // progDlg->setText( status ); | 314 | // progDlg->setText( status ); |
315 | 315 | ||
316 | // Disable buttons to stop silly people clicking lots on them :) | 316 | // Disable buttons to stop silly people clicking lots on them :) |
317 | 317 | ||
318 | // First, write out ipkg_conf file so that ipkg can use it | 318 | // First, write out ipkg_conf file so that ipkg can use it |
319 | dataMgr->writeOutIpkgConf(); | 319 | dataMgr->writeOutIpkgConf(); |
320 | 320 | ||
321 | Ipkg ipkg; | 321 | Ipkg ipkg; |
322 | ipkg.setOption( "update" ); | 322 | ipkg.setOption( "update" ); |
323 | 323 | ||
324 | InstallDlgImpl dlg( &ipkg, "Refreshing server package lists", this, "Upgrade", true ); | 324 | InstallDlgImpl dlg( &ipkg, "Refreshing server package lists", this, "Upgrade", true ); |
325 | dlg.showDlg(); | 325 | dlg.showDlg(); |
326 | 326 | ||
327 | // Reload data | 327 | // Reload data |
328 | dataMgr->reloadServerData(); | 328 | dataMgr->reloadServerData(); |
329 | serverSelected(-1); | 329 | serverSelected(-1); |
330 | // delete progDlg; | 330 | // delete progDlg; |
331 | } | 331 | } |
332 | 332 | ||
333 | void NetworkPackageManager :: upgradePackages() | 333 | void NetworkPackageManager :: upgradePackages() |
334 | { | 334 | { |
335 | // We're gonna do an upgrade of all packages | 335 | // We're gonna do an upgrade of all packages |
336 | // First warn user that this isn't recommended | 336 | // First warn user that this isn't recommended |
337 | QString text = "WARNING: Upgrading while\nOpie/Qtopia is running\nis NOT recommended!\n\nAre you sure?\n"; | 337 | QString text = "WARNING: Upgrading while\nOpie/Qtopia is running\nis NOT recommended!\n\nAre you sure?\n"; |
338 | QMessageBox warn("Warning", text, QMessageBox::Warning, | 338 | QMessageBox warn("Warning", text, QMessageBox::Warning, |
339 | QMessageBox::Yes, | 339 | QMessageBox::Yes, |
340 | QMessageBox::No | QMessageBox::Escape | QMessageBox::Default , | 340 | QMessageBox::No | QMessageBox::Escape | QMessageBox::Default , |
341 | 0, this ); | 341 | 0, this ); |
342 | warn.adjustSize(); | 342 | warn.adjustSize(); |
343 | 343 | ||
344 | if ( warn.exec() == QMessageBox::Yes ) | 344 | if ( warn.exec() == QMessageBox::Yes ) |
345 | { | 345 | { |
346 | // First, write out ipkg_conf file so that ipkg can use it | 346 | // First, write out ipkg_conf file so that ipkg can use it |
347 | dataMgr->writeOutIpkgConf(); | 347 | dataMgr->writeOutIpkgConf(); |
348 | 348 | ||
349 | // Now run upgrade | 349 | // Now run upgrade |
350 | Ipkg ipkg; | 350 | Ipkg ipkg; |
351 | ipkg.setOption( "upgrade" ); | 351 | ipkg.setOption( "upgrade" ); |
352 | 352 | ||
353 | InstallDlgImpl dlg( &ipkg, "Upgrading installed packages", this, "Upgrade", true ); | 353 | InstallDlgImpl dlg( &ipkg, "Upgrading installed packages", this, "Upgrade", true ); |
354 | dlg.showDlg(); | 354 | dlg.showDlg(); |
355 | 355 | ||
356 | // Reload data | 356 | // Reload data |
357 | dataMgr->reloadServerData(); | 357 | dataMgr->reloadServerData(); |
358 | serverSelected(-1); | 358 | serverSelected(-1); |
359 | } | 359 | } |
360 | } | 360 | } |
361 | 361 | ||
362 | 362 | ||
363 | void NetworkPackageManager :: downloadPackage() | 363 | void NetworkPackageManager :: downloadPackage() |
364 | { | 364 | { |
365 | if ( download->text() == "Download" ) | 365 | if ( download->text() == "Download" ) |
366 | { | 366 | { |
367 | // First, write out ipkg_conf file so that ipkg can use it | 367 | // First, write out ipkg_conf file so that ipkg can use it |
368 | dataMgr->writeOutIpkgConf(); | 368 | dataMgr->writeOutIpkgConf(); |
369 | 369 | ||
370 | // Display dialog to user asking where to download the files to | 370 | // Display dialog to user asking where to download the files to |
371 | bool ok = FALSE; | 371 | bool ok = FALSE; |
372 | QString dir = ""; | 372 | QString dir = ""; |
373 | #ifdef QWS | 373 | #ifdef QWS |
374 | // read download directory from config file | 374 | // read download directory from config file |
375 | Config cfg( "aqpkg" ); | 375 | Config cfg( "aqpkg" ); |
376 | cfg.setGroup( "settings" ); | 376 | cfg.setGroup( "settings" ); |
377 | dir = cfg.readEntry( "downloadDir", "/home/root/Documents/application/ipkg" ); | 377 | dir = cfg.readEntry( "downloadDir", "/home/root/Documents/application/ipkg" ); |
378 | #endif | 378 | #endif |
379 | 379 | ||
380 | QString text = InputDialog::getText( tr( "Download to where" ), tr( "Enter path to download to" ), dir, &ok, this ); | 380 | QString text = InputDialog::getText( tr( "Download to where" ), tr( "Enter path to download to" ), dir, &ok, this ); |
381 | if ( ok && !text.isEmpty() ) | 381 | if ( ok && !text.isEmpty() ) |
382 | dir = text; // user entered something and pressed ok | 382 | dir = text; // user entered something and pressed ok |
383 | else | 383 | else |
384 | return; // user entered nothing or pressed cancel | 384 | return; // user entered nothing or pressed cancel |
385 | 385 | ||
386 | #ifdef QWS | 386 | #ifdef QWS |
387 | // Store download directory in config file | 387 | // Store download directory in config file |
388 | cfg.writeEntry( "downloadDir", dir ); | 388 | cfg.writeEntry( "downloadDir", dir ); |
389 | #endif | 389 | #endif |
390 | 390 | ||
391 | // Get starting directory | 391 | // Get starting directory |
392 | char initDir[PATH_MAX]; | 392 | char initDir[PATH_MAX]; |
393 | getcwd( initDir, PATH_MAX ); | 393 | getcwd( initDir, PATH_MAX ); |
394 | 394 | ||
395 | // Download each package | 395 | // Download each package |
396 | Ipkg ipkg; | 396 | Ipkg ipkg; |
397 | connect( &ipkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &))); | 397 | connect( &ipkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &))); |
398 | 398 | ||
399 | ipkg.setOption( "download" ); | 399 | ipkg.setOption( "download" ); |
400 | ipkg.setRuntimeDirectory( dir ); | 400 | ipkg.setRuntimeDirectory( dir ); |
401 | for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); | 401 | for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); |
402 | item != 0 ; | 402 | item != 0 ; |
403 | item = (QCheckListItem *)item->nextSibling() ) | 403 | item = (QCheckListItem *)item->nextSibling() ) |
404 | { | 404 | { |
405 | if ( item->isOn() ) | 405 | if ( item->isOn() ) |
406 | { | 406 | { |
407 | QString name = item->text(); | 407 | QString name = item->text(); |
408 | int pos = name.find( "*" ); | 408 | int pos = name.find( "*" ); |
409 | name.truncate( pos ); | 409 | name.truncate( pos ); |
410 | 410 | ||
411 | // if (there is a (installed), remove it | 411 | // if (there is a (installed), remove it |
412 | pos = name.find( "(installed)" ); | 412 | pos = name.find( "(installed)" ); |
413 | if ( pos > 0 ) | 413 | if ( pos > 0 ) |
414 | name.truncate( pos - 1 ); | 414 | name.truncate( pos - 1 ); |
415 | 415 | ||
416 | ipkg.setPackage( name ); | 416 | ipkg.setPackage( name ); |
417 | ipkg.runIpkg( ); | 417 | ipkg.runIpkg( ); |
418 | } | 418 | } |
419 | } | 419 | } |
420 | } | 420 | } |
421 | else if ( download->text() == "Remove" ) | 421 | else if ( download->text() == "Remove" ) |
422 | { | 422 | { |
423 | for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); | 423 | for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); |
424 | item != 0 ; | 424 | item != 0 ; |
425 | item = (QCheckListItem *)item->nextSibling() ) | 425 | item = (QCheckListItem *)item->nextSibling() ) |
426 | { | 426 | { |
427 | if ( item->isOn() ) | 427 | if ( item->isOn() ) |
428 | { | 428 | { |
429 | QString name = item->text(); | 429 | QString name = item->text(); |
430 | int pos = name.find( "*" ); | 430 | int pos = name.find( "*" ); |
431 | name.truncate( pos ); | 431 | name.truncate( pos ); |
432 | 432 | ||
433 | // if (there is a (installed), remove it | 433 | // if (there is a (installed), remove it |
434 | pos = name.find( "(installed)" ); | 434 | pos = name.find( "(installed)" ); |
435 | if ( pos > 0 ) | 435 | if ( pos > 0 ) |
436 | name.truncate( pos - 1 ); | 436 | name.truncate( pos - 1 ); |
437 | 437 | ||
438 | Package *p = dataMgr->getServer( serversList->currentText() )->getPackage( name ); | 438 | Package *p = dataMgr->getServer( serversList->currentText() )->getPackage( name ); |
439 | QFile f( p->getFilename() ); | 439 | QFile f( p->getFilename() ); |
440 | f.remove(); | 440 | f.remove(); |
441 | } | 441 | } |
442 | } | 442 | } |
443 | } | 443 | } |
444 | 444 | ||
445 | dataMgr->reloadServerData(); | 445 | dataMgr->reloadServerData(); |
446 | serverSelected( -1 ); | 446 | serverSelected( -1 ); |
447 | } | 447 | } |
448 | 448 | ||
449 | 449 | ||
450 | void NetworkPackageManager :: applyChanges() | 450 | void NetworkPackageManager :: applyChanges() |
451 | { | 451 | { |
452 | stickyOption = ""; | 452 | stickyOption = ""; |
453 | 453 | ||
454 | // First, write out ipkg_conf file so that ipkg can use it | 454 | // First, write out ipkg_conf file so that ipkg can use it |
455 | dataMgr->writeOutIpkgConf(); | 455 | dataMgr->writeOutIpkgConf(); |
456 | 456 | ||
457 | // Now for each selected item | 457 | // Now for each selected item |
458 | // deal with it | 458 | // deal with it |
459 | 459 | ||
460 | vector<InstallData> workingPackages; | 460 | vector<InstallData> workingPackages; |
461 | for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); | 461 | for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); |
462 | item != 0 ; | 462 | item != 0 ; |
463 | item = (QCheckListItem *)item->nextSibling() ) | 463 | item = (QCheckListItem *)item->nextSibling() ) |
464 | { | 464 | { |
465 | if ( item->isOn() ) | 465 | if ( item->isOn() ) |
466 | { | 466 | { |
467 | InstallData data = dealWithItem( item ); | 467 | InstallData data = dealWithItem( item ); |
468 | workingPackages.push_back( data ); | 468 | workingPackages.push_back( data ); |
469 | } | 469 | } |
470 | } | 470 | } |
471 | 471 | ||
472 | if ( workingPackages.size() == 0 ) | 472 | if ( workingPackages.size() == 0 ) |
473 | { | 473 | { |
474 | // Nothing to do | 474 | // Nothing to do |
475 | QMessageBox::information( this, "Nothing to do", | 475 | QMessageBox::information( this, "Nothing to do", |
476 | "No packages selected", "OK" ); | 476 | "No packages selected", "OK" ); |
477 | 477 | ||
478 | return; | 478 | return; |
479 | } | 479 | } |
480 | 480 | ||
481 | // do the stuff | 481 | // do the stuff |
482 | InstallDlgImpl dlg( workingPackages, dataMgr, this, "Install", true ); | 482 | InstallDlgImpl dlg( workingPackages, dataMgr, this, "Install", true ); |
483 | dlg.showDlg(); | 483 | dlg.showDlg(); |
484 | 484 | ||
485 | // Reload data | 485 | // Reload data |
486 | dataMgr->reloadServerData(); | 486 | dataMgr->reloadServerData(); |
487 | serverSelected(-1); | 487 | serverSelected(-1); |
488 | 488 | ||
489 | #ifdef QWS | 489 | #ifdef QWS |
490 | // Finally let the main system update itself | 490 | // Finally let the main system update itself |
491 | QCopEnvelope e("QPE/System", "linkChanged(QString)"); | 491 | QCopEnvelope e("QPE/System", "linkChanged(QString)"); |
492 | QString lf = QString::null; | 492 | QString lf = QString::null; |
493 | e << lf; | 493 | e << lf; |
494 | #endif | 494 | #endif |
495 | } | 495 | } |
496 | 496 | ||
497 | // decide what to do - either remove, upgrade or install | 497 | // decide what to do - either remove, upgrade or install |
498 | // Current rules: | 498 | // Current rules: |
499 | // If not installed - install | 499 | // If not installed - install |
500 | // If installed and different version available - upgrade | 500 | // If installed and different version available - upgrade |
501 | // If installed and version up to date - remove | 501 | // If installed and version up to date - remove |
502 | InstallData NetworkPackageManager :: dealWithItem( QCheckListItem *item ) | 502 | InstallData NetworkPackageManager :: dealWithItem( QCheckListItem *item ) |
503 | { | 503 | { |
504 | QString name = item->text(); | 504 | QString name = item->text(); |
505 | int pos = name.find( "*" ); | 505 | int pos = name.find( "*" ); |
506 | name.truncate( pos ); | 506 | name.truncate( pos ); |
507 | 507 | ||
508 | // if (there is a (installed), remove it | 508 | // if (there is a (installed), remove it |
509 | pos = name.find( "(installed)" ); | 509 | pos = name.find( "(installed)" ); |
510 | if ( pos > 0 ) | 510 | if ( pos > 0 ) |
511 | name.truncate( pos - 1 ); | 511 | name.truncate( pos - 1 ); |
512 | 512 | ||
513 | // Get package | 513 | // Get package |
514 | Server *s = dataMgr->getServer( serversList->currentText() ); | 514 | Server *s = dataMgr->getServer( serversList->currentText() ); |
515 | Package *p = s->getPackage( name ); | 515 | Package *p = s->getPackage( name ); |
516 | 516 | ||
517 | // If the package has a filename then it is a local file | 517 | // If the package has a filename then it is a local file |
518 | if ( p->isPackageStoredLocally() ) | 518 | if ( p->isPackageStoredLocally() ) |
519 | name = p->getFilename(); | 519 | name = p->getFilename(); |
520 | |||
520 | QString option; | 521 | QString option; |
521 | QString dest = "root"; | 522 | QString dest = "root"; |
522 | if ( !p->isInstalled() ) | 523 | if ( !p->isInstalled() ) |
523 | { | 524 | { |
524 | InstallData item; | 525 | InstallData item; |
525 | item.option = "I"; | 526 | item.option = "I"; |
526 | item.packageName = name; | 527 | item.packageName = name; |
527 | return item; | 528 | return item; |
528 | } | 529 | } |
529 | else | 530 | else |
530 | { | 531 | { |
531 | InstallData item; | 532 | InstallData item; |
532 | item.option = "D"; | 533 | item.option = "D"; |
533 | item.packageName = p->getInstalledPackageName(); | 534 | if ( !p->isPackageStoredLocally() ) |
535 | item.packageName = p->getInstalledPackageName(); | ||
536 | else | ||
537 | item.packageName = name; | ||
538 | |||
534 | if ( p->getInstalledTo() ) | 539 | if ( p->getInstalledTo() ) |
535 | { | 540 | { |
536 | item.destination = p->getInstalledTo(); | 541 | item.destination = p->getInstalledTo(); |
537 | cout << "dest - " << p->getInstalledTo()->getDestinationName() << endl; | 542 | cout << "dest - " << p->getInstalledTo()->getDestinationName() << endl; |
538 | cout << "dest - " << p->getInstalledTo()->getDestinationPath() << endl; | 543 | cout << "dest - " << p->getInstalledTo()->getDestinationPath() << endl; |
539 | } | 544 | } |
540 | else | 545 | else |
541 | { | 546 | { |
542 | item.destination = p->getLocalPackage()->getInstalledTo(); | 547 | item.destination = p->getLocalPackage()->getInstalledTo(); |
543 | } | 548 | } |
544 | 549 | ||
545 | // Now see if version is newer or not | 550 | // Now see if version is newer or not |
546 | int val = compareVersions( p->getInstalledVersion(), p->getVersion() ); | 551 | int val = compareVersions( p->getInstalledVersion(), p->getVersion() ); |
552 | |||
553 | // If the version requested is older and user selected a local ipk file, then reinstall the file | ||
554 | if ( p->isPackageStoredLocally() && val == -1 ) | ||
555 | val = 0; | ||
556 | |||
547 | if ( val == -2 ) | 557 | if ( val == -2 ) |
548 | { | 558 | { |
549 | // Error - should handle | 559 | // Error - should handle |
550 | } | 560 | } |
551 | else if ( val == -1 ) | 561 | else if ( val == -1 ) |
552 | { | 562 | { |
553 | // Version available is older - remove only | 563 | // Version available is older - remove only |
554 | item.option = "D"; | 564 | item.option = "D"; |
555 | } | 565 | } |
556 | else | 566 | else |
557 | { | 567 | { |
558 | QString caption; | 568 | QString caption; |
559 | QString text; | 569 | QString text; |
560 | QString secondButton; | 570 | QString secondButton; |
561 | QString secondOption; | 571 | QString secondOption; |
562 | if ( val == 0 ) | 572 | if ( val == 0 ) |
563 | { | 573 | { |
564 | // Version available is the same - option to remove or reinstall | 574 | // Version available is the same - option to remove or reinstall |
565 | caption = "Do you wish to remove or reinstall\n%s?"; | 575 | caption = "Do you wish to remove or reinstall\n%s?"; |
566 | text = "Remove or ReInstall"; | 576 | text = "Remove or ReInstall"; |
567 | secondButton = "ReInstall"; | 577 | secondButton = "ReInstall"; |
568 | secondOption = "R"; | 578 | secondOption = "R"; |
569 | } | 579 | } |
570 | else if ( val == 1 ) | 580 | else if ( val == 1 ) |
571 | { | 581 | { |
572 | // Version available is newer - option to remove or upgrade | 582 | // Version available is newer - option to remove or upgrade |
573 | caption = "Do you wish to remove or upgrade\n%s?"; | 583 | caption = "Do you wish to remove or upgrade\n%s?"; |
574 | text = "Remove or Upgrade"; | 584 | text = "Remove or Upgrade"; |
575 | secondButton = "Upgrade"; | 585 | secondButton = "Upgrade"; |
576 | secondOption = "U"; | 586 | secondOption = "U"; |
577 | } | 587 | } |
578 | 588 | ||
579 | // Sticky option not implemented yet, but will eventually allow | 589 | // Sticky option not implemented yet, but will eventually allow |
580 | // the user to say something like 'remove all' | 590 | // the user to say something like 'remove all' |
581 | if ( stickyOption == "" ) | 591 | if ( stickyOption == "" ) |
582 | { | 592 | { |
583 | QString msgtext; | 593 | QString msgtext; |
584 | msgtext.sprintf( caption, (const char *)name ); | 594 | msgtext.sprintf( caption, (const char *)name ); |
585 | switch( QMessageBox::information( this, text, | 595 | switch( QMessageBox::information( this, text, |
586 | msgtext, "Remove", secondButton ) ) | 596 | msgtext, "Remove", secondButton ) ) |
587 | { | 597 | { |
588 | case 0: // Try again or Enter | 598 | case 0: // Try again or Enter |
589 | // option 0 = Remove | 599 | // option 0 = Remove |
590 | item.option = "D"; | 600 | item.option = "D"; |
591 | break; | 601 | break; |
592 | case 1: // Quit or Escape | 602 | case 1: // Quit or Escape |
593 | item.option = secondOption; | 603 | item.option = secondOption; |
594 | break; | 604 | break; |
595 | } | 605 | } |
596 | } | 606 | } |
597 | else | 607 | else |
598 | { | 608 | { |
599 | // item.option = stickyOption; | 609 | // item.option = stickyOption; |
600 | } | 610 | } |
601 | } | 611 | } |
602 | 612 | ||
603 | 613 | ||
604 | // Check if we are reinstalling the same version | 614 | // Check if we are reinstalling the same version |
605 | if ( item.option != "R" ) | 615 | if ( item.option != "R" ) |
606 | item.recreateLinks = true; | 616 | item.recreateLinks = true; |
607 | else | 617 | else |
608 | item.recreateLinks = false; | 618 | item.recreateLinks = false; |
609 | 619 | ||
610 | // User hit cancel (on dlg - assume remove) | 620 | // User hit cancel (on dlg - assume remove) |
611 | return item; | 621 | return item; |
612 | } | 622 | } |
613 | } | 623 | } |
614 | 624 | ||
615 | void NetworkPackageManager :: displayText( const QString &t ) | 625 | void NetworkPackageManager :: displayText( const QString &t ) |
616 | { | 626 | { |
617 | cout << t << endl; | 627 | cout << t << endl; |
618 | } | 628 | } |
619 | 629 | ||
620 | 630 | ||
621 | void NetworkPackageManager :: letterPushed( QString t ) | 631 | void NetworkPackageManager :: letterPushed( QString t ) |
622 | { | 632 | { |
623 | QCheckListItem *top = (QCheckListItem *)packagesList->firstChild(); | 633 | QCheckListItem *top = (QCheckListItem *)packagesList->firstChild(); |
624 | QCheckListItem *start = (QCheckListItem *)packagesList->currentItem(); | 634 | QCheckListItem *start = (QCheckListItem *)packagesList->currentItem(); |
625 | if ( packagesList->firstChild() == 0 ) | 635 | if ( packagesList->firstChild() == 0 ) |
626 | return; | 636 | return; |
627 | 637 | ||
628 | QCheckListItem *item; | 638 | QCheckListItem *item; |
629 | if ( start == 0 ) | 639 | if ( start == 0 ) |
630 | { | 640 | { |
631 | item = (QCheckListItem *)packagesList->firstChild(); | 641 | item = (QCheckListItem *)packagesList->firstChild(); |
632 | start = top; | 642 | start = top; |
633 | } | 643 | } |
634 | else | 644 | else |
635 | item = (QCheckListItem *)start->nextSibling(); | 645 | item = (QCheckListItem *)start->nextSibling(); |
636 | 646 | ||
637 | if ( item == 0 ) | 647 | if ( item == 0 ) |
638 | item = (QCheckListItem *)packagesList->firstChild(); | 648 | item = (QCheckListItem *)packagesList->firstChild(); |
639 | do | 649 | do |
640 | { | 650 | { |
641 | if ( item->text().lower().startsWith( t.lower() ) ) | 651 | if ( item->text().lower().startsWith( t.lower() ) ) |
642 | { | 652 | { |
643 | packagesList->setSelected( item, true ); | 653 | packagesList->setSelected( item, true ); |
644 | packagesList->ensureItemVisible( item ); | 654 | packagesList->ensureItemVisible( item ); |
645 | break; | 655 | break; |
646 | } | 656 | } |
647 | 657 | ||
648 | item = (QCheckListItem *)item->nextSibling(); | 658 | item = (QCheckListItem *)item->nextSibling(); |
649 | if ( !item ) | 659 | if ( !item ) |
650 | item = (QCheckListItem *)packagesList->firstChild(); | 660 | item = (QCheckListItem *)packagesList->firstChild(); |
651 | } while ( item != start); | 661 | } while ( item != start); |
652 | } | 662 | } |
diff --git a/noncore/settings/aqpkg/server.cpp b/noncore/settings/aqpkg/server.cpp index 8bca892..539ebf0 100644 --- a/noncore/settings/aqpkg/server.cpp +++ b/noncore/settings/aqpkg/server.cpp | |||
@@ -1,273 +1,279 @@ | |||
1 | /*************************************************************************** | 1 | /*************************************************************************** |
2 | server.cpp - description | 2 | server.cpp - description |
3 | ------------------- | 3 | ------------------- |
4 | begin : Mon Aug 26 2002 | 4 | begin : Mon Aug 26 2002 |
5 | copyright : (C) 2002 by Andy Qua | 5 | copyright : (C) 2002 by Andy Qua |
6 | email : andy.qua@blueyonder.co.uk | 6 | email : andy.qua@blueyonder.co.uk |
7 | description : This class holds details about a server | 7 | description : This class holds details about a server |
8 | : e.g. all the packages that contained on the server | 8 | : e.g. all the packages that contained on the server |
9 | : the installation status | 9 | : the installation status |
10 | ***************************************************************************/ | 10 | ***************************************************************************/ |
11 | 11 | ||
12 | /*************************************************************************** | 12 | /*************************************************************************** |
13 | * * | 13 | * * |
14 | * This program is free software; you can redistribute it and/or modify * | 14 | * This program is free software; you can redistribute it and/or modify * |
15 | * it under the terms of the GNU General Public License as published by * | 15 | * it under the terms of the GNU General Public License as published by * |
16 | * the Free Software Foundation; either version 2 of the License, or * | 16 | * the Free Software Foundation; either version 2 of the License, or * |
17 | * (at your option) any later version. * | 17 | * (at your option) any later version. * |
18 | * * | 18 | * * |
19 | ***************************************************************************/ | 19 | ***************************************************************************/ |
20 | 20 | ||
21 | 21 | ||
22 | #include <stdio.h> | 22 | #include <stdio.h> |
23 | #include <string.h> | 23 | #include <string.h> |
24 | #include <stdlib.h> | 24 | #include <stdlib.h> |
25 | 25 | ||
26 | #include <iostream> | 26 | #include <iostream> |
27 | #include <fstream> | 27 | #include <fstream> |
28 | using namespace std; | 28 | using namespace std; |
29 | 29 | ||
30 | #include "server.h" | 30 | #include "server.h" |
31 | 31 | ||
32 | #ifdef QWS | 32 | #ifdef QWS |
33 | #include <qpe/global.h> | 33 | #include <qpe/global.h> |
34 | #include <qpe/applnk.h> | 34 | #include <qpe/applnk.h> |
35 | #include <qlist.h> | 35 | #include <qlist.h> |
36 | #endif | 36 | #endif |
37 | 37 | ||
38 | #include "utils.h" | 38 | #include "utils.h" |
39 | 39 | ||
40 | #include "global.h" | 40 | #include "global.h" |
41 | 41 | ||
42 | Server :: Server( const char *name, const char *url ) | 42 | Server :: Server( const char *name, const char *url ) |
43 | { | 43 | { |
44 | serverName = name; | 44 | serverName = name; |
45 | serverUrl = url; | 45 | serverUrl = url; |
46 | packageFile = IPKG_DIR; | 46 | packageFile = IPKG_DIR; |
47 | packageFile += "lists/" + serverName; | 47 | packageFile += "lists/" + serverName; |
48 | } | 48 | } |
49 | 49 | ||
50 | Server :: ~Server() | 50 | Server :: ~Server() |
51 | { | 51 | { |
52 | cleanUp(); | 52 | cleanUp(); |
53 | } | 53 | } |
54 | 54 | ||
55 | void Server :: cleanUp() | 55 | void Server :: cleanUp() |
56 | { | 56 | { |
57 | packageList.clear(); | 57 | packageList.clear(); |
58 | } | 58 | } |
59 | 59 | ||
60 | void Server :: readStatusFile( vector<Destination> &destList ) | 60 | void Server :: readStatusFile( vector<Destination> &destList ) |
61 | { | 61 | { |
62 | cleanUp(); | 62 | cleanUp(); |
63 | 63 | ||
64 | vector<Destination>::iterator dit; | 64 | vector<Destination>::iterator dit; |
65 | bool rootRead = false; | 65 | bool rootRead = false; |
66 | for ( dit = destList.begin() ; dit != destList.end() ; ++dit ) | 66 | for ( dit = destList.begin() ; dit != destList.end() ; ++dit ) |
67 | { | 67 | { |
68 | bool installingToRoot = false; | 68 | bool installingToRoot = false; |
69 | 69 | ||
70 | QString path = dit->getDestinationPath(); | 70 | QString path = dit->getDestinationPath(); |
71 | if ( path.right( 1 ) != "/" ) | 71 | if ( path.right( 1 ) != "/" ) |
72 | path += "/"; | 72 | path += "/"; |
73 | 73 | ||
74 | if ( path == "/" ) | 74 | if ( path == "/" ) |
75 | { | 75 | { |
76 | rootRead = true; | 76 | rootRead = true; |
77 | installingToRoot = true; | 77 | installingToRoot = true; |
78 | } | 78 | } |
79 | 79 | ||
80 | packageFile = path + "usr/lib/ipkg/status"; | 80 | packageFile = path + "usr/lib/ipkg/status"; |
81 | readPackageFile( 0, false, installingToRoot, dit ); | 81 | readPackageFile( 0, false, installingToRoot, dit ); |
82 | } | 82 | } |
83 | 83 | ||
84 | // Ensure that the root status file is read | 84 | // Ensure that the root status file is read |
85 | if ( !rootRead ) | 85 | if ( !rootRead ) |
86 | { | 86 | { |
87 | cout << "Reading status file " << "/usr/lib/ipkg/status" << endl; | 87 | cout << "Reading status file " << "/usr/lib/ipkg/status" << endl; |
88 | packageFile = "/usr/lib/ipkg/status"; | 88 | packageFile = "/usr/lib/ipkg/status"; |
89 | readPackageFile( 0, false, true ); | 89 | readPackageFile( 0, false, true ); |
90 | } | 90 | } |
91 | } | 91 | } |
92 | 92 | ||
93 | void Server :: readLocalIpks( Server *local ) | 93 | void Server :: readLocalIpks( Server *local ) |
94 | { | 94 | { |
95 | cleanUp(); | 95 | cleanUp(); |
96 | 96 | ||
97 | #ifdef QWS | 97 | #ifdef QWS |
98 | // First, get any local IPKGs in the documents area | 98 | // First, get any local IPKGs in the documents area |
99 | // Only applicable to Qtopie/Opie | 99 | // Only applicable to Qtopie/Opie |
100 | 100 | ||
101 | DocLnkSet files; | 101 | DocLnkSet files; |
102 | Global::findDocuments( &files, "application/ipkg" ); | 102 | Global::findDocuments( &files, "application/ipkg" ); |
103 | 103 | ||
104 | // Now add the items to the list | 104 | // Now add the items to the list |
105 | QListIterator<DocLnk> it( files.children() ); | 105 | QListIterator<DocLnk> it( files.children() ); |
106 | 106 | ||
107 | for ( ; it.current() ; ++it ) | 107 | for ( ; it.current() ; ++it ) |
108 | { | 108 | { |
109 | // OK, we have a local IPK file, I think the standard naming conventions | 109 | // OK, we have a local IPK file, I think the standard naming conventions |
110 | // for these are packagename_version_arm.ipk | 110 | // for these are packagename_version_arm.ipk |
111 | QString file = (*it)->file(); | 111 | QString file = (*it)->file(); |
112 | 112 | ||
113 | QString packageName = Utils::getPackageNameFromIpkFilename( file ); | 113 | // Changed to display the filename (excluding the path) |
114 | QString packageName = Utils::getFilenameFromIpkFilename( file ); | ||
114 | QString ver = Utils::getPackageVersionFromIpkFilename( file ); | 115 | QString ver = Utils::getPackageVersionFromIpkFilename( file ); |
115 | packageList.push_back( Package( packageName ) ); | 116 | packageList.push_back( Package( packageName ) ); |
116 | packageList.back().setVersion( ver ); | 117 | packageList.back().setVersion( ver ); |
117 | packageList.back().setFilename( file ); | 118 | packageList.back().setFilename( file ); |
118 | packageList.back().setPackageStoredLocally( true ); | 119 | packageList.back().setPackageStoredLocally( true ); |
119 | 120 | ||
120 | } | 121 | } |
121 | #else | 122 | #else |
122 | QString names[] = { "advancedfm_0.9.1-20020811_arm.ipk", "libopie_0.9.1-20020811_arm.ipk", "libopieobex_0.9.1-20020811.1_arm.ipk", "opie-addressbook_0.9.1-20020811_arm.ipk" }; | 123 | QString names[] = { "advancedfm_0.9.1-20020811_arm.ipk", "libopie_0.9.1-20020811_arm.ipk", "libopieobex_0.9.1-20020811.1_arm.ipk", "opie-addressbook_0.9.1-20020811_arm.ipk" }; |
123 | for ( int i = 0 ; i < 4 ; ++i ) | 124 | for ( int i = 0 ; i < 4 ; ++i ) |
124 | { | 125 | { |
125 | // OK, we have a local IPK file, I think the standard naming conventions | 126 | // OK, we have a local IPK file, I think the standard naming conventions |
126 | // for these are packagename_version_arm.ipk | 127 | // for these are packagename_version_arm.ipk |
127 | QString file = names[i]; | 128 | QString file = names[i]; |
128 | int p = file.find( "_" ); | 129 | int p = file.find( "_" ); |
129 | QString tmp = file.mid( 0, p ); | 130 | QString tmp = file.mid( 0, p ); |
130 | packageList.push_back( Package( tmp ) ); | 131 | packageList.push_back( Package( tmp ) ); |
131 | int p2 = file.find( "_", p+1 ); | 132 | int p2 = file.find( "_", p+1 ); |
132 | tmp = file.mid( p+1, p2-(p+1) ); | 133 | tmp = file.mid( p+1, p2-(p+1) ); |
133 | packageList.back().setVersion( tmp ); | 134 | packageList.back().setVersion( tmp ); |
134 | packageList.back().setPackageStoredLocally( true ); | 135 | packageList.back().setPackageStoredLocally( true ); |
135 | } | 136 | } |
136 | #endif | 137 | #endif |
137 | 138 | ||
138 | // build local packages | 139 | // build local packages |
139 | buildLocalPackages( local ); | 140 | buildLocalPackages( local ); |
140 | } | 141 | } |
141 | 142 | ||
142 | void Server :: readPackageFile( Server *local, bool clearAll, bool installingToRoot, Destination *dest ) | 143 | void Server :: readPackageFile( Server *local, bool clearAll, bool installingToRoot, Destination *dest ) |
143 | { | 144 | { |
144 | ifstream in( packageFile ); | 145 | ifstream in( packageFile ); |
145 | if ( !in.is_open() ) | 146 | if ( !in.is_open() ) |
146 | return; | 147 | return; |
147 | 148 | ||
148 | char line[1001]; | 149 | char line[1001]; |
149 | char k[21]; | 150 | char k[21]; |
150 | char v[1001]; | 151 | char v[1001]; |
151 | QString key; | 152 | QString key; |
152 | QString value; | 153 | QString value; |
153 | 154 | ||
154 | if ( clearAll ) | 155 | if ( clearAll ) |
155 | cleanUp(); | 156 | cleanUp(); |
156 | Package *currPackage = 0; | 157 | Package *currPackage = 0; |
157 | 158 | ||
158 | bool newPackage = true; | 159 | bool newPackage = true; |
159 | do | 160 | do |
160 | { | 161 | { |
161 | in.getline( line, 1000 ); | 162 | in.getline( line, 1000 ); |
162 | if ( in.eof() ) | 163 | if ( in.eof() ) |
163 | continue; | 164 | continue; |
164 | 165 | ||
165 | k[0] = '\0'; | 166 | k[0] = '\0'; |
166 | v[0] = '\0'; | 167 | v[0] = '\0'; |
167 | 168 | ||
168 | sscanf( line, "%[^:]: %[^\n]", k, v ); | 169 | sscanf( line, "%[^:]: %[^\n]", k, v ); |
169 | key = k; | 170 | key = k; |
170 | value = v; | 171 | value = v; |
171 | key = key.stripWhiteSpace(); | 172 | key = key.stripWhiteSpace(); |
172 | value = value.stripWhiteSpace(); | 173 | value = value.stripWhiteSpace(); |
173 | if ( key == "Package" && newPackage ) | 174 | if ( key == "Package" && newPackage ) |
174 | { | 175 | { |
175 | newPackage = false; | 176 | newPackage = false; |
176 | 177 | ||
177 | currPackage = getPackage( value ); | 178 | currPackage = getPackage( value ); |
178 | if ( !currPackage ) | 179 | if ( !currPackage ) |
179 | { | 180 | { |
180 | packageList.push_back( Package( value ) ); | 181 | packageList.push_back( Package( value ) ); |
181 | currPackage = &(packageList.back()); | 182 | currPackage = &(packageList.back()); |
182 | currPackage->setInstalledTo( dest ); | 183 | currPackage->setInstalledTo( dest ); |
183 | 184 | ||
184 | if ( installingToRoot ) | 185 | if ( installingToRoot ) |
185 | currPackage->setInstalledToRoot( true ); | 186 | currPackage->setInstalledToRoot( true ); |
186 | } | 187 | } |
187 | else | 188 | else |
188 | { | 189 | { |
189 | if (currPackage->getStatus().find( "deinstall" ) != -1 ) | 190 | if (currPackage->getStatus().find( "deinstall" ) != -1 ) |
190 | currPackage->setInstalledTo( dest ); | 191 | currPackage->setInstalledTo( dest ); |
191 | } | 192 | } |
192 | } | 193 | } |
193 | else if ( key == "Version" ) | 194 | else if ( key == "Version" ) |
194 | { | 195 | { |
195 | if ( currPackage ) | 196 | if ( currPackage ) |
196 | currPackage->setVersion( value ); | 197 | currPackage->setVersion( value ); |
197 | } | 198 | } |
198 | else if ( key == "Status" ) | 199 | else if ( key == "Status" ) |
199 | { | 200 | { |
200 | if ( currPackage ) | 201 | if ( currPackage ) |
201 | currPackage->setStatus( value ); | 202 | currPackage->setStatus( value ); |
202 | } | 203 | } |
203 | else if ( key == "Description" ) | 204 | else if ( key == "Description" ) |
204 | { | 205 | { |
205 | if ( currPackage ) | 206 | if ( currPackage ) |
206 | currPackage->setDescription( value ); | 207 | currPackage->setDescription( value ); |
207 | } | 208 | } |
208 | else if ( key == "Filename" ) | 209 | else if ( key == "Filename" ) |
209 | { | 210 | { |
210 | if ( currPackage ) | 211 | if ( currPackage ) |
211 | currPackage->setFilename( value ); | 212 | currPackage->setFilename( value ); |
212 | } | 213 | } |
213 | else if ( key == "" ) | 214 | else if ( key == "" ) |
214 | { | 215 | { |
215 | newPackage = true; | 216 | newPackage = true; |
216 | } | 217 | } |
217 | } while ( !in.eof() ); | 218 | } while ( !in.eof() ); |
218 | 219 | ||
219 | in.close(); | 220 | in.close(); |
220 | 221 | ||
221 | // build local packages | 222 | // build local packages |
222 | buildLocalPackages( local ); | 223 | buildLocalPackages( local ); |
223 | } | 224 | } |
224 | 225 | ||
225 | void Server :: buildLocalPackages( Server *local ) | 226 | void Server :: buildLocalPackages( Server *local ) |
226 | { | 227 | { |
227 | for ( unsigned int i = 0 ; i < packageList.size() ; ++i ) | 228 | for ( unsigned int i = 0 ; i < packageList.size() ; ++i ) |
228 | { | 229 | { |
229 | QString name = packageList[i].getPackageName(); | 230 | QString name = packageList[i].getPackageName(); |
231 | |||
232 | // If the package name is an ipk name, then convert the filename to a package name | ||
233 | if ( name.find( ".ipk" ) != -1 ) | ||
234 | name = Utils::getPackageNameFromIpkFilename( packageList[i].getFilename() ); | ||
235 | |||
230 | if ( local ) | 236 | if ( local ) |
231 | packageList[i].setLocalPackage( local->getPackage( name ) ); | 237 | packageList[i].setLocalPackage( local->getPackage( name ) ); |
232 | else | 238 | else |
233 | packageList[i].setLocalPackage( 0 ); | 239 | packageList[i].setLocalPackage( 0 ); |
234 | } | 240 | } |
235 | 241 | ||
236 | } | 242 | } |
237 | 243 | ||
238 | Package *Server :: getPackage( QString &name ) | 244 | Package *Server :: getPackage( QString &name ) |
239 | { | 245 | { |
240 | return getPackage( (const char *)name ); | 246 | return getPackage( (const char *)name ); |
241 | } | 247 | } |
242 | 248 | ||
243 | Package *Server :: getPackage( const char *name ) | 249 | Package *Server :: getPackage( const char *name ) |
244 | { | 250 | { |
245 | Package *ret = 0; | 251 | Package *ret = 0; |
246 | 252 | ||
247 | for ( unsigned int i = 0 ; i < packageList.size() && ret == 0; ++i ) | 253 | for ( unsigned int i = 0 ; i < packageList.size() && ret == 0; ++i ) |
248 | { | 254 | { |
249 | if ( packageList[i].getPackageName() == name ) | 255 | if ( packageList[i].getPackageName() == name ) |
250 | ret = &packageList[i]; | 256 | ret = &packageList[i]; |
251 | } | 257 | } |
252 | 258 | ||
253 | return ret; | 259 | return ret; |
254 | } | 260 | } |
255 | 261 | ||
256 | QString Server :: toString() | 262 | QString Server :: toString() |
257 | { | 263 | { |
258 | QString ret = "Server\n name - " + serverName + | 264 | QString ret = "Server\n name - " + serverName + |
259 | "\n url - " + serverUrl + | 265 | "\n url - " + serverUrl + |
260 | "\n"; | 266 | "\n"; |
261 | 267 | ||
262 | for ( unsigned int i = 0 ; i < packageList.size() ; ++i ) | 268 | for ( unsigned int i = 0 ; i < packageList.size() ; ++i ) |
263 | ret += "\n " + packageList[i].toString(); | 269 | ret += "\n " + packageList[i].toString(); |
264 | 270 | ||
265 | 271 | ||
266 | return ret; | 272 | return ret; |
267 | } | 273 | } |
268 | 274 | ||
269 | vector<Package> &Server::getPackageList() | 275 | vector<Package> &Server::getPackageList() |
270 | { | 276 | { |
271 | return packageList; | 277 | return packageList; |
272 | } | 278 | } |
273 | 279 | ||