summaryrefslogtreecommitdiff
path: root/src/frontend/profile/cprofilemgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/profile/cprofilemgr.cpp')
-rw-r--r--src/frontend/profile/cprofilemgr.cpp130
1 files changed, 130 insertions, 0 deletions
diff --git a/src/frontend/profile/cprofilemgr.cpp b/src/frontend/profile/cprofilemgr.cpp
new file mode 100644
index 0000000..783e371
--- /dev/null
+++ b/src/frontend/profile/cprofilemgr.cpp
@@ -0,0 +1,130 @@
+/*********
+*
+* This file is part of BibleTime's source code, http://www.bibletime.info/.
+*
+* Copyright 1999-2008 by the BibleTime developers.
+* The BibleTime source code is licensed under the GNU General Public License version 2.0.
+*
+**********/
+
+
+
+#include "cprofilemgr.h"
+#include "util/directoryutil.h"
+
+//Qt includes
+#include <QDir>
+#include <QFile>
+#include <QList>
+
+
+namespace Profile {
+
+CProfileMgr::CProfileMgr() : m_startupProfile(0) {
+ //m_profiles.setAutoDelete(true);
+
+ m_profilePath = util::filesystem::DirectoryUtil::getUserSessionsDir().absolutePath() + "/";
+
+ QDir d( m_profilePath );
+ QStringList files = d.entryList(QStringList("*.xml"));
+ for ( QStringList::Iterator it = files.begin(); it != files.end(); ++it ) {
+ if ((*it) != "_startup_.xml") {
+ m_profiles.append(new CProfile(m_profilePath + *it));
+ }
+ else {
+ m_startupProfile = new CProfile(m_profilePath + *it);
+ }
+ }
+}
+
+CProfileMgr::~CProfileMgr() {
+ qDeleteAll(m_profiles);
+ m_profiles.clear();
+ delete m_startupProfile;
+}
+
+/** Returns a list of available profiles. */
+const QList<CProfile*>& CProfileMgr::profiles() {
+ return m_profiles;
+}
+
+/** Creates a new profile with the name "name" (first parameter). @return The profile object */
+CProfile* CProfileMgr::create( const QString name ) {
+ CProfile* p = new CProfile(QString::null, name);
+ m_profiles.append(p);
+
+ return p;
+}
+
+/** Removes the profile from the list and from the directory containg the profile files. */
+bool CProfileMgr::remove( CProfile* p )
+{
+ bool ret = false;
+ QFile f( p->filename() );
+ if (f.exists())
+ f.remove();
+
+ int i = m_profiles.indexOf(p);
+ if (i != -1)
+ delete m_profiles.takeAt(i);
+
+ ret = true;
+ return ret;
+}
+
+bool CProfileMgr::remove( const QString& profile)
+{
+ bool ret = false;
+ QListIterator<CProfile*> it(m_profiles);
+ while (it.hasNext()) {
+ CProfile* p = it.next();
+ if (p->name() == profile) {
+ remove(p);
+ ret = true;
+ }
+ }
+ return ret;
+}
+
+/** Returns the profile with the desired name. If there's no such profile 0 is returned. */
+CProfile* CProfileMgr::profile(const QString& name) {
+ QListIterator<CProfile*> it(m_profiles);
+ while (it.hasNext()) {
+ CProfile* p = it.next();
+ if (p && p->name() == name) {
+ return p;
+ }
+ }
+
+ return 0;
+}
+
+/** Returns the startup profile if it exists, otherwise return 0. */
+CProfile* CProfileMgr::startupProfile() {
+ if (!m_startupProfile) {
+ m_startupProfile = new CProfile(QString::null, "_startup_");
+ }
+
+ return m_startupProfile;
+}
+
+/** Refreshes the profiles available on disk. Use this function to update the list of profiles after another instance of CProfileMgr created a new profile. */
+void CProfileMgr::refresh() {
+ qDeleteAll(m_profiles);
+ m_profiles.clear(); //delete all profiles
+ QDir d( m_profilePath );
+ QStringList files = d.entryList(QStringList("*.xml"));
+ for ( QStringList::Iterator it = files.begin(); it != files.end(); ++it ) {
+ CProfile p(m_profilePath + *it);
+ if (p.name() == "_startup_") { //new startup profile
+ if (!m_startupProfile) { //don't put this in the if clause above,it doesn't work!
+ m_startupProfile = new CProfile(m_profilePath + *it);
+ }
+ }
+ else if (!profile(p.name())) { //don't have it already
+ m_profiles.append(new CProfile(m_profilePath + *it));
+ }
+ }
+}
+
+} //end of namespace Profile