Fix config file location on Mac and automatically migrate.
This commit is contained in:
parent
04bbf73cff
commit
3a19bb9d46
|
@ -17,6 +17,7 @@
|
|||
|
||||
#include "albumcoverloader.h"
|
||||
#include "network.h"
|
||||
#include "utilities.h"
|
||||
|
||||
#include <QPainter>
|
||||
#include <QDir>
|
||||
|
@ -43,8 +44,7 @@ AlbumCoverLoader::AlbumCoverLoader(QObject* parent)
|
|||
}
|
||||
|
||||
QString AlbumCoverLoader::ImageCacheDir() {
|
||||
return QString("%1/.config/%2/albumcovers/")
|
||||
.arg(QDir::homePath(), QCoreApplication::organizationName());
|
||||
return Utilities::GetConfigPath(Utilities::ALBUM_COVERS);
|
||||
}
|
||||
|
||||
void AlbumCoverLoader::Clear() {
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "config.h"
|
||||
#include "database.h"
|
||||
#include "scopedtransaction.h"
|
||||
#include "utilities.h"
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QDir>
|
||||
|
@ -333,7 +334,7 @@ Database::Database(QObject* parent, const QString& database_name)
|
|||
}
|
||||
|
||||
directory_ = QDir::toNativeSeparators(
|
||||
QDir::homePath() + "/.config/" + QCoreApplication::organizationName());
|
||||
Utilities::GetConfigPath(Utilities::ROOT));
|
||||
|
||||
attached_databases_["jamendo"] = AttachedDatabase(
|
||||
directory_ + "/jamendo.db", ":/schema/jamendo.sql");
|
||||
|
|
|
@ -24,6 +24,8 @@ QString GetBundlePath();
|
|||
QString GetResourcesPath();
|
||||
QString GetApplicationSupportPath();
|
||||
|
||||
bool MigrateLegacyConfigFiles();
|
||||
|
||||
} // namespace mac
|
||||
|
||||
#endif
|
||||
|
|
|
@ -22,7 +22,10 @@
|
|||
|
||||
#import <Foundation/NSAutoreleasePool.h>
|
||||
#import <Foundation/NSBundle.h>
|
||||
#import <Foundation/NSError.h>
|
||||
#import <Foundation/NSFileManager.h>
|
||||
#import <Foundation/NSPathUtilities.h>
|
||||
#import <Foundation/NSThread.h>
|
||||
#import <Foundation/NSTimer.h>
|
||||
#import <Foundation/NSURL.h>
|
||||
#import <AppKit/NSNibDeclarations.h>
|
||||
|
@ -34,9 +37,12 @@
|
|||
#include "globalshortcuts.h"
|
||||
#include "mac_startup.h"
|
||||
#include "macglobalshortcutbackend.h"
|
||||
#include "utilities.h"
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QDir>
|
||||
#include <QEvent>
|
||||
#include <QFile>
|
||||
|
||||
#include <QtDebug>
|
||||
|
||||
|
@ -203,15 +209,45 @@ QString GetResourcesPath() {
|
|||
}
|
||||
|
||||
QString GetApplicationSupportPath() {
|
||||
NSAutoreleasePool* pool = [NSAutoreleasePool alloc];
|
||||
[pool init];
|
||||
NSArray* paths = NSSearchPathForDirectoriesInDomains(
|
||||
NSApplicationSupportDirectory,
|
||||
NSUserDomainMask,
|
||||
YES);
|
||||
QString ret;
|
||||
if ([paths count] > 0) {
|
||||
NSString* user_path = [paths objectAtIndex:0];
|
||||
return QString::fromUtf8([user_path UTF8String]);
|
||||
ret = QString::fromUtf8([user_path UTF8String]);
|
||||
} else {
|
||||
ret = "~/Library/Application Support";
|
||||
}
|
||||
return "~/Library/Application Support";
|
||||
[pool drain];
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool MigrateLegacyConfigFiles() {
|
||||
QString old_config_dir = QString("%1/.config/%2").arg(
|
||||
QDir::homePath(), QCoreApplication::organizationName());
|
||||
if (!QFile::exists(old_config_dir)) {
|
||||
return false;
|
||||
}
|
||||
QString new_config_dir = Utilities::GetConfigPath(Utilities::ROOT);
|
||||
|
||||
qDebug() << "Move from:" << old_config_dir
|
||||
<< "to:" << new_config_dir;
|
||||
|
||||
NSFileManager* file_manager = [[NSFileManager alloc] init];
|
||||
NSError* error;
|
||||
bool ret = [file_manager moveItemAtPath:
|
||||
[NSString stringWithUTF8String: old_config_dir.toUtf8().constData()]
|
||||
toPath:[NSString stringWithUTF8String: new_config_dir.toUtf8().constData()]
|
||||
error: &error];
|
||||
if (!ret) {
|
||||
qWarning() << [[error localizedDescription] UTF8String];
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace mac
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
#include <QNetworkAccessManager>
|
||||
#include <QNetworkDiskCache>
|
||||
|
||||
#include "utilities.h"
|
||||
|
||||
QMutex ThreadSafeNetworkDiskCache::sMutex;
|
||||
QNetworkDiskCache* ThreadSafeNetworkDiskCache::sCache = NULL;
|
||||
|
||||
|
@ -30,8 +32,7 @@ ThreadSafeNetworkDiskCache::ThreadSafeNetworkDiskCache(QObject* parent) {
|
|||
QMutexLocker l(&sMutex);
|
||||
if (!sCache) {
|
||||
sCache = new QNetworkDiskCache;
|
||||
sCache->setCacheDirectory(QString("%1/.config/%2/networkcache/")
|
||||
.arg(QDir::homePath(), QCoreApplication::organizationName()));
|
||||
sCache->setCacheDirectory(Utilities::GetConfigPath(Utilities::NETWORK_CACHE));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
#include "utilities.h"
|
||||
|
||||
#include <QtGlobal>
|
||||
#include <QCoreApplication>
|
||||
#include <QDateTime>
|
||||
#include <QDir>
|
||||
|
@ -30,6 +31,10 @@
|
|||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
#ifdef Q_OS_DARWIN
|
||||
# include "core/mac_startup.h"
|
||||
#endif
|
||||
|
||||
#include <boost/scoped_array.hpp>
|
||||
|
||||
namespace Utilities {
|
||||
|
@ -194,7 +199,34 @@ QString ColorToRgba(const QColor& c) {
|
|||
.arg(c.red()).arg(c.green()).arg(c.blue()).arg(c.alpha());
|
||||
}
|
||||
|
||||
} // namespace
|
||||
QString GetConfigPath(ConfigPath config) {
|
||||
switch (config) {
|
||||
case ROOT: {
|
||||
#ifdef Q_OS_DARWIN
|
||||
return mac::GetApplicationSupportPath() + "/" + QCoreApplication::organizationName();
|
||||
#else
|
||||
return QString("%1/.config/%2").arg(QDir::homePath(), QCoreApplication::organizationName());
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
||||
case ALBUM_COVERS:
|
||||
return GetConfigPath(ROOT) + "/albumcovers";
|
||||
|
||||
case NETWORK_CACHE:
|
||||
return GetConfigPath(ROOT) + "/networkcache";
|
||||
|
||||
case GSTREAMER_REGISTRY:
|
||||
return GetConfigPath(ROOT) +
|
||||
QString("/gst-registry-%1-bin").arg(QCoreApplication::applicationVersion());
|
||||
|
||||
default:
|
||||
qFatal("%s", Q_FUNC_INFO);
|
||||
return QString::null;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Utilities
|
||||
|
||||
|
||||
ScopedWCharArray::ScopedWCharArray(const QString& str)
|
||||
|
|
|
@ -40,6 +40,15 @@ namespace Utilities {
|
|||
QString MakeTempDir();
|
||||
void RemoveRecursive(const QString& path);
|
||||
bool Copy(QIODevice* source, QIODevice* destination);
|
||||
|
||||
|
||||
enum ConfigPath {
|
||||
ROOT,
|
||||
ALBUM_COVERS,
|
||||
NETWORK_CACHE,
|
||||
GSTREAMER_REGISTRY,
|
||||
};
|
||||
QString GetConfigPath(ConfigPath config);
|
||||
}
|
||||
|
||||
class ScopedWCharArray {
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include "gstengine.h"
|
||||
#include "gstenginepipeline.h"
|
||||
#include "core/boundfuturewatcher.h"
|
||||
#include "core/utilities.h"
|
||||
|
||||
#ifdef HAVE_IMOBILEDEVICE
|
||||
# include "gstafcsrc/gstafcsrc.h"
|
||||
|
@ -120,9 +121,7 @@ bool GstEngine::Init() {
|
|||
#endif
|
||||
|
||||
#if defined(Q_OS_WIN32) || defined(Q_OS_DARWIN)
|
||||
registry_filename = QString("%1/.config/%2/gst-registry-%3.bin").arg(
|
||||
QDir::homePath(), QCoreApplication::organizationName(),
|
||||
QCoreApplication::applicationVersion());
|
||||
registry_filename = Utilities::GetConfigPath(Utilities::GSTREAMER_REGISTRY);
|
||||
#endif
|
||||
|
||||
if (!scanner_path.isEmpty())
|
||||
|
|
26
src/main.cpp
26
src/main.cpp
|
@ -23,12 +23,14 @@
|
|||
|
||||
#include "config.h"
|
||||
#include "core/commandlineoptions.h"
|
||||
#include "core/database.h"
|
||||
#include "core/encoding.h"
|
||||
#include "core/mac_startup.h"
|
||||
#include "core/network.h"
|
||||
#include "core/player.h"
|
||||
#include "core/potranslator.h"
|
||||
#include "core/song.h"
|
||||
#include "core/utilities.h"
|
||||
#include "engines/enginebase.h"
|
||||
#include "library/directory.h"
|
||||
#include "radio/lastfmservice.h"
|
||||
|
@ -40,10 +42,12 @@
|
|||
#include "qtsingleapplication.h"
|
||||
#include "qtsinglecoreapplication.h"
|
||||
|
||||
#include <QtDebug>
|
||||
#include <QLibraryInfo>
|
||||
#include <QTranslator>
|
||||
#include <QDir>
|
||||
#include <QLibraryInfo>
|
||||
#include <QSqlDatabase>
|
||||
#include <QSqlQuery>
|
||||
#include <QTranslator>
|
||||
#include <QtDebug>
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <glib/gutils.h>
|
||||
|
@ -103,6 +107,22 @@ int main(int argc, char *argv[]) {
|
|||
QCoreApplication::setOrganizationName("Clementine");
|
||||
QCoreApplication::setOrganizationDomain("davidsansome.com");
|
||||
|
||||
#ifdef Q_OS_DARWIN
|
||||
// Must happen after QCoreApplication::setOrganizationName().
|
||||
if (mac::MigrateLegacyConfigFiles()) {
|
||||
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
|
||||
db.setDatabaseName(Utilities::GetConfigPath(
|
||||
Utilities::ROOT) + "/" + Database::kDatabaseFilename);
|
||||
db.open();
|
||||
QSqlQuery query(
|
||||
"UPDATE songs SET art_manual = replace("
|
||||
"art_manual, '.config', 'Library/Application Support') "
|
||||
"WHERE art_manual LIKE '%.config%';", db);
|
||||
query.exec();
|
||||
db.close();
|
||||
}
|
||||
#endif
|
||||
|
||||
// This makes us show up nicely in gnome-volume-control
|
||||
g_type_init();
|
||||
g_set_application_name(QCoreApplication::applicationName().toLocal8Bit());
|
||||
|
|
Loading…
Reference in New Issue