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() {
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 selected_filter;
// Add more filters here.
filter += filter_opml20;
filter += ";;";
filter += filter_txt_url_per_line;
QString selected_file = QFileDialog::getSaveFileName(this, tr("Select file for feeds export"),
qApp->homeFolderPath(), filter, &selected_filter);
@ -120,6 +123,13 @@ void FormStandardImportExport::selectExportFile() {
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."));
}
@ -129,12 +139,15 @@ void FormStandardImportExport::selectExportFile() {
void FormStandardImportExport::selectImportFile() {
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 selected_filter;
// Add more filters here.
filter += filter_opml20;
filter += ";;";
filter += filter_txt_url_per_line;
QString selected_file = QFileDialog::getOpenFileName(this, tr("Select file for feeds import"), qApp->homeFolderPath(),
filter, &selected_filter);
@ -143,6 +156,9 @@ void FormStandardImportExport::selectImportFile() {
if (selected_filter == filter_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."));
parseImportFile(selected_file);
@ -170,6 +186,10 @@ void FormStandardImportExport::parseImportFile(const QString &file_name) {
parsing_result = m_model->importAsOPML20(input_data);
break;
case TXTUrlPerLine:
// TODO: TODO
//parsing_result = m_model->importAsTxtURLPerLine(input_data);
default:
return;
}
@ -204,29 +224,34 @@ void FormStandardImportExport::performAction() {
}
void FormStandardImportExport::exportFeeds() {
switch (m_conversionType) {
case OPML20: {
QByteArray result_data;
bool result_export = m_model->exportToOMPL20(result_data);
bool result_export;
switch (m_conversionType) {
case OPML20:
result_export = m_model->exportToOMPL20(result_data);
break;
case TXTUrlPerLine:
result_export = m_model->exportToTxtURLPerLine(result_data);
break;
default:
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."), ex.message());
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."));
}
}
default:
break;
}
}
void FormStandardImportExport::importFeeds() {

View file

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

View file

@ -67,7 +67,7 @@ bool FeedsImportExportModel::exportToOMPL20(QByteArray &result) {
QSL("version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\""));
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.documentElement().setAttribute(QSL("version"), QSL("version"));
@ -255,6 +255,18 @@ bool FeedsImportExportModel::importAsOPML20(const QByteArray &data) {
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 {
return m_mode;
}

View file

@ -62,6 +62,11 @@ class FeedsImportExportModel : public QAbstractItemModel {
bool exportToOMPL20(QByteArray &result);
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;
void setMode(const Mode &mode);