|
|
|
@ -293,12 +293,13 @@ void Profile::initCore(const QByteArray& toxsave, Settings& s, bool isNewProfile
@@ -293,12 +293,13 @@ void Profile::initCore(const QByteArray& toxsave, Settings& s, bool isNewProfile
|
|
|
|
|
avatarBroadcaster = std::unique_ptr<AvatarBroadcaster>(new AvatarBroadcaster(*core)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Profile::Profile(const QString& name, std::unique_ptr<ToxEncrypt> passkey, Paths& paths_) |
|
|
|
|
Profile::Profile(const QString& name, std::unique_ptr<ToxEncrypt> passkey, Paths& paths_, Settings& settings_) |
|
|
|
|
: name{name} |
|
|
|
|
, passkey{std::move(passkey)} |
|
|
|
|
, isRemoved{false} |
|
|
|
|
, encrypted{this->passkey != nullptr} |
|
|
|
|
, paths{paths_} |
|
|
|
|
, settings{settings_} |
|
|
|
|
{} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -324,14 +325,15 @@ Profile* Profile::loadProfile(const QString& name, const QString& password, Sett
@@ -324,14 +325,15 @@ Profile* Profile::loadProfile(const QString& name, const QString& password, Sett
|
|
|
|
|
|
|
|
|
|
LoadToxDataError error; |
|
|
|
|
QByteArray toxsave = QByteArray(); |
|
|
|
|
QString path = settings.getPaths().getSettingsDirPath() + name + ".tox"; |
|
|
|
|
Paths& paths = settings.getPaths(); |
|
|
|
|
QString path = paths.getSettingsDirPath() + name + ".tox"; |
|
|
|
|
std::unique_ptr<ToxEncrypt> tmpKey = loadToxData(password, path, toxsave, error); |
|
|
|
|
if (logLoadToxDataError(error, path)) { |
|
|
|
|
ProfileLocker::unlock(); |
|
|
|
|
return nullptr; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Profile* p = new Profile(name, std::move(tmpKey), settings.getPaths()); |
|
|
|
|
Profile* p = new Profile(name, std::move(tmpKey), paths, settings); |
|
|
|
|
|
|
|
|
|
// Core settings are saved per profile, need to load them before starting Core
|
|
|
|
|
settings.updateProfileData(p, parser); |
|
|
|
@ -354,7 +356,8 @@ Profile* Profile::createProfile(const QString& name, const QString& password, Se
@@ -354,7 +356,8 @@ Profile* Profile::createProfile(const QString& name, const QString& password, Se
|
|
|
|
|
const QCommandLineParser* parser) |
|
|
|
|
{ |
|
|
|
|
CreateToxDataError error; |
|
|
|
|
QString path = Settings::getInstance().getPaths().getSettingsDirPath() + name + ".tox"; |
|
|
|
|
Paths& paths = settings.getPaths(); |
|
|
|
|
QString path = paths.getSettingsDirPath() + name + ".tox"; |
|
|
|
|
std::unique_ptr<ToxEncrypt> tmpKey = createToxData(name, password, path, error); |
|
|
|
|
|
|
|
|
|
if (logCreateToxDataError(error, name)) { |
|
|
|
@ -362,7 +365,7 @@ Profile* Profile::createProfile(const QString& name, const QString& password, Se
@@ -362,7 +365,7 @@ Profile* Profile::createProfile(const QString& name, const QString& password, Se
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
settings.createPersonal(name); |
|
|
|
|
Profile* p = new Profile(name, std::move(tmpKey), settings.getPaths()); |
|
|
|
|
Profile* p = new Profile(name, std::move(tmpKey), paths, settings); |
|
|
|
|
settings.updateProfileData(p, parser); |
|
|
|
|
|
|
|
|
|
p->initCore(QByteArray(), settings, /*isNewProfile*/ true); |
|
|
|
@ -377,8 +380,8 @@ Profile::~Profile()
@@ -377,8 +380,8 @@ Profile::~Profile()
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
onSaveToxSave(); |
|
|
|
|
Settings::getInstance().savePersonal(this); |
|
|
|
|
Settings::getInstance().sync(); |
|
|
|
|
settings.savePersonal(this); |
|
|
|
|
settings.sync(); |
|
|
|
|
ProfileLocker::assertLock(); |
|
|
|
|
assert(ProfileLocker::getCurLockName() == name); |
|
|
|
|
ProfileLocker::unlock(); |
|
|
|
@ -488,7 +491,7 @@ bool Profile::saveToxSave(QByteArray data)
@@ -488,7 +491,7 @@ bool Profile::saveToxSave(QByteArray data)
|
|
|
|
|
ProfileLocker::assertLock(); |
|
|
|
|
assert(ProfileLocker::getCurLockName() == name); |
|
|
|
|
|
|
|
|
|
QString path = Settings::getInstance().getPaths().getSettingsDirPath() + name + ".tox"; |
|
|
|
|
QString path = paths.getSettingsDirPath() + name + ".tox"; |
|
|
|
|
qDebug() << "Saving tox save to " << path; |
|
|
|
|
QSaveFile saveFile(path); |
|
|
|
|
if (!saveFile.open(QIODevice::WriteOnly)) { |
|
|
|
@ -530,7 +533,7 @@ QString Profile::avatarPath(const ToxPk& owner, bool forceUnencrypted)
@@ -530,7 +533,7 @@ QString Profile::avatarPath(const ToxPk& owner, bool forceUnencrypted)
|
|
|
|
|
{ |
|
|
|
|
const QString ownerStr = owner.toString(); |
|
|
|
|
if (!encrypted || forceUnencrypted) { |
|
|
|
|
return Settings::getInstance().getPaths().getSettingsDirPath() + "avatars/" + ownerStr + ".png"; |
|
|
|
|
return paths.getSettingsDirPath() + "avatars/" + ownerStr + ".png"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
QByteArray idData = ownerStr.toUtf8(); |
|
|
|
@ -544,7 +547,7 @@ QString Profile::avatarPath(const ToxPk& owner, bool forceUnencrypted)
@@ -544,7 +547,7 @@ QString Profile::avatarPath(const ToxPk& owner, bool forceUnencrypted)
|
|
|
|
|
QByteArray hash(hashSize, 0); |
|
|
|
|
crypto_generichash(reinterpret_cast<uint8_t*>(hash.data()), hashSize, reinterpret_cast<uint8_t*>(idData.data()), idData.size(), |
|
|
|
|
reinterpret_cast<uint8_t*>(pubkeyData.data()), pubkeyData.size()); |
|
|
|
|
return Settings::getInstance().getPaths().getSettingsDirPath() + "avatars/" + hash.toHex().toUpper() + ".png"; |
|
|
|
|
return paths.getSettingsDirPath() + "avatars/" + hash.toHex().toUpper() + ".png"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -564,7 +567,7 @@ QPixmap Profile::loadAvatar()
@@ -564,7 +567,7 @@ QPixmap Profile::loadAvatar()
|
|
|
|
|
QPixmap Profile::loadAvatar(const ToxPk& owner) |
|
|
|
|
{ |
|
|
|
|
QPixmap pic; |
|
|
|
|
if (Settings::getInstance().getShowIdenticons()) { |
|
|
|
|
if (settings.getShowIdenticons()) { |
|
|
|
|
|
|
|
|
|
const QByteArray avatarData = loadAvatarData(owner); |
|
|
|
|
if (avatarData.isEmpty()) { |
|
|
|
@ -652,7 +655,7 @@ void Profile::setAvatar(QByteArray pic)
@@ -652,7 +655,7 @@ void Profile::setAvatar(QByteArray pic)
|
|
|
|
|
pixmap.loadFromData(pic); |
|
|
|
|
avatarData = pic; |
|
|
|
|
} else { |
|
|
|
|
if (Settings::getInstance().getShowIdenticons()) { |
|
|
|
|
if (settings.getShowIdenticons()) { |
|
|
|
|
const QImage identicon = Identicon(selfPk.getByteArray()).toImage(32); |
|
|
|
|
pixmap = QPixmap::fromImage(identicon); |
|
|
|
|
|
|
|
|
@ -682,7 +685,7 @@ void Profile::setFriendAvatar(const ToxPk& owner, QByteArray pic)
@@ -682,7 +685,7 @@ void Profile::setFriendAvatar(const ToxPk& owner, QByteArray pic)
|
|
|
|
|
pixmap.loadFromData(pic); |
|
|
|
|
avatarData = pic; |
|
|
|
|
emit friendAvatarSet(owner, pixmap); |
|
|
|
|
} else if (Settings::getInstance().getShowIdenticons()) { |
|
|
|
|
} else if (settings.getShowIdenticons()) { |
|
|
|
|
const QImage identicon = Identicon(owner.getByteArray()).toImage(32); |
|
|
|
|
pixmap = QPixmap::fromImage(identicon); |
|
|
|
|
emit friendAvatarSet(owner, pixmap); |
|
|
|
@ -723,7 +726,7 @@ void Profile::saveAvatar(const ToxPk& owner, const QByteArray& avatar)
@@ -723,7 +726,7 @@ void Profile::saveAvatar(const ToxPk& owner, const QByteArray& avatar)
|
|
|
|
|
const QByteArray& pic = needEncrypt ? passkey->encrypt(avatar) : avatar; |
|
|
|
|
|
|
|
|
|
QString path = avatarPath(owner); |
|
|
|
|
QDir(Settings::getInstance().getPaths().getSettingsDirPath()).mkdir("avatars"); |
|
|
|
|
QDir(paths.getSettingsDirPath()).mkdir("avatars"); |
|
|
|
|
if (pic.isEmpty()) { |
|
|
|
|
QFile::remove(path); |
|
|
|
|
} else { |
|
|
|
@ -773,7 +776,7 @@ void Profile::removeFriendAvatar(const ToxPk& owner)
@@ -773,7 +776,7 @@ void Profile::removeFriendAvatar(const ToxPk& owner)
|
|
|
|
|
*/ |
|
|
|
|
bool Profile::isHistoryEnabled() |
|
|
|
|
{ |
|
|
|
|
return Settings::getInstance().getEnableLogging() && history; |
|
|
|
|
return settings.getEnableLogging() && history; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -857,7 +860,7 @@ QStringList Profile::remove()
@@ -857,7 +860,7 @@ QStringList Profile::remove()
|
|
|
|
|
i--; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
QString path = Settings::getInstance().getPaths().getSettingsDirPath() + name; |
|
|
|
|
QString path = paths.getSettingsDirPath() + name; |
|
|
|
|
ProfileLocker::unlock(); |
|
|
|
|
|
|
|
|
|
QFile profileMain{path + ".tox"}; |
|
|
|
@ -893,8 +896,8 @@ QStringList Profile::remove()
@@ -893,8 +896,8 @@ QStringList Profile::remove()
|
|
|
|
|
*/ |
|
|
|
|
bool Profile::rename(QString newName) |
|
|
|
|
{ |
|
|
|
|
QString path = Settings::getInstance().getPaths().getSettingsDirPath() + name, |
|
|
|
|
newPath = Settings::getInstance().getPaths().getSettingsDirPath() + newName; |
|
|
|
|
QString path = paths.getSettingsDirPath() + name, |
|
|
|
|
newPath = paths.getSettingsDirPath() + newName; |
|
|
|
|
|
|
|
|
|
if (!ProfileLocker::lock(newName)) { |
|
|
|
|
return false; |
|
|
|
@ -906,11 +909,11 @@ bool Profile::rename(QString newName)
@@ -906,11 +909,11 @@ bool Profile::rename(QString newName)
|
|
|
|
|
database->rename(newName); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool resetAutorun = Settings::getInstance().getAutorun(); |
|
|
|
|
Settings::getInstance().setAutorun(false); |
|
|
|
|
Settings::getInstance().setCurrentProfile(newName); |
|
|
|
|
bool resetAutorun = settings.getAutorun(); |
|
|
|
|
settings.setAutorun(false); |
|
|
|
|
settings.setCurrentProfile(newName); |
|
|
|
|
if (resetAutorun) { |
|
|
|
|
Settings::getInstance().setAutorun(true); // fixes -p flag in autostart command line
|
|
|
|
|
settings.setAutorun(true); // fixes -p flag in autostart command line
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
name = newName; |
|
|
|
|