Export to TXT done, import remains.

This commit is contained in:
Martin Rotter 2016-01-04 12:47:59 +01:00
parent 91e9dd2a46
commit 5b9b031150
4 changed files with 62 additions and 19 deletions

View file

@ -102,12 +102,15 @@ void FormStandardImportExport::selectFile() {
void FormStandardImportExport::selectExportFile() { void FormStandardImportExport::selectExportFile() {
QString filter_opml20 = tr("OPML 2.0 files (*.opml)"); QString filter_opml20 = tr("OPML 2.0 files (*.opml)");
QString filter_txt_url_per_line = tr("TXT files (one URL per line) (.txt)");
QString filter; QString filter;
QString selected_filter; QString selected_filter;
// Add more filters here. // Add more filters here.
filter += filter_opml20; filter += filter_opml20;
filter += ";;";
filter += filter_txt_url_per_line;
QString selected_file = QFileDialog::getSaveFileName(this, tr("Select file for feeds export"), QString selected_file = QFileDialog::getSaveFileName(this, tr("Select file for feeds export"),
qApp->homeFolderPath(), filter, &selected_filter); qApp->homeFolderPath(), filter, &selected_filter);
@ -120,6 +123,13 @@ void FormStandardImportExport::selectExportFile() {
selected_file += QL1S(".opml"); selected_file += QL1S(".opml");
} }
} }
else if (selected_filter == filter_txt_url_per_line) {
m_conversionType = TXTUrlPerLine;
if (!selected_file.endsWith(QL1S(".txt"))) {
selected_file += QL1S(".txt");
}
}
m_ui->m_lblSelectFile->setStatus(WidgetWithStatus::Ok, QDir::toNativeSeparators(selected_file), tr("File is selected.")); m_ui->m_lblSelectFile->setStatus(WidgetWithStatus::Ok, QDir::toNativeSeparators(selected_file), tr("File is selected."));
} }
@ -129,12 +139,15 @@ void FormStandardImportExport::selectExportFile() {
void FormStandardImportExport::selectImportFile() { void FormStandardImportExport::selectImportFile() {
QString filter_opml20 = tr("OPML 2.0 files (*.opml)"); QString filter_opml20 = tr("OPML 2.0 files (*.opml)");
QString filter_txt_url_per_line = tr("TXT files (one URL per line) (.txt)");
QString filter; QString filter;
QString selected_filter; QString selected_filter;
// Add more filters here. // Add more filters here.
filter += filter_opml20; filter += filter_opml20;
filter += ";;";
filter += filter_txt_url_per_line;
QString selected_file = QFileDialog::getOpenFileName(this, tr("Select file for feeds import"), qApp->homeFolderPath(), QString selected_file = QFileDialog::getOpenFileName(this, tr("Select file for feeds import"), qApp->homeFolderPath(),
filter, &selected_filter); filter, &selected_filter);
@ -143,6 +156,9 @@ void FormStandardImportExport::selectImportFile() {
if (selected_filter == filter_opml20) { if (selected_filter == filter_opml20) {
m_conversionType = OPML20; m_conversionType = OPML20;
} }
else if (selected_filter == filter_txt_url_per_line) {
m_conversionType = TXTUrlPerLine;
}
m_ui->m_lblSelectFile->setStatus(WidgetWithStatus::Ok, QDir::toNativeSeparators(selected_file), tr("File is selected.")); m_ui->m_lblSelectFile->setStatus(WidgetWithStatus::Ok, QDir::toNativeSeparators(selected_file), tr("File is selected."));
parseImportFile(selected_file); parseImportFile(selected_file);
@ -170,6 +186,10 @@ void FormStandardImportExport::parseImportFile(const QString &file_name) {
parsing_result = m_model->importAsOPML20(input_data); parsing_result = m_model->importAsOPML20(input_data);
break; break;
case TXTUrlPerLine:
// TODO: TODO
//parsing_result = m_model->importAsTxtURLPerLine(input_data);
default: default:
return; return;
} }
@ -204,29 +224,34 @@ void FormStandardImportExport::performAction() {
} }
void FormStandardImportExport::exportFeeds() { void FormStandardImportExport::exportFeeds() {
QByteArray result_data;
bool result_export;
switch (m_conversionType) { switch (m_conversionType) {
case OPML20: { case OPML20:
QByteArray result_data; result_export = m_model->exportToOMPL20(result_data);
bool result_export = m_model->exportToOMPL20(result_data); break;
if (result_export) { case TXTUrlPerLine:
try { result_export = m_model->exportToTxtURLPerLine(result_data);
IOFactory::writeTextFile(m_ui->m_lblSelectFile->label()->text(), result_data); break;
m_ui->m_lblResult->setStatus(WidgetWithStatus::Ok, tr("Feeds were exported successfully."), tr("Feeds were exported successfully."));
}
catch (IOException &ex) {
m_ui->m_lblResult->setStatus(WidgetWithStatus::Error, tr("Cannot write into destination file."), ex.message());
}
}
else {
m_ui->m_lblResult->setStatus(WidgetWithStatus::Error, tr("Critical error occurred."), tr("Critical error occurred."));
}
}
default: default:
break; break;
} }
if (result_export) {
try {
IOFactory::writeTextFile(m_ui->m_lblSelectFile->label()->text(), result_data);
m_ui->m_lblResult->setStatus(WidgetWithStatus::Ok, tr("Feeds were exported successfully."), tr("Feeds were exported successfully."));
}
catch (IOException &ex) {
m_ui->m_lblResult->setStatus(WidgetWithStatus::Error, tr("Cannot write into destination file: '%1'."), ex.message());
}
}
else {
m_ui->m_lblResult->setStatus(WidgetWithStatus::Error, tr("Critical error occurred."), tr("Critical error occurred."));
}
} }
void FormStandardImportExport::importFeeds() { void FormStandardImportExport::importFeeds() {

View file

@ -34,7 +34,8 @@ class FormStandardImportExport : public QDialog {
public: public:
enum ConversionType { enum ConversionType {
OPML20 = 0 OPML20 = 0,
TXTUrlPerLine = 1
}; };
// Constructors. // Constructors.

View file

@ -67,7 +67,7 @@ bool FeedsImportExportModel::exportToOMPL20(QByteArray &result) {
QSL("version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"")); QSL("version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\""));
opml_document.appendChild(xml_declaration); opml_document.appendChild(xml_declaration);
// Adde OPML 2.0 metadata. // Added OPML 2.0 metadata.
opml_document.appendChild(opml_document.createElement(QSL("opml"))); opml_document.appendChild(opml_document.createElement(QSL("opml")));
opml_document.documentElement().setAttribute(QSL("version"), QSL("version")); opml_document.documentElement().setAttribute(QSL("version"), QSL("version"));
@ -255,6 +255,18 @@ bool FeedsImportExportModel::importAsOPML20(const QByteArray &data) {
return true; return true;
} }
bool FeedsImportExportModel::exportToTxtURLPerLine(QByteArray &result) {
foreach (const Feed * const feed, m_rootItem->getSubTreeFeeds()) {
result += feed->url() + QL1S("\n");
}
return true;
}
bool FeedsImportExportModel::importAsTxtURLPerLine(const QByteArray &data) {
return true;
}
FeedsImportExportModel::Mode FeedsImportExportModel::mode() const { FeedsImportExportModel::Mode FeedsImportExportModel::mode() const {
return m_mode; return m_mode;
} }

View file

@ -62,6 +62,11 @@ class FeedsImportExportModel : public QAbstractItemModel {
bool exportToOMPL20(QByteArray &result); bool exportToOMPL20(QByteArray &result);
bool importAsOPML20(const QByteArray &data); bool importAsOPML20(const QByteArray &data);
// Exports to plain text format
// where there is one feed URL per line.
bool exportToTxtURLPerLine(QByteArray &result);
bool importAsTxtURLPerLine(const QByteArray &data);
Mode mode() const; Mode mode() const;
void setMode(const Mode &mode); void setMode(const Mode &mode);