File indexing completed on 2023-05-30 11:30:53

0001 /**
0002  * Copyright (C) 2004 Michael Pyne <mpyne@kde.org>
0003  *
0004  * This program is free software; you can redistribute it and/or modify it under
0005  * the terms of the GNU General Public License as published by the Free Software
0006  * Foundation; either version 2 of the License, or (at your option) any later
0007  * version.
0008  *
0009  * This program is distributed in the hope that it will be useful, but WITHOUT ANY
0010  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
0011  * PARTICULAR PURPOSE. See the GNU General Public License for more details.
0012  *
0013  * You should have received a copy of the GNU General Public License along with
0014  * this program.  If not, see <http://www.gnu.org/licenses/>.
0015  */
0016 
0017 #include "tagrenameroptions.h"
0018 
0019 #include <KLocalizedString>
0020 #include <kconfig.h>
0021 #include <kconfigbase.h>
0022 #include <kconfiggroup.h>
0023 #include <KSharedConfig>
0024 #include <KLazyLocalizedString>
0025 
0026 #include "juk_debug.h"
0027 
0028 TagRenamerOptions::TagRenamerOptions() :
0029     m_emptyAction(IgnoreEmptyTag),
0030     m_trackWidth(0),
0031     m_disabled(true),
0032     m_category(TagUnknown)
0033 {
0034 }
0035 
0036 TagRenamerOptions::TagRenamerOptions(const TagRenamerOptions &other) :
0037     m_prefix(other.m_prefix),
0038     m_suffix(other.m_suffix),
0039     m_emptyAction(other.m_emptyAction),
0040     m_emptyText(other.m_emptyText),
0041     m_trackWidth(other.m_trackWidth),
0042     m_disabled(other.m_disabled),
0043     m_category(other.m_category)
0044 {
0045 }
0046 
0047 TagRenamerOptions::TagRenamerOptions(const CategoryID &category)
0048     : m_category(category.category)
0049 {
0050     // Set some defaults
0051 
0052     bool disabled;
0053     unsigned categoryNum = category.categoryNumber;
0054 
0055     switch(category.category) {
0056     case Title:
0057     case Artist:
0058     case Genre:
0059     case Year:
0060     case Album:
0061     case Track:
0062         disabled = false;
0063         break;
0064     default:
0065         disabled = true;
0066     }
0067 
0068     // Make sure we don't use translated strings for the config file keys.
0069 
0070     QString typeKey = tagTypeText(category.category, false);
0071     KConfigGroup config(KSharedConfig::openConfig(), "FileRenamer");
0072 
0073     if(categoryNum > 0)
0074         typeKey.append(QString::number(categoryNum));
0075 
0076     setSuffix(config.readEntry(QString("%1Suffix").arg(typeKey), QString()));
0077     setPrefix(config.readEntry(QString("%1Prefix").arg(typeKey), QString()));
0078 
0079     // Default the emptyAction to ignoring the empty tag.
0080 
0081     const QString emptyAction = config.readEntry(QString("%1EmptyAction").arg(typeKey), QString()).toLower();
0082     setEmptyAction(IgnoreEmptyTag);
0083 
0084     if(emptyAction == "forceemptyinclude")
0085         setEmptyAction(ForceEmptyInclude);
0086     else if(emptyAction == "usereplacementvalue")
0087         setEmptyAction(UseReplacementValue);
0088 
0089     setEmptyText(config.readEntry(QString("%1EmptyText").arg(typeKey), QString()));
0090     setTrackWidth(config.readEntry(QString("%1TrackWidth").arg(typeKey), 0));
0091     setDisabled(config.readEntry(QString("%1Disabled").arg(typeKey), disabled));
0092 }
0093 
0094 QString TagRenamerOptions::tagTypeText(TagType type, bool translate)
0095 {
0096     KLazyLocalizedString msg;
0097 
0098     switch(type) {
0099         case Title:
0100             msg = kli18nc("song title", "Title");
0101         break;
0102 
0103         case Artist:
0104             msg = kli18n("Artist");
0105         break;
0106 
0107         case Album:
0108             msg = kli18n("Album");
0109         break;
0110 
0111         case Track:
0112             msg = kli18nc("cd track number", "Track");
0113         break;
0114 
0115         case Genre:
0116             msg = kli18n("Genre");
0117         break;
0118 
0119         case Year:
0120             msg = kli18n("Year");
0121         break;
0122 
0123         default:
0124             qCWarning(JUK_LOG) << "I don't know what category we're looking up, this is a problem.";
0125             qCWarning(JUK_LOG) << "The category ID is " << (unsigned) type;
0126             msg = kli18nc("unknown renamer category", "Unknown");
0127     }
0128 
0129     if(translate)
0130         return msg.toString();
0131     else
0132         return msg.untranslatedText();
0133 }
0134 
0135 void TagRenamerOptions::saveConfig(unsigned categoryNum) const
0136 {
0137     // Make sure we don't use translated strings for the config file keys.
0138 
0139     QString typeKey = tagTypeText(false);
0140     if(categoryNum > 0)
0141         typeKey.append(QString::number(categoryNum));
0142 
0143     KConfigGroup config(KSharedConfig::openConfig(), "FileRenamer");
0144 
0145     config.writeEntry(QString("%1Suffix").arg(typeKey), suffix());
0146     config.writeEntry(QString("%1Prefix").arg(typeKey), prefix());
0147 
0148     QString emptyStr;
0149 
0150     switch(emptyAction()) {
0151     case ForceEmptyInclude:
0152         emptyStr = "ForceEmptyInclude";
0153     break;
0154 
0155     case IgnoreEmptyTag:
0156         emptyStr = "IgnoreEmptyTag";
0157     break;
0158 
0159     case UseReplacementValue:
0160         emptyStr = "UseReplacementValue";
0161     break;
0162     }
0163 
0164     config.writeEntry(QString("%1EmptyAction").arg(typeKey), emptyStr);
0165     config.writeEntry(QString("%1EmptyText").arg(typeKey), emptyText());
0166     config.writeEntry(QString("%1Disabled").arg(typeKey), disabled());
0167 
0168     if(category() == Track)
0169         config.writeEntry(QString("%1TrackWidth").arg(typeKey), trackWidth());
0170 
0171     config.sync();
0172 }
0173 
0174 TagType TagRenamerOptions::tagFromCategoryText(const QString &text)
0175 {
0176     for(unsigned i = StartTag; i < NumTypes; ++i)
0177         if(tagTypeText(static_cast<TagType>(i), false) == text)
0178             return static_cast<TagType>(i);
0179 
0180     return TagUnknown;
0181 }
0182 
0183 // vim: set et sw=4 tw=0 sta: