/***************************************************************************
                          kgallerydialog.cpp  -  description
                             -------------------
    begin                : mar abr 1 2003
    copyright            : (C) 2003 by Javier Campos
    email                : javi@asyris.org
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   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 "kgallerydialog.h"
#include "kgallerydialog.moc"

#include <kdebug.h>
#include <tdeconfig.h>
#include <tdelocale.h>
#include <tdemessagebox.h>
#include <tdeio/netaccess.h>

#include <tqlineedit.h>
#include <tqlistview.h>
#include <tqsplitter.h>
#include <tqdom.h>
#include <tqfileinfo.h>

KGalleryDialog::KGalleryDialog(TQWidget *parent, const char *name )
      :KGalleryDialogBase(parent,name)
{
  configRead();
}

KGalleryDialog::~KGalleryDialog()
{
}

/** Open keduca file. This function can open a remote or local url. */
bool KGalleryDialog::openFile(const KURL &url) {
    TQString tmpFile;
    bool returnval=false;
    if( TDEIO::NetAccess::download( url, tmpFile, this ) )
    {
        returnval=loadFile( tmpFile );
        if (returnval) {
            _currentURL = url;
            kdDebug()<<"... load successful: "<<_currentURL.url()<<endl;
        }

        TDEIO::NetAccess::removeTempFile( tmpFile );
    }else
        kdDebug()<<"FileRead::openFile(): download NOT successful: "<<url.url()<<endl;

    return returnval;
}

bool KGalleryDialog::loadFile( const TQString &filename )
{
    TQDomDocument doc("document.xml");

    TQFile file(filename);

    if(!file.open(IO_ReadOnly))
    {
        return false;
    }
    doc.setContent( &file );

    if( doc.doctype().name() != "educagallery" )
    { return false; }
           
    TQDomElement docElem = doc.documentElement();
    TQDomNode n = docElem.firstChild();

    kdDebug()<<"... load attributes: "<< docElem.tagName() <<endl;
    
    TQDomNodeList dnList = n.childNodes();
    for( unsigned int i = 0; i < dnList.count(); ++i)
    {
        TQListViewItem *newItem = new TQListViewItem(listDocuments);
        TQDomElement serversNode = dnList.item(i).toElement();

        kdDebug()<<"... load attributes: "<< serversNode.text() <<endl;
        
        newItem->setText( 0, serversNode.  text() );
        newItem->setText( 1, serversNode.attribute( "language" ) );
        newItem->setText( 2, serversNode.attribute( "category" ) );
        newItem->setText( 3, serversNode.attribute( "type" ) );
        newItem->setText( 4, serversNode.attribute( "author" ) );
        newItem->setText( 5, serversNode.attribute( "address" ) );        
        newItem->setSelected(false);
    }

    file.close();

    return true;
}

/** Read servers */
void KGalleryDialog::configRead()
{
    TDEConfig *appconfig = TDEGlobal::config();
    TQStringList servers;
    TQStringList ipservers;
    TQStringList::Iterator it_ipservers;
        
    appconfig->setGroup( "kgallerydialog" );
    _split->setSizes( appconfig->readIntListEntry("Splitter_size") );
    TQSize defaultSize(500,400);
    resize( appconfig->readSizeEntry("Geometry", &defaultSize ) );
       
    appconfig->setGroup("Galleries Servers");
    servers    = appconfig->readListEntry ( "Servers" );
    ipservers  = appconfig->readListEntry ( "ServersIP" );

    if( ipservers.count() == 0 )
      {
      servers.append( "KEduca Main Server" );
      ipservers.append( "http://keduca.sourceforge.net/gallery/gallery.edugallery" );
      }

    it_ipservers=ipservers.begin();
    for ( TQStringList::Iterator it_servers = servers.begin(); it_servers != servers.end(); ++it_servers )
    {
      TQListViewItem *newItem = new TQListViewItem(listServers);
      newItem->setText(0,*it_servers);
      newItem->setText(1,*it_ipservers);
      newItem->setSelected(false);
      ++it_ipservers;
    }
}

/** Write servers lists */
void KGalleryDialog::configWrite()
{
    TQStringList servers;
    TQStringList ipservers;
    TDEConfig *config = TDEGlobal::config();

    config->setGroup( "kgallerydialog" );
    config->writeEntry("Splitter_size", _split->sizes() );
    config->writeEntry("Geometry", size() );
    config->sync();

    config->setGroup("Galleries Servers");
    TQListViewItem *item = listServers->firstChild();
    while (item) {
        servers.append( item->text(0) );
        ipservers.append( item->text(1) );
        item = item->nextSibling();
    }
    config->writeEntry("Servers", servers);
    config->writeEntry("ServersIP", ipservers);

    config->sync();
}

/** No descriptions */
void KGalleryDialog::slotButtonAdd()
{
      if( (lineName->text()).isEmpty() || (lineAddress->text()).isEmpty() )
        {
        KMessageBox::sorry(this, i18n("You need to specify a server!"));
        return;
        }
        
        TQListViewItem *newItem = new TQListViewItem(listServers);
        newItem->setText(0,lineName->text());
        newItem->setText(1,lineAddress->text());
        newItem->setSelected(false);              
}

/** Open selected document */
void KGalleryDialog::accept()
{
    if (getURL().isEmpty())
      KMessageBox::sorry(this, i18n("You need to specify the file to open!"));
    else
    {
      configWrite();
      KGalleryDialogBase::accept();
    }    
//    done( TQDialog::Accepted );
}

/** Select Server */
void KGalleryDialog::slotServerSelected( TQListViewItem *item )
{
    if (!item)
        return;

    KURL url_server = KURL( item->text(1) );

    listDocuments->clear();
    openFile( url_server );
}

/** Get keduca test url */
KURL KGalleryDialog::getURL()
{
  TQListViewItem *item = listDocuments->currentItem();

  if (!item)
    return KURL();

  TQString urlAddress = item->text(5);
    
  if( _currentURL.isLocalFile() && !KURL(urlAddress).isValid() )
    {
    if( !TQFileInfo(urlAddress).exists() )
      urlAddress = _currentURL.directory(false,true) + urlAddress;
    kdDebug()<< "Imagen en local" <<endl;
    } else if( !_currentURL.isLocalFile() && !KURL(urlAddress).isValid() )
       urlAddress = _currentURL.protocol() + "://" + _currentURL.host() + _currentURL.directory(false,true) + urlAddress;
    
  kdDebug()<< urlAddress <<endl;
  return KURL( urlAddress );
}

/** Add url */
void KGalleryDialog::putURL(const KURL &urlFile)
{
        TQListViewItem *newItem = new TQListViewItem(listServers);
        newItem->setText( 1, urlFile.url() );
        newItem->setSelected(false);
}
