Export to TXT done, import remains.
This commit is contained in:
parent
91e9dd2a46
commit
5b9b031150
4 changed files with 62 additions and 19 deletions
|
@ -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() {
|
||||||
|
|
|
@ -34,7 +34,8 @@ class FormStandardImportExport : public QDialog {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum ConversionType {
|
enum ConversionType {
|
||||||
OPML20 = 0
|
OPML20 = 0,
|
||||||
|
TXTUrlPerLine = 1
|
||||||
};
|
};
|
||||||
|
|
||||||
// Constructors.
|
// Constructors.
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue