Коммит 480a1449 создал по автору vladislav.larionov's avatar vladislav.larionov
Просмотр файлов

Rename the application

владелец ce593f45
# Document Converter
# OfficeViewer
This project provides an example using libreoffice to converting documents.
This project provides an example using libreoffice to open documents.
The source code of the project is provided under
[the license](LICENSE.BSD-3-CLAUSE.md),
......@@ -20,7 +20,7 @@ For information about contributors see [AUTHORS](AUTHORS.md).
The project has a common structure
of an application based on C++ and QML for Aurora OS.
* **[ru.auroraos.DocumentConverter.pro](application/ru.auroraos.DocumentConverter.pro)** file
* **[ru.auroraos.OfficeViewer.pro](application/ru.auroraos.OfficeViewer.pro)** file
describes the subdirs project that contains two two subprojects where the first is responsible
for building the libreoffice, and the second describes the structure of the application for
the qmake build system.
......@@ -29,26 +29,43 @@ of an application based on C++ and QML for Aurora OS.
* **[cover](application/qml/cover)** directory contains the application cover implementations.
* **[icons](application/qml/icons)** directory contains the custom UI icons.
* **[pages](application/qml/pages)** directory contains the application pages.
* **[DocumentConverter.qml](application/qml/DocumentConverter.qml)** file
* **[DocumentConverter.qml](application/qml/OfficeViewer.qml)** file
provides the application window implementation.
* **[rpm](rpm)** directory contains the rpm-package build settings.
**[ru.auroraos.DocumentConverter.spec](rpm/ru.auroraos.DocumentConverter.spec)** file is used by rpmbuild tool.
**[ru.auroraos.OfficeViewer.spec](rpm/ru.auroraos.OfficeViewer.spec)** file is used by rpmbuild tool.
* **[src](application/src)** directory contains the C++ source code.
* **[main.cpp](application/src/main.cpp)** file is the application entry point.
* **[translations](application/translations)** directory contains the UI translation files.
* **[ru.auroraos.DocumentConverter.desktop](application/ru.auroraos.DocumentConverter.desktop)** file
* **[ru.auroraos.OfficeViewer.desktop](application/ru.auroraos.OfficeViewer.desktop)** file
defines the display and parameters for launching the application.
* **[libreoffice](upstream)** directory contains source code LibreOffice (git submodule)
* **[tarballs](tarballs)** directory of dependencies in the form of archives necessary for the build LibreOffice.
## Building
**The application cannot be built with Qt Creator IDE.**
To build the application use the next steps:
* Open a terminal or command prompt.
* Navigate to the directory that contains your Git repository.
* Execute the command "git lfs pull" to download any files tracked by LFS.
* Execute the command "git submodule update --init" to update and initialize any submodules in the repository.
* Execute the command "mb2 -t AuroraOS-4.0.2.209-base-armv7hl prepare" to apply the patches needed for the build.
* Execute the command "mb2 -t AuroraOS-4.0.2.209-base-armv7hl build" to start building the package.
* Execute the command `git lfs pull` to download any files tracked by LFS.
* Execute the command `git submodule update --init` to update and initialize any submodules in the repository.
* Set the target `sfdk config target=AuroraOS-4.0.2.249-base-armv7hl`.
* Execute the command `sfdk build-init` to initialize the build enviropment.
* Execute the command `sfdk prepare` to apply the patches needed for the build.
* Execute the command `sfdk build` to start building the package.
* Execute the command `sfdk device list` to show the avaliable devices to deploy the result.
* Execute the command `sfdk config device="INOI P4903 (ARM)"` to set a device to deploy. The INOI P4903 (ARM) is an example of the target device.
* Execute the command to sign the rpm-package:
```
sfdk engine exec rpmsign-external sign \
--key absolute/path/to/key/file.pem \
--cert absolute/path/to/cert/file.pem \
absolute/path/to/rpm/package.rpm
```
The target rpm-package is in the RPMS directory of the project.
* Execute the command `sfdk deploy --sdk --silent` to deploy the application.
Note: To execute the steps "git lfs pull" and "git submodule update --init", you will need to have Git Large File Storage (LFS) and Git Submodule plugins installed on your system.
......
......@@ -36,7 +36,7 @@
##
################################################################################
TARGET = ru.auroraos.DocumentConverter
TARGET = ru.auroraos.OfficeViewer
QT += core dbus
......@@ -68,11 +68,8 @@ INCLUDEPATH += \
LIBS += -ldl
DISTFILES += \
qml/DocumentConverter.qml \
qml/pages/MainPage.qml \
qml/pages/ConvertPage.qml \
qml/OfficeViewer.qml \
qml/dialogs/AcceptLicenseDialog.qml \
qml/cover/DefaultCoverPage.qml \
qml/images/Documents.svg \
qml/cover/CoverPage.qml \
qml/cover/CoverFileItem.qml \
......@@ -89,8 +86,8 @@ OTHER_FILES += \
CONFIG += auroraapp_i18n
TRANSLATIONS += \
translations/ru.auroraos.DocumentConverter.ts \
translations/ru.auroraos.DocumentConverter-ru.ts \
translations/ru.auroraos.OfficeViewer.ts \
translations/ru.auroraos.OfficeViewer-ru.ts \
translations.path = /usr/share/$${TARGET}/translations
translations.files = $$TRANSLATIONS
......@@ -102,7 +99,7 @@ licenses.path = /usr/share/$$TARGET
licenses.files = licenses
INSTALLS += licenses
SUPPORT_MIMETYPES = "$$system(cat $$IN_PWD/ru.auroraos.DocumentConverter.desktop | grep MimeType)"
SUPPORT_MIMETYPES = "$$system(cat $$IN_PWD/ru.auroraos.OfficeViewer.desktop | grep MimeType)"
SUPPORT_MIMETYPES ~= s/MimeType=//
SUPPORT_MIMETYPES ~= s/;$//
SUPPORT_MIMETYPES = $$replace(SUPPORT_MIMETYPES, ";", ",")
......
......@@ -61,7 +61,9 @@ ApplicationWindow
FileListPage {
id: fileListPage
Component.onCompleted: applicationWindow.mainPage = fileListPage
Component.onCompleted: {
applicationWindow.mainPage = fileListPage
}
model: trackerProvider.model
provider: trackerProvider
}
......
/*******************************************************************************
**
** Copyright (C) 2023 Open Mobile Platform LLC.
** Contact: https://community.omprussia.ru/open-source
**
** This file is part of the DocumentConverter project.
**
** Redistribution and use in source and binary forms,
** with or without modification, are permitted provided
** that the following conditions are met:
**
** * Redistributions of source code must retain the above copyright notice,
** this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright notice,
** this list of conditions and the following disclaimer
** in the documentation and/or other materials provided with the distribution.
** * Neither the name of the copyright holder nor the names of its contributors
** may be used to endorse or promote products derived from this software
** without specific prior written permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
** THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
** FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
** IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
** OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
** LOSS OF USE, DATA, OR PROFITS;
** OR BUSINESS INTERRUPTION)
** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE)
** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
** EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**
*******************************************************************************/
import QtQuick 2.0
import Sailfish.Silica 1.0
CoverBackground {
objectName: "defaultCover"
CoverPlaceholder {
objectName: "placeholder"
text: qsTr("Document Converter")
icon {
source: Qt.resolvedUrl("../icons/icon-document-converter.svg")
sourceSize { width: icon.width; height: icon.height }
}
forceFit: true
}
}
/*******************************************************************************
**
** Copyright (C) 2023 Open Mobile Platform LLC.
** Contact: https://community.omprussia.ru/open-source
**
** This file is part of the DocumentConverter project.
**
** Redistribution and use in source and binary forms,
** with or without modification, are permitted provided
** that the following conditions are met:
**
** * Redistributions of source code must retain the above copyright notice,
** this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright notice,
** this list of conditions and the following disclaimer
** in the documentation and/or other materials provided with the distribution.
** * Neither the name of the copyright holder nor the names of its contributors
** may be used to endorse or promote products derived from this software
** without specific prior written permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
** THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
** FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
** IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
** OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
** LOSS OF USE, DATA, OR PROFITS;
** OR BUSINESS INTERRUPTION)
** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE)
** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
** EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**
*******************************************************************************/
import QtQuick 2.2
import Sailfish.Silica 1.0
import Sailfish.Pickers 1.0
import ru.auroraos.DocumentConverter 1.0
Page {
id: loadFilePage
property string fileSourcePath
property string fileResultPath
property string fileName
objectName: "loadFilePage"
allowedOrientations: Orientation.All
PageHeader {
id: pageHader
objectName: "pageHeader"
title: qsTr("converting")
}
BusyIndicator {
id: indicator
size: BusyIndicatorSize.Large
anchors.centerIn: parent
running: visible
}
Timer {
id: timer
interval: 4500
running: true
onTriggered: {
if (converter.state === Converter.Saved) {
indicator.visible = false
postIndicatorText.visible = true
}
}
}
Text {
id: preIndicatorText
anchors {
top: indicator.bottom
topMargin: Theme.paddingLarge
}
width: parent.width
color: Theme.highlightColor
text: qsTr("Converting file ...")
font.pixelSize: Theme.fontSizeLarge
horizontalAlignment: Qt.AlignHCenter
visible: indicator.visible
}
Text {
id: postIndicatorText
anchors.centerIn: parent
width: parent.width
color: Theme.highlightColor
font.pixelSize: Theme.fontSizeLarge
text: qsTr("File %1 saved").arg(fileName)
horizontalAlignment: Qt.AlignHCenter
visible: false
}
Text {
id: errorIndicatorText
anchors.centerIn: parent
width: parent.width
color: Theme.highlightColor
font.pixelSize: Theme.fontSizeLarge
text: qsTr("Failed to convert %1").arg(fileName)
horizontalAlignment: Qt.AlignHCenter
visible: false
}
Converter {
id: converter
onStateChanged: {
switch (state) {
case Converter.Opening:
indicator.visible = true
break
case Converter.Saved:
if (!timer.running) {
indicator.visible = false
postIndicatorText.visible = true
}
break
case Converter.Failed:
indicator.visible = false
errorIndicatorText.visible = true
break
}
}
}
Component.onCompleted: {
converter.convert(fileSourcePath, fileResultPath)
}
}
/*******************************************************************************
**
** Copyright (C) 2023 Open Mobile Platform LLC.
** Contact: https://community.omprussia.ru/open-source
**
** This file is part of the DocumentConverter project.
**
** Redistribution and use in source and binary forms,
** with or without modification, are permitted provided
** that the following conditions are met:
**
** * Redistributions of source code must retain the above copyright notice,
** this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright notice,
** this list of conditions and the following disclaimer
** in the documentation and/or other materials provided with the distribution.
** * Neither the name of the copyright holder nor the names of its contributors
** may be used to endorse or promote products derived from this software
** without specific prior written permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
** THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
** FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
** IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
** OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
** LOSS OF USE, DATA, OR PROFITS;
** OR BUSINESS INTERRUPTION)
** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE)
** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
** EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**
*******************************************************************************/
import QtQuick 2.0
import Nemo.FileManager 1.0
import Sailfish.Silica 1.0
import Sailfish.Pickers 1.0
Page {
id: loadPage
objectName: "loadPage"
SilicaListView {
id: lisView
property string currentPath
property string resultFileName
property string resultPath
property string defaultPath
property string directoryPath
anchors.fill: parent
model: fileModel
header: PageHeader {
title: fileModel.directoryName
}
delegate: ListItem {
width: parent.width
Image {
id: icon
anchors.verticalCenter: parent.verticalCenter
x: Theme.horizontalPageMargin
source: "image://theme/icon-m-file" + (model.isDir ? "-folder" : "-other") + (highlighted ? '?' + Theme.highlightColor : '')
}
Item {
id: description
anchors {
verticalCenter: parent.verticalCenter
verticalCenterOffset: -Theme.paddingMedium
right: parent.right
rightMargin: Theme.horizontalPageMargin
left: icon.right
leftMargin: Theme.paddingMedium
}
height: fileNameLabel.height
baselineOffset: fileNameLabel.baselineOffset
Label {
id: fileNameLabel
text: model.fileName
color: highlighted ? Theme.highlightColor : Theme.primaryColor
truncationMode: TruncationMode.Fade
width: parent.width - sizeLabel.width - Theme.paddingMedium
}
Label {
id: sizeLabel
text: Format.formatFileSize(model.size)
font.pixelSize: Theme.fontSizeExtraSmall
anchors.right: parent.right
anchors.baseline: parent.baseline
color: highlighted ? Theme.highlightColor : Theme.primaryColor
}
}
menu: ContextMenu {
hasContent: !model.isDir && (fileName.lastIndexOf(".pdf") === -1)
Repeater {
model: listExtension(fileName)
MenuItem {
text: qsTr("Conver to %1").arg(modelData)
onClicked: {
lisView.currentPath = absolutePath
lisView.resultFileName = createFileName(fileName, modelData)
pageStack.push(folderPickerDialog)
}
}
}
}
Row {
spacing: Theme.paddingSmall
anchors {
top: description.bottom
right: description.right
}
Label {
opacity: 0.6
color: highlighted ? Theme.highlightColor : Theme.primaryColor
font.pixelSize: Theme.fontSizeExtraSmall
anchors.verticalCenter: parent.verticalCenter
text: Format.formatDate(model.modified, Format.Timepoint)
}
}
onClicked: {
if (model.isDir) {
fileModel.path = model.absolutePath
}
}
}
VerticalScrollDecorator {}
}
Component {
id: folderPickerDialog
FolderPickerPage {
showSystemFiles: false
dialogTitle: qsTr("Save as ...")
onSelectedPathChanged: {
lisView.resultPath = ("%1/%2").arg(selectedPath).arg(lisView.resultFileName)
var loadPage_ = pageStack.find(function(page) { if (page.objectName === "loadPage") return page })
pageStack.replaceAbove(loadPage_, Qt.resolvedUrl("ConvertPage.qml"), {
"fileSourcePath" : lisView.currentPath,
"fileResultPath" : lisView.resultPath,
"fileName": lisView.resultFileName
})
}
}
}
FileModel {
id: fileModel
active: true
includeDirectories: true
includeParentDirectory: false
directorySort: FileModel.SortDirectoriesBeforeFiles
nameFilters: ["*.doc", "*.docx", "*.pdf", "*.odt", "*.xls", "*.xlsx", "*.ods", "*.ppt", "*.pptx", "*.odp"]
sortBy: FileModel.SortByName
sortOrder: Qt.AscendingOrder
path: StandardPaths.documents
}
function createFileName(fileName, extension){
var tmpIndex = fileName.lastIndexOf(".")
fileName = fileName.slice(0, tmpIndex)
return ("%1%2").arg(fileName).arg(extension)
}
function listExtension(fileName) {
var exIndex = fileName.lastIndexOf(".")
var extension = fileName.slice(exIndex)
var listDocumentsExtension = [".doc", ".docx", ".odt", ".pdf"]
var listTablesExtension = [".xls", ".xlsx", ".ods", ".pdf"]
var listPresentationExtension = [".ppt", ".pptx", ".odp", ".pdf"]
var listOfList = [listDocumentsExtension, listTablesExtension, listPresentationExtension]
for (var i = 0; i < listOfList.length; i++) {
var element = listOfList[i]
var tmpIndex = element.indexOf(extension)
if (tmpIndex !== -1 && extension !== ".pdf") {
element.splice(tmpIndex, 1)
return element
}
}
}
}
[Desktop Entry]
Type=Application
X-Nemo-Application-Type=silica-qt5
Icon=ru.auroraos.DocumentConverter
Exec=/usr/bin/ru.auroraos.DocumentConverter
Icon=ru.auroraos.OfficeViewer
Exec=/usr/bin/ru.auroraos.OfficeViewer
MimeType=application/vnd.oasis.opendocument.spreadsheet;application/x-kspread;application/vnd.ms-excel;text/csv;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.openxmlformats-officedocument.spreadsheetml.template;application/vnd.oasis.opendocument.presentation;application/vnd.oasis.opendocument.presentation-template;application/x-kpresenter;application/vnd.ms-powerpoint;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.oasis.opendocument.text-master;application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-template;application/msword;application/rtf;text/plain;application/x-mswrite;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-works;
Name=Document Converter
Name[ru]=Конвертер Документов
Name=OfficeViewer
Name[ru]=OfficeViewer
[X-Application]
Permissions=UserDirs;MediaIndexing;RemovableMedia
OrganizationName=ru.auroraos
ApplicationName=DocumentConverter
ExecDBus=/usr/bin/ru.auroraos.DocumentConverter
ApplicationName=OfficeViewer
ExecDBus=/usr/bin/ru.auroraos.OfficeViewer
......@@ -43,7 +43,7 @@
#include <QtConcurrent/QtConcurrent>
#include <QDebug>
#define LIBREOFFICE_PATH "/usr/share/ru.auroraos.DocumentConverter/lib/libreoffice/program"
#define LIBREOFFICE_PATH "/usr/share/ru.auroraos.OfficeViewer/lib/libreoffice/program"
Converter::Converter(QObject *parent)
: QObject(parent)
......
......@@ -56,23 +56,11 @@
int main(int argc, char *argv[])
{
// QScopedPointer<QGuiApplication> application(Aurora::Application::application(argc, argv));
// application->setOrganizationName(QStringLiteral("ru.auroraos"));
// application->setApplicationName(QStringLiteral("DocumentConverter"));
// qmlRegisterType<Converter>("ru.auroraos.DocumentConverter", 1, 0, "Converter");
// QScopedPointer<QQuickView> view(Aurora::Application::createView());
// view->setSource(Aurora::Application::pathTo(QStringLiteral("qml/DocumentConverter.qml")));
// view->show();
// return application->exec();
QGuiApplication app(argc, argv);
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
app.setOrganizationName(QStringLiteral("ru.omp"));
app.setApplicationName(QStringLiteral("DocViewer"));
app.setOrganizationName(QStringLiteral("ru.auroraos"));
app.setApplicationName(QStringLiteral("OfficeViewer"));
QDir dir(QStringLiteral("/usr/share/translations"));
......@@ -91,13 +79,7 @@ int main(int argc, char *argv[])
qmlRegisterType<LicenseStatus>("Aurora.Office.License", 1, 0, "LicenseStatus");
QScopedPointer<QQuickView> view(Aurora::Application::createView());
view->setSource(Aurora::Application::pathTo(QStringLiteral("qml/DocumentConverter.qml")));
// view->show();
// QSharedPointer<QQuickView> view(new QQuickView(QUrl(QStringLiteral("qml/DocumentConverter.qml"))));
//: DocViewer application name
//% "Documents"
view->setTitle(qtTrId("docviewer-ap-name"));
view->setSource(Aurora::Application::pathTo(QStringLiteral("qml/OfficeViewer.qml")));
app.connect(view->engine(), &QQmlEngine::quit, &app, &QCoreApplication::quit);
......
......@@ -25,6 +25,7 @@
#include <QDebug>
#include <QtCore/QModelIndex>
#include <QtCore/qthreadpool.h>
#include <QStandardPaths>
#include <qglobal.h>
......@@ -107,6 +108,7 @@ void TrackerDocumentProvider::componentComplete()
// d->connection->subscribeToGraph(documentGraph);
// connect(d->connection, &QSparqlConnection::graphUpdated, this, &TrackerDocumentProvider::trackerGraphChanged);
// }
qDebug() << "componentComplete";
startSearch();
}
......@@ -134,11 +136,11 @@ int TrackerDocumentProvider::getFileSize( QString filePath ) {
QFile myFile(filePath);
return myFile.size();
}
void TrackerDocumentProvider::searchFinished()
{
d->model->setAllItemsDirty(true);
QDir directory("Documents");
QDir directory(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation));
qDebug() << "Scanning for files in the" << directory.absolutePath() << "directory...";
QStringList types = QString(SUPPORT_MIMETYPES).split(",");
for (QString filename : directory.entryList(QDir::Files)) {
QString mimeType = getMimeType(filename);
......
......@@ -30,9 +30,8 @@
</message>
<message id="docviewer-ap-name">
<location filename="../qml/pages/FileListPage.qml" line="183"/>
<location filename="../src/main.cpp" line="100"/>
<source>Documents</source>
<extracomment>DocViewer application name</extracomment>
<source></source>
<oldsource>Documents</oldsource>
<translation type="unfinished"></translation>
</message>
<message id="docviewer-tf-search-documents">
......@@ -103,60 +102,16 @@
<translation type="unfinished"></translation>
</message>
<message id="docviewer-la-localfiles_description">
<location filename="../src/trackerdocumentprovider.cpp" line="174"/>
<location filename="../src/trackerdocumentprovider.cpp" line="176"/>
<source>Files found on this device.</source>
<extracomment>Description for local device files provider</extracomment>
<translation type="unfinished"></translation>
</message>
<message id="docviewer-he-localfiles_title">
<location filename="../src/trackerdocumentprovider.cpp" line="201"/>
<location filename="../src/trackerdocumentprovider.cpp" line="203"/>
<source>This Device</source>
<extracomment>Title for local device files provider</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConvertPage</name>
<message>
<location filename="../qml/pages/ConvertPage.qml" line="58"/>
<source>converting</source>
<translation>Конвертация</translation>
</message>
<message>
<location filename="../qml/pages/ConvertPage.qml" line="91"/>
<source>Converting file ...</source>
<translation>Конвертация файла ...</translation>
</message>
<message>
<location filename="../qml/pages/ConvertPage.qml" line="104"/>
<source>File %1 saved</source>
<translation>Файл %1 сохранен</translation>
</message>
<message>
<location filename="../qml/pages/ConvertPage.qml" line="116"/>
<source>Failed to convert %1</source>
<translation>Не удалось конвертировать %1</translation>
</message>
</context>
<context>
<name>DefaultCoverPage</name>
<message>
<location filename="../qml/cover/DefaultCoverPage.qml" line="47"/>
<source>Document Converter</source>
<translation>Конвертер документов</translation>
</message>
</context>
<context>
<name>MainPage</name>
<message>
<location filename="../qml/pages/MainPage.qml" line="117"/>
<source>Conver to %1</source>
<translation>Конвертировать в %1</translation>
</message>
<message>
<location filename="../qml/pages/MainPage.qml" line="158"/>
<source>Save as ...</source>
<translation>Сохранить в ...</translation>
</message>
</context>
</TS>
......@@ -30,9 +30,8 @@
</message>
<message id="docviewer-ap-name">
<location filename="../qml/pages/FileListPage.qml" line="183"/>
<location filename="../src/main.cpp" line="100"/>
<source>Documents</source>
<extracomment>DocViewer application name</extracomment>
<source></source>
<oldsource>Documents</oldsource>
<translation type="unfinished"></translation>
</message>
<message id="docviewer-tf-search-documents">
......@@ -103,60 +102,16 @@
<translation type="unfinished"></translation>
</message>
<message id="docviewer-la-localfiles_description">
<location filename="../src/trackerdocumentprovider.cpp" line="174"/>
<location filename="../src/trackerdocumentprovider.cpp" line="176"/>
<source>Files found on this device.</source>
<extracomment>Description for local device files provider</extracomment>
<translation type="unfinished"></translation>
</message>
<message id="docviewer-he-localfiles_title">
<location filename="../src/trackerdocumentprovider.cpp" line="201"/>
<location filename="../src/trackerdocumentprovider.cpp" line="203"/>
<source>This Device</source>
<extracomment>Title for local device files provider</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConvertPage</name>
<message>
<location filename="../qml/pages/ConvertPage.qml" line="58"/>
<source>converting</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/ConvertPage.qml" line="91"/>
<source>Converting file ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/ConvertPage.qml" line="104"/>
<source>File %1 saved</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/ConvertPage.qml" line="116"/>
<source>Failed to convert %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DefaultCoverPage</name>
<message>
<location filename="../qml/cover/DefaultCoverPage.qml" line="47"/>
<source>Document Converter</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainPage</name>
<message>
<location filename="../qml/pages/MainPage.qml" line="117"/>
<source>Conver to %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/pages/MainPage.qml" line="158"/>
<source>Save as ...</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать