mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
Merge branch 'master' into dhtconnect
This commit is contained in:
commit
bf25d84e04
92
core.cpp
92
core.cpp
@ -15,9 +15,9 @@
|
||||
*/
|
||||
|
||||
#include "core.h"
|
||||
#include "cdata.h"
|
||||
#include "cstring.h"
|
||||
#include "settings.h"
|
||||
#include "misc/cdata.h"
|
||||
#include "misc/cstring.h"
|
||||
#include "misc/settings.h"
|
||||
#include "widget/widget.h"
|
||||
|
||||
#include <tox/tox.h>
|
||||
@ -331,7 +331,7 @@ void Core::onUserStatusChanged(Tox*/* tox*/, int friendId, uint8_t userstatus, v
|
||||
}
|
||||
|
||||
if (status == Status::Online || status == Status::Away)
|
||||
tox_request_avatar_data(static_cast<Core*>(core)->tox, friendId);
|
||||
tox_request_avatar_info(static_cast<Core*>(core)->tox, friendId);
|
||||
|
||||
emit static_cast<Core*>(core)->friendStatusChanged(friendId, status);
|
||||
}
|
||||
@ -342,6 +342,33 @@ void Core::onConnectionStatusChanged(Tox*/* tox*/, int friendId, uint8_t status,
|
||||
emit static_cast<Core*>(core)->friendStatusChanged(friendId, friendStatus);
|
||||
if (friendStatus == Status::Offline) {
|
||||
static_cast<Core*>(core)->checkLastOnline(friendId);
|
||||
|
||||
for (ToxFile& f : fileSendQueue)
|
||||
{
|
||||
if (f.friendId == friendId && f.status == ToxFile::TRANSMITTING)
|
||||
{
|
||||
f.status = ToxFile::BROKEN;
|
||||
emit static_cast<Core*>(core)->fileTransferBrokenUnbroken(f, true);
|
||||
}
|
||||
}
|
||||
for (ToxFile& f : fileRecvQueue)
|
||||
{
|
||||
if (f.friendId == friendId && f.status == ToxFile::TRANSMITTING)
|
||||
{
|
||||
f.status = ToxFile::BROKEN;
|
||||
emit static_cast<Core*>(core)->fileTransferBrokenUnbroken(f, true);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (ToxFile& f : fileRecvQueue)
|
||||
{
|
||||
if (f.friendId == friendId && f.status == ToxFile::BROKEN)
|
||||
{
|
||||
qDebug() << QString("Core::onConnectionStatusChanged: %1: resuming broken filetransfer from position: %2").arg(f.file->fileName()).arg(f.bytesSent);
|
||||
tox_file_send_control(static_cast<Core*>(core)->tox, friendId, 1, f.fileNum, TOX_FILECONTROL_RESUME_BROKEN, reinterpret_cast<const uint8_t*>(&f.bytesSent), sizeof(uint64_t));
|
||||
emit static_cast<Core*>(core)->fileTransferBrokenUnbroken(f, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -379,7 +406,7 @@ void Core::onFileSendRequestCallback(Tox*, int32_t friendnumber, uint8_t filenum
|
||||
emit static_cast<Core*>(core)->fileReceiveRequested(fileRecvQueue.last());
|
||||
}
|
||||
void Core::onFileControlCallback(Tox* tox, int32_t friendnumber, uint8_t receive_send, uint8_t filenumber,
|
||||
uint8_t control_type, const uint8_t*, uint16_t, void *core)
|
||||
uint8_t control_type, const uint8_t* data, uint16_t length, void *core)
|
||||
{
|
||||
ToxFile* file{nullptr};
|
||||
if (receive_send == 1)
|
||||
@ -466,12 +493,39 @@ void Core::onFileControlCallback(Tox* tox, int32_t friendnumber, uint8_t receive
|
||||
}
|
||||
else if (receive_send == 0 && control_type == TOX_FILECONTROL_ACCEPT)
|
||||
{
|
||||
if (file->status == ToxFile::BROKEN)
|
||||
{
|
||||
emit static_cast<Core*>(core)->fileTransferBrokenUnbroken(*file, false);
|
||||
file->status = ToxFile::TRANSMITTING;
|
||||
}
|
||||
emit static_cast<Core*>(core)->fileTransferRemotePausedUnpaused(*file, false);
|
||||
}
|
||||
else if ((receive_send == 0 || receive_send == 1) && control_type == TOX_FILECONTROL_PAUSE)
|
||||
{
|
||||
emit static_cast<Core*>(core)->fileTransferRemotePausedUnpaused(*file, true);
|
||||
}
|
||||
else if (receive_send == 1 && control_type == TOX_FILECONTROL_RESUME_BROKEN)
|
||||
{
|
||||
if (length != sizeof(uint64_t))
|
||||
return;
|
||||
|
||||
qDebug() << "Core::onFileControlCallback: TOX_FILECONTROL_RESUME_BROKEN";
|
||||
|
||||
uint64_t resumePos = *reinterpret_cast<const uint64_t*>(data);
|
||||
|
||||
if (resumePos >= file->filesize)
|
||||
{
|
||||
qWarning() << "Core::onFileControlCallback: invalid resume position";
|
||||
tox_file_send_control(tox, file->friendId, 0, file->fileNum, TOX_FILECONTROL_KILL, nullptr, 0); // don't sure about it
|
||||
return;
|
||||
}
|
||||
|
||||
file->status = ToxFile::TRANSMITTING;
|
||||
emit static_cast<Core*>(core)->fileTransferBrokenUnbroken(*file, false);
|
||||
|
||||
file->bytesSent = resumePos;
|
||||
tox_file_send_control(tox, file->friendId, 0, file->fileNum, TOX_FILECONTROL_ACCEPT, nullptr, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << QString("Core: File control callback, receive_send=%1, control_type=%2")
|
||||
@ -504,28 +558,40 @@ void Core::onFileDataCallback(Tox*, int32_t friendnumber, uint8_t filenumber, co
|
||||
}
|
||||
|
||||
void Core::onAvatarInfoCallback(Tox*, int32_t friendnumber, uint8_t format,
|
||||
uint8_t *, void* core)
|
||||
uint8_t* hash, void* _core)
|
||||
{
|
||||
qDebug() << "Core: Got avatar info from "<<friendnumber
|
||||
<<": format "<<format;
|
||||
Core* core = static_cast<Core*>(_core);
|
||||
|
||||
if (format == TOX_AVATAR_FORMAT_NONE)
|
||||
emit static_cast<Core*>(core)->friendAvatarRemoved(friendnumber);
|
||||
{
|
||||
qDebug() << "Core: Got null avatar info from" << friendnumber;
|
||||
emit core->friendAvatarRemoved(friendnumber);
|
||||
}
|
||||
else
|
||||
tox_request_avatar_data(static_cast<Core*>(core)->tox, friendnumber);
|
||||
{
|
||||
QByteArray oldHash = Settings::getInstance().getAvatarHash(core->getFriendAddress(friendnumber));
|
||||
if (QByteArray((char*)hash, TOX_HASH_LENGTH) != oldHash) // comparison failed miserably if I didn't convert hash to QByteArray
|
||||
{
|
||||
qDebug() << "Core: got different avatar hash from" << friendnumber;
|
||||
tox_request_avatar_data(core->tox, friendnumber);
|
||||
}
|
||||
else
|
||||
qDebug() << "Core: Got old avatar info from" << friendnumber;
|
||||
}
|
||||
}
|
||||
|
||||
void Core::onAvatarDataCallback(Tox*, int32_t friendnumber, uint8_t,
|
||||
uint8_t *, uint8_t *data, uint32_t datalen, void *core)
|
||||
uint8_t *hash, uint8_t *data, uint32_t datalen, void *core)
|
||||
{
|
||||
QPixmap pic;
|
||||
pic.loadFromData((uchar*)data, datalen);
|
||||
if (pic.isNull())
|
||||
qDebug() << "Core: Got invalid avatar data from "<<friendnumber;
|
||||
qDebug() << "Core: Got null avatar from "<<friendnumber;
|
||||
else
|
||||
{
|
||||
qDebug() << "Core: Got avatar data from "<<friendnumber<<", size:"<<pic.size();
|
||||
Settings::getInstance().saveAvatar(pic, static_cast<Core*>(core)->getFriendAddress(friendnumber));
|
||||
Settings::getInstance().saveAvatarHash(QByteArray((char*)hash, TOX_HASH_LENGTH), static_cast<Core*>(core)->getFriendAddress(friendnumber));
|
||||
emit static_cast<Core*>(core)->friendAvatarChanged(friendnumber, pic);
|
||||
}
|
||||
}
|
||||
@ -691,7 +757,7 @@ void Core::pauseResumeFileRecv(int friendId, int fileNum)
|
||||
tox_file_send_control(tox, file->friendId, 1, file->fileNum, TOX_FILECONTROL_ACCEPT, nullptr, 0);
|
||||
}
|
||||
else
|
||||
qWarning() << "Core::pauseResumeFileRecv: File is stopped";
|
||||
qWarning() << "Core::pauseResumeFileRecv: File is stopped or broken";
|
||||
}
|
||||
|
||||
void Core::cancelFileSend(int friendId, int fileNum)
|
||||
|
1
core.h
1
core.h
@ -150,6 +150,7 @@ signals:
|
||||
void fileTransferPaused(int FriendId, int FileNum, ToxFile::FileDirection direction);
|
||||
void fileTransferInfo(int FriendId, int FileNum, int64_t Filesize, int64_t BytesSent, ToxFile::FileDirection direction);
|
||||
void fileTransferRemotePausedUnpaused(ToxFile file, bool paused);
|
||||
void fileTransferBrokenUnbroken(ToxFile file, bool broken);
|
||||
|
||||
void fileSendFailed(int FriendId, const QString& fname);
|
||||
|
||||
|
@ -50,7 +50,8 @@ struct ToxFile
|
||||
{
|
||||
STOPPED,
|
||||
PAUSED,
|
||||
TRANSMITTING
|
||||
TRANSMITTING,
|
||||
BROKEN
|
||||
};
|
||||
|
||||
enum FileDirection : bool
|
||||
|
@ -24,11 +24,12 @@
|
||||
#include <QPainter>
|
||||
|
||||
#define CONTENT_WIDTH 250
|
||||
#define MAX_PREVIEW_SIZE 25*1024*1024
|
||||
|
||||
uint FileTransferInstance::Idconter = 0;
|
||||
|
||||
FileTransferInstance::FileTransferInstance(ToxFile File)
|
||||
: lastUpdate{QDateTime::currentDateTime()}, lastBytesSent{0},
|
||||
: lastBytesSent{0},
|
||||
fileNum{File.fileNum}, friendId{File.friendId}, direction{File.direction}
|
||||
{
|
||||
id = Idconter++;
|
||||
@ -44,13 +45,17 @@ FileTransferInstance::FileTransferInstance(ToxFile File)
|
||||
size = getHumanReadableSize(File.filesize);
|
||||
speed = "0B/s";
|
||||
eta = "00:00";
|
||||
|
||||
if (File.direction == ToxFile::SENDING)
|
||||
{
|
||||
QImage preview;
|
||||
File.file->seek(0);
|
||||
if (preview.loadFromData(File.file->readAll()))
|
||||
if (File.file->size() <= MAX_PREVIEW_SIZE)
|
||||
{
|
||||
pic = preview.scaledToHeight(50);
|
||||
QImage preview;
|
||||
File.file->seek(0);
|
||||
if (preview.loadFromData(File.file->readAll()))
|
||||
{
|
||||
pic = preview.scaledToHeight(50);
|
||||
}
|
||||
}
|
||||
File.file->seek(0);
|
||||
}
|
||||
@ -72,16 +77,16 @@ void FileTransferInstance::onFileTransferInfo(int FriendId, int FileNum, int64_t
|
||||
|
||||
// state = tsProcessing;
|
||||
QDateTime newtime = QDateTime::currentDateTime();
|
||||
int timediff = lastUpdate.secsTo(newtime);
|
||||
int timediff = started.secsTo(newtime);
|
||||
if (timediff <= 0)
|
||||
return;
|
||||
qint64 diff = BytesSent - lastBytesSent;
|
||||
if (diff < 0)
|
||||
qint64 totalbytes = BytesSent + lastBytesSent; // bytes sent so far
|
||||
if (totalbytes < 0)
|
||||
{
|
||||
qWarning() << "FileTransferInstance::onFileTransferInfo: Negative transfer speed !";
|
||||
diff = 0;
|
||||
totalbytes = 0;
|
||||
}
|
||||
long rawspeed = diff / timediff;
|
||||
long rawspeed = totalbytes / timediff;
|
||||
speed = getHumanReadableSize(rawspeed)+"/s";
|
||||
size = getHumanReadableSize(Filesize);
|
||||
totalBytes = Filesize;
|
||||
@ -91,8 +96,7 @@ void FileTransferInstance::onFileTransferInfo(int FriendId, int FileNum, int64_t
|
||||
QTime etaTime(0,0);
|
||||
etaTime = etaTime.addSecs(etaSecs);
|
||||
eta = etaTime.toString("mm:ss");
|
||||
lastUpdate = newtime;
|
||||
lastBytesSent = BytesSent;
|
||||
lastBytesSent = totalbytes;
|
||||
emit stateUpdated();
|
||||
}
|
||||
|
||||
@ -116,7 +120,7 @@ void FileTransferInstance::onFileTransferFinished(ToxFile File)
|
||||
{
|
||||
QImage preview;
|
||||
QFile previewFile(File.filePath);
|
||||
if (previewFile.open(QIODevice::ReadOnly) && previewFile.size() <= 1024*1024*25) // Don't preview big (>25MiB) images
|
||||
if (previewFile.open(QIODevice::ReadOnly) && previewFile.size() <= MAX_PREVIEW_SIZE) // Don't preview big (>25MiB) images
|
||||
{
|
||||
if (preview.loadFromData(previewFile.readAll()))
|
||||
{
|
||||
@ -197,7 +201,7 @@ void FileTransferInstance::acceptRecvRequest()
|
||||
QString path;
|
||||
while (true)
|
||||
{
|
||||
path = QFileDialog::getSaveFileName(0, tr("Save a file","Title of the file saving dialog"), QDir::current().filePath(filename));
|
||||
path = QFileDialog::getSaveFileName(0, tr("Save a file","Title of the file saving dialog"), QDir::home().filePath(filename));
|
||||
if (path.isEmpty())
|
||||
return;
|
||||
else
|
||||
@ -217,6 +221,8 @@ void FileTransferInstance::acceptRecvRequest()
|
||||
Core::getInstance()->acceptFileRecvRequest(friendId, fileNum, path);
|
||||
state = tsProcessing;
|
||||
|
||||
started = QDateTime::currentDateTime();
|
||||
|
||||
emit stateUpdated();
|
||||
}
|
||||
|
||||
@ -286,6 +292,12 @@ QString FileTransferInstance::getHtmlImage()
|
||||
rightBtnImg = QImage(":/ui/fileTransferInstance/pauseGreyFileButton.png");
|
||||
|
||||
res = draw2ButtonsForm("silver", leftBtnImg, rightBtnImg);
|
||||
} else if (state == tsBroken)
|
||||
{
|
||||
QImage leftBtnImg(":/ui/fileTransferInstance/stopFileButton.png");
|
||||
QImage rightBtnImg(":/ui/fileTransferInstance/pauseGreyFileButton.png");
|
||||
|
||||
res = draw2ButtonsForm("red", leftBtnImg, rightBtnImg);
|
||||
} else if (state == tsCanceled)
|
||||
{
|
||||
res = drawButtonlessForm("red");
|
||||
@ -411,3 +423,16 @@ QImage FileTransferInstance::drawProgressBarImg(const double &part, int w, int h
|
||||
|
||||
return progressBar;
|
||||
}
|
||||
|
||||
void FileTransferInstance::onFileTransferBrokenUnbroken(ToxFile File, bool broken)
|
||||
{
|
||||
if (File.fileNum != fileNum || File.friendId != friendId || File.direction != direction)
|
||||
return;
|
||||
|
||||
if (broken)
|
||||
state = tsBroken;
|
||||
else
|
||||
state = tsProcessing;
|
||||
|
||||
emit stateUpdated();
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ class FileTransferInstance : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum TransfState {tsPending, tsProcessing, tsPaused, tsFinished, tsCanceled};
|
||||
enum TransfState {tsPending, tsProcessing, tsPaused, tsFinished, tsCanceled, tsBroken};
|
||||
|
||||
public:
|
||||
explicit FileTransferInstance(ToxFile File);
|
||||
@ -43,6 +43,7 @@ public slots:
|
||||
void onFileTransferAccepted(ToxFile File);
|
||||
void onFileTransferPaused(int FriendId, int FileNum, ToxFile::FileDirection Direction);
|
||||
void onFileTransferRemotePausedUnpaused(ToxFile File, bool paused);
|
||||
void onFileTransferBrokenUnbroken(ToxFile File, bool broken);
|
||||
void pressFromHtml(QString);
|
||||
|
||||
signals:
|
||||
@ -73,7 +74,7 @@ private:
|
||||
QImage pic;
|
||||
QString filename, size, speed, eta;
|
||||
QString filenameElided;
|
||||
QDateTime lastUpdate;
|
||||
QDateTime started;
|
||||
long long lastBytesSent, totalBytes;
|
||||
int fileNum;
|
||||
int friendId;
|
||||
|
2
main.cpp
2
main.cpp
@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
#include "widget/widget.h"
|
||||
#include "settings.h"
|
||||
#include "misc/settings.h"
|
||||
#include <QApplication>
|
||||
#include <QFontDatabase>
|
||||
#include <QTranslator>
|
||||
|
@ -280,12 +280,35 @@ QPixmap Settings::getSavedAvatar(const QString &ownerId)
|
||||
void Settings::saveAvatar(QPixmap& pic, const QString& ownerId)
|
||||
{
|
||||
QDir dir(getSettingsDirPath());
|
||||
dir.mkdir("avatars/"); // remove this in a week or two hopefully
|
||||
dir.mkdir("avatars/");
|
||||
// ignore nospam (good idea, and also the addFriend funcs which call getAvatar don't have it)
|
||||
QString filePath = dir.filePath("avatars/"+ownerId.left(64)+".png");
|
||||
pic.save(filePath, "png");
|
||||
}
|
||||
|
||||
void Settings::saveAvatarHash(const QByteArray& hash, const QString& ownerId)
|
||||
{
|
||||
QDir dir(getSettingsDirPath());
|
||||
dir.mkdir("avatars/");
|
||||
QFile file(dir.filePath("avatars/"+ownerId.left(64)+".hash"));
|
||||
if (!file.open(QIODevice::WriteOnly))
|
||||
return;
|
||||
file.write(hash);
|
||||
file.close();
|
||||
}
|
||||
|
||||
QByteArray Settings::getAvatarHash(const QString& ownerId)
|
||||
{
|
||||
QDir dir(getSettingsDirPath());
|
||||
dir.mkdir("avatars/");
|
||||
QFile file(dir.filePath("avatars/"+ownerId.left(64)+".hash"));
|
||||
if (!file.open(QIODevice::ReadOnly))
|
||||
return QByteArray();
|
||||
QByteArray out = file.readAll();
|
||||
file.close();
|
||||
return out;
|
||||
}
|
||||
|
||||
const QList<Settings::DhtServer>& Settings::getDhtServerList() const
|
||||
{
|
||||
return dhtServerList;
|
@ -61,6 +61,9 @@ public:
|
||||
QPixmap getSavedAvatar(const QString& ownerId);
|
||||
void saveAvatar(QPixmap& pic, const QString& ownerId);
|
||||
|
||||
QByteArray getAvatarHash(const QString& ownerId);
|
||||
void saveAvatarHash(const QByteArray& hash, const QString& ownerId);
|
||||
|
||||
// Assume all widgets have unique names
|
||||
// Don't use it to save every single thing you want to save, use it
|
||||
// for some general purpose widgets, such as MainWindows or Splitters,
|
23
qtox.pro
23
qtox.pro
@ -35,7 +35,8 @@ TRANSLATIONS = translations/de.ts \
|
||||
translations/ru.ts \
|
||||
translations/pl.ts \
|
||||
translations/fi.ts \
|
||||
translations/mannol.ts
|
||||
translations/mannol.ts \
|
||||
translations/uk.ts
|
||||
|
||||
RESOURCES += res.qrc
|
||||
|
||||
@ -91,17 +92,17 @@ HEADERS += widget/form/addfriendform.h \
|
||||
friend.h \
|
||||
group.h \
|
||||
grouplist.h \
|
||||
settings.h \
|
||||
misc/settings.h \
|
||||
core.h \
|
||||
friendlist.h \
|
||||
cdata.h \
|
||||
cstring.h \
|
||||
misc/cdata.h \
|
||||
misc/cstring.h \
|
||||
widget/selfcamview.h \
|
||||
widget/camera.h \
|
||||
widget/netcamview.h \
|
||||
smileypack.h \
|
||||
misc/smileypack.h \
|
||||
widget/emoticonswidget.h \
|
||||
style.h \
|
||||
misc/style.h \
|
||||
widget/adjustingscrollarea.h \
|
||||
widget/croppinglabel.h \
|
||||
widget/friendlistwidget.h \
|
||||
@ -135,15 +136,15 @@ SOURCES += \
|
||||
group.cpp \
|
||||
grouplist.cpp \
|
||||
main.cpp \
|
||||
settings.cpp \
|
||||
cdata.cpp \
|
||||
cstring.cpp \
|
||||
misc/settings.cpp \
|
||||
misc/cdata.cpp \
|
||||
misc/cstring.cpp \
|
||||
widget/selfcamview.cpp \
|
||||
widget/camera.cpp \
|
||||
widget/netcamview.cpp \
|
||||
smileypack.cpp \
|
||||
misc/smileypack.cpp \
|
||||
widget/emoticonswidget.cpp \
|
||||
style.cpp \
|
||||
misc/style.cpp \
|
||||
widget/adjustingscrollarea.cpp \
|
||||
widget/croppinglabel.cpp \
|
||||
widget/friendlistwidget.cpp \
|
||||
|
1
res.qrc
1
res.qrc
@ -142,6 +142,7 @@
|
||||
<file>translations/pl.qm</file>
|
||||
<file>translations/fi.qm</file>
|
||||
<file>translations/mannol.qm</file>
|
||||
<file>translations/uk.qm</file>
|
||||
<file>img/avatar_mask.png</file>
|
||||
<file>img/group_2x.png</file>
|
||||
</qresource>
|
||||
|
BIN
translations/uk.qm
Normal file
BIN
translations/uk.qm
Normal file
Binary file not shown.
485
translations/uk.ts
Normal file
485
translations/uk.ts
Normal file
@ -0,0 +1,485 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="uk_UA">
|
||||
<context>
|
||||
<name>AVPage</name>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="132"/>
|
||||
<source>Video Settings</source>
|
||||
<translation>Параметри відео</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="136"/>
|
||||
<location filename="../widget/settingsdialog.cpp" line="163"/>
|
||||
<source>Show video preview</source>
|
||||
<comment>On a button</comment>
|
||||
<translation>Показати вікно попереднього перегляду</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="157"/>
|
||||
<source>Hide video preview</source>
|
||||
<comment>On a button</comment>
|
||||
<translation>Приховати вікно попереднього перегляду</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AddFriendForm</name>
|
||||
<message>
|
||||
<location filename="../widget/form/addfriendform.cpp" line="34"/>
|
||||
<source>Add Friends</source>
|
||||
<translation>Додати друзів</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/form/addfriendform.cpp" line="37"/>
|
||||
<source>Tox ID</source>
|
||||
<comment>Tox ID of the person you're sending a friend request to</comment>
|
||||
<translation>Tox ID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/form/addfriendform.cpp" line="38"/>
|
||||
<source>Message</source>
|
||||
<comment>The message you send in friend requests</comment>
|
||||
<translation>Повідомлення</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/form/addfriendform.cpp" line="39"/>
|
||||
<source>Send friend request</source>
|
||||
<translation>Надіслати запит на дружбу</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/form/addfriendform.cpp" line="40"/>
|
||||
<source>Tox me maybe?</source>
|
||||
<comment>Default message in friend requests if the field is left blank. Write something appropriate!</comment>
|
||||
<translation>Може поспілкуємось?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/form/addfriendform.cpp" line="96"/>
|
||||
<source>Please fill in a valid Tox ID</source>
|
||||
<comment>Tox ID of the friend you're sending a friend request to</comment>
|
||||
<translation>Заповніть коректним Tox ID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/form/addfriendform.cpp" line="99"/>
|
||||
<source>You can't add yourself as a friend!</source>
|
||||
<comment>When trying to add your own Tox ID as friend</comment>
|
||||
<translation>Ви не можете додати самого себе до друзів!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/form/addfriendform.cpp" line="116"/>
|
||||
<source>This address does not exist</source>
|
||||
<comment>The DNS gives the Tox ID associated to toxme.se addresses</comment>
|
||||
<translation>Цієї адреси не існує</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/form/addfriendform.cpp" line="120"/>
|
||||
<source>Error while looking up DNS</source>
|
||||
<comment>The DNS gives the Tox ID associated to toxme.se addresses</comment>
|
||||
<translation>Помилка під час перегляду DNS</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/form/addfriendform.cpp" line="126"/>
|
||||
<source>Unexpected number of text records</source>
|
||||
<comment>Error with the DNS</comment>
|
||||
<translation>Неочікуване число текстових записів</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/form/addfriendform.cpp" line="132"/>
|
||||
<source>Unexpected number of values in text record</source>
|
||||
<comment>Error with the DNS</comment>
|
||||
<translation>Неочікуване число значень в текстових записах</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/form/addfriendform.cpp" line="139"/>
|
||||
<source>The DNS lookup does not contain any Tox ID</source>
|
||||
<comment>Error with the DNS</comment>
|
||||
<translation>Відповідь DNS не містить жодного Tox ID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/form/addfriendform.cpp" line="145"/>
|
||||
<location filename="../widget/form/addfriendform.cpp" line="151"/>
|
||||
<source>The DNS lookup does not contain a valid Tox ID</source>
|
||||
<comment>Error with the DNS</comment>
|
||||
<translation>Відповідь DNS не містить жодного коректного Tox ID</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatForm</name>
|
||||
<message>
|
||||
<location filename="../widget/form/chatform.cpp" line="88"/>
|
||||
<source>Send a file</source>
|
||||
<translation>Надіслати файл</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FileTransferInstance</name>
|
||||
<message>
|
||||
<location filename="../filetransferinstance.cpp" line="205"/>
|
||||
<source>Save a file</source>
|
||||
<comment>Title of the file saving dialog</comment>
|
||||
<translation>Зберегти файл</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../filetransferinstance.cpp" line="216"/>
|
||||
<source>Location not writable</source>
|
||||
<comment>Title of permissions popup</comment>
|
||||
<translation>Немає прав на запис</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../filetransferinstance.cpp" line="216"/>
|
||||
<source>You do not have permission to write that location. Choose another, or cancel the save dialog.</source>
|
||||
<comment>text of permissions popup</comment>
|
||||
<translation>Ви не маєте прав на запис за цим розташуванням. Оберіть інше місце призначення, або скасуйте передачу.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FilesForm</name>
|
||||
<message>
|
||||
<location filename="../widget/form/filesform.cpp" line="30"/>
|
||||
<source>Transfered Files</source>
|
||||
<comment>"Headline" of the window</comment>
|
||||
<translation>Передані файли</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/form/filesform.cpp" line="38"/>
|
||||
<source>Downloads</source>
|
||||
<translation>Завантажені</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/form/filesform.cpp" line="39"/>
|
||||
<source>Uploads</source>
|
||||
<translation>Вивантажені</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FriendRequestDialog</name>
|
||||
<message>
|
||||
<location filename="../widget/tool/friendrequestdialog.cpp" line="30"/>
|
||||
<source>Friend request</source>
|
||||
<comment>Title of the window to aceept/deny a friend request</comment>
|
||||
<translation>Запит на дружбу</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/tool/friendrequestdialog.cpp" line="32"/>
|
||||
<source>Someone wants to make friends with you</source>
|
||||
<translation>Дехто хоче долучитися до переліку друзів з вами</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/tool/friendrequestdialog.cpp" line="33"/>
|
||||
<source>User ID:</source>
|
||||
<translation>ID користувача:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/tool/friendrequestdialog.cpp" line="37"/>
|
||||
<source>Friend request message:</source>
|
||||
<translation>Повідомлення запиту:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/tool/friendrequestdialog.cpp" line="44"/>
|
||||
<source>Accept</source>
|
||||
<comment>Accept a friend request</comment>
|
||||
<translation>Прийняти</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/tool/friendrequestdialog.cpp" line="45"/>
|
||||
<source>Reject</source>
|
||||
<comment>Reject a friend request</comment>
|
||||
<translation>Відхилити</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FriendWidget</name>
|
||||
<message>
|
||||
<location filename="../widget/friendwidget.cpp" line="90"/>
|
||||
<source>Copy friend ID</source>
|
||||
<comment>Menu to copy the Tox ID of that friend</comment>
|
||||
<translation>Копіювати дружній ID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/friendwidget.cpp" line="91"/>
|
||||
<source>Invite in group</source>
|
||||
<comment>Menu to invite a friend in a groupchat</comment>
|
||||
<translation>Запросити до групи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/friendwidget.cpp" line="101"/>
|
||||
<source>Remove friend</source>
|
||||
<comment>Menu to remove the friend from our friendlist</comment>
|
||||
<translation>Вилучити з друзів</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>GeneralPage</name>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="31"/>
|
||||
<source>General Settings</source>
|
||||
<translation>Основні параметри</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="34"/>
|
||||
<source>Enable IPv6 (recommended)</source>
|
||||
<comment>Text on a checkbox to enable IPv6</comment>
|
||||
<translation>Дозволити IPv6 (рекомендовано)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="36"/>
|
||||
<source>Use translations</source>
|
||||
<comment>Text on a checkbox to enable translations</comment>
|
||||
<translation>Використовувати мову системи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="38"/>
|
||||
<source>Make Tox portable</source>
|
||||
<comment>Text on a checkbox to make qTox a portable application</comment>
|
||||
<translation>Портативний запуск</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="39"/>
|
||||
<source>Save settings to the working directory instead of the usual conf dir</source>
|
||||
<comment>describes makeToxPortable checkbox</comment>
|
||||
<translation>Зберігати налаштування в робочий теці</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="48"/>
|
||||
<source>Theme</source>
|
||||
<translation>Графічна тема</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="49"/>
|
||||
<source>Smiley Pack</source>
|
||||
<translation>Графічний пакунок емоційних картинок</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>GenericChatForm</name>
|
||||
<message>
|
||||
<location filename="../widget/form/genericchatform.cpp" line="144"/>
|
||||
<location filename="../widget/form/genericchatform.cpp" line="150"/>
|
||||
<source>Save chat log</source>
|
||||
<translation>Зберегти чат</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>GroupChatForm</name>
|
||||
<message>
|
||||
<location filename="../widget/form/groupchatform.cpp" line="45"/>
|
||||
<source>%1 users in chat</source>
|
||||
<comment>Number of users in chat</comment>
|
||||
<translation>Користувачів у чаті: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/form/groupchatform.cpp" line="84"/>
|
||||
<source><Unknown></source>
|
||||
<translation><Невідомо></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/form/groupchatform.cpp" line="91"/>
|
||||
<source>%1 users in chat</source>
|
||||
<translation>Користувачів у чаті: %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>GroupWidget</name>
|
||||
<message>
|
||||
<location filename="../widget/groupwidget.cpp" line="60"/>
|
||||
<location filename="../widget/groupwidget.cpp" line="102"/>
|
||||
<source>%1 users in chat</source>
|
||||
<translation>Користувачів у чаті: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/groupwidget.cpp" line="62"/>
|
||||
<location filename="../widget/groupwidget.cpp" line="104"/>
|
||||
<source>0 users in chat</source>
|
||||
<translation>Немає користувачів</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/groupwidget.cpp" line="85"/>
|
||||
<source>Quit group</source>
|
||||
<comment>Menu to quit a groupchat</comment>
|
||||
<translation>Вийти з групи</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>IdentityPage</name>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="82"/>
|
||||
<source>Public Information</source>
|
||||
<translation>Публічна інформація</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="83"/>
|
||||
<source>Name</source>
|
||||
<comment>Username/nick</comment>
|
||||
<translation>Ім'я</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="85"/>
|
||||
<source>Status</source>
|
||||
<comment>Status message</comment>
|
||||
<translation>Статус</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="95"/>
|
||||
<source>Tox ID</source>
|
||||
<translation>Tox ID</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="96"/>
|
||||
<source>Your Tox ID</source>
|
||||
<translation>Ваш Tox ID</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="20"/>
|
||||
<source>qTox</source>
|
||||
<translation>qTox</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="1909"/>
|
||||
<source>Your name</source>
|
||||
<translation>Ваше ім'я</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="1991"/>
|
||||
<source>Your status</source>
|
||||
<translation>Ваш статус</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="2557"/>
|
||||
<source>Add friends</source>
|
||||
<translation>Додати друзів</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="2583"/>
|
||||
<source>Create a group chat</source>
|
||||
<translation>Створити груповий чат</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="2615"/>
|
||||
<source>View completed file transfers</source>
|
||||
<translation>Переглянути завершені передачі файлів</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="2647"/>
|
||||
<source>Change your settings</source>
|
||||
<translation>Змінити параметри</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="3229"/>
|
||||
<source>Close</source>
|
||||
<translation>Закрити</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="3232"/>
|
||||
<source>Ctrl+Q</source>
|
||||
<translation>Ctrl+Q</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SelfCamView</name>
|
||||
<message>
|
||||
<location filename="../widget/selfcamview.cpp" line="33"/>
|
||||
<source>Tox video test</source>
|
||||
<comment>Title of the window to test the video/webcam</comment>
|
||||
<translation>Перевірка відео tox</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsDialog</name>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="197"/>
|
||||
<source>qTox – Settings</source>
|
||||
<translation>qTox - Параметри</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="224"/>
|
||||
<source>General</source>
|
||||
<translation>Основні</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="230"/>
|
||||
<source>Identity</source>
|
||||
<translation>Ідентифікація</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="236"/>
|
||||
<source>Privacy</source>
|
||||
<translation>Приватність</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="242"/>
|
||||
<source>Audio/Video</source>
|
||||
<translation>Аудіо/Відео</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="251"/>
|
||||
<source>Ok</source>
|
||||
<translation>Гаразд</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="252"/>
|
||||
<source>Cancel</source>
|
||||
<translation>Скасувати</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/settingsdialog.cpp" line="253"/>
|
||||
<source>Apply</source>
|
||||
<translation>Застосувати</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Widget</name>
|
||||
<message>
|
||||
<location filename="../widget/widget.cpp" line="141"/>
|
||||
<source>Online</source>
|
||||
<comment>Button to set your status to 'Online'</comment>
|
||||
<translation>В мережі</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/widget.cpp" line="143"/>
|
||||
<source>Away</source>
|
||||
<comment>Button to set your status to 'Away'</comment>
|
||||
<translation>Відійшов</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/widget.cpp" line="145"/>
|
||||
<source>Busy</source>
|
||||
<comment>Button to set your status to 'Busy'</comment>
|
||||
<translation>Зайнятий</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/widget.cpp" line="285"/>
|
||||
<source>Choose a profile picture</source>
|
||||
<translation>Оберіть зображення для профілю</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/widget.cpp" line="292"/>
|
||||
<location filename="../widget/widget.cpp" line="299"/>
|
||||
<location filename="../widget/widget.cpp" line="320"/>
|
||||
<source>Error</source>
|
||||
<translation>Помилка</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/widget.cpp" line="292"/>
|
||||
<source>Unable to open this file</source>
|
||||
<translation>Неможливо відкрити цей файл</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/widget.cpp" line="299"/>
|
||||
<source>Unable to read this image</source>
|
||||
<translation>Неможливо прочитати це зображення</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/widget.cpp" line="320"/>
|
||||
<source>This image is too big</source>
|
||||
<translation>Зображення завелике</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../widget/widget.cpp" line="664"/>
|
||||
<source><Unknown></source>
|
||||
<comment>Placeholder when we don't know someone's name in a group chat</comment>
|
||||
<translation><Невідомо></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -15,8 +15,8 @@
|
||||
*/
|
||||
|
||||
#include "emoticonswidget.h"
|
||||
#include "smileypack.h"
|
||||
#include "style.h"
|
||||
#include "misc/smileypack.h"
|
||||
#include "misc/style.h"
|
||||
|
||||
#include <QPushButton>
|
||||
#include <QRadioButton>
|
||||
|
@ -119,6 +119,7 @@ void ChatForm::startFileSend(ToxFile file)
|
||||
connect(Core::getInstance(), SIGNAL(fileTransferAccepted(ToxFile)), fileTrans, SLOT(onFileTransferAccepted(ToxFile)));
|
||||
connect(Core::getInstance(), SIGNAL(fileTransferPaused(int,int,ToxFile::FileDirection)), fileTrans, SLOT(onFileTransferPaused(int,int,ToxFile::FileDirection)));
|
||||
connect(Core::getInstance(), SIGNAL(fileTransferRemotePausedUnpaused(ToxFile,bool)), fileTrans, SLOT(onFileTransferRemotePausedUnpaused(ToxFile,bool)));
|
||||
connect(Core::getInstance(), SIGNAL(fileTransferBrokenUnbroken(ToxFile, bool)), fileTrans, SLOT(onFileTransferBrokenUnbroken(ToxFile, bool)));
|
||||
|
||||
QString name = Widget::getInstance()->getUsername();
|
||||
if (name == previousName)
|
||||
@ -142,6 +143,7 @@ void ChatForm::onFileRecvRequest(ToxFile file)
|
||||
connect(Core::getInstance(), SIGNAL(fileTransferAccepted(ToxFile)), fileTrans, SLOT(onFileTransferAccepted(ToxFile)));
|
||||
connect(Core::getInstance(), SIGNAL(fileTransferPaused(int,int,ToxFile::FileDirection)), fileTrans, SLOT(onFileTransferPaused(int,int,ToxFile::FileDirection)));
|
||||
connect(Core::getInstance(), SIGNAL(fileTransferRemotePausedUnpaused(ToxFile,bool)), fileTrans, SLOT(onFileTransferRemotePausedUnpaused(ToxFile,bool)));
|
||||
connect(Core::getInstance(), SIGNAL(fileTransferBrokenUnbroken(ToxFile, bool)), fileTrans, SLOT(onFileTransferBrokenUnbroken(ToxFile, bool)));
|
||||
|
||||
Widget* w = Widget::getInstance();
|
||||
if (!w->isFriendWidgetCurActiveWidget(f)|| w->getIsWindowMinimized() || !w->isActiveWindow())
|
||||
|
@ -17,11 +17,11 @@
|
||||
#include "genericchatform.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include <QFileDialog>
|
||||
#include "smileypack.h"
|
||||
#include "misc/smileypack.h"
|
||||
#include "widget/emoticonswidget.h"
|
||||
#include "style.h"
|
||||
#include "misc/style.h"
|
||||
#include "widget/widget.h"
|
||||
#include "settings.h"
|
||||
#include "misc/settings.h"
|
||||
#include "widget/tool/chatactions/messageaction.h"
|
||||
#include "widget/tool/chatactions/systemmessageaction.h"
|
||||
#include "widget/chatareawidget.h"
|
||||
|
@ -210,7 +210,7 @@ void FriendWidget::onAvatarRemoved(int FriendId)
|
||||
return;
|
||||
|
||||
isDefaultAvatar = true;
|
||||
avatar->setPixmap(QPixmap(":img/contact.png"));
|
||||
avatar->setPixmap(QPixmap(":img/contact_dark.png"));
|
||||
}
|
||||
|
||||
void FriendWidget::mousePressEvent(QMouseEvent *ev)
|
||||
|
@ -17,7 +17,7 @@
|
||||
#include "groupwidget.h"
|
||||
#include "grouplist.h"
|
||||
#include "group.h"
|
||||
#include "settings.h"
|
||||
#include "misc/settings.h"
|
||||
#include "widget/form/groupchatform.h"
|
||||
#include "widget/maskablepixmapwidget.h"
|
||||
#include <QPalette>
|
||||
|
@ -1,10 +1,10 @@
|
||||
#include "settingsdialog.h"
|
||||
#include "settings.h"
|
||||
#include "misc/settings.h"
|
||||
#include "widget.h"
|
||||
#include "camera.h"
|
||||
#include "selfcamview.h"
|
||||
#include "core.h"
|
||||
#include "smileypack.h"
|
||||
#include "misc/smileypack.h"
|
||||
|
||||
#include <QListWidget>
|
||||
#include <QListWidgetItem>
|
||||
|
@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
#include "messageaction.h"
|
||||
#include "smileypack.h"
|
||||
#include "misc/smileypack.h"
|
||||
|
||||
MessageAction::MessageAction(const QString &author, const QString &message, const QString &date, const bool &me) :
|
||||
ChatAction(me, author, date),
|
||||
|
@ -17,7 +17,7 @@
|
||||
#include "widget.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include "core.h"
|
||||
#include "settings.h"
|
||||
#include "misc/settings.h"
|
||||
#include "friend.h"
|
||||
#include "friendlist.h"
|
||||
#include "widget/tool/friendrequestdialog.h"
|
||||
@ -26,7 +26,7 @@
|
||||
#include "group.h"
|
||||
#include "widget/groupwidget.h"
|
||||
#include "widget/form/groupchatform.h"
|
||||
#include "style.h"
|
||||
#include "misc/style.h"
|
||||
#include "selfcamview.h"
|
||||
#include "widget/friendlistwidget.h"
|
||||
#include "camera.h"
|
||||
|
Loading…
x
Reference in New Issue
Block a user