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.
amarok/amarok/src/medium.cpp

274 lines
6.7 KiB

/* This file is part of the KDE Project
Copyright (c) 2004 Kévin Ottens <ervin ipsquad net>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License version 2 as published by the Free Software Foundation.
This library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "debug.h"
#include "medium.h"
#include <kconfig.h>
#include <klocale.h>
const TQString Medium::SEPARATOR = "---";
Medium::Medium(const TQString &id, const TQString &name)
{
m_properties+= "false"; /* AUTODETECTED */
m_properties+= id; /* ID */
m_properties+= name; /* NAME */
m_properties+= name; /* LABEL */
m_properties+= TQString(); /* USER_LABEL */
m_properties+= "false"; /* MOUNTABLE */
m_properties+= TQString(); /* DEVICE_NODE */
m_properties+= TQString(); /* MOUNT_POINT */
m_properties+= TQString(); /* FS_TYPE */
m_properties+= "false"; /* MOUNTED */
m_properties+= TQString(); /* BASE_URL */
m_properties+= TQString(); /* MIME_TYPE */
m_properties+= TQString(); /* ICON_NAME */
m_properties+= "false"; /* ENCRYPTED */
m_properties+= TQString(); /* CLEAR_DEVICE_UDI */
loadUserLabel();
}
Medium::Medium(const Medium *medium)
{
m_properties += ( medium->isAutodetected() ? "true" : "false" );
m_properties += medium->id();
m_properties += medium->name();
m_properties += medium->label();
m_properties += medium->userLabel();
m_properties += ( medium->isMountable() ? "true" : "false" );
m_properties += medium->deviceNode();
m_properties += medium->mountPoint();
m_properties += medium->fsType();
m_properties += ( medium->isMounted() ? "true" : "false" );
m_properties += medium->baseURL();
m_properties += medium->mimeType();
m_properties += medium->iconName();
loadUserLabel();
}
Medium::Medium()
{
m_properties+= TQString(); /* AUTODETECTED */
m_properties+= TQString(); /* ID */
m_properties+= TQString(); /* NAME */
m_properties+= TQString(); /* LABEL */
m_properties+= TQString(); /* USER_LABEL */
m_properties+= TQString(); /* MOUNTABLE */
m_properties+= TQString(); /* DEVICE_NODE */
m_properties+= TQString(); /* MOUNT_POINT */
m_properties+= TQString(); /* FS_TYPE */
m_properties+= TQString(); /* MOUNTED */
m_properties+= TQString(); /* BASE_URL */
m_properties+= TQString(); /* MIME_TYPE */
m_properties+= TQString(); /* ICON_NAME */
m_properties+= TQString(); /* ENCRYPTED */
m_properties+= TQString(); /* CLEAR_DEVICE_UDI */
}
const Medium Medium::create(const TQStringList &properties)
{
Medium m;
if ( properties.size() >= PROPERTIES_COUNT )
{
m.m_properties[AUTODETECTED] = properties[AUTODETECTED];
m.m_properties[ID] = properties[ID];
m.m_properties[NAME] = properties[NAME];
m.m_properties[LABEL] = properties[LABEL];
m.m_properties[USER_LABEL] = properties[USER_LABEL];
m.m_properties[MOUNTABLE] = properties[MOUNTABLE];
m.m_properties[DEVICE_NODE] = properties[DEVICE_NODE];
m.m_properties[MOUNT_POINT] = properties[MOUNT_POINT];
m.m_properties[FS_TYPE] = properties[FS_TYPE];
m.m_properties[MOUNTED] = properties[MOUNTED];
m.m_properties[BASE_URL] = properties[BASE_URL];
m.m_properties[MIME_TYPE] = properties[MIME_TYPE];
m.m_properties[ICON_NAME] = properties[ICON_NAME];
m.m_properties[ENCRYPTED] = properties[ENCRYPTED];
m.m_properties[CLEAR_DEVICE_UDI] = properties[CLEAR_DEVICE_UDI];
}
return m;
}
Medium::List Medium::createList(const TQStringList &properties)
{
List l;
if ( properties.size() % (PROPERTIES_COUNT+1) == 0 )
{
int media_count = properties.size()/(PROPERTIES_COUNT+1);
TQStringList props = properties;
for(int i=0; i<media_count; i++)
{
const Medium m = create(props);
l.append(m);
TQStringList::iterator first = props.begin();
TQStringList::iterator last = props.find(SEPARATOR);
++last;
props.erase(first, last);
}
}
return l;
}
void Medium::setAutodetected(bool autodetected)
{
m_properties[AUTODETECTED] = autodetected ? "true" : "false";
}
void Medium::setName(const TQString &name)
{
m_properties[NAME] = name;
}
void Medium::setMountPoint(const TQString &mountPoint)
{
m_properties[MOUNT_POINT] = mountPoint;
}
void Medium::setId(const TQString &id)
{
m_properties[ID] = id;
}
void Medium::setLabel(const TQString &label)
{
m_properties[LABEL] = label;
}
void Medium::setFsType(const TQString &type)
{
m_properties[FS_TYPE] = type;
}
void Medium::setUserLabel(const TQString &label)
{
KConfig cfg("mediamanagerrc");
cfg.setGroup("UserLabels");
TQString entry_name = m_properties[ID];
if ( label.isNull() )
{
cfg.deleteEntry(entry_name);
}
else
{
cfg.writeEntry(entry_name, label);
}
m_properties[USER_LABEL] = label;
}
void Medium::loadUserLabel()
{
KConfig cfg("mediamanagerrc");
cfg.setGroup("UserLabels");
TQString entry_name = m_properties[ID];
if ( cfg.hasKey(entry_name) )
{
m_properties[USER_LABEL] = cfg.readEntry(entry_name);
}
else
{
m_properties[USER_LABEL] = TQString();
}
}
bool Medium::mountableState(bool mounted)
{
if ( m_properties[DEVICE_NODE].isEmpty()
|| m_properties[MOUNT_POINT].isEmpty() )
{
return false;
}
m_properties[MOUNTABLE] = "true";
m_properties[MOUNTED] = ( mounted ? "true" : "false" );
return true;
}
void Medium::mountableState(const TQString &deviceNode,
const TQString &mountPoint,
const TQString &fsType, bool mounted)
{
m_properties[MOUNTABLE] = "true";
m_properties[DEVICE_NODE] = deviceNode;
m_properties[MOUNT_POINT] = mountPoint;
m_properties[FS_TYPE] = fsType;
m_properties[MOUNTED] = ( mounted ? "true" : "false" );
}
void Medium::unmountableState(const TQString &baseURL)
{
m_properties[MOUNTABLE] = "false";
m_properties[BASE_URL] = baseURL;
}
void Medium::setMimeType(const TQString &mimeType)
{
m_properties[MIME_TYPE] = mimeType;
}
void Medium::setIconName(const TQString &iconName)
{
m_properties[ICON_NAME] = iconName;
}
bool Medium::needMounting() const
{
return isMountable() && !isMounted();
}
KURL Medium::prettyBaseURL() const
{
if ( isMountable() )
{
return KURL( mountPoint() );
}
else
{
return KURL( baseURL() );
}
}
TQString Medium::prettyLabel() const
{
if ( !userLabel().isEmpty() )
{
return userLabel();
}
else
{
return label();
}
}