// This file is part of RSS Guard. // // Copyright (C) 2011-2015 by Martin Rotter // // RSS Guard is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // RSS Guard is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RSS Guard. If not, see . #include "miscellaneous/iofactory.h" #include "definitions/definitions.h" #include "exceptions/ioexception.h" #include #include #include #include #include IOFactory::IOFactory() { } QString IOFactory::getSystemFolder(SYSTEM_FOLDER_ENUM::StandardLocation location) { #if QT_VERSION >= 0x050000 return SYSTEM_FOLDER_ENUM::writableLocation(location); #else return SYSTEM_FOLDER_ENUM::storageLocation(location); #endif } QString IOFactory::ensureUniqueFilename(const QString &name, const QString &append_format) { if (!QFile::exists(name)) { return name; } QString tmp_filename = name; int i = 1; while (QFile::exists(tmp_filename)) { tmp_filename = name; int index = tmp_filename.lastIndexOf(QL1C('.')); QString append_string = append_format.arg(i++); if (index < 0) { tmp_filename.append(append_string); } else { tmp_filename = tmp_filename.left(index) + append_string + tmp_filename.mid(index); } } return tmp_filename; } QString IOFactory::filterBadCharsFromFilename(const QString &name) { QString value = name; value.replace(QL1C('/'), QL1C('-')); value.remove(QL1C('\\')); value.remove(QL1C(':')); value.remove(QL1C('*')); value.remove(QL1C('?')); value.remove(QL1C('"')); value.remove(QL1C('<')); value.remove(QL1C('>')); value.remove(QL1C('|')); return value; } QByteArray IOFactory::readTextFile(const QString &file_path) { QFile input_file(file_path); QByteArray input_data; if (input_file.open(QIODevice::Text | QIODevice::Unbuffered | QIODevice::ReadOnly)) { input_data = input_file.readAll(); input_file.close(); return input_data; } else { throw IOException(tr("Cannot open file '%1' for reading.").arg(QDir::toNativeSeparators(file_path))); } } void IOFactory::writeTextFile(const QString &file_path, const QByteArray &data, const QString &encoding) { QFile input_file(file_path); QTextStream stream(&input_file); if (input_file.open(QIODevice::Text | QIODevice::WriteOnly)) { stream << data; stream.flush(); input_file.flush(); input_file.close(); } else { throw IOException(tr("Cannot open file '%1' for writting.").arg(QDir::toNativeSeparators(file_path))); } } bool IOFactory::copyFile(const QString &source, const QString &destination) { if (QFile::exists(destination)) { if (!QFile::remove(destination)) { return false; } } return QFile::copy(source, destination); }