mirror of
				https://github.com/YACReader/yacreader
				synced 2025-11-03 16:54:39 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			102 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include "comic_files_manager.h"
 | 
						|
#include <QFile>
 | 
						|
#include <QFileInfo>
 | 
						|
#include <QDir>
 | 
						|
 | 
						|
#include <QsLog.h>
 | 
						|
 | 
						|
#include "comic.h"
 | 
						|
 | 
						|
ComicFilesManager::ComicFilesManager(QObject *parent)
 | 
						|
    : QObject(parent), canceled(false)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
void ComicFilesManager::copyComicsTo(const QList<QPair<QString, QString>> &sourceComics, const QString &folderDest, const QModelIndex &dest)
 | 
						|
{
 | 
						|
    comics = sourceComics;
 | 
						|
    folder = folderDest;
 | 
						|
    folderDestinationModelIndex = dest;
 | 
						|
    move = false;
 | 
						|
}
 | 
						|
 | 
						|
void ComicFilesManager::moveComicsTo(const QList<QPair<QString, QString>> &sourceComics, const QString &folderDest, const QModelIndex &dest)
 | 
						|
{
 | 
						|
    comics = sourceComics;
 | 
						|
    folder = folderDest;
 | 
						|
    folderDestinationModelIndex = dest;
 | 
						|
    move = true;
 | 
						|
}
 | 
						|
 | 
						|
QList<QPair<QString, QString>> ComicFilesManager::getDroppedFiles(const QList<QUrl> &urls)
 | 
						|
{
 | 
						|
    QList<QPair<QString, QString>> dropedFiles;
 | 
						|
 | 
						|
    QString currentPath;
 | 
						|
    foreach (QUrl url, urls) {
 | 
						|
        currentPath = url.toLocalFile();
 | 
						|
        if (currentPath.endsWith('/'))
 | 
						|
            currentPath = currentPath.remove(currentPath.length() - 1, 1); //QTBUG-35896 QUrl.toLocalFile inconsistency.
 | 
						|
        if (Comic::fileIsComic(currentPath))
 | 
						|
            dropedFiles << QPair<QString, QString>(currentPath, "/");
 | 
						|
        else {
 | 
						|
            QLOG_DEBUG() << "XXXXXXXXXXXX :" << currentPath;
 | 
						|
            QFileInfo info(currentPath);
 | 
						|
            if (info.isDir()) {
 | 
						|
                QLOG_DEBUG() << "origin path prior to absoluteFilePath : " << info.absolutePath();
 | 
						|
                foreach (QString comicPath, Comic::findValidComicFilesInFolder(info.absoluteFilePath())) {
 | 
						|
                    QFileInfo comicInfo(comicPath);
 | 
						|
                    QString path = comicInfo.absolutePath();
 | 
						|
                    QLOG_DEBUG() << "comic path : " << comicPath;
 | 
						|
                    QLOG_DEBUG() << "full comic path : " << path;
 | 
						|
                    QLOG_DEBUG() << "origin path : " << info.absolutePath();
 | 
						|
                    dropedFiles << QPair<QString, QString>(comicPath, path.remove(info.absolutePath()));
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    return dropedFiles;
 | 
						|
}
 | 
						|
 | 
						|
void ComicFilesManager::process()
 | 
						|
{
 | 
						|
    int i = 0;
 | 
						|
    bool successProcesingFiles = false;
 | 
						|
    QPair<QString, QString> source;
 | 
						|
    foreach (source, comics) {
 | 
						|
 | 
						|
        if (canceled) {
 | 
						|
            if (successProcesingFiles)
 | 
						|
                emit success(folderDestinationModelIndex);
 | 
						|
            emit finished();
 | 
						|
 | 
						|
            return; //TODO rollback?
 | 
						|
        }
 | 
						|
 | 
						|
        QFileInfo info(source.first);
 | 
						|
        QString destPath = QDir::cleanPath(folder + '/' + source.second);
 | 
						|
        QLOG_DEBUG() << "crear : " << destPath;
 | 
						|
        QDir().mkpath(destPath);
 | 
						|
        if (QFile::copy(source.first, QDir::cleanPath(destPath + '/' + info.fileName()))) {
 | 
						|
            successProcesingFiles = true;
 | 
						|
            if (move) {
 | 
						|
                QFile::remove(source.first); //TODO: remove the whole path....
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        i++;
 | 
						|
        emit progress(i);
 | 
						|
    }
 | 
						|
 | 
						|
    if (successProcesingFiles)
 | 
						|
        emit success(folderDestinationModelIndex);
 | 
						|
    emit finished();
 | 
						|
}
 | 
						|
 | 
						|
void ComicFilesManager::cancel()
 | 
						|
{
 | 
						|
    QLOG_DEBUG() << "Operation canceled";
 | 
						|
    canceled = true;
 | 
						|
}
 |