-rw-r--r-- | noncore/settings/aqpkg/ipkg.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/noncore/settings/aqpkg/ipkg.cpp b/noncore/settings/aqpkg/ipkg.cpp index 08ae386..3df569b 100644 --- a/noncore/settings/aqpkg/ipkg.cpp +++ b/noncore/settings/aqpkg/ipkg.cpp | |||
@@ -166,162 +166,173 @@ void Ipkg :: createSymLinks() | |||
166 | 166 | ||
167 | linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir ); | 167 | linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir ); |
168 | 168 | ||
169 | // link dependant packages that were installed with this release | 169 | // link dependant packages that were installed with this release |
170 | QString *pkg; | 170 | QString *pkg; |
171 | for ( pkg = dependantPackages->first(); pkg != 0; pkg = dependantPackages->next() ) | 171 | for ( pkg = dependantPackages->first(); pkg != 0; pkg = dependantPackages->next() ) |
172 | { | 172 | { |
173 | if ( *pkg == package ) | 173 | if ( *pkg == package ) |
174 | continue; | 174 | continue; |
175 | emit outputText( " " ); | 175 | emit outputText( " " ); |
176 | emit outputText( QString( "Creating symbolic links for " )+ (*pkg) ); | 176 | emit outputText( QString( "Creating symbolic links for " )+ (*pkg) ); |
177 | linkPackage( Utils::getPackageNameFromIpkFilename( *pkg ), destination, destDir ); | 177 | linkPackage( Utils::getPackageNameFromIpkFilename( *pkg ), destination, destDir ); |
178 | } | 178 | } |
179 | } | 179 | } |
180 | } | 180 | } |
181 | 181 | ||
182 | delete dependantPackages; | 182 | delete dependantPackages; |
183 | 183 | ||
184 | emit outputText( "Finished" ); | 184 | emit outputText( "Finished" ); |
185 | emit outputText( "" ); | 185 | emit outputText( "" ); |
186 | } | 186 | } |
187 | 187 | ||
188 | void Ipkg :: removeStatusEntry() | 188 | void Ipkg :: removeStatusEntry() |
189 | { | 189 | { |
190 | QString statusFile = destDir; | 190 | QString statusFile = destDir; |
191 | if ( statusFile.right( 1 ) != "/" ) | 191 | if ( statusFile.right( 1 ) != "/" ) |
192 | statusFile.append( "/" ); | 192 | statusFile.append( "/" ); |
193 | statusFile.append( "usr/lib/ipkg/status" ); | 193 | statusFile.append( "usr/lib/ipkg/status" ); |
194 | QString outStatusFile = statusFile; | 194 | QString outStatusFile = statusFile; |
195 | outStatusFile.append( ".tmp" ); | 195 | outStatusFile.append( ".tmp" ); |
196 | 196 | ||
197 | emit outputText( "" ); | 197 | emit outputText( "" ); |
198 | emit outputText( "Removing status entry..." ); | 198 | emit outputText( "Removing status entry..." ); |
199 | QString tempstr = "status file - "; | 199 | QString tempstr = "status file - "; |
200 | tempstr.append( statusFile ); | 200 | tempstr.append( statusFile ); |
201 | emit outputText( tempstr ); | 201 | emit outputText( tempstr ); |
202 | tempstr = "package - "; | 202 | tempstr = "package - "; |
203 | tempstr.append( package ); | 203 | tempstr.append( package ); |
204 | emit outputText( tempstr ); | 204 | emit outputText( tempstr ); |
205 | 205 | ||
206 | ifstream in( statusFile ); | 206 | ifstream in( statusFile ); |
207 | ofstream out( outStatusFile ); | 207 | ofstream out( outStatusFile ); |
208 | if ( !in.is_open() ) | 208 | if ( !in.is_open() ) |
209 | { | 209 | { |
210 | tempstr = "Couldn't open status file - "; | 210 | tempstr = "Couldn't open status file - "; |
211 | tempstr.append( statusFile ); | 211 | tempstr.append( statusFile ); |
212 | emit outputText( tempstr ); | 212 | emit outputText( tempstr ); |
213 | return; | 213 | return; |
214 | } | 214 | } |
215 | 215 | ||
216 | if ( !out.is_open() ) | 216 | if ( !out.is_open() ) |
217 | { | 217 | { |
218 | tempstr = "Couldn't create tempory status file - "; | 218 | tempstr = "Couldn't create tempory status file - "; |
219 | tempstr.append( outStatusFile ); | 219 | tempstr.append( outStatusFile ); |
220 | emit outputText( tempstr ); | 220 | emit outputText( tempstr ); |
221 | return; | 221 | return; |
222 | } | 222 | } |
223 | 223 | ||
224 | char line[1001]; | 224 | char line[1001]; |
225 | char k[21]; | 225 | char k[21]; |
226 | char v[1001]; | 226 | char v[1001]; |
227 | QString key; | 227 | QString key; |
228 | QString value; | 228 | QString value; |
229 | vector<QString> lines; | 229 | vector<QString> lines; |
230 | int i = 0; | ||
230 | do | 231 | do |
231 | { | 232 | { |
232 | in.getline( line, 1000 ); | 233 | in.getline( line, 1000 ); |
233 | if ( in.eof() ) | 234 | if ( in.eof() ) |
234 | continue; | 235 | continue; |
235 | 236 | ||
236 | k[0] = '\0'; | 237 | k[0] = '\0'; |
237 | v[0] = '\0'; | 238 | v[0] = '\0'; |
238 | 239 | ||
239 | sscanf( line, "%[^:]: %[^\n]", k, v ); | 240 | sscanf( line, "%[^:]: %[^\n]", k, v ); |
240 | key = k; | 241 | key = k; |
241 | value = v; | 242 | value = v; |
242 | key = key.stripWhiteSpace(); | 243 | key = key.stripWhiteSpace(); |
243 | value = value.stripWhiteSpace(); | 244 | value = value.stripWhiteSpace(); |
244 | if ( key == "Package" && value == package ) | 245 | if ( key == "Package" && value == package ) |
245 | { | 246 | { |
246 | // Ignore all lines up to next empty | 247 | // Ignore all lines up to next empty |
247 | do | 248 | do |
248 | { | 249 | { |
249 | in.getline( line, 1000 ); | 250 | in.getline( line, 1000 ); |
250 | if ( in.eof() || QString( line ).stripWhiteSpace() == "" ) | 251 | if ( in.eof() || QString( line ).stripWhiteSpace() == "" ) |
251 | continue; | 252 | continue; |
252 | } while ( !in.eof() && QString( line ).stripWhiteSpace() != "" ); | 253 | } while ( !in.eof() && QString( line ).stripWhiteSpace() != "" ); |
253 | } | 254 | } |
254 | 255 | ||
255 | lines.push_back( QString( line ) ); | 256 | lines.push_back( QString( line ) ); |
256 | out << line << endl; | 257 | out << line << endl; |
258 | |||
259 | // Improve UI responsiveness | ||
260 | i++; | ||
261 | if ( ( i % 50 ) == 0 ) | ||
262 | qApp->processEvents(); | ||
257 | } while ( !in.eof() ); | 263 | } while ( !in.eof() ); |
258 | 264 | ||
259 | // Write lines out | 265 | // Write lines out |
260 | vector<QString>::iterator it; | 266 | vector<QString>::iterator it; |
261 | for ( it = lines.begin() ; it != lines.end() ; ++it ) | 267 | for ( it = lines.begin() ; it != lines.end() ; ++it ) |
262 | { | 268 | { |
263 | out << (const char *)(*it) << endl; | 269 | out << (const char *)(*it) << endl; |
270 | |||
271 | // Improve UI responsiveness | ||
272 | i++; | ||
273 | if ( ( i % 50 ) == 0 ) | ||
274 | qApp->processEvents(); | ||
264 | } | 275 | } |
265 | 276 | ||
266 | in.close(); | 277 | in.close(); |
267 | out.close(); | 278 | out.close(); |
268 | 279 | ||
269 | // Remove old status file and put tmp stats file in its place | 280 | // Remove old status file and put tmp stats file in its place |
270 | remove( statusFile ); | 281 | remove( statusFile ); |
271 | rename( outStatusFile, statusFile ); | 282 | rename( outStatusFile, statusFile ); |
272 | } | 283 | } |
273 | 284 | ||
274 | int Ipkg :: executeIpkgCommand( QStringList &cmd, const QString /*option*/ ) | 285 | int Ipkg :: executeIpkgCommand( QStringList &cmd, const QString /*option*/ ) |
275 | { | 286 | { |
276 | // If one is already running - should never be but just to be safe | 287 | // If one is already running - should never be but just to be safe |
277 | if ( proc ) | 288 | if ( proc ) |
278 | { | 289 | { |
279 | delete proc; | 290 | delete proc; |
280 | proc = 0; | 291 | proc = 0; |
281 | } | 292 | } |
282 | 293 | ||
283 | // OK we're gonna use OProcess to run this thing | 294 | // OK we're gonna use OProcess to run this thing |
284 | proc = new OProcess(); | 295 | proc = new OProcess(); |
285 | aborted = false; | 296 | aborted = false; |
286 | 297 | ||
287 | 298 | ||
288 | // Connect up our slots | 299 | // Connect up our slots |
289 | connect(proc, SIGNAL(processExited(OProcess *)), | 300 | connect(proc, SIGNAL(processExited(OProcess *)), |
290 | this, SLOT( processFinished())); | 301 | this, SLOT( processFinished())); |
291 | 302 | ||
292 | connect(proc, SIGNAL(receivedStdout(OProcess *, char *, int)), | 303 | connect(proc, SIGNAL(receivedStdout(OProcess *, char *, int)), |
293 | this, SLOT(commandStdout(OProcess *, char *, int))); | 304 | this, SLOT(commandStdout(OProcess *, char *, int))); |
294 | 305 | ||
295 | connect(proc, SIGNAL(receivedStderr(OProcess *, char *, int)), | 306 | connect(proc, SIGNAL(receivedStderr(OProcess *, char *, int)), |
296 | this, SLOT(commandStderr(OProcess *, char *, int))); | 307 | this, SLOT(commandStderr(OProcess *, char *, int))); |
297 | 308 | ||
298 | for ( QStringList::Iterator it = cmd.begin(); it != cmd.end(); ++it ) | 309 | for ( QStringList::Iterator it = cmd.begin(); it != cmd.end(); ++it ) |
299 | { | 310 | { |
300 | *proc << (*it).latin1(); | 311 | *proc << (*it).latin1(); |
301 | } | 312 | } |
302 | 313 | ||
303 | // Start the process going | 314 | // Start the process going |
304 | finished = false; | 315 | finished = false; |
305 | if(!proc->start(OProcess::NotifyOnExit, OProcess::All)) | 316 | if(!proc->start(OProcess::NotifyOnExit, OProcess::All)) |
306 | { | 317 | { |
307 | emit outputText( QString( "Couldn't start ipkg process" ) ); | 318 | emit outputText( QString( "Couldn't start ipkg process" ) ); |
308 | } | 319 | } |
309 | } | 320 | } |
310 | 321 | ||
311 | void Ipkg::commandStdout(OProcess*, char *buffer, int buflen) | 322 | void Ipkg::commandStdout(OProcess*, char *buffer, int buflen) |
312 | { | 323 | { |
313 | QString lineStr = buffer; | 324 | QString lineStr = buffer; |
314 | if ( lineStr[buflen-1] == '\n' ) | 325 | if ( lineStr[buflen-1] == '\n' ) |
315 | buflen --; | 326 | buflen --; |
316 | lineStr = lineStr.left( buflen ); | 327 | lineStr = lineStr.left( buflen ); |
317 | emit outputText( lineStr ); | 328 | emit outputText( lineStr ); |
318 | 329 | ||
319 | // check if we are installing dependant packages | 330 | // check if we are installing dependant packages |
320 | if ( option == "install" || option == "reinstall" ) | 331 | if ( option == "install" || option == "reinstall" ) |
321 | { | 332 | { |
322 | // Need to keep track of any dependant packages that get installed | 333 | // Need to keep track of any dependant packages that get installed |
323 | // so that we can create links to them as necessary | 334 | // so that we can create links to them as necessary |
324 | if ( lineStr.startsWith( "Installing " ) ) | 335 | if ( lineStr.startsWith( "Installing " ) ) |
325 | { | 336 | { |
326 | int start = lineStr.find( " " ) + 1; | 337 | int start = lineStr.find( " " ) + 1; |
327 | int end = lineStr.find( " ", start ); | 338 | int end = lineStr.find( " ", start ); |