28 m_stream.setEncoding(QStringConverter::Utf8);
33 return BookmarksImporter::tr(
"Opera stores its bookmarks in <b>bookmarks.adr</b> text file. "
34 "This file is usually located in");
40 return QString(
"%APPDATA%/Opera/");
42 return QDir::homePath() + QLatin1String(
"/.opera/");
48 m_path = QFileDialog::getOpenFileName(parent, BookmarksImporter::tr(
"Choose file..."),
standardPath(), QStringLiteral(
"Bookmarks (*.adr)"));
54 m_file.setFileName(m_path);
56 if (!m_file.open(QFile::ReadOnly)) {
57 setError(BookmarksImporter::tr(
"Unable to open file."));
61 m_stream.setDevice(&m_file);
63 if (m_stream.readLine() != QLatin1String(
"Opera Hotlist version 2.0")) {
64 setError(BookmarksImporter::tr(
"File is not valid Opera bookmarks file!"));
68 if (!m_stream.readLine().startsWith(QLatin1String(
"Options: encoding = utf8"))) {
69 setError(BookmarksImporter::tr(
"Only UTF-8 encoded Opera bookmarks file is supported!"));
79 root->setTitle(
QSL(
"Opera Import"));
81 QList<BookmarkItem*> folders;
86#define PARENT folders.isEmpty() ? root : folders.last()
88 while (!m_stream.atEnd()) {
89 switch (parseLine(m_stream.readLine())) {
92 while (!m_stream.atEnd()) {
93 Token tok = parseLine(m_stream.readLine());
96 else if (tok == KeyValuePair && m_key == QLatin1String(
"NAME"))
103 if (folders.count() > 0) {
104 folders.removeLast();
110 while (!m_stream.atEnd()) {
111 Token tok = parseLine(m_stream.readLine());
112 if (tok == EmptyLine) {
115 else if (tok == KeyValuePair) {
116 if (m_key ==
QL1S(
"NAME"))
118 else if (m_key ==
QL1S(
"URL"))
119 item->
setUrl(QUrl(m_value));
120 else if (m_key ==
QL1S(
"DESCRIPTION"))
122 else if (m_key ==
QL1S(
"SHORT NAME"))
130 while (!m_stream.atEnd()) {
131 if (parseLine(m_stream.readLine()) == EmptyLine) {
138 while (!m_stream.atEnd()) {
139 if (parseLine(m_stream.readLine()) == EmptyLine) {
155OperaImporter::Token OperaImporter::parseLine(
const QString &line)
157 const QString str = line.trimmed();
163 if (str == QLatin1String(
"#FOLDER")) {
167 if (str == QLatin1String(
"-")) {
171 if (str == QLatin1String(
"#URL")) {
175 if (str == QLatin1String(
"#SEPERATOR")) {
176 return StartSeparator;
179 if (str == QLatin1String(
"#DELETED")) {
183 int index = str.indexOf(QLatin1Char(
'='));
187 m_key = str.mid(0, index);
188 m_value = str.mid(index + 1);
void setDescription(const QString &description)
void setKeyword(const QString &keyword)
void setUrl(const QUrl &url)
void setTitle(const QString &title)
void setError(const QString &error)
BookmarkItem * importBookmarks() override
QString getPath(QWidget *parent) override
bool prepareImport() override
QString standardPath() const override
OperaImporter(QObject *parent=nullptr)
QString description() const override