Diffstat (limited to 'noncore/apps/opie-gutenbrowser/openetext.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/apps/opie-gutenbrowser/openetext.cpp | 517 |
1 files changed, 517 insertions, 0 deletions
diff --git a/noncore/apps/opie-gutenbrowser/openetext.cpp b/noncore/apps/opie-gutenbrowser/openetext.cpp new file mode 100644 index 0000000..40f35d6 --- a/dev/null +++ b/noncore/apps/opie-gutenbrowser/openetext.cpp @@ -0,0 +1,517 @@ +/*************************************************************************** + openetext.cpp - description + begin : Sat Dec 4 1999 + begin : Tue Jul 25 2000 + copyright : (C) 2000 -2004 by llornkcor + email : ljp@llornkcor.com + ***************************************************************************/ +/*************************************************************************** + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + ***************************************************************************/ + +#include "gutenbrowser.h" +#include "openetext.h" +#include "editTitle.h" + +#include <qfileinfo.h> +#include <qpe/applnk.h> +#include <qpe/qpeapplication.h> + +#include <stdlib.h> +#include <qtextstream.h> +#include <qpe/config.h> + +#include <opie/ofiledialog.h> + +#if defined(_WS_WIN_) +#include <windows.h> +#else +#include <unistd.h> +#include "sys/stat.h" +#endif + +OpenEtext::OpenEtext(QWidget *parent, QString name) : QDialog(parent,name,true) +{ + local_library = (QDir::homeDirPath ()) +"/Applications/gutenbrowser/"; + local_index=local_library+"GUTINDEX.ALL"; + initDialog(); + connect( QListBox_1, SIGNAL(selected ( int)),this, SLOT(select_title(int)) ); + + getTitles(); +} + +OpenEtext::~OpenEtext() +{ +} + +void OpenEtext::getTitles() +{ + QListBox_1->clear(); + Config config("Gutenbrowser"); + config.setGroup( "Files" ); + s_numofFiles = config.readEntry("NumberOfFiles", "0"); + QLabel_1->setText( tr( + s_numofFiles+" etexts in your library.")); + int i_numofFiles = s_numofFiles.toInt(); + for (int i = 1; i <= i_numofFiles+1; i++) { + QString temp; + temp.setNum(i); + config.setGroup( "Files" ); + QString ramble = config.readEntry(temp, "" ); + config.setGroup( "Titles" ); + title = config.readEntry(ramble, ""); + if( !title.isEmpty()) { + QListBox_1->insertItem ( QPixmap( QPEApplication::qpeDir()+"pics/gutenbrowser/gutenbrowser_sm.png"), title, -1); + } + } +} + +/* + opens selected title */ +void OpenEtext::OpenTitle() +{ + if( QListBox_1->currentItem() != -1) + select_title( QListBox_1->currentItem() ); + else { + QString sMsg; + sMsg = "You must select an Etext to open"; + QMessageBox::message( "Error",sMsg); + } +} + +void OpenEtext::select_title(int index ) +{ + OpenButton->setDown(TRUE); + QString temp; + temp.setNum( index + 1); + const char * title; + title = QListBox_1->text( index ); + openFileTitle = title; + Config config("Gutenbrowser"); + config.setGroup( "Files" ); + file = config.readEntry(temp, ""); + OpenEtext::accept(); +} + +/* + This function imports already existing etexts into the local library list*/ +void OpenEtext::open() +{ +OpenFileButton->setDown(TRUE); + title = ""; + QString currDir=""; + QString filer; + QString name_file; + QString local ; + local = (QDir::homeDirPath () +"Applications/gutenbrowser"); + QDir library( local); + +// fileBrowser *browseForFiles; +// browseForFiles=new fileBrowser(this,"Browse for File", TRUE, 0, "guten/plain;text/plain"); +// // browseForFiles=new fileBrowser(this,"fileBrowser",TRUE,0, "*"); +// browseForFiles->setFileView( 0); +// browseForFiles->showMaximized(); +// browseForFiles->exec(); +// QString selFile= browseForFiles->selectedFileName; +// fileList=browseForFiles->fileList; + Config cfg("Gutenbrowser"); + cfg. setGroup ( "View" ); + QString dir = cfg.readEntry("LastOpenDirectory", QPEApplication::documentDir()); + QMap<QString, QStringList> map; + map.insert(tr("All"), QStringList() ); + QStringList text; + text << "text/*"; + map.insert(tr("Text"), text ); + text << "*"; + map.insert(tr("All"), text ); + + QString str = OFileDialog::getOpenFileName( 2, dir , QString::null, map); + + if( !str.isEmpty() && QFile(str).exists() && !QFileInfo(str).isDir() ) { + filer = str; + + qDebug("Open file: "+str); + + // QStringList::ConstIterator f; +// QString fileTemp; +// for ( f = fileList.begin(); f != fileList.end(); f++ ) { +// fileTemp = *f; +// fileTemp.right( fileTemp.length()-5); +// fileName = fileTemp; +// if( !fileName.isEmpty() ){ +// filer = fileName; +// } else { //filename is empty +// // QString sMsg; +// // sMsg = "Error opening library filelist "+fileName; +// } + + if( filer.right(4) == ".txt" + || filer.right(4) == ".TXT" + || filer.right(4) == ".etx" + || filer.right(4) == ".ETX" + || filer.right(4) == ".etx" + || filer.right(4) == ".ETX" + || filer.right(4) == ".zip" + || filer.right(4) == ".ZIP" ) { + QFileInfo zipFile( filer); + QString s_fileName = zipFile.fileName(); + QString cmd; + + if( s_fileName.right(4) == ".zip") { // unzip that sucker.... + s_fileName = s_fileName.left( s_fileName.length() - 4); + if( chdir((const char*)local_library.latin1())!=0) + qDebug("chdir failed.");// QString cmd = "gunzip -d " + filer + " -d " + local_library; + cmd = "gunzip -S .zip " + filer; + fileName = local_library + s_fileName + ".txt"; + system( cmd); + } +// this renames the .txt to .etx!! + else /*if( s_fileName.right(4) == ".txt" || if( s_fileName.right(4) == ".TXT"))*/ { +// qDebug("Filename is "+fileName); + s_fileName = fileName; + s_fileName.replace( s_fileName.length()-3,3,"gtn");// s_fileName.replace( s_fileName.length()-3,3,"etx"); + rename(fileName.latin1(),s_fileName.latin1()); + fileName = s_fileName; +// qDebug("Filename is now "+fileName); + } + } else + fileName = str; + + FindTitle(fileName); + + QFileInfo fi( fileName); + name_file = fi.fileName(); + name_file = name_file.left(name_file.length() - 4); + + qDebug("Setting doclink"); + DocLnk lnk; + qDebug("name is " + name_file); + lnk.setName(name_file); //sets file name + qDebug("Title is "+title); + lnk.setComment(title); + + QListBox_1->clear(); + getTitles(); + qDebug("Filename is "+fileName); + lnk.setFile(fileName); //sets File property + lnk.setType("guten/plain");// hey is this a REGISTERED mime type?!?!? ;D + lnk.setExec(fileName); + lnk.setIcon("gutenbrowser/Gutenbrowser"); + if(!lnk.writeLink()) + qDebug("Writing doclink did not work"); + + } // end of for each file name.... + OpenFileButton->setDown(FALSE); +} + +/* +find the title in the config file */ +bool OpenEtext::FindTitle( QString filename) +{ + Config config("Gutenbrowser"); + config.setGroup( "Files" ); + QString s_numofFiles = config.readEntry("NumberOfFiles", "0"); + int i_numofFiles = s_numofFiles.toInt(); + + QFileInfo fi(filename); + name = fi.fileName(); + qDebug("filename to open is " + name); + QFile indexLib( filename); + bool findCheck = FALSE; + // int Titlenumber=0; + + if ( indexLib.open( IO_ReadOnly) ) { + qDebug("file opened successfully"); + QTextStream indexStream( &indexLib ); + QString target = "Project Gutenberg Etext of"; + QString target2 = "Project Gutenberg Etext"; + QString target3 = "Project Gutenberg's Etext of"; + QString target4 = "Project Gutenberg's Etext"; + QString indexLine; + while ( !indexStream.eof() ) { + // until end of file.. + indexLine = indexStream.readLine(); + if( indexLine.find(target, 0, TRUE) > -1 && !findCheck) {findCheck = TRUE; + title = indexLine.mid( indexLine.find(target, 0, TRUE) + (target.length()) , indexLine.find("\r", 0, TRUE)); + title = title.left( title.find( "*",0, TRUE)); + title = title.stripWhiteSpace (); +// qDebug("Found the title 1 and it is %s", title.latin1()); +// QListBox_1->insertItem ( title); + } + if( indexLine.find( target2, 0, TRUE) > -1 && !findCheck) { + findCheck = TRUE; + title = indexLine.mid( indexLine.find( target2, 0, TRUE ) + ( target2.length()) , indexLine.find("\r", 0, TRUE) ); + title = title.left( title.find( "*",0, TRUE)); + title = title.stripWhiteSpace (); +// qDebug("Found the title 2 and it is %s", title.latin1()); +// QListBox_1->insertItem ( title); + } + if( indexLine.find( target3, 0, TRUE) > -1 && !findCheck) { + findCheck = TRUE; + title = indexLine.mid( indexLine.find( target3, 0, TRUE) + ( target3.length()) , indexLine.find("\r", 0, TRUE)); + title = title.left( title.find( "*",0, TRUE)); + title = title.stripWhiteSpace (); +// qDebug("Found the title 3 and it is %s", title.latin1()); + } + if( indexLine.find( target4, 0, TRUE) > -1 && !findCheck) { + findCheck = TRUE; + title = indexLine.mid( indexLine.find( target4, 0, TRUE) + ( target4.length()) , indexLine.find("\r", 0, TRUE)); + title = title.left( title.find( "*",0, TRUE)); + title = title.stripWhiteSpace (); +// qDebug("Found the title 4 and it is %s", title.latin1()); + } + } //endof file + indexLib.close(); + + if( !findCheck || title.length() < 2) { + qDebug("Trying hard to find title from GUTINDEX.ALL"); + title = titleFromLibrary( filename); + findCheck = TRUE; + } + + if ( checkConf() == false && findCheck == TRUE) { + + config.setGroup( "Files"); + config.writeEntry("NumberOfFiles",i_numofFiles + 1 ); + QString interger; + interger.setNum( i_numofFiles +1); + config.writeEntry(interger, filename); + config.setGroup( "Titles" ); + for (int i = 1; i <= i_numofFiles; i++) { //find dup titles in config file + QString temp; + temp.setNum(i); + config.setGroup( "Files" ); + QString ramble = config.readEntry(temp, "" ); + config.setGroup( "Titles" ); + QString title1 = config.readEntry(ramble, ""); + if(title1==title) + title+="1"; + i= i_numofFiles+1; + } + if(title.length()<3) { +// qDebug("title is empty"); + title="Unknown"; + } + config.writeEntry( filename,title); + } + } else { + QString sMsg; + sMsg = "Error opening library file: "+filename; + printf( sMsg+"\n"); + } + return true; +} + +QString OpenEtext::titleFromLibrary( QString fileName) +{ + QFile indexLib( local_index); + QString target; + int find1 = fileName.findRev("/",-1,TRUE) + 1; + int find2 = fileName.findRev(".gtn",-1,TRUE) - find1; + if(find2==-1-find1) + int find2 = fileName.findRev(".etx",-1,TRUE) - find1; + else if(find2==-1-find1) + int find2 = fileName.findRev(".txt",-1,TRUE) - find1; + + target = fileName.mid( find1, find2 ); + QString checker = target.right(1); + bool ok; + checker.toInt( &ok,10); + if( ok) { + target = target.left( target.length()-1); + checker = target.right(1); + ok = FALSE; + checker.toInt( &ok,10); + if( ok) { + target = target.left( target.length()-1); + } + } + if ( indexLib.open( IO_ReadOnly) ) { + // file opened successfully + QTextStream indexStream( &indexLib ); + QString indexLine; + bool findCheck = FALSE; + while ( !indexStream.atEnd() ) { // until end of file.. + indexLine = indexStream.readLine(); + + if( indexLine.find( target,0,FALSE) > 0 ) { + findCheck = TRUE; + title = indexLine.mid( 9, 50); +// title = indexLine.mid( 26, indexLine.length() ); + title = title.stripWhiteSpace (); +// qDebug("Finally Found the title and it is\n %s", title.latin1()); +// QListBox_1->insertItem ( title); + } + } //end while loop + } + else + qDebug("Error opening library index "+ local_index); + return title; +} + +bool OpenEtext::checkConf() +{ + QString file = fileName; + Config config("Gutenbrowser"); + config.setGroup( "Files" ); + QString s_numofFiles = config.readEntry("NumberOfFiles", "0" ); + int i_numofFiles = s_numofFiles.toInt(); + + for (int i = 1; i <= i_numofFiles; i++) { + QString temp; + temp.setNum(i); + config.setGroup( "Files"); + QString ramble = config.readEntry(temp, "" ); + + if(ramble == file ) { + return true; + } + } + return false; +} + +void OpenEtext::remove() +{ + title_text = QListBox_1->text( QListBox_1->currentItem() ); + title_text=title_text.stripWhiteSpace(); + QString msg ="<p>Do you really want to REMOVE\n" +title_text +"?\nThis will not delete the file.</P>"; + switch( QMessageBox::information( this, (tr("Remove Etext")), + (tr(msg)), + (tr("&Yes")), (tr("&Cancel")), 0 )){ + case 0: // Yes clicked, + removeSelection(); + QListBox_1->clear(); + getTitles(); + break; + case 1: // Cancel + break; + }; +} + +/* + this removes selected title entry*/ +void OpenEtext::removeSelection() +{ + Config config("Gutenbrowser"); + config.setGroup( "Files" ); + s_numofFiles = config.readEntry("NumberOfFiles", "0"); + int rem=0; + int i_numofFiles = s_numofFiles.toInt(); + QString fileNum2; + QString fileNum; + + for (int i = 1; i <= i_numofFiles; i++) { + fileNum.setNum(i); + config.setGroup( "Files" ); + + QString s_filename = config.readEntry(fileNum, "" ); + config.setGroup( "Titles" ); + + QString file_title = config.readEntry( s_filename, ""); + if(title_text == file_title) { + rem=i; +//qDebug("file title to remove is "+file_title); + selFile = s_filename; + config.removeEntry( s_filename); //removes file=title + } + } + config.setGroup( "Files" ); + + for(int fg = rem; fg < i_numofFiles ; fg++ ) { //this rewrites Files number entry + fileNum.setNum(fg); + fileNum2.setNum( fg + 1); + + QString s_filename2 = config.readEntry(fileNum2, "" ); + + if (!s_filename2.isEmpty()) { + config.writeEntry(fileNum, s_filename2 ); + } + } + config.writeEntry("NumberOfFiles", i_numofFiles - 1 ); + config.removeEntry(fileNum2); +// remFile(); +} + +/* + removes file title name from list and config file*/ +void OpenEtext::remFile() +{ + Config config("Gutenbrowser"); + config.setGroup( "Files" ); + QString remFile; + s_numofFiles = config.readEntry("NumberOfFiles", "0"); + int i_numofFiles = s_numofFiles.toInt(); + for (int i = 1; i <= i_numofFiles; i++) { + QString fileNum; + fileNum.setNum(i); + QString s_filename = config.readEntry(fileNum, "" ); + + if( s_filename == selFile) { + config.removeEntry(selFile); + + for(int fg = i_numofFiles - i; fg < i_numofFiles ; fg++ ) { //this rewrites Files number entry + QString fileNum2; + fileNum2.setNum( fg + 1); + QString s_filename2 = config.readEntry(fileNum2, "" ); + + if (!s_filename2.isEmpty()) { + config.writeEntry(fileNum, s_filename2 ); + } + } + } + } + config.writeEntry("NumberOfFiles", i_numofFiles - 1 ); + config.removeEntry(s_numofFiles); + + QListBox_1->triggerUpdate(true); +} + +/* +sorts the list*/ +void OpenEtext::scan() { + + QListBox_1->sort(TRUE); + QListBox_1->triggerUpdate(true); +} + +void OpenEtext::editTitle() { + + int currentItem=QListBox_1->currentItem(); + QString title_text = QListBox_1->text( currentItem); +//qDebug("Selected "+title_text); + + Config config("Gutenbrowser"); + config.setGroup( "Files" ); + s_numofFiles = config.readEntry("NumberOfFiles", "0"); + int i_numofFiles = s_numofFiles.toInt(); + QString fileNum; + for (int i = 1; i <= i_numofFiles+1; i++) { + + fileNum.setNum(i); + config.setGroup( "Files" ); + QString s_filename = config.readEntry(fileNum, "" ); + config.setGroup( "Titles" ); + QString file_title = config.readEntry( s_filename, ""); +//qDebug("file_title is "+file_title); + if(title_text == file_title ) { + selFile = s_filename; +//qDebug("Edit: "+ file_title ); + i=i_numofFiles+1; + Edit_Title *titleEdit; + titleEdit = new Edit_Title(this,file_title ,TRUE); + if(titleEdit->exec() !=0) { +//qDebug(titleEdit->newTitle); + config.writeEntry( s_filename, titleEdit->newTitle); + QListBox_1->removeItem(currentItem); + QListBox_1->insertItem ( QPixmap( QPEApplication::qpeDir()+"pics/gutenbrowser/gutenbrowser_sm.png"), titleEdit->newTitle, currentItem); + } + } + } + +// getTitles(); + QListBox_1->triggerUpdate(true); +} + |