summaryrefslogtreecommitdiff
path: root/noncore/settings/networksettings2/nsdata.cpp
Unidiff
Diffstat (limited to 'noncore/settings/networksettings2/nsdata.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings2/nsdata.cpp327
1 files changed, 138 insertions, 189 deletions
diff --git a/noncore/settings/networksettings2/nsdata.cpp b/noncore/settings/networksettings2/nsdata.cpp
index 6541596..eb63e02 100644
--- a/noncore/settings/networksettings2/nsdata.cpp
+++ b/noncore/settings/networksettings2/nsdata.cpp
@@ -126,13 +126,13 @@ QString NetworkSettingsData::saveSettings( void ) {
126 QString S; 126 QString S;
127 QFile F( CfgFile + ".bup" ); 127 QFile F( CfgFile + ".bup" );
128 128
129 printf( "Saving settings to %s\n", CfgFile.latin1() ); 129 printf( "Saving settings to %s\n", CfgFile.latin1() );
130 if( ! F.open( IO_WriteOnly | IO_Truncate ) ) { 130 if( ! F.open( IO_WriteOnly | IO_Truncate ) ) {
131 ErrS = qApp->translate( "NetworkSettings", 131 ErrS = qApp->translate( "NetworkSettings",
132 "<p>Could not save setup to %1 !</p>" ). 132 "<p>Could not save setup to \"%1\" !</p>" ).
133 arg(CfgFile); 133 arg(CfgFile);
134 // problem 134 // problem
135 return ErrS; 135 return ErrS;
136 } 136 }
137 137
138 QTextStream TS( &F ); 138 QTextStream TS( &F );
@@ -146,13 +146,13 @@ QString NetworkSettingsData::saveSettings( void ) {
146 // all nodes in those connections 146 // all nodes in those connections
147 for( QListIterator<ANetNodeInstance> nit(*(it.current())); 147 for( QListIterator<ANetNodeInstance> nit(*(it.current()));
148 nit.current(); 148 nit.current();
149 ++nit ) { 149 ++nit ) {
150 // header 150 // header
151 NNI = nit.current(); 151 NNI = nit.current();
152 TS << '[' <<NNI->netNode()->nodeName() << ']' << endl; 152 TS << '[' <<NNI->nodeClass()->nodeName() << ']' << endl;
153 NNI->saveAttributes( TS ); 153 NNI->saveAttributes( TS );
154 TS << endl; 154 TS << endl;
155 } 155 }
156 156
157 TS << "[connection]" << endl; 157 TS << "[connection]" << endl;
158 it.current()->save(TS); 158 it.current()->save(TS);
@@ -178,20 +178,21 @@ QString NetworkSettingsData::generateSettings( bool ForceReq ) {
178 ForceIt = (Force) ? 1 : ForceReq; 178 ForceIt = (Force) ? 1 : ForceReq;
179 179
180 if( ! ForceIt && ! isModified() ) 180 if( ! ForceIt && ! isModified() )
181 return S; 181 return S;
182 182
183 // regenerate system files 183 // regenerate system files
184 printf( "Generating settings from %s\n", CfgFile.latin1() ); 184 fprintf( stderr, "Generating settings from %s\n", CfgFile.latin1() );
185 185
186 { Name2SystemFile_t & SFM = NSResources->systemFiles(); 186 { Name2SystemFile_t & SFM = NSResources->systemFiles();
187 Name2Connection_t & M = NSResources->connections(); 187 Name2Connection_t & M = NSResources->connections();
188 NodeCollection * NC; 188 NodeCollection * NC;
189 ANetNodeInstance * NNI; 189 ANetNodeInstance * NNI;
190 SystemFile * SF; 190 SystemFile * SF;
191 AsDevice * CurDev; 191 AsDevice * CurDev;
192 ANetNode * CurDevNN;
192 bool needToRegenerate = ForceIt; 193 bool needToRegenerate = ForceIt;
193 194
194 // 195 //
195 // check if we need to generate at least one of the system files 196 // check if we need to generate at least one of the system files
196 // 197 //
197 if( ! ForceIt ) { 198 if( ! ForceIt ) {
@@ -212,14 +213,14 @@ QString NetworkSettingsData::generateSettings( bool ForceReq ) {
212 if( NC->isModified() ) { 213 if( NC->isModified() ) {
213 // does this connection 'touch' this system file ? 214 // does this connection 'touch' this system file ?
214 for( QListIterator<ANetNodeInstance> cncit(*NC); 215 for( QListIterator<ANetNodeInstance> cncit(*NC);
215 cncit.current(); 216 cncit.current();
216 ++cncit ) { 217 ++cncit ) {
217 NNI = cncit.current(); 218 NNI = cncit.current();
218 if( ( NNI->netNode()->hasDataFor( SF->name(), 1 ) || 219 if( ( NNI->nodeClass()->hasDataFor( SF->name() ) ||
219 NNI->netNode()->hasDataFor( SF->name(), 0 ) 220 NNI->hasDataFor( SF->name() )
220 ) && 221 ) &&
221 NNI->isModified() ) { 222 NNI->isModified() ) {
222 needToRegenerate = 1; 223 needToRegenerate = 1;
223 break; 224 break;
224 } 225 }
225 } 226 }
@@ -250,17 +251,17 @@ QString NetworkSettingsData::generateSettings( bool ForceReq ) {
250 ++NNIIt 251 ++NNIIt
251 ){ 252 ){
252 // for all nodes find those that are modified 253 // for all nodes find those that are modified
253 NNI = NNIIt.current(); 254 NNI = NNIIt.current();
254 255
255 if( ForceIt || NNI->isModified() ) { 256 if( ForceIt || NNI->isModified() ) {
256 if( ! NNI->netNode()->generateProperFilesFor( NNI ) ) { 257 if( ! NNI->nodeClass()->generateProperFilesFor( NNI ) ) {
257 // problem generating 258 // problem generating
258 S = qApp->translate( "NetworkSettings", 259 S = qApp->translate( "NetworkSettings",
259 "<p>Cannot generate files proper to %1</p>" ). 260 "<p>Cannot generate files proper to \"%1\"</p>" ).
260 arg(NNI->netNode()->nodeName()) ; 261 arg(NNI->nodeClass()->nodeName()) ;
261 return S; 262 return S;
262 } 263 }
263 } 264 }
264 } 265 }
265 } 266 }
266 267
@@ -269,225 +270,68 @@ QString NetworkSettingsData::generateSettings( bool ForceReq ) {
269 // 270 //
270 for( QDictIterator<SystemFile> sfit(SFM); 271 for( QDictIterator<SystemFile> sfit(SFM);
271 sfit.current(); 272 sfit.current();
272 ++sfit ) { 273 ++sfit ) {
273 SF = sfit.current(); 274 SF = sfit.current();
274 275
275 printf( "Generating %s\n", SF->name().latin1() ); 276 fprintf( stderr, "Generating %s\n", SF->name().latin1() );
276 SF->open(); 277 SF->open();
277 278
278 do { // so we can break; 279 do { // so we can break;
279 280
280 // global presection for this system file 281 // global presection for this system file
281 if( SF->preSection() ) { 282 if( SF->preSection() ) {
282 S = qApp->translate( "NetworkSettings", 283 S = qApp->translate( "NetworkSettings",
283 "<p>Error in preSection for file %1</p>" ). 284 "<p>Error in preSection for file \"%1\"</p>" ).
284 arg( SF->name() ); 285 arg( SF->name() );
285 return S; 286 return S;
286 } 287 }
287 288
288 // find all netnodes and figure out if 289 // find all netnodes and figure out if
289 // for that node there are instances 290 // for that node there are instances
290 for( QDictIterator<NetNode_t> nnit( 291 for( QDictIterator<NetNode_t> nnit(
291 NSResources->netNodes() ); 292 NSResources->netNodes() );
292 nnit.current(); 293 nnit.current();
293 ++nnit ) { 294 ++nnit ) {
294 ANetNode * NN; 295
295 296 CurDevNN = nnit.current()->NetNode;
296 NN = nnit.current()->NetNode; 297
297 298 // are there instances for this netnode ?
298 // are there instances ? 299 NNI = 0;
299 NNI = 0; 300 for( QDictIterator<ANetNodeInstance> nniit(
300 for( QDictIterator<ANetNodeInstance> nniit( 301 NSResources->netNodeInstances() );
301 NSResources->netNodeInstances() ); 302 nniit.current();
302 nniit.current(); 303 ++nniit ) {
303 ++nniit ) { 304 if( nniit.current()->nodeClass() == CurDevNN ) {
304 if( nniit.current()->netNode() == NN ) { 305 NNI = nniit.current();
305 NNI = nniit.current(); 306 break;
306 break;
307 }
308 } 307 }
308 }
309 309
310 if( ! NNI ) 310 if( ! NNI )
311 // no instances 311 // no instances -> next netnode type
312 continue; 312 continue;
313 313
314 // has this node data for this system file ? 314 // has this node data for this system file ?
315 if( (CurDev = NNI->runtime()->asDevice() ) ) { 315 if( (CurDev = NNI->runtime()->asDevice() ) ) {
316 // generate start for this nodetype for all possible devices of this type 316 // generate start for this nodetype for all possible devices of this type
317 for( int i = 0; i < CurDev->count(); i ++ ) { 317 for( int i = 0; i < CurDevNN->instanceCount(); i ++ ) {
318 if( SF->preDeviceSection( NNI, i ) ) { 318 S = generateSystemFileNode( *SF, CurDev, NNI, i );
319 S = qApp->translate( "NetworkSettings", 319 if( ! S.isEmpty() )
320 "<p>Error in preDeviceSection for file %1 and node %2</p>" ).
321 arg( SF->name() ).
322 arg( NN->nodeName() );
323 return S;
324 }
325
326 if( ! NN->hasDataFor( SF->name(), 1 ) ) {
327 if( NN->generateDeviceDataForCommonFile( *SF, i, NNI ) ) {
328 S = qApp->translate( "NetworkSettings",
329 "<p>Error in node part for file %1 and node %2</p>" ).
330 arg( SF->name() ).
331 arg( NN->nodeName() );
332 return S;
333 }
334 }
335 }
336 } else {
337 // just request this once
338 if( SF->preDeviceSection( NNI, -1 ) ) {
339 S = qApp->translate( "NetworkSettings",
340 "<p>Error in preDeviceSection for file %1 and node %2</p>" ).
341 arg( SF->name() ).
342 arg( NN->nodeName() );
343 return S;
344 }
345
346 if( ! NN->hasDataFor( SF->name(), 1 ) ) {
347 if( NN->generateDeviceDataForCommonFile( *SF, -1, NNI ) ) {
348 S = qApp->translate( "NetworkSettings",
349 "<p>Error in node part for file %1 and node %2</p>" ).
350 arg( SF->name() ).
351 arg( NN->nodeName() );
352 return S;
353 }
354 }
355 }
356
357 // now generate profile specific data for all
358 // connections working on a device of the current
359 // netnode type
360 for( QDictIterator<NodeCollection> ncit(M);
361 ncit.current();
362 ++ncit ) {
363 NC = ncit.current();
364
365 NNI = NC->getToplevel();
366
367 // no output needed
368 if( ! NNI->netNode()->hasDataFor( SF->name(), 0 ) )
369 continue;
370
371 // get the netnode that serves as the device for this
372 // connection
373 AsDevice * Dev = NC->device();
374
375 if( CurDev ) {
376 if( CurDev != Dev ) {
377 // other device -> later
378 continue;
379 }
380
381 // generate 'entry' for every combination of device and profile
382 // each node delegates to deeper level
383 for( int i = 0; i < CurDev->count(); i ++ ) {
384 if( SF->preNodeSection( NNI, i ) ) {
385 S = qApp->translate( "NetworkSettings",
386 "<p>Error in preNodeSection for file %1 and node %2</p>" ).
387 arg( SF->name() ).
388 arg( NNI->netNode()->nodeName() );
389 return S;
390 }
391
392 // ask all nodes in connection
393
394 for( QListIterator<ANetNodeInstance> cncit(*NC);
395 cncit.current();
396 ++cncit ) {
397 NNI = cncit.current();
398
399 if( NNI->netNode()->hasDataFor( SF->name(), 0 ) ) {
400 if( NNI->netNode()->generateDataForCommonFile(*SF,i,NNI) ) {
401 S = qApp->translate( "NetworkSettings",
402 "<p>Error in node part for file %1 and node %2</p>" ).
403 arg( SF->name() ).
404 arg( NNI->netNode()->nodeName() );
405 return S;
406 }
407 }
408 }
409
410 if( SF->postNodeSection( NNI, i ) ) {
411 S = qApp->translate( "NetworkSettings",
412 "<p>Error in postNodeSection for file %1 and node %2</p>" ).
413 arg( SF->name() ).
414 arg( NNI->netNode()->nodeName() );
415 return S;
416 }
417 }
418
419 } else {
420 if( Dev ) {
421 // other
422 continue;
423 }
424
425 // one entry to generate
426 if( SF->preNodeSection( NNI, -1 ) ) {
427 S = qApp->translate( "NetworkSettings",
428 "<p>Error in preNodeSection for file %1 and node %2</p>" ).
429 arg( SF->name() ).
430 arg( NNI->netNode()->nodeName() );
431 return S;
432 }
433
434 if( NNI->netNode()->generateDataForCommonFile(*SF,-1,NNI) ) {
435 S = qApp->translate( "NetworkSettings",
436 "<p>Error in node part for file %1 and node %2</p>" ).
437 arg( SF->name() ).
438 arg( NNI->netNode()->nodeName() );
439 return S;
440 }
441
442 if( SF->postNodeSection( NNI, -1 ) ) {
443 S = qApp->translate( "NetworkSettings",
444 "<p>Error in postNodeSection for file %1 and node %2</p>" ).
445 arg( SF->name() ).
446 arg( NNI->netNode()->nodeName() );
447 return S;
448 }
449 }
450
451 // generated some data
452 if( SF->postNodeSection( NNI, -1 ) ) {
453 S = qApp->translate( "NetworkSettings",
454 "<p>Error in postNodeSection for file %1 and node %2</p>" ).
455 arg( SF->name() ).
456 arg( NNI->netNode()->nodeName() );
457 return S;
458 }
459 *SF << endl;
460 }
461
462 if( CurDev ) {
463 // generate 'entry' for every combination of device and profile
464 // each node delegates to deeper level
465 for( int i = 0; i < CurDev->count(); i ++ ) {
466 if( SF->postDeviceSection( NNI, i ) ) {
467 S = qApp->translate( "NetworkSettings",
468 "<p>Error in postDeviceSection for file %1 and node %2</p>" ).
469 arg( SF->name() ).
470 arg( NNI->netNode()->nodeName() );
471 return S; 320 return S;
472 }
473 } 321 }
474 } else { 322 } else {
475 if( SF->postDeviceSection( NNI, -1 ) ) { 323 S = generateSystemFileNode( *SF, 0, NNI, -1 );
476 S = qApp->translate( "NetworkSettings", 324 if( ! S.isEmpty() )
477 "<p>Error in postDeviceSection for file %1 and node %2</p>" ).
478 arg( SF->name() ).
479 arg( NNI->netNode()->nodeName() );
480 return S; 325 return S;
481 }
482 } 326 }
483 } 327 }
484 328
485 if( SF->postSection() ) { 329 if( SF->postSection() ) {
486 S = qApp->translate( "NetworkSettings", 330 S = qApp->translate( "NetworkSettings",
487 "<p>Error in postSection for file %1</p>" ). 331 "<p>Error in postSection for file \"%1\"</p>" ).
488 arg( SF->name() ); 332 arg( SF->name() );
489 return S; 333 return S;
490 } 334 }
491 335
492 } while( 0 ); 336 } while( 0 );
493 SF->close(); 337 SF->close();
@@ -586,6 +430,111 @@ bool NetworkSettingsData::regenerate( void ) {
586 fprintf( stdout, "%s\n", S.latin1() ); 430 fprintf( stdout, "%s\n", S.latin1() );
587 return 1; 431 return 1;
588 } 432 }
589 return 0; 433 return 0;
590} 434}
591 435
436QString NetworkSettingsData::generateSystemFileNode(
437 SystemFile &SF,
438 AsDevice * CurDev,
439 ANetNodeInstance * DevNNI,
440 long DevInstNr ) {
441
442 QString S="";
443 ANetNode * CurDevNN = DevNNI->nodeClass();
444 Name2Connection_t & M = NSResources->connections();
445
446 if( SF.preDeviceSection( CurDevNN ) ) {
447 S = qApp->translate( "NetworkSettings",
448 "<p>Error in preDeviceSection for file \"%1\" and nodetype \"%2\"</p>" ).
449 arg( SF.name() ).
450 arg( CurDevNN->nodeName() );
451 return S;
452 }
453
454 if( CurDevNN->hasDataFor( SF.name() ) ) {
455 if( CurDevNN->generateDeviceDataForCommonFile( SF, DevInstNr ) ) {
456 S = qApp->translate( "NetworkSettings",
457 "<p>Error in node Device part for file \"%1\" and node \"%2\"</p>" ).
458 arg( SF.name() ).
459 arg( CurDevNN->nodeName() );
460 return S;
461 }
462 }
463
464 if( CurDev )
465 fprintf( stderr, "Cur %s\n", CurDevNN->nodeName().latin1() );
466 else
467 fprintf( stderr, "Cur NO\n" );
468
469 // now generate profile specific data for all
470 // connections working on a device of the current
471 // netnode type
472 for( QDictIterator<NodeCollection> ncit(M);
473 ncit.current();
474 ++ncit ) {
475 NodeCollection * NC = ncit.current();
476
477 // currenly only those connections that work on
478 // the current device (or on no device if no current)
479 AsDevice * Dev = NC->device();
480
481 fprintf( stderr, "%s\n", Dev->netNode()->nodeName().latin1() );
482 if( CurDev ) {
483 if( CurDevNN != Dev->netNode()->nodeClass() ) {
484 // other device type -> later
485 fprintf( stderr, "Other Dev type\n" );
486 continue;
487 }
488 } else {
489 if( Dev ) {
490 // other
491 continue;
492 }
493 }
494
495 // generate 'entry'
496 if( SF.preNodeSection( DevNNI, DevInstNr ) ) {
497 S = qApp->translate( "NetworkSettings",
498 "<p>Error in preNodeSection for file \"%1\" and node \"%2\"</p>" ).
499 arg( SF.name() ).
500 arg( CurDevNN->nodeName() );
501 return S;
502 }
503
504 // ask all nodes in connection
505 for( QListIterator<ANetNodeInstance> cncit(*NC);
506 cncit.current();
507 ++cncit ) {
508 ANetNodeInstance * NNI = cncit.current();
509
510 if( NNI->hasDataFor( SF.name() ) ) {
511 if( NNI->generateDataForCommonFile(SF,DevInstNr) ) {
512 S = qApp->translate( "NetworkSettings",
513 "<p>Error in node part for file \"%1\" and node \"%2\"</p>" ).
514 arg( SF.name() ).
515 arg( NNI->nodeClass()->nodeName() );
516 return S;
517 }
518 }
519 }
520
521 if( SF.postNodeSection( DevNNI, DevInstNr ) ) {
522 S = qApp->translate( "NetworkSettings",
523 "<p>Error in postNodeSection for file \"%1\" and node \"%2\"</p>" ).
524 arg( SF.name() ).
525 arg( CurDevNN->nodeName() );
526 return S;
527 }
528 SF << endl;
529 }
530
531 if( SF.postDeviceSection( CurDevNN ) ) {
532 S = qApp->translate( "NetworkSettings",
533 "<p>Error in postDeviceSection for file \"%1\" and node \"%2\"</p>" ).
534 arg( SF.name() ).
535 arg( CurDevNN->nodeName() );
536 return S;
537 }
538
539 return S;
540}