/***************************************************************************
 *   Copyright (C) 2005-2007 by Rajko Albrecht                             *
 *   ral@alwins-world.de                                                   *
 *                                                                         *
 *   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.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
 ***************************************************************************/
#include "ktranslateurl.h"

#include <tdeglobal.h>
#include <kstandarddirs.h>
#include <kdebug.h>
#include <tdefileitem.h>
#include <kdesktopfile.h>

#include <tqstringlist.h>
#include <tqdir.h>

namespace helpers {

KTranslateUrl::KTranslateUrl()
{
}


KTranslateUrl::~KTranslateUrl()
{
}

KURL KTranslateUrl::translateSystemUrl(const KURL&_url)
{
    TQString proto = _url.protocol();
    KURL res;
    TQString name,path;

    if (proto!="system") {
        return _url;
    }
    TDEGlobal::dirs()->addResourceType("system_entries",
    TDEStandardDirs::kde_default("data") + "systemview");
    TQStringList dirList = TDEGlobal::dirs()->resourceDirs("system_entries");
    if (!parseURL(_url,name,path)) {
        return _url;
    }
    res = findSystemBase(name);
    if (!res.isValid()) {
        return _url;
    }
    res.addPath(path);
    res.setQuery(_url.query());
    return res;
}

bool KTranslateUrl::parseURL(const KURL&url,TQString&name,TQString&path)
{
    TQString url_path = url.path();
    int i = url_path.find('/', 1);
    if (i > 0)
    {
        name = url_path.mid(1, i-1);
        path = url_path.mid(i+1);
    }
    else
    {
        name = url_path.mid(1);
        path = TQString();
    }

    return name != TQString();
}

KURL KTranslateUrl::findSystemBase(const TQString&filename)
{
    TQStringList dirList = TDEGlobal::dirs()->resourceDirs("system_entries");

    TQStringList::ConstIterator dirpath = dirList.begin();
    TQStringList::ConstIterator end = dirList.end();
    for(; dirpath!=end; ++dirpath)
    {
        TQDir dir = *dirpath;
        if (!dir.exists()) continue;

        TQStringList filenames
                = dir.entryList( TQDir::Files | TQDir::Readable );


        TDEIO::UDSEntry entry;

        TQStringList::ConstIterator name = filenames.begin();
        TQStringList::ConstIterator endf = filenames.end();

        for(; name!=endf; ++name)
        {
            if (*name==filename+".desktop")
            {
                KDesktopFile desktop(*dirpath+filename+".desktop", true);
                if ( desktop.readURL().isEmpty() )
                {
                    KURL url;
                    url.setPath( desktop.readPath() );
                    return url;
                }

                return desktop.readURL();
            }
        }
    }

    return KURL();
}

}


/*!
    \fn helpers::KTranslateUrl::makeKdeUrl(const TQString&inUrl)
 */
TQString helpers::KTranslateUrl::makeKdeUrl(const TQString&_proto)
{
    TQString proto;
    if (_proto.startsWith("svn+")){
        proto = "k"+_proto;
    } else if (_proto== TQString("svn")){
        proto = "ksvn";
    } else {
        proto = "ksvn+"+_proto;
    }
    return proto;
}
