From 364dd34ced444a2ab6773a89742743fceb255aac Mon Sep 17 00:00:00 2001 From: codestation Date: Sat, 31 May 2025 15:09:15 -0500 Subject: [PATCH] migrate to Qt6 --- .gitignore | 1 + android/main_android.cpp | 2 -- cli/headlessmanager.cpp | 4 +-- cli/main_cli.cpp | 27 ++++---------- common/avdecoder.cpp | 63 --------------------------------- common/avdecoder.h | 3 +- common/cmabroadcast.cpp | 10 ++---- common/cmaclient.cpp | 19 +++++----- common/cmaevent.cpp | 2 +- common/cmaobject.cpp | 8 ++--- common/cmautils.cpp | 24 ------------- common/cmautils.h | 17 --------- common/database.cpp | 4 +-- common/database.h | 2 +- common/qlistdb.cpp | 6 ++-- common/sqlitedb.cpp | 34 +++++++----------- gui/forms/backupitem.cpp | 2 +- gui/forms/backupitem.h | 2 +- gui/forms/backupmanagerform.cpp | 9 ++--- gui/forms/configwidget.cpp | 7 ---- gui/forms/pinform.cpp | 7 ++-- gui/forms/progressform.cpp | 7 ++-- gui/main.cpp | 23 ++++-------- gui/trayindicator.h | 6 ---- 24 files changed, 69 insertions(+), 220 deletions(-) diff --git a/.gitignore b/.gitignore index 44ee256..dcc6519 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ qcma.pro.user* *.bundle org.qcma.*.xml buildscripts/windows/driver/QcmaDriver_*.exe +build/ diff --git a/android/main_android.cpp b/android/main_android.cpp index b258317..8ed76be 100644 --- a/android/main_android.cpp +++ b/android/main_android.cpp @@ -67,11 +67,9 @@ static void cleanOutput(QtMsgType type, const QMessageLogContext &, const QStrin case QtFatalMsg: __android_log_print(ANDROID_LOG_FATAL, "qcma", "%s", message); abort(); -#if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) case QtInfoMsg: __android_log_print(ANDROID_LOG_INFO, "qcma", "%s", message); break; -#endif } } #endif diff --git a/cli/headlessmanager.cpp b/cli/headlessmanager.cpp index f403eaa..144c881 100644 --- a/cli/headlessmanager.cpp +++ b/cli/headlessmanager.cpp @@ -61,7 +61,7 @@ void HeadlessManager::refreshDatabase() return; } - QTextStream(stdout) << "Database scan has started" << endl; + QTextStream(stdout) << "Database scan has started" << Qt::endl; if(!m_db->rescan()) { qWarning("No PS Vita system has been registered"); @@ -136,7 +136,7 @@ void HeadlessManager::start() void HeadlessManager::receiveMessage(QString message) { - QTextStream(stdout) << message << endl; + QTextStream(stdout) << message << Qt::endl; } void HeadlessManager::stop() diff --git a/cli/main_cli.cpp b/cli/main_cli.cpp index 0a6431f..d745723 100644 --- a/cli/main_cli.cpp +++ b/cli/main_cli.cpp @@ -25,7 +25,6 @@ #include #include #include -#include #include #include @@ -35,15 +34,10 @@ #include "singlecoreapplication.h" #include "headlessmanager.h" -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) static void noDebugOutput(QtMsgType type, const QMessageLogContext &, const QString & msg) { QByteArray localMsg = msg.toLocal8Bit(); const char *message = localMsg.constData(); -#else -static void noDebugOutput(QtMsgType type, const char *message) -{ -#endif switch (type) { case QtDebugMsg: break; @@ -57,11 +51,9 @@ static void noDebugOutput(QtMsgType type, const char *message) fprintf(stderr, "Fatal: %s\n", message); abort(); break; -#if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) case QtInfoMsg: fprintf(stderr, "Info: %s\n", message); break; -#endif } } @@ -105,7 +97,7 @@ int main(int argc, char *argv[]) Q_INIT_RESOURCE(translations); if(SingleCoreApplication::sendMessage("Another instance of Qcma tried to start")) { - QTextStream(stdout) << "An instance of Qcma is already running" << endl; + QTextStream(stdout) << "An instance of Qcma is already running" << Qt::endl; return 0; } @@ -125,18 +117,10 @@ int main(int argc, char *argv[]) VitaMTP_Set_Logging(VitaMTP_VERBOSE); } else { VitaMTP_Set_Logging(VitaMTP_NONE); -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) qInstallMessageHandler(noDebugOutput); -#else - qInstallMsgHandler(noDebugOutput); -#endif } -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); -#endif - - QTextStream(stdout) << "Starting Qcma " << QCMA_VER << endl; + QTextStream(stdout) << "Starting Qcma " << QCMA_VER << Qt::endl; QTranslator translator; QString locale = QLocale().system().name(); @@ -157,8 +141,11 @@ int main(int argc, char *argv[]) } QTranslator system_translator; - system_translator.load("qt_" + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath)); - app.installTranslator(&system_translator); + if(!system_translator.load("qt_" + locale, QLibraryInfo::path(QLibraryInfo::TranslationsPath))) { + qWarning() << "Cannot load system translation for locale:" << locale; + } else { + app.installTranslator(&system_translator); + } qDebug("Starting main thread: 0x%016" PRIxPTR, (uintptr_t)QThread::currentThreadId()); diff --git a/common/avdecoder.cpp b/common/avdecoder.cpp index 8c667b2..5cf223e 100644 --- a/common/avdecoder.cpp +++ b/common/avdecoder.cpp @@ -128,11 +128,7 @@ void AVDecoder::getVideoMetadata(metadata_t &metadata) AVFrame *AVDecoder::getDecodedFrame(AVCodecContext *codec_ctx, int frame_stream_index) { -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) AVFrame *pFrame = av_frame_alloc(); -#else - AVFrame *pFrame = avcodec_alloc_frame(); -#endif AVPacket packet; int frame_finished = 0; @@ -141,21 +137,13 @@ AVFrame *AVDecoder::getDecodedFrame(AVCodecContext *codec_ctx, int frame_stream_ if(packet.stream_index == frame_stream_index) { avcodec_decode_video2(codec_ctx, pFrame, &frame_finished, &packet); } -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57,7,0) av_packet_unref(&packet); -#else - av_free_packet(&packet); -#endif } if(frame_finished) { return pFrame; } else { -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) av_frame_free(&pFrame); -#else - avcodec_free_frame(&pFrame); -#endif return NULL; } } @@ -215,11 +203,7 @@ QByteArray AVDecoder::getThumbnail(int &width, int &height) width, height); data = WriteJPEG(pCodecCtx, pFrame, width, height); -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) av_frame_free(&pFrame); -#else - avcodec_free_frame(&pFrame); -#endif } return data; @@ -249,44 +233,24 @@ QByteArray AVDecoder::WriteJPEG(AVCodecContext *pCodecCtx, AVFrame *pFrame, int return data; } -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) AVFrame *pFrameRGB = av_frame_alloc(); -#else - AVFrame *pFrameRGB = avcodec_alloc_frame(); -#endif if(pFrameRGB == NULL) { sws_freeContext(sws_ctx); return data; } - // detect ffmpeg (>= 100) or libav (< 100) -#if (LIBAVUTIL_VERSION_MICRO >= 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,63,100)) || \ - (LIBAVUTIL_VERSION_MICRO < 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(54,6,0)) int numBytes = av_image_get_buffer_size(AV_PIX_FMT_YUV420P, width, height, 16); -#else - int numBytes = avpicture_get_size(PIX_FMT_YUVJ420P, width, height); -#endif uint8_t *buffer = (uint8_t *)av_malloc(numBytes); if(!buffer) { -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) av_frame_free(&pFrameRGB); -#else - avcodec_free_frame(&pFrameRGB); -#endif sws_freeContext(sws_ctx); return data; } - // detect ffmpeg (>= 100) or libav (< 100) -#if (LIBAVUTIL_VERSION_MICRO >= 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,63,100)) || \ - (LIBAVUTIL_VERSION_MICRO < 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(54,6,0)) av_image_fill_arrays(pFrameRGB->data, pFrameRGB->linesize, buffer, AV_PIX_FMT_YUV420P, width, height, 1); -#else - avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_YUVJ420P, width, height); -#endif sws_scale( sws_ctx, @@ -301,18 +265,9 @@ QByteArray AVDecoder::WriteJPEG(AVCodecContext *pCodecCtx, AVFrame *pFrame, int pOCodecCtx = avcodec_alloc_context3(pOCodec); if(pOCodecCtx == NULL) { -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,52,0) avcodec_free_context(&pOCodecCtx); -#else - avcodec_close(pOCodecCtx); - av_free(pOCodecCtx); -#endif av_free(buffer); -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) av_frame_free(&pFrameRGB); -#else - avcodec_free_frame(&pFrameRGB); -#endif sws_freeContext(sws_ctx); return 0; } @@ -329,18 +284,9 @@ QByteArray AVDecoder::WriteJPEG(AVCodecContext *pCodecCtx, AVFrame *pFrame, int AVDictionary *opts = NULL; if(avcodec_open2(pOCodecCtx, pOCodec, &opts) < 0) { -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,52,0) avcodec_free_context(&pOCodecCtx); -#else - avcodec_close(pOCodecCtx); - av_free(pOCodecCtx); -#endif av_free(buffer); -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) av_frame_free(&pFrameRGB); -#else - avcodec_free_frame(&pFrameRGB); -#endif sws_freeContext(sws_ctx); return 0; } @@ -367,18 +313,9 @@ QByteArray AVDecoder::WriteJPEG(AVCodecContext *pCodecCtx, AVFrame *pFrame, int QByteArray buffer2(reinterpret_cast(pkt.data), pkt.size); -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,52,0) avcodec_free_context(&pOCodecCtx); -#else - avcodec_close(pOCodecCtx); - av_free(pOCodecCtx); -#endif av_free(buffer); -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) av_frame_free(&pFrameRGB); -#else - avcodec_free_frame(&pFrameRGB); -#endif avcodec_close(pOCodecCtx); sws_freeContext(sws_ctx); diff --git a/common/avdecoder.h b/common/avdecoder.h index 4f4de6b..5ff6b37 100644 --- a/common/avdecoder.h +++ b/common/avdecoder.h @@ -72,7 +72,6 @@ public: { public: AvInit() { - av_register_all(); // hide warning logs av_log_set_level(AV_LOG_ERROR); } @@ -87,7 +86,7 @@ private: AVFormatContext *pFormatCtx; AVCodecContext *pCodecCtx; AVStream *av_stream; - AVCodec *av_codec; + const AVCodec *av_codec; int stream_index; bool codec_loaded; }; diff --git a/common/cmabroadcast.cpp b/common/cmabroadcast.cpp index c268fbc..353b043 100644 --- a/common/cmabroadcast.cpp +++ b/common/cmabroadcast.cpp @@ -62,11 +62,7 @@ CmaBroadcast::CmaBroadcast(QObject *obj_parent) : socket = new QUdpSocket(this); connect(socket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams())); -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - QHostAddress host_address(QHostAddress::Any); -#else QHostAddress host_address(QHostAddress::AnyIPv4); -#endif if(!socket->bind(host_address, QCMA_REQUEST_PORT, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint)) { qCritical() << "Failed to bind address for UDP broadcast"; @@ -88,7 +84,7 @@ void CmaBroadcast::readPendingDatagrams() QMutexLocker locker(&mutex); socket->writeDatagram(reply, cma_sender, senderPort); } else { - qWarning("Unknown request: %.*s\n", datagram.length(), datagram.constData()); + qWarning() << "Unknown request, length: " << datagram.length() << "data: " << datagram.constData(); } } } @@ -103,7 +99,7 @@ void CmaBroadcast::setAvailable() .arg(broadcast_ok, uuid, "win", hostname) .arg(protocol_version, 8, 10, QChar('0')) .arg(QCMA_REQUEST_PORT) - .arg(VITAMTP_WIRELESS_MAX_VERSION, 8, 10, QChar('0'))); + .arg(VITAMTP_WIRELESS_MAX_VERSION, 8, 10, QChar('0')).toStdString()); reply.append('\0'); } @@ -117,6 +113,6 @@ void CmaBroadcast::setUnavailable() .arg(broadcast_unavailable, uuid, "win", hostname) .arg(protocol_version, 8, 10, QChar('0')) .arg(QCMA_REQUEST_PORT) - .arg(VITAMTP_WIRELESS_MAX_VERSION, 8, 10, QChar('0'))); + .arg(VITAMTP_WIRELESS_MAX_VERSION, 8, 10, QChar('0')).toStdString()); reply.append('\0'); } diff --git a/common/cmaclient.cpp b/common/cmaclient.cpp index 188e32f..062af1c 100644 --- a/common/cmaclient.cpp +++ b/common/cmaclient.cpp @@ -31,6 +31,8 @@ #include #include +#include + QMutex CmaClient::mutex; QMutex CmaClient::runner; QWaitCondition CmaClient::usbcondition; @@ -92,9 +94,6 @@ void CmaClient::connectWireless() wireless_host_info_t host = {NULL, NULL, NULL, QCMA_REQUEST_PORT}; typedef CmaClient CC; - QTime now = QTime::currentTime(); - qsrand(now.msec()); - qDebug("Starting wireless_thread: 0x%016" PRIxPTR, (uintptr_t)QThread::currentThreadId()); setActive(true); @@ -132,7 +131,7 @@ void CmaClient::processNewConnection(vita_device_t *device) QMutexLocker locker(&mutex); in_progress = true; - QTextStream(stdout) << "Vita connected, id: " << VitaMTP_Get_Identification(device) << endl; + QTextStream(stdout) << "Vita connected, id: " << VitaMTP_Get_Identification(device) << Qt::endl; DeviceCapability vita_info; if(!vita_info.exchangeInfo(device)) { @@ -189,6 +188,10 @@ int CmaClient::generatePin(wireless_vita_info_t *info, int *p_err) QString staticPin = QSettings().value("staticPin").toString(); + static std::mt19937 rng(std::random_device{}()); + + std::uniform_int_distribution dist(0, 99999999); + int pin; if(!staticPin.isNull() && staticPin.length() == 8) { @@ -196,17 +199,17 @@ int CmaClient::generatePin(wireless_vita_info_t *info, int *p_err) pin = staticPin.toInt(&ok); if(!ok) { - pin = rand() % 10000 * 10000 | rand() % 10000; + pin = dist(rng); } } else { - pin = rand() % 10000 * 10000 | rand() % 10000; + pin = dist(rng); } QTextStream out(stdout); out << "Your registration PIN for " << info->name << " is: "; out.setFieldWidth(8); out.setPadChar('0'); - out << pin << endl; + out << pin << Qt::endl; qDebug("PIN: %08i", pin); @@ -262,7 +265,7 @@ void CmaClient::enterEventLoop(vita_device_t *device) int CmaClient::stop() { - QTextStream(stdout) << "Stopping Qcma" << endl; + QTextStream(stdout) << "Stopping Qcma" << Qt::endl; if(!isActive()) { return -1; diff --git a/common/cmaevent.cpp b/common/cmaevent.cpp index 979ba6e..b81b323 100644 --- a/common/cmaevent.cpp +++ b/common/cmaevent.cpp @@ -649,7 +649,7 @@ void CmaEvent::vitaEventSendHttpObjectFromURL(vita_event_t *cma_event, int event } } - qDebug("Sending %i bytes of data for HTTP request %s", data.size(), url); + qDebug() << "Sending " << data.size() << " bytes of data for HTTP request" << url; if(VitaMTP_SendHttpObjectFromURL(m_device, eventId, data.data(), data.size()) != PTP_RC_OK) { qWarning("Failed to send HTTP object"); diff --git a/common/cmaobject.cpp b/common/cmaobject.cpp index c4b50dd..79aab2c 100644 --- a/common/cmaobject.cpp +++ b/common/cmaobject.cpp @@ -99,7 +99,7 @@ void CMAObject::loadSfoMetadata(const QString &path) title.chop(1); } metadata.data.saveData.savedataTitle = strdup(title.toStdString().c_str()); - metadata.data.saveData.dateTimeUpdated = QFileInfo(sfo).created().toUTC().toTime_t(); + metadata.data.saveData.dateTimeUpdated = QFileInfo(sfo).birthTime().toUTC().toSecsSinceEpoch(); } else { metadata.data.saveData.title = strdup(metadata.name); metadata.data.saveData.detail = strdup(""); @@ -115,7 +115,7 @@ void CMAObject::initObject(const QFileInfo &file, int obj_file_type) metadata.ohfi = ohfi_count++; metadata.type = VITA_DIR_TYPE_MASK_REGULAR; // ignored for files - metadata.dateTimeCreated = file.created().toUTC().toTime_t(); + metadata.dateTimeCreated = file.birthTime().toUTC().toSecsSinceEpoch(); metadata.size = 0; DataType type = file.isFile() ? File : Folder; metadata.dataType = (DataType)(type | (parent->metadata.dataType & ~Folder)); @@ -142,7 +142,7 @@ void CMAObject::initObject(const QFileInfo &file, int obj_file_type) Database::loadMusicMetadata(file.absoluteFilePath(), metadata); } else if(MASK_SET(metadata.dataType, Video | File)) { metadata.data.video.fileName = strdup(metadata.name); - metadata.data.video.dateTimeUpdated = file.created().toUTC().toTime_t(); + metadata.data.video.dateTimeUpdated = file.birthTime().toUTC().toSecsSinceEpoch(); metadata.data.video.statusType = 1; metadata.data.video.fileFormatType = FILE_FORMAT_MP4; metadata.data.video.parentalLevel = 0; @@ -160,7 +160,7 @@ void CMAObject::initObject(const QFileInfo &file, int obj_file_type) metadata.data.photo.fileName = strdup(metadata.name); metadata.data.photo.fileFormatType = photo_list[obj_file_type].file_format; metadata.data.photo.statusType = 1; - metadata.data.photo.dateTimeOriginal = file.created().toUTC().toTime_t(); + metadata.data.photo.dateTimeOriginal = file.birthTime().toUTC().toSecsSinceEpoch(); metadata.data.photo.numTracks = 1; metadata.data.photo.tracks = new media_track(); metadata.data.photo.tracks->type = VITA_TRACK_TYPE_PHOTO; diff --git a/common/cmautils.cpp b/common/cmautils.cpp index 280ed59..23be926 100644 --- a/common/cmautils.cpp +++ b/common/cmautils.cpp @@ -70,31 +70,7 @@ bool removeRecursively(const QString &path) QFileInfo file_info(path); if(file_info.isDir()) { -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) return QDir(path).removeRecursively(); -#else - bool result = false; - QDir dir(path); - - QDir::Filters filter = QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files; - - if(dir.exists(path)) { - foreach(QFileInfo info, dir.entryInfoList(filter, QDir::DirsFirst)) { - if(info.isDir()) { - result = removeRecursively(info.absoluteFilePath()); - } else { - result = QFile::remove(info.absoluteFilePath()); - } - - if(!result) { - return result; - } - } - result = dir.rmdir(path); - } - - return result; -#endif } else { return QFile::remove(path); } diff --git a/common/cmautils.h b/common/cmautils.h index 0b3a773..ad54054 100644 --- a/common/cmautils.h +++ b/common/cmautils.h @@ -26,24 +26,7 @@ #include -// Qt4 doesn't have public methods for Thread::*sleep -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) typedef QThread Sleeper; -#else -class Sleeper : QThread -{ -public: - static void sleep(unsigned long secs) { - QThread::sleep(secs); - } - static void msleep(unsigned long msecs) { - QThread::msleep(msecs); - } - static void usleep(unsigned long usecs) { - QThread::usleep(usecs); - } -}; -#endif bool removeRecursively(const QString &path); QString readable_size(qint64 size, bool use_gib = false); diff --git a/common/database.cpp b/common/database.cpp index 1b27cf8..3fa827e 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -52,7 +52,7 @@ const file_type video_list[] = { Database::Database(QObject *obj_parent) : QObject(obj_parent), - mutex(QMutex::Recursive) + mutex() { } @@ -63,7 +63,7 @@ void Database::process() cancel_operation = false; int count = create(); cancel_operation = false; - QTextStream(stdout) << "Total entries added to the database: " << count << endl; + QTextStream(stdout) << "Total entries added to the database: " << count << Qt::endl; if(count < 0) { clear(); } diff --git a/common/database.h b/common/database.h index 35ca211..6973c3a 100644 --- a/common/database.h +++ b/common/database.h @@ -88,7 +88,7 @@ public: static void loadPhotoMetadata(const QString &path, metadata_t &metadata); static void loadVideoMetadata(const QString &path, metadata_t &metadata); - QMutex mutex; + QRecursiveMutex mutex; protected: bool continueOperation(); diff --git a/common/qlistdb.cpp b/common/qlistdb.cpp index f5b8f59..10b0b86 100644 --- a/common/qlistdb.cpp +++ b/common/qlistdb.cpp @@ -253,7 +253,7 @@ int QListDB::recursiveScanRootDirectory(root_list &list, CMAObject *obj_parent, QFileInfoList qsl = dir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot, QDir::Time); if(obj_parent && !obj_parent->parent) { - qSort(qsl.begin(), qsl.end(), nameLessThan); + std::sort(qsl.begin(), qsl.end(), nameLessThan); } foreach(const QFileInfo &info, qsl) { @@ -325,7 +325,7 @@ bool QListDB::findInternal(const root_list &list, int ohfi, find_data &data) } else { CMAObject obj; obj.setOhfi(ohfi); - data.it = qBinaryFind(list.begin(), list.end(), &obj, QListDB::lessThanComparator); + data.it = std::lower_bound(list.begin(), list.end(), &obj, QListDB::lessThanComparator); } data.end = list.end(); return data.it != data.end; @@ -565,7 +565,7 @@ int QListDB::insertObjectEntry(const QString &path, const QString &name, int par for(map_list::iterator root = object_list.begin(); root != object_list.end(); ++root) { root_list *cat_list = &(*root); - root_list::const_iterator it = qBinaryFind(cat_list->begin(), cat_list->end(), parent_obj, QListDB::lessThanComparator); + root_list::iterator it = std::lower_bound(cat_list->begin(), cat_list->end(), parent_obj, QListDB::lessThanComparator); if(it != cat_list->end()) { CMAObject *newobj = new CMAObject(parent_obj); diff --git a/common/sqlitedb.cpp b/common/sqlitedb.cpp index 80b2ce0..f1fa1ea 100644 --- a/common/sqlitedb.cpp +++ b/common/sqlitedb.cpp @@ -29,15 +29,7 @@ #include #include #include - -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include -#else -#include -#define QStandardPaths QDesktopServices -#define writableLocation storageLocation -#endif - #include #include @@ -160,7 +152,7 @@ SQLiteDB::SQLiteDB(QObject *obj_parent) : connect(timer, SIGNAL(timeout()), this, SLOT(process())); // fetch a configured database path if it exists - QString db_path = QStandardPaths::writableLocation(QStandardPaths::DataLocation); + QString db_path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); db_path = QSettings().value("databasePath", db_path).toString(); QDir(QDir::root()).mkpath(db_path); @@ -226,7 +218,7 @@ void SQLiteDB::clear() { db.close(); //QSqlDatabase::removeDatabase("QSQLITE"); - QString db_path = QStandardPaths::writableLocation(QStandardPaths::DataLocation); + QString db_path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); db_path = QSettings().value("databasePath", db_path).toString(); QFile(db_path + QDir::separator() + "qcma.sqlite").remove(); load(); @@ -529,13 +521,13 @@ bool SQLiteDB::insertSourceEntry(uint object_id, const QString &path, const QStr QFileInfo info(path, name); if(info.isFile()) { size = QVariant(info.size()); - date_created = QVariant(info.created().toUTC().toTime_t()); + date_created = QVariant(info.birthTime().toUTC().toSecsSinceEpoch()); } else { - size = QVariant(QVariant::LongLong); - date_created = QVariant(QVariant::UInt); + size = QVariant(static_cast(0)); + date_created = QVariant(static_cast(0)); } - date_modified = QVariant(info.lastModified().toUTC().toTime_t()); + date_modified = QVariant(info.lastModified().toUTC().toSecsSinceEpoch()); QSqlQuery query; query.prepare("REPLACE INTO sources (object_id, path, size, date_created, date_modified)" @@ -662,10 +654,10 @@ uint SQLiteDB::insertMusicEntry(const QString &path, const QString &name, int id query.bindValue(2, audio_codec); query.bindValue(3, audio_bitrate); query.bindValue(4, duration); - query.bindValue(5, genre_id ? genre_id : QVariant(QVariant::Int)); - query.bindValue(6, artist_id ? artist_id : QVariant(QVariant::Int)); - query.bindValue(7, album_id ? album_id : QVariant(QVariant::Int)); - query.bindValue(8, track_id ? track_id : QVariant(QVariant::Int)); + query.bindValue(5, genre_id ? genre_id : QVariant(static_cast(0))); + query.bindValue(6, artist_id ? artist_id : QVariant(static_cast(0))); + query.bindValue(7, album_id ? album_id : QVariant(static_cast(0))); + query.bindValue(8, track_id ? track_id : QVariant(static_cast(0))); query.bindValue(9, artist); query.bindValue(10, album); query.bindValue(11, track_number); @@ -775,8 +767,8 @@ uint SQLiteDB::insertPhotoEntry(const QString &path, const QString &name, int id // return 0; //} - QDateTime date = QFileInfo(path + "/" + name).created(); - date_created = date.toUTC().toTime_t(); + QDateTime date = QFileInfo(path + "/" + name).birthTime(); + date_created = date.toUTC().toSecsSinceEpoch(); QString month_created = date.toString("yyyy/MM"); width = 0; //img.width(); @@ -826,7 +818,7 @@ uint SQLiteDB::insertSavedataEntry(const QString &path, const QString &name, int title = reader.value("TITLE", utf8name.constData()); savedata_detail = reader.value("SAVEDATA_DETAIL", ""); savedata_directory = reader.value("SAVEDATA_DIRECTORY", utf8name.constData()); - date_updated = QFileInfo(path + "/" + name).lastModified().toUTC().toTime_t(); + date_updated = QFileInfo(path + "/" + name).lastModified().toUTC().toSecsSinceEpoch(); } if((ohfi = insertDefaultEntry(path, name, title, id_parent, type)) == 0) { diff --git a/gui/forms/backupitem.cpp b/gui/forms/backupitem.cpp index fd0f6fb..a78fd16 100644 --- a/gui/forms/backupitem.cpp +++ b/gui/forms/backupitem.cpp @@ -62,7 +62,7 @@ void BackupItem::removeEntry() emit deleteEntry(this); } -const QPixmap *BackupItem::getIconPixmap() +const QPixmap BackupItem::getIconPixmap() { return ui->itemPicture->pixmap(); } diff --git a/gui/forms/backupitem.h b/gui/forms/backupitem.h index 8a27c9b..4172a78 100644 --- a/gui/forms/backupitem.h +++ b/gui/forms/backupitem.h @@ -37,7 +37,7 @@ public: void setItemInfo(const QString &name, const QString &size, const QString &extra); void setItemIcon(const QString &m_path, int width = 48, bool try_dds = false); void setDirectory(const QString &m_path); - const QPixmap *getIconPixmap(); + const QPixmap getIconPixmap(); int getIconWidth(); QString getPath(); QString getSize(); diff --git a/gui/forms/backupmanagerform.cpp b/gui/forms/backupmanagerform.cpp index 346083e..67d4785 100644 --- a/gui/forms/backupmanagerform.cpp +++ b/gui/forms/backupmanagerform.cpp @@ -19,7 +19,6 @@ #include "backupmanagerform.h" #include "ui_backupmanagerform.h" -#include "cmaobject.h" #include "sforeader.h" #include "confirmdialog.h" #include "cmautils.h" @@ -90,7 +89,7 @@ void BackupManagerForm::removeEntry(BackupItem *item) ConfirmDialog msgBox; msgBox.setMessageText(tr("Are you sure to remove the backup of the following entry?"), item->title); - msgBox.setMessagePixmap(*item->getIconPixmap(), item->getIconWidth()); + msgBox.setMessagePixmap(item->getIconPixmap(), item->getIconWidth()); if(msgBox.exec() == 0) { return; @@ -190,11 +189,7 @@ void BackupManagerForm::loadBackupListing(int index) // adjust the table item width to fill all the widget QHeaderView *vert_header = ui->tableWidget->verticalHeader(); QHeaderView *horiz_header = ui->tableWidget->horizontalHeader(); -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) horiz_header->setSectionResizeMode(QHeaderView::Stretch); -#else - horiz_header->setResizeMode(QHeaderView::Stretch); -#endif qint64 backup_size = m_db->getObjectSize(ohfi); setBackupUsage(backup_size); QString path = m_db->getAbsolutePath(ohfi); @@ -254,7 +249,7 @@ void BackupManagerForm::loadBackupListing(int index) m_db->freeMetadata(first); - qSort(item_list.begin(), item_list.end(), BackupItem::lessThan); + std::sort(item_list.begin(), item_list.end(), BackupItem::lessThan); int row; QList::iterator it; diff --git a/gui/forms/configwidget.cpp b/gui/forms/configwidget.cpp index 4d3531d..e9e451c 100644 --- a/gui/forms/configwidget.cpp +++ b/gui/forms/configwidget.cpp @@ -26,14 +26,7 @@ extern "C" { #include #include - -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include -#else -#include -#define QStandardPaths QDesktopServices -#define writableLocation storageLocation -#endif ConfigWidget::ConfigWidget(QWidget *obj_parent) : QDialog(obj_parent), diff --git a/gui/forms/pinform.cpp b/gui/forms/pinform.cpp index 85eeb8a..805018a 100644 --- a/gui/forms/pinform.cpp +++ b/gui/forms/pinform.cpp @@ -21,7 +21,7 @@ #include "ui_pinform.h" #include -#include +#include const QString PinForm::pinFormat = "" @@ -33,7 +33,10 @@ PinForm::PinForm(QWidget *obj_parent) : ui(new Ui::PinForm) { ui->setupUi(this); - move(QApplication::desktop()->screen()->rect().center() - rect().center()); + if (QScreen *screen = QGuiApplication::primaryScreen()) { + QRect screenGeometry = screen->geometry(); + move(screenGeometry.center() - rect().center()); + } setFixedSize(size()); setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint); connect(ui->cancelButton, SIGNAL(clicked()), this, SLOT(hide())); diff --git a/gui/forms/progressform.cpp b/gui/forms/progressform.cpp index 5ecac28..a15f565 100644 --- a/gui/forms/progressform.cpp +++ b/gui/forms/progressform.cpp @@ -20,15 +20,18 @@ #include "progressform.h" #include "ui_progressform.h" -#include #include +#include ProgressForm::ProgressForm(QWidget *obj_parent) : QWidget(obj_parent), ui(new Ui::ProgressForm) { ui->setupUi(this); - move(QApplication::desktop()->screen()->rect().center() - rect().center()); + if (QScreen *screen = QGuiApplication::primaryScreen()) { + QRect screenGeometry = screen->geometry(); + move(screenGeometry.center() - rect().center()); + } setFixedSize(size()); setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint); connect(ui->cancelButton, SIGNAL(clicked()), this, SLOT(cancelConfirm())); diff --git a/gui/main.cpp b/gui/main.cpp index 0520871..9fda83e 100644 --- a/gui/main.cpp +++ b/gui/main.cpp @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include @@ -34,14 +33,9 @@ #include "singleapplication.h" #include "mainwidget.h" -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) static void noMessageOutput(QtMsgType type, const QMessageLogContext &, const QString & str) { const char * msg = str.toStdString().c_str(); -#else -static void noMessageOutput(QtMsgType type, const char *msg) -{ -#endif Q_UNUSED(type); Q_UNUSED(msg); } @@ -102,18 +96,10 @@ int main(int argc, char *argv[]) VitaMTP_Set_Logging(VitaMTP_VERBOSE); } else { VitaMTP_Set_Logging(VitaMTP_NONE); -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) qInstallMessageHandler(noMessageOutput); -#else - qInstallMsgHandler(noMessageOutput); -#endif } -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); -#endif - - QTextStream(stdout) << "Starting Qcma " << QCMA_VER << endl; + QTextStream(stdout) << "Starting Qcma " << QCMA_VER << Qt::endl; QTranslator translator; QString locale = QLocale().system().name(); @@ -134,8 +120,11 @@ int main(int argc, char *argv[]) } QTranslator system_translator; - system_translator.load("qt_" + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath)); - app.installTranslator(&system_translator); + if(!system_translator.load("qt_" + locale, QLibraryInfo::path(QLibraryInfo::TranslationsPath))) { + qWarning() << "Cannot load system translation for locale:" << locale; + } else { + app.installTranslator(&system_translator); + } qDebug("Starting main thread: 0x%016" PRIxPTR, (uintptr_t)QThread::currentThreadId()); diff --git a/gui/trayindicator.h b/gui/trayindicator.h index 1934ee7..606a7cc 100644 --- a/gui/trayindicator.h +++ b/gui/trayindicator.h @@ -25,12 +25,6 @@ #include "trayindicator_global.h" -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) -// in Qt4 signals are protected -#undef signals -#define signals public -#endif - class TrayIndicator : public QWidget { Q_OBJECT