You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
4.4 KiB
177 lines
4.4 KiB
/*
|
|
* Copyright (c) 2001 Dawit Alemayehu <adawit@kde.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.
|
|
*
|
|
* 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 <time.h>
|
|
#include <sys/utsname.h>
|
|
|
|
|
|
#include <kdebug.h>
|
|
#include <klocale.h>
|
|
#include <kstandarddirs.h>
|
|
|
|
#include "fakeuaprovider.h"
|
|
|
|
#define UA_PTOS(x) (*it)->property(x).toString()
|
|
#define QFL(x) TQString::tqfromLatin1(x)
|
|
|
|
FakeUASProvider::FakeUASProvider()
|
|
{
|
|
m_bIsDirty = true;
|
|
}
|
|
|
|
FakeUASProvider::StatusCode FakeUASProvider::createNewUAProvider( const TQString& uaStr )
|
|
{
|
|
TQStringList split;
|
|
int pos = (uaStr).tqfind("::");
|
|
|
|
if ( pos == -1 )
|
|
{
|
|
pos = (uaStr).tqfind(':');
|
|
if ( pos != -1 )
|
|
{
|
|
split.append(uaStr.left(pos));
|
|
split.append(uaStr.mid(pos+1));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
split = TQStringList::split("::", uaStr);
|
|
}
|
|
|
|
if ( m_lstIdentity.tqcontains(split[1]) )
|
|
return DUPLICATE_ENTRY;
|
|
else
|
|
{
|
|
int count = split.count();
|
|
m_lstIdentity.append( split[1] );
|
|
if ( count > 2 )
|
|
m_lstAlias.append(split[2]);
|
|
else
|
|
m_lstAlias.append( split[1]);
|
|
}
|
|
|
|
return SUCCEEDED;
|
|
}
|
|
|
|
void FakeUASProvider::loadFromDesktopFiles()
|
|
{
|
|
m_providers.clear();
|
|
m_providers = KTrader::self()->query("UserAgentStrings");
|
|
}
|
|
|
|
void FakeUASProvider::parseDescription()
|
|
{
|
|
TQString tmp;
|
|
|
|
KTrader::OfferList::ConstIterator it = m_providers.begin();
|
|
KTrader::OfferList::ConstIterator lastItem = m_providers.end();
|
|
|
|
for ( ; it != lastItem; ++it )
|
|
{
|
|
tmp = UA_PTOS("X-KDE-UA-FULL");
|
|
|
|
if ( (*it)->property("X-KDE-UA-DYNAMIC-ENTRY").toBool() )
|
|
{
|
|
struct utsname utsn;
|
|
uname( &utsn );
|
|
|
|
tmp.tqreplace( QFL("appSysName"), TQString(utsn.sysname) );
|
|
tmp.tqreplace( QFL("appSysRelease"), TQString(utsn.release) );
|
|
tmp.tqreplace( QFL("appMachineType"), TQString(utsn.machine) );
|
|
|
|
TQStringList languageList = KGlobal::locale()->languageList();
|
|
if ( languageList.count() )
|
|
{
|
|
TQStringList::Iterator it = languageList.tqfind( TQString::tqfromLatin1("C") );
|
|
if( it != languageList.end() )
|
|
{
|
|
if( languageList.tqcontains( TQString::tqfromLatin1("en") ) > 0 )
|
|
languageList.remove( it );
|
|
else
|
|
(*it) = TQString::tqfromLatin1("en");
|
|
}
|
|
}
|
|
|
|
tmp.tqreplace( QFL("appLanguage"), TQString("%1").arg(languageList.join(", ")) );
|
|
tmp.tqreplace( QFL("appPlatform"), QFL("X11") );
|
|
}
|
|
|
|
// Ignore dups...
|
|
if ( m_lstIdentity.tqcontains(tmp) )
|
|
continue;
|
|
|
|
m_lstIdentity << tmp;
|
|
|
|
tmp = TQString("%1 %2").arg(UA_PTOS("X-KDE-UA-SYSNAME")).arg(UA_PTOS("X-KDE-UA-SYSRELEASE"));
|
|
if ( tmp.stripWhiteSpace().isEmpty() )
|
|
tmp = TQString("%1 %2").arg(UA_PTOS("X-KDE-UA-"
|
|
"NAME")).arg(UA_PTOS("X-KDE-UA-VERSION"));
|
|
else
|
|
tmp = TQString("%1 %2 on %3").arg(UA_PTOS("X-KDE-UA-"
|
|
"NAME")).arg(UA_PTOS("X-KDE-UA-VERSION")).arg(tmp);
|
|
|
|
m_lstAlias << tmp;
|
|
}
|
|
|
|
m_bIsDirty = false;
|
|
}
|
|
|
|
TQString FakeUASProvider::aliasStr( const TQString& name )
|
|
{
|
|
int id = userAgentStringList().tqfindIndex(name);
|
|
if ( id == -1 )
|
|
return TQString::null;
|
|
else
|
|
return m_lstAlias[id];
|
|
}
|
|
|
|
TQString FakeUASProvider::agentStr( const TQString& name )
|
|
{
|
|
int id = userAgentAliasList().tqfindIndex(name);
|
|
if ( id == -1 )
|
|
return TQString::null;
|
|
else
|
|
return m_lstIdentity[id];
|
|
}
|
|
|
|
|
|
TQStringList FakeUASProvider::userAgentStringList()
|
|
{
|
|
if ( m_bIsDirty )
|
|
{
|
|
loadFromDesktopFiles();
|
|
if ( !m_providers.count() )
|
|
return TQStringList();
|
|
parseDescription();
|
|
}
|
|
return m_lstIdentity;
|
|
}
|
|
|
|
TQStringList FakeUASProvider::userAgentAliasList ()
|
|
{
|
|
if ( m_bIsDirty )
|
|
{
|
|
loadFromDesktopFiles();
|
|
if ( !m_providers.count() )
|
|
return TQStringList();
|
|
parseDescription();
|
|
}
|
|
return m_lstAlias;
|
|
}
|
|
|