123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704 |
- #include "Updater.h"
- #include <Text.h>
- #include <InitDatei.h>
- #include <Datei.h>
- // Inhalt der Updater Klasse aus Updater.h
- // Konstruktor
- Updater::Updater()
- {
- client = new PSKlient();
- fehler = new Text();
- ref = 1;
- }
- // Destruktor
- Updater::~Updater()
- {
- if( client->istRegistriert() )
- {
- if( !client->istVerbunden() )
- client->verbinde();
- client->trenne( 1 );
- }
- client->release();
- fehler->release();
- }
- // nicht constant
- int Updater::getNextDateiGruppe( Text *zDgPfad )
- {
- client->lock();
- if( !client->istVerbunden() && !client->verbinde() )
- {
- fehler->setText( client->zError()->getText() );
- client->unlock();
- return -1;
- }
- KSGTDatei *sDgTb = client->getDateiGruppenListe();
- if( !sDgTb )
- {
- fehler->setText( client->zError()->getText() );
- client->trenne( 0 );
- client->unlock();
- return -1;
- }
- client->trenne( 0 );
- client->unlock();
- KSGTDatei *lDgTb = new KSGTDatei( "data/dg.ksgt" ); // Tabellen Spalten: Id, Pfad, Version, Priorität
- lDgTb->laden();
- InitDatei *ur = new InitDatei();
- for( int i = 0; i < sDgTb->getZeilenAnzahl(); i++ )
- {
- int id = TextZuInt( sDgTb->zFeld( i, 0 )->getText(), 10 );
- int vs = TextZuInt( sDgTb->zFeld( i, 2 )->getText(), 10 );
- bool gefunden = 0;
- for( int j = 0; j < lDgTb->getZeilenAnzahl(); j++ )
- {
- if( id == TextZuInt( lDgTb->zFeld( j, 0 )->getText(), 10 ) )
- {
- if( vs != TextZuInt( lDgTb->zFeld( j, 2 )->getText(), 10 ) )
- {
- if( !sDgTb->zFeld( i, 1 )->getLength() )
- ur->addWert( sDgTb->zFeld( i, 0 )->getText(), "SOFORT" );
- else if( !lDgTb->zFeld( j, 3 )->istGleich( "NICHT" ) )
- ur->addWert( sDgTb->zFeld( i, 0 )->getText(), lDgTb->zFeld( j, 3 )->getText() );
- }
- gefunden = 1;
- break;
- }
- }
- if( gefunden )
- continue;
- if( !sDgTb->zFeld( i, 1 )->getLength() )
- ur->addWert( sDgTb->zFeld( i, 0 )->getText(), "SOFORT" );
- else if( DateiExistiert( sDgTb->getFeld( i, 1 ) ) )
- ur->addWert( sDgTb->zFeld( i, 0 )->getText(), "SPÄTER" );
- }
- lDgTb->release();
- if( !ur->getWertAnzahl() )
- {
- ur->release();
- sDgTb->release();
- return 0;
- }
- int gruppe = 0;
- for( int i = 0; i < ur->getWertAnzahl(); i++ )
- {
- if( ur->zWert( i )->istGleich( "SOFORT" ) )
- {
- gruppe = TextZuInt( ur->zName( i )->getText(), 10 );
- break;
- }
- }
- if( !gruppe )
- {
- unsigned int klein = 0xFFFFFFFF;
- for( int i = 0; i < ur->getWertAnzahl(); i++ )
- {
- if( !ur->zWert( i )->istGleich( "SPÄTER" ) )
- {
- unsigned int num = TextZuInt( ur->zWert( i )->getText(), 10 );
- if( num < klein )
- {
- klein = num;
- gruppe = TextZuInt( ur->zName( i )->getText(), 10 );
- }
- }
- }
- if( !gruppe )
- {
- for( int i = 0; i < ur->getWertAnzahl(); i++ )
- {
- if( ur->zWert( i )->istGleich( "SPÄTER" ) )
- {
- gruppe = TextZuInt( ur->zName( i )->getText(), 10 );
- break;
- }
- }
- }
- }
- ur->release();
- if( zDgPfad )
- { // Pfad der Dateigruppe ermitteln
- for( int i = 0; i < sDgTb->getZeilenAnzahl(); i++ )
- {
- if( gruppe == TextZuInt( sDgTb->zFeld( i, 0 )->getText(), 10 ) )
- {
- zDgPfad->setText( sDgTb->zFeld( i, 1 )->getText() );
- break;
- }
- }
- }
- sDgTb->release();
- return gruppe;
- }
- int Updater::update( UpdateParams *zParams )
- {
- if( zParams->zStatus )
- {
- zParams->zStatus->lockZeichnung();
- zParams->zStatus->setText( "Warte auf Update . . ." );
- zParams->zStatus->unlockZeichnung();
- }
- client->lock();
- if( zParams->zStatus )
- {
- zParams->zStatus->lockZeichnung();
- zParams->zStatus->setText( "Verbinden . . ." );
- zParams->zStatus->unlockZeichnung();
- }
- if( !client->istVerbunden() && !client->verbinde() )
- {
- fehler->setText( client->zError()->getText() );
- client->unlock();
- return 1;
- }
- bool clientGruppe = 0;
- KSGTDatei *dgL = client->getDateiGruppenListe();
- if( !dgL )
- {
- fehler->setText( client->zError()->getText() );
- client->trenne( 0 );
- client->unlock();
- return 1;
- }
- Text *pfad = new Text( "" );
- for( int i = 0; i < dgL->getZeilenAnzahl(); i++ )
- { // Pfad der Dateigruppe ermitteln
- if( zParams->dateiGruppe == TextZuInt( dgL->zFeld( i, 0 )->getText(), 10 ) )
- {
- pfad->setText( dgL->zFeld( i, 1 )->getText() );
- if( !pfad->getLength() )
- clientGruppe = 1;
- break;
- }
- }
- if( !clientGruppe )
- pfad->append( "/" );
- Text *dlPf = new Text( pfad->getText() );
- dlPf->append( "data/update/datei_versionen.ini" );
- InitDatei *dateiListe = new InitDatei( dlPf );
- dateiListe->laden();
- Text *dsPf = new Text( pfad->getText() );
- dsPf->append( "data/update/datei_status.ini" );
- InitDatei *dateiStatus = new InitDatei( dsPf );
- dateiStatus->laden();
- Text *llPf = new Text( pfad->getText() );
- llPf->append( "data/update/datei_remove.patch" );
- Datei *removeListe = new Datei();
- removeListe->setDatei( llPf );
- if( !removeListe->existiert() )
- removeListe->erstellen();
- removeListe->open( Datei::Style::schreiben );
- KSGTDatei *dl = client->getDateiListe( zParams->dateiGruppe ); // Liste mit Dateien aus der Gruppe
- if( !dl )
- { // error
- dgL->release();
- pfad->release();
- dateiListe->release();
- dateiStatus->release();
- removeListe->release();
- fehler->setText( client->zError()->getText() );
- client->trenne( 0 );
- client->unlock();
- return 1;
- }
- for( int i = 0; i < dl->getZeilenAnzahl(); i++ )
- {
- if( dl->zFeld( i, 0 )->istGleich( "1" ) )
- { // existierende Datei
- if( !dateiListe->wertExistiert( dl->zFeld( i, 1 )->getText() ) )
- {
- dateiListe->addWert( dl->zFeld( i, 1 )->getText(), dl->zFeld( i, 2 )->getText() );
- dateiStatus->addWert( dl->zFeld( i, 1 )->getText(), "Ausstehend" );
- }
- else
- {
- if( !dateiListe->zWert( dl->zFeld( i, 1 )->getText() )->istGleich( dl->zFeld( i, 2 )->getText() ) )
- {
- dateiListe->setWert( dl->zFeld( i, 1 )->getText(), dl->zFeld( i, 2 )->getText() );
- dateiStatus->setWert( dl->zFeld( i, 1 )->getText(), "Ausstehend" );
- }
- }
- }
- else
- { // gelöschte Datei
- removeListe->schreibe( dl->zFeld( i, 1 )->getText(), dl->zFeld( i, 1 )->getLength() );
- removeListe->schreibe( "\n", 1 );
- dateiListe->removeWert( dl->zFeld( i, 1 )->getText() );
- dateiStatus->removeWert( dl->zFeld( i, 1 )->getText() );
- }
- }
- removeListe->close();
- removeListe->release();
- dateiListe->speichern();
- dateiStatus->speichern();
- dl->release();
- Text *ldPf = new Text( pfad->getText() );
- ldPf->append( "data/versionen.ini" );
- InitDatei *lokaleDateien = new InitDatei( ldPf );
- if( !lokaleDateien->laden() )
- DateiPfadErstellen( lokaleDateien->zPfad()->getText() );
- __int64 maxAktionen = 0;
- for( int i = 0; i < dateiListe->getWertAnzahl(); i++ )
- {
- bool geändert = 0;
- if( !lokaleDateien->wertExistiert( dateiListe->zName( i )->getText() ) )
- {
- geändert = 1;
- if( dateiStatus->zWert( dateiListe->zName( i )->getText() ) &&
- dateiStatus->zWert( dateiListe->zName( i )->getText() )->istGleich( "Fertig" ) )
- geändert = 0;
- }
- else
- {
- if( !lokaleDateien->zWert( dateiListe->zName( i )->getText() )->istGleich( dateiListe->zWert( i )->getText() ) )
- geändert = 1;
- else
- dateiStatus->setWert( dateiListe->zName( i )->getText(), "Fertig" );
- }
- if( geändert && !dateiStatus->zWert( dateiListe->zName( i )->getText() )->istGleich( "Fertig" ) )
- {
- maxAktionen += client->getDateiGröße( zParams->dateiGruppe, dateiListe->zName( i )->getText() );
- if( dateiStatus->zWert( dateiListe->zName( i )->getText() )->istGleich( "InBearbeitung" ) )
- {
- Text *jPf = new Text( pfad->getText() );
- jPf->append( "data/update/jetzt_position.patch" );
- Datei *jetzt = new Datei();
- jetzt->setDatei( jPf );
- if( jetzt->open( Datei::Style::lesen ) )
- {
- __int64 pos = 0;
- jetzt->lese( (char*)&pos, 8 );
- maxAktionen -= pos;
- jetzt->close();
- }
- jetzt->release();
- }
- }
- }
- dateiStatus->speichern();
- if( zParams->zFortschritt )
- {
- zParams->zFortschritt->reset();
- zParams->zFortschritt->setAktionAnzahl( maxAktionen );
- }
- for( int i = 0; i < dateiStatus->getWertAnzahl(); i++ )
- {
- if( dateiStatus->zWert( i )->istGleich( "InBearbeitung" ) )
- {
- Text *jPf = new Text( pfad->getText() );
- jPf->append( "data/update/jetzt_position.patch" );
- Datei *jetzt = new Datei();
- jetzt->setDatei( jPf );
- __int64 pos = 0;
- if( jetzt->open( Datei::Style::lesen ) )
- {
- jetzt->lese( (char*)&pos, 8 );
- jetzt->close();
- }
- jetzt->release();
- Text *zielPf = new Text( pfad->getText() );
- zielPf->append( "data/update/download/" );
- zielPf->append( dateiStatus->zName( i )->getText() );
- InitDatei *poIni = new InitDatei( "data/patch/po.ini" );
- poIni->laden();
- int maxbps = 0;
- if( poIni->wertExistiert( "ülps" ) && poIni->zWert( "ülps" )->getLength() && poIni->wertExistiert( "üle" ) )
- {
- if( poIni->zWert( "üle" )->istGleich( "kb/s" ) )
- maxbps = (int)TextZuInt( poIni->zWert( "ülps" )->getText(), 10 ) * 1024;
- if( poIni->zWert( "üle" )->istGleich( "mb/s" ) )
- maxbps = (int)TextZuInt( poIni->zWert( "ülps" )->getText(), 10 ) * 1024 * 1024;
- }
- poIni->release();
- if( zParams->zStatus )
- {
- zParams->zStatus->lockZeichnung();
- zParams->zStatus->setText( dateiStatus->zName( i )->getText() );
- zParams->zStatus->unlockZeichnung();
- }
- if( client->downloadDatei( zParams->dateiGruppe, &pos, dateiStatus->zName( i )->getText(), zielPf->getText(), zParams->zFortschritt, zParams->abbruch, maxbps ) )
- {
- if( ( *zParams->abbruch ) )
- { // übertragung unterbrochen
- jPf = new Text( pfad->getText() );
- jPf->append( "data/update/jetzt_position.patch" );
- jetzt = new Datei();
- jetzt->setDatei( jPf );
- if( jetzt->open( Datei::Style::schreiben ) )
- {
- jetzt->schreibe( (char*)&pos, 8 );
- jetzt->close();
- }
- jetzt->release();
- dgL->release();
- pfad->release();
- dateiListe->release();
- dateiStatus->release();
- zielPf->release();
- lokaleDateien->release();
- fehler->setText( "" );
- client->trenne( 0 );
- client->unlock();
- return 2;
- }
- else
- {
- dateiStatus->setWert( i, "Fertig" );
- dateiStatus->speichern();
- }
- }
- else
- { // error
- dgL->release();
- pfad->release();
- dateiListe->release();
- dateiStatus->release();
- zielPf->release();
- lokaleDateien->release();
- fehler->setText( client->zError()->getText() );
- client->trenne( 0 );
- client->unlock();
- return 1;
- }
- zielPf->release();
- break;
- }
- }
- for( int i = 0; i < dateiStatus->getWertAnzahl(); i++ )
- {
- if( dateiStatus->zWert( i )->istGleich( "Ausstehend" ) )
- {
- dateiStatus->setWert( i, "InBearbeitung" );
- Text *jPf = new Text( pfad->getText() );
- jPf->append( "data/update/jetzt_position.patch" );
- Datei *jetzt = new Datei();
- jetzt->setDatei( jPf );
- __int64 pos = 0;
- jetzt->open( Datei::Style::schreiben );
- jetzt->schreibe( (char*)&pos, 8 );
- jetzt->close();
- jetzt->release();
- dateiStatus->speichern();
- Text *zielPf = new Text( pfad->getText() );
- zielPf->append( "data/update/download/" );
- zielPf->append( dateiStatus->zName( i )->getText() );
- InitDatei *poIni = new InitDatei( "data/patch/po.ini" );
- poIni->laden();
- int maxbps = 0;
- if( poIni->wertExistiert( "ülps" ) && poIni->zWert( "ülps" )->getLength() && poIni->wertExistiert( "üle" ) )
- {
- if( poIni->zWert( "üle" )->istGleich( "kb/s" ) )
- maxbps = (int)TextZuInt( poIni->zWert( "ülps" )->getText(), 10 ) * 1024;
- if( poIni->zWert( "üle" )->istGleich( "mb/s" ) )
- maxbps = (int)TextZuInt( poIni->zWert( "ülps" )->getText(), 10 ) * 1024 * 1024;
- }
- poIni->release();
- if( zParams->zStatus )
- {
- zParams->zStatus->lockZeichnung();
- zParams->zStatus->setText( dateiStatus->zName( i )->getText() );
- zParams->zStatus->unlockZeichnung();
- }
- if( client->downloadDatei( zParams->dateiGruppe, &pos, dateiStatus->zName( i )->getText(), zielPf->getText(), zParams->zFortschritt, zParams->abbruch, maxbps ) )
- {
- if( ( *zParams->abbruch ) )
- { // übertragung unterbrochen
- jPf = new Text( pfad->getText() );
- jPf->append( "data/update/jetzt_position.patch" );
- jetzt = new Datei();
- jetzt->setDatei( jPf );
- if( jetzt->open( Datei::Style::schreiben ) )
- {
- jetzt->schreibe( (char*)&pos, 8 );
- jetzt->close();
- }
- jetzt->release();
- dgL->release();
- pfad->release();
- dateiListe->release();
- dateiStatus->release();
- zielPf->release();
- lokaleDateien->release();
- fehler->setText( "" );
- client->trenne( 0 );
- client->unlock();
- return 2;
- }
- else
- {
- dateiStatus->setWert( i, "Fertig" );
- dateiStatus->speichern();
- }
- }
- else
- { // error
- dgL->release();
- pfad->release();
- dateiListe->release();
- dateiStatus->release();
- zielPf->release();
- lokaleDateien->release();
- fehler->setText( client->zError()->getText() );
- client->trenne( 0 );
- client->unlock();
- return 1;
- }
- zielPf->release();
- }
- }
- if( zParams->zStatus )
- {
- zParams->zStatus->lockZeichnung();
- zParams->zStatus->setText( "Übernehme Änderungen..." );
- zParams->zStatus->unlockZeichnung();
- }
- removeListe = new Datei();
- llPf = new Text( pfad->getText() );
- llPf->append( "data/update/datei_remove.patch" );
- removeListe->setDatei( llPf );
- removeListe->open( Datei::Style::lesen );
- Text *zeile = removeListe->leseZeile();
- while( zeile )
- {
- zeile->remove( "\r\n" );
- zeile->remove( "\n" );
- if( !zeile->getLength() )
- break;
- Text pf = pfad->getText();
- pf += zeile->getText();
- lokaleDateien->removeWert( zeile->getText() );
- DateiRemove( pf );
- zeile->release();
- zeile = removeListe->leseZeile();
- }
- lokaleDateien->speichern();
- removeListe->close();
- removeListe->remove();
- removeListe->release();
- if( clientGruppe )
- { // Es wird der Patcher selbst geupdatet
- Text *uPf = new Text( pfad->getText() );
- uPf->append( "data/update/unable/list.patch" );
- Datei *unable = new Datei();
- unable->setDatei( uPf );
- unable->erstellen();
- unable->open( Datei::Style::schreiben );
- bool fertig = 1;
- for( int i = 0; i < dateiStatus->getWertAnzahl(); i++ )
- {
- Text *altPfad = new Text( pfad->getText() );
- altPfad->append( "data/update/download/" );
- altPfad->append( dateiStatus->zName( i )->getText() );
- Text *neuPfad = new Text( pfad->getText() );
- neuPfad->append( dateiStatus->zName( i )->getText() );
- if( DateiExistiert( altPfad->getThis() ) )
- {
- bool b = 0;
- if( !DateiExistiert( neuPfad->getText() ) )
- DateiPfadErstellen( neuPfad->getText() );
- if( DateiExistiert( neuPfad->getText() ) )
- {
- if( DateiRemove( neuPfad->getText() ) )
- {
- if( !DateiUmbenennen( altPfad->getText(), neuPfad->getText() ) )
- b = 1;
- }
- else
- b = 1;
- }
- else
- {
- if( !DateiUmbenennen( altPfad->getText(), neuPfad->getText() ) )
- b = 1;
- }
- if( b )
- {
- unable->schreibe( "\2", 1 );
- unable->schreibe( neuPfad->getText(), neuPfad->getLength() );
- unable->schreibe( "=>", 2 );
- unable->schreibe( altPfad->getText(), altPfad->getLength() );
- unable->schreibe( "\n", 1 );
- fertig = 0;
- }
- }
- altPfad->release();
- neuPfad->release();
- if( !lokaleDateien->wertExistiert( dateiStatus->zName( i )->getText() ) )
- lokaleDateien->addWert( dateiStatus->zName( i )->getText(), dateiListe->zWert( dateiStatus->zName( i )->getText() )->getText() );
- else
- lokaleDateien->setWert( dateiStatus->zName( i )->getText(), dateiListe->zWert( dateiStatus->zName( i )->getText() )->getText() );
- }
- unable->close();
- if( fertig )
- unable->remove();
- unable->release();
- }
- else
- { // Es werden Spiele und Karten geupdatet
- for( int i = 0; i < dateiStatus->getWertAnzahl(); i++ )
- {
- Text *altPfad = new Text( pfad->getText() );
- altPfad->append( "data/update/download/" );
- altPfad->append( dateiStatus->zName( i )->getText() );
- Text *neuPfad = new Text( pfad->getText() );
- neuPfad->append( dateiStatus->zName( i )->getText() );
- if( DateiExistiert( altPfad->getThis() ) )
- {
- bool b = 0;
- if( !DateiExistiert( neuPfad->getText() ) )
- DateiPfadErstellen( neuPfad->getText() );
- if( DateiExistiert( neuPfad->getText() ) )
- {
- if( DateiRemove( neuPfad->getText() ) )
- {
- if( !DateiUmbenennen( altPfad->getText(), neuPfad->getText() ) )
- b = 1;
- }
- else
- b = 1;
- }
- else
- {
- if( !DateiUmbenennen( altPfad->getText(), neuPfad->getText() ) )
- b = 1;
- }
- if( b )
- { // error
- dgL->release();
- pfad->release();
- lokaleDateien->speichern();
- lokaleDateien->release();
- dateiListe->release();
- dateiStatus->release();
- fehler->setText( client->zError()->getText() );
- client->trenne( 0 );
- client->unlock();
- return 1;
- }
- }
- altPfad->release();
- neuPfad->release();
- if( !lokaleDateien->wertExistiert( dateiStatus->zName( i )->getText() ) )
- lokaleDateien->addWert( dateiStatus->zName( i )->getText(), dateiListe->zWert( dateiStatus->zName( i )->getText() )->getText() );
- else
- lokaleDateien->setWert( dateiStatus->zName( i )->getText(), dateiListe->zWert( dateiStatus->zName( i )->getText() )->getText() );
- }
- }
- lokaleDateien->speichern();
- lokaleDateien->release();
- dateiListe->release();
- dateiStatus->release();
- Text *jpPf = new Text( pfad->getText() );
- jpPf->append( "data/update/jetzt_position.patch" );
- DateiRemove( jpPf );
- Text *dvPf = new Text( pfad->getText() );
- dvPf->append( "data/update/datei_versionen.ini" );
- DateiRemove( dvPf );
- dsPf = new Text( pfad->getText() );
- dsPf->append( "data/update/datei_status.ini" );
- DateiRemove( dsPf );
- if( clientGruppe )
- {
- Text *ulPf = new Text( pfad->getText() );
- ulPf->append( "data/update/unable/list.patch" );
- if( DateiExistiert( ulPf ) )
- { // es gibt Dateien, die der Patcher (wegen momentaner Benutzung) nicht pätchen konnte
- dgL->release();
- pfad->release();
- fehler->setText( "" );
- client->trenne( 0 );
- client->unlock();
- return 3;
- }
- }
- pfad->release();
- KSGTDatei *lDgL = new KSGTDatei( "data/dg.ksgt" );
- lDgL->laden();
- bool gefunden = 0;
- for( int i = 0; i < lDgL->getZeilenAnzahl(); i++ )
- {
- if( zParams->dateiGruppe == TextZuInt( lDgL->zFeld( i, 0 )->getText(), 10 ) )
- {
- for( int j = 0; j < dgL->getZeilenAnzahl(); j++ )
- {
- if( zParams->dateiGruppe == TextZuInt( dgL->zFeld( j, 0 )->getText(), 10 ) )
- {
- lDgL->setFeld( i, 2, dgL->zFeld( j, 2 )->getText() );
- break;
- }
- }
- gefunden = 1;
- break;
- }
- }
- if( !gefunden )
- {
- unsigned int rfPos = 0;
- for( int i = 0; i < lDgL->getZeilenAnzahl(); i++ )
- {
- if( rfPos <= TextZuInt( lDgL->zFeld( i, 3 )->getText(), 10 ) )
- rfPos = TextZuInt( lDgL->zFeld( i, 3 )->getText(), 10 ) + 1;
- }
- rfPos++;
- for( int i = 0; i < dgL->getZeilenAnzahl(); i++ )
- {
- if( zParams->dateiGruppe == TextZuInt( dgL->zFeld( i, 0 )->getText(), 10 ) )
- {
- RCArray< Text > *zeile = new RCArray< Text >();
- zeile->set( new Text( dgL->zFeld( i, 0 )->getText() ), 0 );
- zeile->set( new Text( dgL->zFeld( i, 1 )->getText() ), 1 );
- zeile->set( new Text( dgL->zFeld( i, 2 )->getText() ), 2 );
- Text *rfPosT = new Text();
- rfPosT->append( rfPos );
- zeile->set( rfPosT, 3 );
- lDgL->addZeile( 4, zeile );
- zeile->release();
- break;
- }
- }
- }
- dgL->release();
- lDgL->speichern();
- lDgL->release();
- if( ( *zParams->abbruch ) )
- {
- fehler->setText( "" );
- client->trenne( 0 );
- client->unlock();
- return 2;
- }
- client->trenne( 0 );
- client->unlock();
- fehler->setText( "" );
- return 0;
- }
- // constant
- char *Updater::getError() const
- {
- return fehler->getText();
- }
- int Updater::getDownload() const
- {
- return client->getDownload();
- }
- // Reference Counting
- UpdaterV *Updater::getThis()
- {
- ref++;
- return this;
- }
- UpdaterV *Updater::release()
- {
- ref--;
- if( !ref )
- delete this;
- return 0;
- }
|