diff --git a/CHANGELOG.md b/CHANGELOG.md index e76a49788..7f5cea12d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,21 @@ # YACReader Changelog -Please note: this is a work in progress. Keeping a changelog has been neglected -in the past so information is missing and older release information is in -spanish only. Sorry for the mess. - Version counting is based on semantic versioning (Major.Feature.Patch) ## WIP +## 9.8.0 +### YACReader +* Add support for full manga mode. +* Fix UP,DOWN,LEFT,RIGHT shortcuts for moving a zoomed in page around. +### YACReaderLibrary +* New search engine. +* New `manga` field added to comics and folders to tag content as manga, any content added to a manga folder will become manga automatically. +* Support for HTML in comic synopsis, this fixes the synopsis when it comes from Comic Vine with HTML tags. +* Improve keyboard navigation in Comic Vine dialog. +### Server +* New `manga` field is sent to YACReader for iOS, so comics tagged as manga will be recognized as such when reading remotely or importing comics. + ## 9.7.1 ### YACReader * Fix enlargement/stretching default value @@ -147,119 +155,119 @@ Version counting is based on semantic versioning (Major.Feature.Patch) * Bug fixes. ## 7.1.0 -* Añadida opción para resetear el rating de un comics -* Corregidos bugs que afectaban a la información de página. -* Corregido error que marcaba un comic terminado como empezado si se volvía a leer. -* Añadidos 2 estados para las carpetas (Completo/Terminado) -* Corregido bug en la comunicación YACReaderLibrary <-> YACReader -* Añadidas las acciones relativas a los comics al menú contextual de la tabla de cómics. -* Corrgido bug que provocaba el crecimiento ilimatado del log del servidor -* Corregidos bugs menores - -## 7.0.2 (Sólo MacOSX) -* Eliminado el uso de Poppler en la versión de MacOSX -* Trabajo en traducciones. -* Corregidos bugs menores +* Added option to reset the rating of a comic book. +* Fixed bugs affecting page information. +* Fixed bug that marked a finished comic as started if it was read again. +* Added 2 statuses for folders (Complete/Completed). +* Fixed bug in YACReaderLibrary <-> YACReader communication. +* Added actions related to comics to the context menu of the comics table. +* Fixed bug that caused unlimited server log growth. +* Fixed minor bugs + +## 7.0.2 (MacOSX only) +* Removed Poppler usage in MacOSX version. +* Work on translations. +* Fixed minor bugs ## 7.0.1 -* Añadido QsLog a YACReader -* Corregido bug en la comunicación YACReaderLibrary <-> YACReader +* Added QsLog to YACReader +* Fixed bug in YACReaderLibrary <-> YACReader communication. ## 7.0 (Final) -* Corregidos eventos de teclado en algunos diálogos -* Corregido soporte para archivos Rar en sistemas Unix -* Corregidos problemas borrando cómics -* Mejorada la gestión de errores -* Corregida la comunicación entre YACReader y YACReaderLibrary -* Corregida la toolBar en MacOSX -* Mejorada la compatabilidad de OpenGL en tarjetas NVIDIA -* Corregidos bugs menores - -## 6.9 (No pública) -* Añadida la apertura automática del siguiente/anterior cómic al llegar al final/portada del cómic actual -* Corregido el comportamiento del diálogo de nueva versión detectada. Ahora avisa una vez al día o si el usuario lo elige cada 14 días. -* Corregido el ajuste a lo ancho del título de la toolbar en YACReaderLibrary. -* Añadido log a YACReaderLibrary (permitirá a los usuarios ofrecer más información sobre sus bugs) -* Corregido bug en el historial de navegación (y al editar comics) después de usar el motor de búsqueda. - -## 6.8 (No pública) -* Corregido bug que causaba un cierre inesperado después de cambiar el modo de sincronización vertical (flow) -* Corregido bug que causaba que la toolbar en el visor no se pudiese ocultar/mostrar sin un cómic abierto -* Mejorada la gestión de errores al abrir cómics -* Corregidos algunos bugs relacionados con la apertura de cómics -* Añadida función de rating -* El visor ahora puede abrir archivos de imagen directamente. Si se abre un archivo de imagen se abre el directorio que lo contiene con todas las imágenes. -* Corregida la ordenación de carpetas y cómics usada en la navegación desde dispositivos iOS - -## 6.7 (No pública) -* Añadidos nuevos campos en la base de datos para almacenar información adicional sobre cómics: rating, página actual, bookmarks y configuración de imagen -* Añadida comunicación entre YACReaderLibrary y YACReader para poder almacenar el progreso de los cómics e información adicional - -## 6.6 (No pública) -* Modificado YACReader para que abra los archivos comprimidos usando 7z.dll (.so, .dylib) -* YACReader abre ahora los cómics por la última página leída. -* Corregido bug que causaba que algunos cómics no se pudiesen abrir desde YACReaderLibrary en YACReader -* Corregido el modo en el que se actualizaba la "information label" +* Fixed keyboard events in some dialogs +* Fixed support for Rar archives on Unix systems +* Fixed problems deleting comics +* Improved error handling +Fixed communication between YACReader and YACReaderLibrary * Fixed communication between YACReader and YACReaderLibrary +* Fixed the toolBar in MacOSX +* Improved OpenGL compatibility on NVIDIA cards +* Fixed minor bugs + +## 6.9 (internal) +* Added automatic opening of the next/previous comic when reaching the end/cover of the current comic +* Fixed behavior of new version detected dialog. Now warns once a day or if user chooses every 14 days. +* Fixed the width adjustment of the toolbar title in YACReaderLibrary. +* Added log to YACReaderLibrary (will allow users to provide more information about their bugs). +* Fixed bug in browsing history (and editing comics) after using search engine. + +## 6.8 (internal) +* Fixed bug that caused unexpected shutdown after changing the vertical sync mode (flow). +* Fixed bug that caused toolbar in viewer could not be hidden/shown without an open comic book +* Improved error handling when opening comics +* Fixed some bugs related to comic opening +* Added rating function +* The viewer can now open image files directly. Opening an image file opens the directory containing the file with all images. +* Fixed sorting of folders and comics used in browsing from iOS devices. + +## 6.7 (internal) +* Added new fields in the database to store additional information about comics: rating, current page, bookmarks and image settings. +* Added communication between YACReaderLibrary and YACReader to be able to store comics progress and additional information + +## 6.6 (internal) +* Modified YACReader to open compressed files using 7z.dll (.so, .dylib) +* YACReader now opens comics by the last page read. +* Fixed bug that caused that some comics could not be opened from YACReaderLibrary in YACReader. +* Fixed the way in which the "information label" was updated. ## 6.5 -* Nueva interfaz principal de YACReaderLibrary y YACReader -* Corregido bug que causaba que el servidor no se activase en el primer arranque en MacOSX -* Corregido bug que causaba un fallo al cerrar YACReaderLibrary cada vez que se usaba el servidor -* Nuevo diseño para el diálogo de propiedades de los cómics. -* Añadida navegación alante y atrás de las carpetas visitadas. -* La edición del nombre de una biblioteca no fuerza ahora que se recargue la biblioteca -* Corregido el color de fondo en la lupa -* Nuevo botón para ajustar a lo alto -* Eliminada la opción always on top -* Mostrar en carpeta contenedora arreglado en Windows y MacOSX - -## 6.4 (No pública) -* Normalizado el renderizado de páginas en modo doble página -* Añadida la función de borrar cómics desde el disco duro -* Nuevos iconos de la barra de herramientas de cómics - -## 6.3 (No pública) -* Mejorada la gestión de errores relacionada con las bibliotecas -* Añadido botón que permite ocultar las portadas en la pantalla de importación -* Añadidos títulos "Bibliotecas" y "Carpetas" a la barra de navegación -* Nuevos iconos para seleccionar la carpeta raíz, expandir y contraer todos. -* Botón para cambiar el puerto del servidor por el usuario. -* Ahora las columnas de la lista de cómics pueden reordenarse -* Ahora YACReaderLibrary sólo permite una instancia ejecutandose. -* Columna leído añadida. -* Cambiado estilo de la lista de cómics -* Corregidos bugs relacionados con realizar operaciones sobre cómics cuando no había ninguno seleccionado en la lista de cómics +* New main interface of YACReaderLibrary and YACReader +* Fixed bug that caused the server not to activate on first boot on MacOSX +* Fixed bug that caused a crash when closing YACReaderLibrary every time the server was used +* New design for the comic properties dialog. +* Added forward and backward navigation of visited folders. +* Editing a library name does not force library reloading now. +* Corrected the background color in the magnifying glass. +* New button to adjust to top +* Removed always on top option +* Show in container folder fixed on Windows and MacOSX + +## 6.4 (internal) +* Normalized rendering of pages in double page mode +* Added delete comics from hard disk function +* New comic toolbar icons + +## 6.3 (internal) +* Improved error handling related to libraries +* Added button to hide cover art in the import screen +* Added "Libraries" and "Folders" headings to the navigation bar +* New icons to select root folder, expand and collapse all. +* Button to change the server port by the user. +* Comic list columns can now be reordered. +* YACReaderLibrary now allows only one instance running. +* Read column added. +* Comic list style changed. +* Fixed bugs related to perform operations on comics when there was none selected in the comics list. ## 6.2 -* Nueva ventana de "bienvenida" -* Nueva ventana de importar/actualizar -* Nuevo control para la búsqueda -* Nueva imagen para las marcas de cómics leídos (sólo en OpenGL) -* Cambiada la distribución de algunos iconos -* Cambiado el modo de eliminar la metainformación (borrar base de datos/portadas de disco) -* Ocultadas las opciones avanzadas de configuración de YACReader Flow, accesibles ahora tras pulsar un botón (diálogos de configuración más simples) - -## 6.0.1 (No pública) -* Corregido bug al usar las teclas Inicio/fin -* Corregido bug que al arrancar YACReaderLibrary por primera vez causaba que no se mostrasen las portadas (sólo bajo ciertas circunstancias) -* Añadidos algunos atajos de teclado a YACReaderLibrary a los ya existentes +* New "welcome" window +* New import/update window +* New control for search +* New image for the marks of read comics (OpenGL only) +* Changed the layout of some icons +* Changed the way to delete meta information (delete database/disk covers) +* Hidden YACReader Flow advanced configuration options, accessible now after pressing a button (simpler configuration dialogs) + +## 6.0.1 (internal) +* Fixed bug when using Home/end keys +* Fixed bug that when starting YACReaderLibrary for the first time caused that the covers were not shown (only under certain circumstances) +* Added some keyboard shortcuts to YACReaderLibrary to the already existing ones ## 6.0 -* Mejorada la velocidad de inicio gracias al uso de /LTCG como opción de compilación -* Corregido bug relacionado con OpenGL que causaba consumo excesivo de CPU en tarjetas NVidia -* Añadidos iconos para cada tipo de archivo soportado en YACReaderLibrary -* Cambiado el icono "folder" en YACReaderLibrary -* Añadida barra para ajustar el ancho de página en la toolbar de YACReader -* Añadido widget para la information label -* Añadido nuevo estilo visual a goToFlow -* Añadidos filtros para controlar el brillo, el contraste y el valor gamma -* Añadidas notificaciones de portada y última página -* InformationLabel se muestra ahora en la esquina superiror derecha. -* InformationLabel se muestra en 3 tamaños diferentes en función de la resolución -* Corregido bug que causaba que las marcas de cómic leído no se dibujasen adecuadamente. -* Se recuerda si se debe mostrar o no la "label" información. -* Corregido bug que provocaba el fallo de YACReader al pasar muy rápido las páginas. -* Añadida columna "Tamaño" a la lista de cómics en YACReaderLibrary -* Añadida la ordinación "natural" de los comics que hay en directorio del cómic actual. -* Corregido bug que causaba que se abriese el cómic erroneo en YACReaderLibrary. -* Cambiado el modo en el que se cargan los lenguages, ahora se pueden añadir traducciones sin necesidad de recompilar. +* Improved startup speed thanks to the use of /LTCG as a compile option +* Fixed OpenGL related bug that caused excessive CPU consumption on NVidia cards +Added icons for each supported file type in YACReaderLibrary * Added icons for each supported file type in YACReaderLibrary +* Changed "folder" icon in YACReaderLibrary +Added page width adjustment bar in YACReader toolbar * Added widget for page width in YACReader toolbar +* Added widget for information label +* Added new visual style to goToFlow +* Added filters to control brightness, contrast and gamma value * Added new filters to control brightness, contrast and gamma value +* Added front page and last page notifications +* InformationLabel is now displayed in the upper right corner. +* InformationLabel is displayed in 3 different sizes depending on resolution. +* Fixed bug that caused read comic marks not to be drawn properly. +* InformationLabel now remembers whether or not to display the information label. +* Fixed bug that caused YACReader to crash when turning pages too fast. +* Added "Size" column to the comics list in YACReaderLibrary. +* Added "natural" sorting of the comics in the current comic directory. +* Fixed bug that caused the wrong comic to open in YACReaderLibrary. +* Changed the way languages are loaded, now you can add translations without recompiling. diff --git a/INSTALL.md b/INSTALL.md index eb596da58..0c2c53097 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -3,63 +3,83 @@ YACReader and YACReaderLibrary are build using qmake. To build and install the program, run: -> qmake-qt5 CONFIG+=[Options] -> make -> make install +``` +qmake CONFIG+=[Options] +make +make install +``` -from the source dir. For separate builds of YACReader or YACReaderLibrary, +from the top source dir. For separate builds of YACReader or YACReaderLibrary, enter their respective subfolders and run the commands from there. The headless version of YACReaderLibrary is located in the YACReaderLibraryServer folder. To build it, enter the folder and run the commands described above. +Note: If your system has multiple versions of Qt, you need to make sure you are +using qmake for Qt5 ## Build dependencies: -- Qt >= 5.6 with the following modules: +- Qt >= 5.9 with the following modules: - declarative - quickcontrols - sql - - script - multimedia - imageformats - opengl - sql-sqlite - network -- A pdf rendering backend (optional, see below) -- qrencode (optional) -- 7zip or p7zip (see below) -- (lib)unarr (optional, see below) +- Backends for pdf rendering (optional) and file + decompression (see below) +- qrencode for QR code generation (optional) Not all dependencies are needed at build time. For example the qml components in YACReaderLibrary (GridView, InfoView) will only show a white page if the required qml modules (declarative, quickcontrols) are missing. -This can also happen if these dependencies are too old (i.e Qt < 5.6 is used). ## Backends ### Decompression -Configure the library you want to use throught `qmake` `CONFIG`. `CONFIG += 7zip` or `CONFIG += unarr`, if not specified `7zip` is used in MacOS and Windows and `unarr` in Linux. +YACReader currently supports two decompression backends, 7zip and (lib)unarr. YACReader +defaults to 7zip for Windows and Mac OS and unarr for Linux and other OS, but you can +override this using one of the following config options: + +`CONFIG+=7zip` + +`CONFIG+=unarr` #### 7zip -YACReader uses by default [7zip](https://www.7-zip.org/) for comic book archive -decompression. In MacOS and Linux, it uses [p7zip](http://p7zip.sourceforge.net/). Please read `compressed_archive/README_7zip.txt` for more details. This is the recomended library since supports a wider variety of formats, including RAR5 and 7z. +[7zip](https://www.7-zip.org/) and [p7zip](http://p7zip.sourceforge.net/) +are the default decompression backend for Windows and Mac OS builds. + +They are recommended for these systems, as they currently have better support for 7z +files and support the RAR5 format. + +As this backend requires specific versions of 7zip for Windows and p7zip for *NIX and +is not 100% GPL compatible (unrar License restriction), it is not recommended for +installations where you can't guarantee the installed version of (p7zip) or the license is an issue. + +To build using this backend, you need to install additional sources to the build environment. +For more information, please refer to [README_7zip](compressed_archive/README_7zip.txt). #### unarr -YACReader can use [(lib)unarr](https://github.com/selmf/unarr) for comic book archive -decompression. Most Linux distributions don't ship this library yet, so you will -probably have to build it yourself. +[(lib)unarr](https://github.com/selmf/unarr) is the default backend for Linux builds. + +As of version 1.0.1, it supports less formats than 7zip, notably missing RAR5 support and only having +limited support for 7z on git versions. However, this is rarely an issue in practice as the vast majority +of comic books use either zip or RAR4 compression, which is handled nicely by this backend. -We recommend using (lib)unarr as a shared library, but we also support static -and embedded builds. Please consult the [README](compressed_archive/unarr/README.txt) -for more information on this topic. +The unarr backend is recommended for packaging, lightweight installations and generally for all users requiring +more stability than the 7zip backend can offer. +The recommended way to use this on Linux or other *NIX is to install it as a package, but you can also do an embedded build. +For more information, please consult the [README](compressed_archive/unarr/README.txt) ### PDF -Starting with version 9.0.0 YACReader supports the following pdf render engines: +Starting with version 9.0.0 YACReader supports the following pdf rendering engines: - poppler (Linux/Unix default) - pdfium (default for Windows and MacOS) @@ -70,7 +90,7 @@ To override the default for a given platform add CONFIG+=[pdfbackend] as an opti when running qmake. While the Poppler backend is well tested and has been the standard for YACReader -for a long time, it's performance is a bit lacking. The pdfium engine offers +for a long time, its performance is a bit lacking. The pdfium engine offers much better performance (about 10x faster on some pdf files we tested). However, at the time of this writing, it is not a library that is available prepackaged for Linux. @@ -80,23 +100,25 @@ prepackaged for Linux. You can adjust the installation prefix as well als the path "make install" uses to install the files. ->qmake PREFIX=DIR +`qmake PREFIX=DIR` sets the default prefix (for example "/", "/usr", "/usr/local"). ->make install INSTALL_ROOT=DIR +`make install INSTALL_ROOT=DIR` can be used to install to a different location, which is usefull for packaging. Default values: ->PREFIX=/usr ->INSTALL_ROOT="" +``` +PREFIX=/usr +INSTALL_ROOT="" +``` On embedded devices that don't support desktop OpenGL, it is recommended to use the no_opengl config option: -qmake-qt5 CONFIG+=no_opengl +`qmake CONFIG+=no_opengl` This will remove any dependency on desktop OpenGL and hardlock YACReader's coverflow to software rendering. Please note that it does not actually remove @@ -107,10 +129,10 @@ OpenGL from the build, the Qt toolkit will still make use of it. If you're compiling YACReader because there is no package available for your Linux distribution please consider creating and submitting a package or filing a -package request. +package request for your distribution. While we do provide packages for .deb and .rpm based distributions as well as an -AUR package for Archlinux and it's derivates, we are in need of downstream packagers +AUR package for Archlinux and its derivates, we are in need of downstream packagers that are willing to make YACReader available as a standard package for their distro. If you are interested, please contact @selmf on the YACReader forums or write diff --git a/YACReader/YACReader.pro b/YACReader/YACReader.pro index 3aec87906..067e78e37 100644 --- a/YACReader/YACReader.pro +++ b/YACReader/YACReader.pro @@ -12,10 +12,6 @@ DEFINES += NOMINMAX YACREADER include (../config.pri) include (../dependencies/pdf_backend.pri) -unix:!macx{ - QMAKE_CXXFLAGS += -std=c++11 -} - unix:haiku { DEFINES += _BSD_SOURCE LIBS += -lnetwork -lbsd @@ -72,10 +68,7 @@ macx { LIBS += -framework Foundation -framework ApplicationServices -framework AppKit } -QT += network widgets core multimedia -!CONFIG(no_opengl) { - QT += opengl -} +QT += network widgets core multimedia svg #CONFIG += release CONFIG -= flat @@ -193,6 +186,8 @@ TRANSLATIONS = yacreader_es.ts \ yacreader_nl.ts \ yacreader_tr.ts \ yacreader_de.ts \ + yacreader_zh.ts \ + yacreader_it.ts \ yacreader_source.ts unix:!macx { diff --git a/YACReader/main_window_viewer.cpp b/YACReader/main_window_viewer.cpp index 3d7de60ff..4c893ef0a 100644 --- a/YACReader/main_window_viewer.cpp +++ b/YACReader/main_window_viewer.cpp @@ -20,6 +20,8 @@ #include "edit_shortcuts_dialog.h" #include "shortcuts_manager.h" +#include "whats_new_controller.h" + #include #include #include @@ -73,6 +75,14 @@ MainWindowViewer::MainWindowViewer() { loadConfiguration(); setupUI(); + afterLaunchTasks(); +} + +void MainWindowViewer::afterLaunchTasks() +{ + WhatsNewController whatsNewController; + + whatsNewController.showWhatsNewIfNeeded(this); } MainWindowViewer::~MainWindowViewer() @@ -86,10 +96,10 @@ MainWindowViewer::~MainWindowViewer() delete openFolderAction; delete openLatestComicAction; delete saveImageAction; - delete openPreviousComicAction; - delete openNextComicAction; - delete prevAction; - delete nextAction; + delete openComicOnTheLeftAction; + delete openComicOnTheRightAction; + delete goToPageOnTheLeftAction; + delete goToPageOnTheRightAction; delete adjustHeightAction; delete adjustWidthAction; delete leftRotationAction; @@ -259,39 +269,39 @@ void MainWindowViewer::createActions() saveImageAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SAVE_IMAGE_ACTION_Y)); connect(saveImageAction, SIGNAL(triggered()), this, SLOT(saveImage())); - openPreviousComicAction = new QAction(tr("Previous Comic"), this); - openPreviousComicAction->setIcon(QIcon(":/images/viewer_toolbar/openPrevious.png")); - openPreviousComicAction->setToolTip(tr("Open previous comic")); - openPreviousComicAction->setDisabled(true); - openPreviousComicAction->setData(OPEN_PREVIOUS_COMIC_ACTION_Y); - openPreviousComicAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(OPEN_PREVIOUS_COMIC_ACTION_Y)); - connect(openPreviousComicAction, SIGNAL(triggered()), this, SLOT(openPreviousComic())); - - openNextComicAction = new QAction(tr("Next Comic"), this); - openNextComicAction->setIcon(QIcon(":/images/viewer_toolbar/openNext.png")); - openNextComicAction->setToolTip(tr("Open next comic")); - openNextComicAction->setDisabled(true); - openNextComicAction->setData(OPEN_NEXT_COMIC_ACTION_Y); - openNextComicAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(OPEN_NEXT_COMIC_ACTION_Y)); - connect(openNextComicAction, SIGNAL(triggered()), this, SLOT(openNextComic())); - - prevAction = new QAction(tr("&Previous"), this); - prevAction->setIcon(QIcon(":/images/viewer_toolbar/previous.png")); - prevAction->setShortcutContext(Qt::WidgetShortcut); - prevAction->setToolTip(tr("Go to previous page")); - prevAction->setDisabled(true); - prevAction->setData(PREV_ACTION_Y); - prevAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(PREV_ACTION_Y)); - connect(prevAction, SIGNAL(triggered()), viewer, SLOT(prev())); - - nextAction = new QAction(tr("&Next"), this); - nextAction->setIcon(QIcon(":/images/viewer_toolbar/next.png")); - nextAction->setShortcutContext(Qt::WidgetShortcut); - nextAction->setToolTip(tr("Go to next page")); - nextAction->setDisabled(true); - nextAction->setData(NEXT_ACTION_Y); - nextAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(NEXT_ACTION_Y)); - connect(nextAction, SIGNAL(triggered()), viewer, SLOT(next())); + openComicOnTheLeftAction = new QAction(tr("Previous Comic"), this); + openComicOnTheLeftAction->setIcon(QIcon(":/images/viewer_toolbar/openPrevious.png")); + openComicOnTheLeftAction->setToolTip(tr("Open previous comic")); + openComicOnTheLeftAction->setDisabled(true); + openComicOnTheLeftAction->setData(OPEN_PREVIOUS_COMIC_ACTION_Y); + openComicOnTheLeftAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(OPEN_PREVIOUS_COMIC_ACTION_Y)); + connect(openComicOnTheLeftAction, &QAction::triggered, this, &MainWindowViewer::openLeftComic); + + openComicOnTheRightAction = new QAction(tr("Next Comic"), this); + openComicOnTheRightAction->setIcon(QIcon(":/images/viewer_toolbar/openNext.png")); + openComicOnTheRightAction->setToolTip(tr("Open next comic")); + openComicOnTheRightAction->setDisabled(true); + openComicOnTheRightAction->setData(OPEN_NEXT_COMIC_ACTION_Y); + openComicOnTheRightAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(OPEN_NEXT_COMIC_ACTION_Y)); + connect(openComicOnTheRightAction, &QAction::triggered, this, &MainWindowViewer::openRightComic); + + goToPageOnTheLeftAction = new QAction(tr("&Previous"), this); + goToPageOnTheLeftAction->setIcon(QIcon(":/images/viewer_toolbar/previous.png")); + goToPageOnTheLeftAction->setShortcutContext(Qt::WidgetShortcut); + goToPageOnTheLeftAction->setToolTip(tr("Go to previous page")); + goToPageOnTheLeftAction->setDisabled(true); + goToPageOnTheLeftAction->setData(PREV_ACTION_Y); + goToPageOnTheLeftAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(PREV_ACTION_Y)); + connect(goToPageOnTheLeftAction, SIGNAL(triggered()), viewer, SLOT(left())); + + goToPageOnTheRightAction = new QAction(tr("&Next"), this); + goToPageOnTheRightAction->setIcon(QIcon(":/images/viewer_toolbar/next.png")); + goToPageOnTheRightAction->setShortcutContext(Qt::WidgetShortcut); + goToPageOnTheRightAction->setToolTip(tr("Go to next page")); + goToPageOnTheRightAction->setDisabled(true); + goToPageOnTheRightAction->setData(NEXT_ACTION_Y); + goToPageOnTheRightAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(NEXT_ACTION_Y)); + connect(goToPageOnTheRightAction, SIGNAL(triggered()), viewer, SLOT(right())); adjustHeightAction = new QAction(tr("Fit Height"), this); adjustHeightAction->setIcon(QIcon(":/images/viewer_toolbar/toHeight.png")); @@ -412,6 +422,7 @@ void MainWindowViewer::createActions() doubleMangaPageAction->setData(DOUBLE_MANGA_PAGE_ACTION_Y); doubleMangaPageAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(DOUBLE_MANGA_PAGE_ACTION_Y)); connect(doubleMangaPageAction, SIGNAL(triggered()), viewer, SLOT(doubleMangaPageSwitch())); + connect(doubleMangaPageAction, &QAction::triggered, this, &MainWindowViewer::doubleMangaPageSwitch); goToPageAction = new QAction(tr("Go To"), this); goToPageAction->setIcon(QIcon(":/images/viewer_toolbar/goto.png")); @@ -552,13 +563,13 @@ void MainWindowViewer::createToolBars() #endif comicToolBar->addAction(saveImageAction); - comicToolBar->addAction(openPreviousComicAction); - comicToolBar->addAction(openNextComicAction); + comicToolBar->addAction(openComicOnTheLeftAction); + comicToolBar->addAction(openComicOnTheRightAction); comicToolBar->addSeparator(); - comicToolBar->addAction(prevAction); - comicToolBar->addAction(nextAction); + comicToolBar->addAction(goToPageOnTheLeftAction); + comicToolBar->addAction(goToPageOnTheRightAction); comicToolBar->addAction(goToPageAction); comicToolBar->addSeparator(); @@ -615,12 +626,12 @@ void MainWindowViewer::createToolBars() viewer->addAction(openAction); viewer->addAction(openFolderAction); viewer->addAction(saveImageAction); - viewer->addAction(openPreviousComicAction); - viewer->addAction(openNextComicAction); + viewer->addAction(openComicOnTheLeftAction); + viewer->addAction(openComicOnTheRightAction); YACReader::addSperator(viewer); - viewer->addAction(prevAction); - viewer->addAction(nextAction); + viewer->addAction(goToPageOnTheLeftAction); + viewer->addAction(goToPageOnTheRightAction); viewer->addAction(goToPageAction); viewer->addAction(adjustHeightAction); viewer->addAction(adjustWidthAction); @@ -706,8 +717,8 @@ void MainWindowViewer::createToolBars() viewMenu->addAction(showMagnifyingGlassAction); auto goMenu = new QMenu(tr("Go")); - goMenu->addAction(prevAction); - goMenu->addAction(nextAction); + goMenu->addAction(goToPageOnTheLeftAction); + goMenu->addAction(goToPageOnTheRightAction); goMenu->addAction(goToPageAction); goMenu->addSeparator(); goMenu->addAction(setBookmarkAction); @@ -822,9 +833,6 @@ void MainWindowViewer::open() void MainWindowViewer::open(QString path, ComicDB &comic, QList &siblings) { - //currentComicDB = comic; - //siblingComics = siblings; - QFileInfo fi(path); if (!comic.info.title.isNull() && !comic.info.title.toString().isEmpty()) @@ -832,31 +840,22 @@ void MainWindowViewer::open(QString path, ComicDB &comic, QList &siblin else setWindowTitle("YACReader - " + fi.fileName()); + viewer->setMangaWithoutStoringSetting(comic.info.manga.toBool()); + doubleMangaPageAction->setChecked(comic.info.manga.toBool()); + viewer->open(path, comic); enableActions(); int index = siblings.indexOf(comic); + updatePrevNextActions(index > 0, index + 1 < siblings.count()); optionsDialog->setFilters(currentComicDB.info.brightness, currentComicDB.info.contrast, currentComicDB.info.gamma); - - if (index > 0) - openPreviousComicAction->setDisabled(false); - else - openPreviousComicAction->setDisabled(true); - - if (index + 1 < siblings.count()) - openNextComicAction->setDisabled(false); - else - openNextComicAction->setDisabled(true); } void MainWindowViewer::open(QString path, qint64 comicId, qint64 libraryId) { - //QString pathFile = QCoreApplication::arguments().at(1); currentDirectory = path; - //quint64 comicId = QCoreApplication::arguments().at(2).split("=").at(1).toULongLong(); - //libraryId = QCoreApplication::arguments().at(3).split("=").at(1).toULongLong(); + this->libraryId = libraryId; - // this->path=path; enableActions(); @@ -881,8 +880,10 @@ void MainWindowViewer::open(QString path, qint64 comicId, qint64 libraryId) void MainWindowViewer::openComicFromPath(QString pathFile) { + doubleMangaPageAction->setChecked(Configuration::getConfiguration().getDoubleMangaPage()); openComic(pathFile); isClient = false; //this method is used for direct openings + updatePrevNextActions(!previousComicPath.isEmpty(), !nextComicPath.isEmpty()); } //isClient shouldn't be modified when a siblinig comic is opened @@ -947,7 +948,7 @@ void MainWindowViewer::openFolderFromPath(QString pathDir, QString atFileName) d.setSorting(QDir::Name | QDir::IgnoreCase | QDir::LocaleAware); QStringList list = d.entryList(); - qSort(list.begin(), list.end(), naturalSortLessThanCI); + std::sort(list.begin(), list.end(), naturalSortLessThanCI); int i = 0; foreach (QString path, list) { if (path.endsWith(atFileName)) @@ -978,8 +979,8 @@ void MainWindowViewer::saveImage() void MainWindowViewer::enableActions() { saveImageAction->setDisabled(false); - prevAction->setDisabled(false); - nextAction->setDisabled(false); + goToPageOnTheLeftAction->setDisabled(false); + goToPageOnTheRightAction->setDisabled(false); adjustHeightAction->setDisabled(false); adjustWidthAction->setDisabled(false); goToPageAction->setDisabled(false); @@ -1010,8 +1011,8 @@ void MainWindowViewer::enableActions() void MainWindowViewer::disableActions() { saveImageAction->setDisabled(true); - prevAction->setDisabled(true); - nextAction->setDisabled(true); + goToPageOnTheLeftAction->setDisabled(true); + goToPageOnTheRightAction->setDisabled(true); adjustHeightAction->setDisabled(true); adjustWidthAction->setDisabled(true); goToPageAction->setDisabled(true); @@ -1030,8 +1031,8 @@ void MainWindowViewer::disableActions() setBookmarkAction->setDisabled(true); showBookmarksAction->setDisabled(true); showInfoAction->setDisabled(true); //TODO enable goTo and showInfo (or update) when numPages emited - openPreviousComicAction->setDisabled(true); - openNextComicAction->setDisabled(true); + openComicOnTheLeftAction->setDisabled(true); + openComicOnTheRightAction->setDisabled(true); showDictionaryAction->setDisabled(true); showFlowAction->setDisabled(true); } @@ -1228,11 +1229,11 @@ void MainWindowViewer::processReset() { if (isClient) { if (siblingComics.count() > 1) { - bool openNextB = openNextComicAction->isEnabled(); - bool openPrevB = openPreviousComicAction->isEnabled(); + bool openNextB = openComicOnTheRightAction->isEnabled(); + bool openPrevB = openComicOnTheLeftAction->isEnabled(); disableActions(); - openNextComicAction->setEnabled(openNextB); - openPreviousComicAction->setEnabled(openPrevB); + openComicOnTheRightAction->setEnabled(openNextB); + openComicOnTheLeftAction->setEnabled(openPrevB); } else disableActions(); } else @@ -1252,8 +1253,8 @@ void MainWindowViewer::setUpShortcutsManagement() openLatestComicAction, openFolderAction, saveImageAction, - openPreviousComicAction, - openNextComicAction }); + openComicOnTheLeftAction, + openComicOnTheRightAction }); allActions << tmpList; @@ -1327,6 +1328,7 @@ void MainWindowViewer::setUpShortcutsManagement() << doublePageAction << doubleMangaPageAction << adjustToFullSizeAction + << fitToPageAction << increasePageZoomAction << decreasePageZoomAction << resetZoomAction); @@ -1383,8 +1385,8 @@ void MainWindowViewer::setUpShortcutsManagement() editShortcutsDialog->addActionsGroup(tr("Reading"), QIcon(":/images/shortcuts_group_reading.png"), tmpList = QList() - << nextAction - << prevAction + << goToPageOnTheRightAction + << goToPageOnTheLeftAction << setBookmarkAction << showBookmarksAction << autoScrollForwardAction @@ -1406,6 +1408,16 @@ void MainWindowViewer::setUpShortcutsManagement() ShortcutsManager::getShortcutsManager().registerActions(allActions); } +void MainWindowViewer::doubleMangaPageSwitch() +{ + if (isClient) { + int index = siblingComics.indexOf(currentComicDB); + updatePrevNextActions(index > 0, index + 1 < siblingComics.size()); + } else { + updatePrevNextActions(!previousComicPath.isEmpty(), !nextComicPath.isEmpty()); + } +} + void MainWindowViewer::toggleFitToWidthSlider() { int y; @@ -1497,6 +1509,7 @@ void MainWindowViewer::openNextComic() currentComicDB = siblingComics.at(currentIndex + 1); open(currentDirectory + currentComicDB.path, currentComicDB, siblingComics); } + return; } if (!nextComicPath.isEmpty()) { @@ -1504,6 +1517,24 @@ void MainWindowViewer::openNextComic() } } +void MainWindowViewer::openLeftComic() +{ + if (viewer->getIsMangaMode()) { + openNextComic(); + } else { + openPreviousComic(); + } +} + +void MainWindowViewer::openRightComic() +{ + if (viewer->getIsMangaMode()) { + openPreviousComic(); + } else { + openNextComic(); + } +} + void MainWindowViewer::getSiblingComics(QString path, QString currentComic) { QDir d(path); @@ -1530,8 +1561,7 @@ void MainWindowViewer::getSiblingComics(QString path, QString currentComic) #endif d.setSorting(QDir::Name | QDir::IgnoreCase | QDir::LocaleAware); QStringList list = d.entryList(); - qSort(list.begin(), list.end(), naturalSortLessThanCI); - //std::sort(list.begin(),list.end(),naturalSortLessThanCI); + std::sort(list.begin(), list.end(), naturalSortLessThanCI); int index = list.indexOf(currentComic); if (index == -1) //comic not found { @@ -1558,15 +1588,13 @@ void MainWindowViewer::getSiblingComics(QString path, QString currentComic) previousComicPath = nextComicPath = ""; if (index > 0) { previousComicPath = path + "/" + list.at(index - 1); - openPreviousComicAction->setDisabled(false); - } else - openPreviousComicAction->setDisabled(true); + } if (index + 1 < list.count()) { nextComicPath = path + "/" + list.at(index + 1); - openNextComicAction->setDisabled(false); - } else - openNextComicAction->setDisabled(true); + } + + updatePrevNextActions(index > 0, index + 1 < list.count()); } void MainWindowViewer::dropEvent(QDropEvent *event) @@ -1671,3 +1699,46 @@ void MainWindowViewer::sendComic() retries--; } } + +void MainWindowViewer::updatePrevNextActions(bool thereIsPrevious, bool thereIsNext) +{ + if (thereIsPrevious) { + if (viewer->getIsMangaMode()) { + openComicOnTheRightAction->setDisabled(false); + } else { + openComicOnTheLeftAction->setDisabled(false); + } + } else { + if (viewer->getIsMangaMode()) { + openComicOnTheRightAction->setDisabled(true); + } else { + openComicOnTheLeftAction->setDisabled(true); + } + } + + if (thereIsNext) { + if (viewer->getIsMangaMode()) { + openComicOnTheLeftAction->setDisabled(false); + } else { + openComicOnTheRightAction->setDisabled(false); + } + } else { + if (viewer->getIsMangaMode()) { + openComicOnTheLeftAction->setDisabled(true); + } else { + openComicOnTheRightAction->setDisabled(true); + } + } + + if (viewer->getIsMangaMode()) { + openComicOnTheLeftAction->setToolTip(tr("Open next comic")); + openComicOnTheRightAction->setToolTip(tr("Open previous comic")); + goToPageOnTheLeftAction->setToolTip(tr("Go to next page")); + goToPageOnTheRightAction->setToolTip(tr("Go to previous page")); + } else { + openComicOnTheLeftAction->setToolTip(tr("Open previous comic")); + openComicOnTheRightAction->setToolTip(tr("Open next comic")); + goToPageOnTheLeftAction->setToolTip(tr("Go to previous page")); + goToPageOnTheRightAction->setToolTip(tr("Go to next page")); + } +} diff --git a/YACReader/main_window_viewer.h b/YACReader/main_window_viewer.h index 21ad8cdd6..e526a9369 100644 --- a/YACReader/main_window_viewer.h +++ b/YACReader/main_window_viewer.h @@ -50,6 +50,8 @@ public slots: void newVersion(); void openPreviousComic(); void openNextComic(); + void openLeftComic(); + void openRightComic(); void openComicFromPath(QString pathFile); void openSiblingComic(QString pathFile); void openComic(QString pathFile); @@ -68,6 +70,7 @@ public slots: void checkNewVersion(); void processReset(); void setUpShortcutsManagement(); + void doubleMangaPageSwitch(); void toggleFitToWidthSlider(); @@ -114,10 +117,10 @@ public slots: QList recentFilesActionList; QAction *clearRecentFilesAction; QAction *saveImageAction; - QAction *openPreviousComicAction; - QAction *openNextComicAction; - QAction *nextAction; - QAction *prevAction; + QAction *openComicOnTheLeftAction; + QAction *openComicOnTheRightAction; + QAction *goToPageOnTheRightAction; + QAction *goToPageOnTheLeftAction; QAction *adjustWidthAction; QAction *adjustHeightAction; QAction *goToPageAction; @@ -181,6 +184,8 @@ public slots: protected: void closeEvent(QCloseEvent *event) override; void sendComic(); + void updatePrevNextActions(bool thereIsPrevious, bool thereIsNext); + void afterLaunchTasks(); public: MainWindowViewer(); diff --git a/YACReader/render.cpp b/YACReader/render.cpp index 58501767e..4e6f5a4f3 100644 --- a/YACReader/render.cpp +++ b/YACReader/render.cpp @@ -695,13 +695,12 @@ void Render::createComic(const QString &path) pagesEmited.clear(); if (comic != nullptr) { - //comic->moveToThread(QApplication::instance()->thread()); comic->invalidate(); - comic->disconnect(); + // Dispatch pending events to guard against race conditons + QCoreApplication::sendPostedEvents(this); comic->deleteLater(); } - //comic->moveToThread(QApplication::instance()->thread()); comic = FactoryComic::newComic(path); if (comic == nullptr) //archivo no encontrado o no válido @@ -1028,6 +1027,15 @@ void Render::doublePageSwitch() } } +void Render::setManga(bool manga) +{ + doubleMangaPage = manga; + if (comic && doublePage) { + //invalidate(); + update(); + } +} + void Render::doubleMangaPageSwitch() { doubleMangaPage = !doubleMangaPage; diff --git a/YACReader/render.h b/YACReader/render.h index e852cd647..6cf3bb6ce 100644 --- a/YACReader/render.h +++ b/YACReader/render.h @@ -144,6 +144,7 @@ public slots: bool previousPageIsDoublePage(); void goTo(int index); void doublePageSwitch(); + void setManga(bool manga); void doubleMangaPageSwitch(); void setRotation(int degrees); void setComic(Comic *c); diff --git a/YACReader/viewer.cpp b/YACReader/viewer.cpp index dd9e27bd2..9d96e5b66 100644 --- a/YACReader/viewer.cpp +++ b/YACReader/viewer.cpp @@ -253,6 +253,24 @@ void Viewer::next() shouldOpenPrevious = false; } +void Viewer::left() +{ + if (doubleMangaPage) { + next(); + } else { + prev(); + } +} + +void Viewer::right() +{ + if (doubleMangaPage) { + prev(); + } else { + next(); + } +} + void Viewer::prev() { direction = -1; @@ -611,7 +629,7 @@ void Viewer::keyPressEvent(QKeyEvent *event) key == ShortcutsManager::getShortcutsManager().getShortcut(MOVE_UP_ACTION_Y) || key == ShortcutsManager::getShortcutsManager().getShortcut(MOVE_LEFT_ACTION_Y) || key == ShortcutsManager::getShortcutsManager().getShortcut(MOVE_RIGHT_ACTION_Y)) { - QAbstractScrollArea::keyPressEvent(event); + moveAction(key); emit backgroundChanges(); } @@ -634,6 +652,26 @@ void Viewer::keyPressEvent(QKeyEvent *event) QAbstractScrollArea::keyPressEvent(event); } +void Viewer::moveAction(const QKeySequence &key) +{ + int _key = 0; + + if (key == ShortcutsManager::getShortcutsManager().getShortcut(MOVE_DOWN_ACTION_Y)) + _key = Qt::Key_Down; + + else if (key == ShortcutsManager::getShortcutsManager().getShortcut(MOVE_UP_ACTION_Y)) + _key = Qt::Key_Up; + + else if (key == ShortcutsManager::getShortcutsManager().getShortcut(MOVE_LEFT_ACTION_Y)) + _key = Qt::Key_Left; + + else if (key == ShortcutsManager::getShortcutsManager().getShortcut(MOVE_RIGHT_ACTION_Y)) + _key = Qt::Key_Right; + + QKeyEvent _event = QKeyEvent(QEvent::KeyPress, _key, Qt::NoModifier); + QAbstractScrollArea::keyPressEvent(&_event); +} + static void animateScroll(QPropertyAnimation &scroller, const QScrollBar &scrollBar, int delta) { int deltaNotFinished = 0; @@ -889,6 +927,13 @@ void Viewer::doublePageSwitch() Configuration::getConfiguration().setDoublePage(doublePage); } +void Viewer::setMangaWithoutStoringSetting(bool manga) +{ + doubleMangaPage = manga; + render->setManga(manga); + goToFlow->setFlowRightToLeft(doubleMangaPage); +} + void Viewer::doubleMangaPageSwitch() { doubleMangaPage = !doubleMangaPage; @@ -1026,6 +1071,11 @@ void Viewer::updateZoomRatio(int ratio) updateContentSize(); } +bool Viewer::getIsMangaMode() +{ + return doubleMangaPage; +} + void Viewer::updateConfig(QSettings *settings) { goToFlow->updateConfig(settings); diff --git a/YACReader/viewer.h b/YACReader/viewer.h index 75bc5dc8f..858c2772e 100644 --- a/YACReader/viewer.h +++ b/YACReader/viewer.h @@ -48,6 +48,8 @@ public slots: void open(QString pathFile, const ComicDB &comic); void prev(); void next(); + void left(); + void right(); void showGoToDialog(); void goTo(unsigned int page); void updatePage(); @@ -76,6 +78,7 @@ public slots: void setBookmark(bool); void save(); void doublePageSwitch(); + void setMangaWithoutStoringSetting(bool manga); void doubleMangaPageSwitch(); void resetContent(); void setLoadingMessage(); @@ -102,6 +105,7 @@ public slots: void showIsLastMessage(); int getCurrentPageNumber(); void updateZoomRatio(int ratio); + bool getIsMangaMode(); private: bool information; @@ -160,6 +164,8 @@ public slots: void wheelEvent(QWheelEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; + void moveAction(const QKeySequence &key); + //!ZigzagScroll enum scrollDirection { UP, DOWN, diff --git a/YACReader/yacreader_de.ts b/YACReader/yacreader_de.ts index d2ba59634..7e35ff4c1 100644 --- a/YACReader/yacreader_de.ts +++ b/YACReader/yacreader_de.ts @@ -4,7 +4,6 @@ ActionsShortcutsModel - None @@ -12,51 +11,41 @@ BookmarksDialog - - Lastest Page - Vorherige Seite - - - Close Schliessen - + Loading... + Laden... + + Click on any image to go to the bookmark Click auf beliebiges Bild um zum Lesezeichen zu gehen - - - Loading... - Laden... + Lastest Page + Vorherige Seite EditShortcutsDialog - Restore defaults - To change a shortcut, double click in the key combination and type the new keys. - Shortcuts settings - Shortcut in use - The shortcut "%1" is already assigned to other function @@ -64,59 +53,48 @@ FileComic - - CRC error on page (%1): some of the pages will not be displayed correctly - CRC Error auf Seite (%1): einige Seiten werden nicht korrekt dargestellt - - - - Unknown error opening the file - Unbekannter Fehler beim öffnen des Files + Format not supported + Format wird nicht unterstützt - 7z not found 7z nicht gefunden - - Format not supported - Format wird nicht unterstützt + Unknown error opening the file + Unbekannter Fehler beim öffnen des Files + + + CRC error on page (%1): some of the pages will not be displayed correctly + CRC Error auf Seite (%1): einige Seiten werden nicht korrekt dargestellt GoToDialog - - Page : - Seite : - - - Go To Gehe nach - - Cancel - Abbrechen + Go to... + Gehe nach... - - Total pages : Seiten total : - - Go to... - Gehe nach... + Cancel + Abbrechen + + + Page : + Seite : GoToFlowToolBar - Page : Seite : @@ -124,648 +102,591 @@ HelpAboutDialog - - About - Über - - - Help + + About + Über + - MainWindowViewer + LogWindow - - &Open - &Öffnen + Log window + - O - O + &Pause + - - Open a comic - Comic öffnen + &Save + - - Open Folder - Ordner Öffnen + C&lear + - Ctrl+O - Crtl+ O + &Copy + - - Open image folder - Bilder Ordner öffnen + Level: + - - Open latest comic + &Auto scroll + + + MainWindowViewer - - Open the latest comic opened in the previous reading session - + File + File - - Clear open recent list - + Help + Hilfe - Save Speichern - - - Save current page - Diese Seite speichern + &File + &File - - Previous Comic - Voheriger Comic + &Next + &Nächste - - Open previous comic - Vorherigen Comic öffnen + &Open + &Öffnen - - Next Comic - Nächster Comic + Close + Schliessen - - Open next comic - Nächsten Comic öffnen + Open Comic + Comic öffnen - - &Previous - &Vorherige + Go To + Gehe zu - - Go to previous page - Zur vorherigen Seite gehen + Open image folder + Bilder Ordner öffnen - - &Next - &Nächste + Set bookmark + Lesezeichen setzen - - Go to next page - Zur nächsten Seite gehen + page_%1.jpg + Seite_%1.jpg - - Fit Width - Breite anpassen + Switch to double page mode + Zum Doppelseiten Modus wechseln - - Fit image to height - Bild auf Höhe anpassen + Save current page + Diese Seite speichern + + + Double page mode + Doppelseiten Modus + + + Switch Magnifying glass + Vergrößerungsglas wechseln + + + Open Folder + Ordner Öffnen - Fit Height Höhe anpassen - - Fit image to width - Bildbreite anpassen + Comic files + Comic Files - - Rotate image to the left - Bild nach links drehen + Not now + Nicht jetzt - L - L + Go to previous page + Zur vorherigen Seite gehen - - Rotate image to the right - Bild nach rechts drehen + Open a comic + Comic öffnen - R - R + Image files (*.jpg) + Bilder Files (*.jpg) - - Double page mode - Doppelseiten Modus + Next Comic + Nächster Comic - - Switch to double page mode - Zum Doppelseiten Modus wechseln + Fit Width + Breite anpassen - D - D + Options + Optionen - - Go To - Gehe zu + Show Info + Info anzeigen - G - G + Open folder + Ordner öffnen - Go to page ... Gehe nach Seite ... - - Options - Optionen + Fit image to width + Bildbreite anpassen - C - C + &Previous + &Vorherige - - YACReader options - YACReader Optionen + Go to next page + Zur nächsten Seite gehen - - - Help - Hilfe + Show keyboard shortcuts + Tastaturkürzel anzeigen - - Help, About YACReader - Hilfe, über YACReader + There is a new version available + Neue Version verfügbar - - Magnifying glass - Vergößerungsglas + Open next comic + Nächsten Comic öffnen - - Switch Magnifying glass - Vergrößerungsglas wechseln + Remind me in 14 days + In 14 Tagen erneut erinnern - Z - Z + Show bookmarks + Lesezeichen anzeigen - - Set bookmark - Lesezeichen setzen + Open previous comic + Vorherigen Comic öffnen - - Set a bookmark on the current page - Lesezeichen auf dieser Seite setzen + Rotate image to the left + Bild nach links drehen - - Show bookmarks - Lesezeichen anzeigen + Fit image to height + Bild auf Höhe anpassen - Show the bookmarks of the current comic Lesezeichen für diesen Comic anzeigen - M - M + Show Dictionary + Wörterbuch anzeigen - - Show keyboard shortcuts - Tastaturkürzel anzeigen + YACReader options + YACReader Optionen - - Show Info - Info anzeigen + Help, About YACReader + Hilfe, über YACReader - I - I + Show go to flow + "Go to Flow" anzeigen - - Close - Schliessen + Previous Comic + Voheriger Comic - - Show Dictionary - Wörterbuch anzeigen + Show full size + Vollansicht anzeigen - - Always on top - Immer Oberste Ansicht + Magnifying glass + Vergößerungsglas - - Show full size - Vollansicht anzeigen + General + Allgemein - - Clear - + Set a bookmark on the current page + Lesezeichen auf dieser Seite setzen - - Fit to page - + Do you want to download the new version? + Möchten Sie die neue Version herunterladen? - - Reset zoom - + Rotate image to the right + Bild nach rechts drehen - - Show zoom slider - + Always on top + Immer Oberste Ansicht - - Zoom+ + New instance - - Zoom- + Open latest comic - - Double page manga mode + Open the latest comic opened in the previous reading session - - Reverse reading order in double page mode + Clear - - Show go to flow - "Go to Flow" anzeigen + Clear open recent list + - - Edit shortcuts + Fit to page - - &File - &File + Reset zoom + - - - Open recent + Show zoom slider - - File - File + Zoom+ + - - Edit + Zoom- - - View + Double page manga mode - - Go + Reverse reading order in double page mode - - Window + Edit shortcuts - - - Open Comic - Comic öffnen + Open recent + - - - Comic files - Comic Files + Edit + - - Open folder - Ordner öffnen + View + - - Image files (*.jpg) - Bilder Files (*.jpg) + Go + - - page_%1.jpg - Seite_%1.jpg + Window + - Comics - Toggle fullscreen mode - Hide/show toolbar - - General - Allgemein - - - Size up magnifying glass - Size down magnifying glass - Zoom in magnifying glass - Zoom out magnifying glass - Magnifiying glass - Toggle between fit to width and fit to height - Page adjustement - Autoscroll down - Autoscroll up - Autoscroll forward, horizontal first - Autoscroll backward, horizontal first - Autoscroll forward, vertical first - Autoscroll backward, vertical first - Move down - Move up - Move left - Move right - Go to the first page - Go to the last page - Reading + + + OptionsDialog - - There is a new version available - Neue Version verfügbar + Gamma + Gamma - - Do you want to download the new version? - Möchten Sie die neue Version herunterladen? + Reset + Zurücksetzen - - Remind me in 14 days - In 14 Tagen erneut erinnern + My comics path + Pfad zu Meine Comics - - Not now - Nicht jetzt + Image adjustment + Bildanpassung - - - OptionsDialog - "Go to flow" size "Go to flow" Größe - - My comics path - Pfad zu Meine Comics + Choose + Auswählen - Page width stretch - Seitenbreite strecken + Image options + Bilderoptionen + + + Contrast + Kontrast + + + Options + Optionen + + + Comics directory + Comics Verzeichnis - Background color Hintergrund Farbe - - Choose - Auswählen + Page Flow + Page Flow + + + General + Allgemein + + + Brightness + Helligkeit + + + Restart is needed + Neustart erforderlich - Quick Navigation Mode - Disable mouse over activation - - Restart is needed - Neustart erforderlich + Fit options + - - Brightness - Helligkeit + Enlarge images to fit width/height + - - Contrast - Kontrast + Double Page options + - - Gamma - Gamma + Show covers as single page + + + + QObject - - Reset - Zurücksetzen + 7z lib not found + 7z Verzeichnis nicht gefunden - - Image options - Bilderoptionen + unable to load 7z lib from ./utils + 7z Verzeichnis kann von ./utils nicht geladen werden - - General - Allgemein + Trace + - - Page Flow - Page Flow + Debug + - - Image adjustment - Bildanpassung + Info + - - Options - Optionen + Warning + - - Comics directory - Comics Verzeichnis + Error + + + + Fatal + - QObject + QsLogging::LogWindowModel - - 7z lib not found - 7z Verzeichnis nicht gefunden + Time + - - unable to load 7z lib from ./utils - 7z Verzeichnis kann von ./utils nicht geladen werden + Level + + + + Message + - ShortcutsDialog + QsLogging::Window - - YACReader keyboard shortcuts - YACReader Tastaturkürzel + &Pause + + + + &Resume + - + Save log + + + + Log file (*.log) + + + + + ShortcutsDialog + Close schliessen - + YACReader keyboard shortcuts + YACReader Tastaturkürzel + + Keyboard Shortcuts Tastaturkürzel @@ -773,101 +694,86 @@ Viewer - - - Press 'O' to open comic. - 'O' drücken um Comic zu öffnen. - - - - Not found - Nicht gefunden + Page not available! + Seite nicht verfügbar! - - Comic not found - Comic nicht gefunden + Press 'O' to open comic. + 'O' drücken um Comic zu öffnen. - Error opening comic Fehler beim Öffnen des Comics - - CRC Error - CRC Fehler + Cover! + Titelseite! - - Loading...please wait! - Ladevorgang... Bitte warten! + CRC Error + CRC Fehler - - Page not available! - Seite nicht verfügbar! + Comic not found + Comic nicht gefunden - - Cover! - Titelseite! + Not found + Nicht gefunden - Last page! Letzte Seite! + + Loading...please wait! + Ladevorgang... Bitte warten! + - YACReaderFieldEdit + YACReader::WhatsNewDialog - - - Click to overwrite - Zum Überschreiben drücken + Close + + + + YACReaderFieldEdit - Restore to default Ursprungszustand wiederherstellen - - - YACReaderFieldPlainTextEdit - - - - Click to overwrite - zum Überschreiben drücken + Zum Überschreiben drücken + + + YACReaderFieldPlainTextEdit - Restore to default Urpsrungszustannd wiederherstellen + + Click to overwrite + zum Überschreiben drücken + YACReaderFlowConfigWidget - - How to show covers: - Wie zeige ich die Titelseite an: - - - CoverFlow look Tielseiten Ansicht - + How to show covers: + Wie zeige ich die Titelseite an: + + Stripe look Streifen Ansicht - Overlapped Stripe look Überlappende Streifen Ansicht @@ -875,179 +781,145 @@ YACReaderGLFlowConfigWidget - - Presets: - Voreinstellungen: - - - - Classic look - Klassische Ansicht - - - - Stripe look - Streifen Ansicht + Zoom + Vergrößern - - Overlapped Stripe look - Überlappende Streifenansicht + Light + Licht - - Modern look - Moderne Ansicht + Show advanced settings + Zeige fortgeschrittene Einstellungen - Roulette look Zufalls Ansicht - - Show advanced settings - Zeige fortgeschrittene Einstellungen - - - - Custom: - Custom: + Cover Angle + Titelbild Ansichtswinkel - - View angle - Anzeige Winkel + Stripe look + Streifen Ansicht - Position Position - - Cover gap - Titelbild Abstand + Z offset + Z Anpassung + + + Y offset + Y Anpassung - Central gap Mittel Abstand - - Zoom - Vergrößern + Presets: + Voreinstellungen: - - Y offset - Y Anpassung + Overlapped Stripe look + Überlappende Streifenansicht - - Z offset - Z Anpassung + Modern look + Moderne Ansicht - - Cover Angle - Titelbild Ansichtswinkel + View angle + Anzeige Winkel - - Visibility - Anzeigeintensität + Max angle + Max Winkel - - Light - Licht + Custom: + Custom: - - Max angle - Max Winkel + Classic look + Klassische Ansicht - - Low Performance - Niedrige Leistung + Cover gap + Titelbild Abstand - High Performance Hohe Leistung - + Performance: + Leistung: + + Use VSync (improve the image quality in fullscreen mode, worse performance) Benutz VSync (verbessert die Bildqualität im Vollanzeigemodus, schlechtere Leistung) - - Performance: - Leistung: + Visibility + Anzeigeintensität + + + Low Performance + Niedrige Leistung YACReaderOptionsDialog - Save Speichern - + Use hardware acceleration (restart needed) + Benutze Hardware Beschleunigung (Neustart erforderlich) + + Cancel Abbrechen - Edit shortcuts - Shortcuts - - - Use hardware acceleration (restart needed) - Benutze Hardware Beschleunigung (Neustart erforderlich) - YACReaderSlider - Reset - Zurücksetzen + Zurücksetzen YACReaderTranslator - - YACReader translator - YACReader Übersetzer - - - - - Translation - Übersetzung - - - clear löschen - Service not available Service nicht verfügbar + + Translation + Übersetzung + + + YACReader translator + YACReader Übersetzer + diff --git a/YACReader/yacreader_es.ts b/YACReader/yacreader_es.ts index b93544494..da6980a3f 100644 --- a/YACReader/yacreader_es.ts +++ b/YACReader/yacreader_es.ts @@ -4,7 +4,6 @@ ActionsShortcutsModel - None @@ -12,51 +11,41 @@ BookmarksDialog - - Lastest Page - Última página - - - Close Cerrar - + Loading... + Cargando... + + Click on any image to go to the bookmark Pulsa en cualquier imagen para ir al marcador - - - Loading... - Cargando... + Lastest Page + Última página EditShortcutsDialog - Restore defaults - To change a shortcut, double click in the key combination and type the new keys. - Shortcuts settings - Shortcut in use - The shortcut "%1" is already assigned to other function @@ -64,22 +53,18 @@ FileComic - - Unknown error opening the file - Error desconocido abriendo el archivo + Format not supported + Formato no soportado - 7z not found 7z no encontrado - - Format not supported - Formato no soportado + Unknown error opening the file + Error desconocido abriendo el archivo - CRC error on page (%1): some of the pages will not be displayed correctly Error CRC en la página (%1): algunas de las páginas no se mostrarán correctamente @@ -87,36 +72,29 @@ GoToDialog - - Page : - Página : - - - Go To Ir a - - Cancel - Cancelar + Go to... + Ir a... - - Total pages : Páginas totales: - - Go to... - Ir a... + Cancel + Cancelar + + + Page : + Página : GoToFlowToolBar - Page : Página : @@ -124,649 +102,591 @@ HelpAboutDialog - - About - Acerca de - - - Help Ayuda + + About + Acerca de + - MainWindowViewer + LogWindow - - &Open - &Abrir + Log window + - O - O + &Pause + - - Open a comic - Abrir cómic + &Save + - - Open Folder - Abrir carpeta + C&lear + - Ctrl+O - Ctrl+O + &Copy + - - Open image folder - Open images in a folder - Abrir carpeta de imágenes + Level: + - - Clear + &Auto scroll + + + MainWindowViewer + + File + Archivo + + + Help + Ayuda + - Save Guardar - - - Save current page - Guardar la página actual + &File + &Archivo - - Previous Comic - Cómic anterior + &Next + Siguie&nte - - Open previous comic - Abrir cómic anterior + &Open + &Abrir - - Next Comic - Siguiente Cómic + Close + Cerrar - - Open next comic - Abrir siguiente cómic + Open Comic + Abrir cómic - - &Previous - A&nterior + Go To + Ir a - - Go to previous page - Ir a la página anterior + Open image folder + Abrir carpeta de imágenes - - &Next - Siguie&nte + Set bookmark + Añadir marcador - - Go to next page - Ir a la página siguiente + page_%1.jpg + página_%1.jpg - - Fit Width - Ajustar anchura + Switch to double page mode + Cambiar a modo de doble página - - Fit image to height - Ajustar página a lo alto + Save current page + Guardar la página actual + + + Double page mode + Modo a doble página + + + Switch Magnifying glass + Lupa On/Off + + + Open Folder + Abrir carpeta - Fit Height Ajustar altura - - Fit image to width - Ajustar página a lo ancho + Comic files + Archivos de cómic - - Rotate image to the left - Rotar imagen a la izquierda + Not now + Ahora no - L - L + Go to previous page + Ir a la página anterior - - Rotate image to the right - Rotar imagen a la derecha + Open a comic + Abrir cómic - R - R + Image files (*.jpg) + Archivos de imagen (*.jpg) - - Double page mode - Modo a doble página + Next Comic + Siguiente Cómic - - Switch to double page mode - Cambiar a modo de doble página + Fit Width + Ajustar anchura - D - D + Options + Opciones - - Go To - Ir a + Show Info + Mostrar información - G - G + Open folder + Abrir carpeta - Go to page ... Ir a página... - - Options - Opciones + Fit image to width + Ajustar página a lo ancho - C - C + &Previous + A&nterior - - YACReader options - Opciones de YACReader + Go to next page + Ir a la página siguiente - - - Help - Ayuda + Show keyboard shortcuts + Mostrar atajos de teclado - - Help, About YACReader - Ayuda, Sobre YACReader + There is a new version available + Hay una nueva versión disponible - - Magnifying glass - Lupa + Open next comic + Abrir siguiente cómic - - Switch Magnifying glass - Lupa On/Off + Remind me in 14 days + Recordar en 14 días - Z - Z + Show bookmarks + Mostrar marcadores - - Set bookmark - Añadir marcador + Open previous comic + Abrir cómic anterior - - Set a bookmark on the current page - Añadir un marcador en la página actual + Rotate image to the left + Rotar imagen a la izquierda - - Show bookmarks - Mostrar marcadores + Fit image to height + Ajustar página a lo alto - Show the bookmarks of the current comic Mostrar los marcadores del cómic actual - M - M + Show Dictionary + Mostrar diccionario - - Show keyboard shortcuts - Mostrar atajos de teclado + YACReader options + Opciones de YACReader - - Show Info - Mostrar información + Help, About YACReader + Ayuda, Sobre YACReader - I - I + Show go to flow + Mostrar flow ir a - - Close - Cerrar + Previous Comic + Cómic anterior - - Show Dictionary - Mostrar diccionario + Show full size + Mostrar a tamaño original + + + Magnifying glass + Lupa + + + General + General + + + Set a bookmark on the current page + Añadir un marcador en la página actual + + + Do you want to download the new version? + ¿Desea descargar la nueva versión? + + + Rotate image to the right + Rotar imagen a la derecha - Always on top Siempre visible - - Show full size - Mostrar a tamaño original + New instance + - Open latest comic - Open the latest comic opened in the previous reading session - + Clear + + + Clear open recent list - Fit to page - Reset zoom - Show zoom slider - Zoom+ - Zoom- - Double page manga mode - Reverse reading order in double page mode - - Show go to flow - Mostrar flow ir a - - - Edit shortcuts - - &File - &Archivo + Open recent + - - - Open recent + Edit - - File - Archivo - - - - Edit - - - - View - Go - Window - - - Open Comic - Abrir cómic - - - - - Comic files - Archivos de cómic - - - Comics - Toggle fullscreen mode - Hide/show toolbar - - General - General - - - Size up magnifying glass - Size down magnifying glass - Zoom in magnifying glass - Zoom out magnifying glass - Magnifiying glass - Toggle between fit to width and fit to height - Page adjustement - Autoscroll down - Autoscroll up - Autoscroll forward, horizontal first - Autoscroll backward, horizontal first - Autoscroll forward, vertical first - Autoscroll backward, vertical first - Move down - Move up - Move left - Move right - Go to the first page - Go to the last page - Reading + + + OptionsDialog - - Remind me in 14 days - Recordar en 14 días + Gamma + Gamma - - Not now - Ahora no + Reset + Reset - - Open folder - Abrir carpeta + My comics path + Ruta a mis cómics - - Image files (*.jpg) - Archivos de imagen (*.jpg) + Image adjustment + Ajustes de imagen - - page_%1.jpg - página_%1.jpg + "Go to flow" size + Tamaño de "Go to flow" - - There is a new version available - Hay una nueva versión disponible + Choose + Elegir - - Do you want to download the new version? - ¿Desea descargar la nueva versión? + Image options + Opciones de imagen - - - OptionsDialog - - "Go to flow" size - Tamaño de "Go to flow" + Contrast + Contraste - - My comics path - Ruta a mis cómics + Options + Opciones - Page width stretch - Ajuste en anchura de la página + Comics directory + Directorio de cómics - Background color Color de fondo - - Choose - Elegir + Page Flow + Page Flow + + + General + General + + + Brightness + Brillo + + + Restart is needed + Es necesario reiniciar - Quick Navigation Mode - Disable mouse over activation - - Restart is needed - Es necesario reiniciar + Fit options + - - Brightness - Brillo + Enlarge images to fit width/height + - - Contrast - Contraste + Double Page options + - - Gamma - Gamma + Show covers as single page + + + + QObject - - Reset - Reset + 7z lib not found + 7z lib no encontrado - - Image options - Opciones de imagen + unable to load 7z lib from ./utils + imposible cargar 7z lib de ./utils - - General - General + Trace + - - Page Flow - Page Flow + Debug + - - Image adjustment - Ajustes de imagen + Info + - - Options - Opciones + Warning + - - Comics directory - Directorio de cómics + Error + + + + Fatal + - QObject + QsLogging::LogWindowModel - - 7z lib not found - 7z lib no encontrado + Time + - - unable to load 7z lib from ./utils - imposible cargar 7z lib de ./utils + Level + + + + Message + - ShortcutsDialog + QsLogging::Window - - YACReader keyboard shortcuts - Atajos de teclado de YACReader + &Pause + + + + &Resume + + + + Save log + - + Log file (*.log) + + + + + ShortcutsDialog + Close Cerrar - + YACReader keyboard shortcuts + Atajos de teclado de YACReader + + Keyboard Shortcuts Atajos de teclado @@ -774,101 +694,86 @@ Viewer - - - Press 'O' to open comic. - Pulsa 'O' para abrir un fichero. - - - - Not found - No encontrado + Page not available! + ¡Página no disponible! - - Comic not found - Cómic no encontrado + Press 'O' to open comic. + Pulsa 'O' para abrir un fichero. - Error opening comic Error abriendo cómic - + Cover! + ¡Portada! + + CRC Error Error CRC - - Page not available! - ¡Página no disponible! + Comic not found + Cómic no encontrado - - Cover! - ¡Portada! + Not found + No encontrado - Last page! ¡Última página! - Loading...please wait! Cargando...espere, por favor! - YACReaderFieldEdit + YACReader::WhatsNewDialog - - - Click to overwrite - Click para sobreescribir + Close + Cerrar + + + YACReaderFieldEdit - Restore to default Restaurar valor por defecto - - - YACReaderFieldPlainTextEdit - - - - Click to overwrite Click para sobreescribir + + + YACReaderFieldPlainTextEdit - Restore to default Restaurar valor por defecto + + Click to overwrite + Click para sobreescribir + YACReaderFlowConfigWidget - - How to show covers: - Cómo mostrar las portadas: - - - CoverFlow look Tipo CoverFlow - + How to show covers: + Cómo mostrar las portadas: + + Stripe look Tipo tira - Overlapped Stripe look Tipo tira solapada @@ -876,179 +781,145 @@ YACReaderGLFlowConfigWidget - - Presets: - Predefinidos: - - - - Classic look - Tipo clásico - - - - Stripe look - Tipo tira + Zoom + Zoom - - Overlapped Stripe look - Tipo tira solapada + Light + Luz - - Modern look - Tipo moderno + Show advanced settings + Opciones avanzadas - Roulette look Tipo ruleta - - Show advanced settings - Opciones avanzadas - - - - Custom: - Personalizado: + Cover Angle + Ángulo de las portadas - - View angle - Ángulo de vista + Stripe look + Tipo tira - Position Posición - - Cover gap - Hueco entre portadas + Z offset + Desplazamiento en Z + + + Y offset + Desplazamiento en Y - Central gap Hueco central - - Zoom - Zoom + Presets: + Predefinidos: - - Y offset - Desplazamiento en Y + Overlapped Stripe look + Tipo tira solapada - - Z offset - Desplazamiento en Z + Modern look + Tipo moderno - - Cover Angle - Ángulo de las portadas + View angle + Ángulo de vista - - Visibility - Visibilidad + Max angle + Ángulo máximo - - Light - Luz + Custom: + Personalizado: - - Max angle - Ángulo máximo + Classic look + Tipo clásico - - Low Performance - Rendimiento bajo + Cover gap + Hueco entre portadas - High Performance Alto rendimiento - + Performance: + Rendimiento: + + Use VSync (improve the image quality in fullscreen mode, worse performance) Utilizar VSync (mejora la calidad de imagen en pantalla completa, peor rendimiento) - - Performance: - Rendimiento: + Visibility + Visibilidad + + + Low Performance + Rendimiento bajo YACReaderOptionsDialog - Save Guardar - + Use hardware acceleration (restart needed) + Utilizar aceleración por hardware (necesario reiniciar) + + Cancel Cancelar - Edit shortcuts - Shortcuts - - - Use hardware acceleration (restart needed) - Utilizar aceleración por hardware (necesario reiniciar) - YACReaderSlider - Reset - Reset + Reset YACReaderTranslator - - YACReader translator - Traductor YACReader - - - - - Translation - Traducción - - - clear limpiar - Service not available Servicio no disponible + + Translation + Traducción + + + YACReader translator + Traductor YACReader + diff --git a/YACReader/yacreader_fr.ts b/YACReader/yacreader_fr.ts old mode 100755 new mode 100644 index c9e6c16bf..4dd7574d4 --- a/YACReader/yacreader_fr.ts +++ b/YACReader/yacreader_fr.ts @@ -1,122 +1,100 @@ - + ActionsShortcutsModel - None - Rien + Rien BookmarksDialog - - Lastest Page - Aller à la dernière page - - - Close Fermer - + Loading... + Chargement... + + Click on any image to go to the bookmark Cliquez sur une image pour aller au marque-page - - - Loading... - Chargement... + Lastest Page + Aller à la dernière page EditShortcutsDialog - - Restore defaults - Réinitialiser + Shortcut in use + Raccourci en cours d'utilisation - - To change a shortcut, double click in the key combination and type the new keys. - Pour modifier un raccourci, double-cliquez sur la combinaison de touches et tapez les nouvelles clés. + Restore defaults + Réinitialiser - Shortcuts settings - Paramètres de raccourcis + Paramètres de raccourcis - - Shortcut in use - Raccourci en cours d'utilisation + The shortcut "%1" is already assigned to other function + Le raccourci "%1" est déjà affecté à une autre fonction - - The shortcut "%1" is already assigned to other function - Le raccourci "%1" est déjà affecté à une autre fonction + To change a shortcut, double click in the key combination and type the new keys. + Pour modifier un raccourci, double-cliquez sur la combinaison de touches et tapez les nouvelles clés. FileComic - - Unknown error opening the file - Erreur inconnue lors de l'ouverture du fichier + Format not supported + Format non supporté - 7z not found - 7z introuvable + 7z introuvable - - Format not supported - Format non supporté + Unknown error opening the file + Erreur inconnue lors de l'ouverture du fichier - CRC error on page (%1): some of the pages will not be displayed correctly - Erreur CRC sur la page (%1): certaines pages ne s'afficheront pas correctement + Erreur CRC sur la page (%1): certaines pages ne s'afficheront pas correctement GoToDialog - - Page : - Page : - - - Go To Aller à - - Cancel - Annuler + Go to... + Aller à... - - Total pages : Nombre de pages : - - Go to... - Aller à... + Cancel + Annuler + + + Page : + Page : GoToFlowToolBar - Page : Page : @@ -124,648 +102,591 @@ HelpAboutDialog - - About - A propos - - - Help Aide + + About + A propos + - MainWindowViewer + LogWindow - - &Open - &Ouvrir + Log window + - O - O + &Pause + - - Open a comic - Ouvrir une bande dessinée + &Save + - - Open Folder - Ouvrir un dossier + C&lear + - Ctrl+O - Ctrl+O + &Copy + - - Open image folder - Ouvrir un dossier d'images + Level: + - - Open latest comic - Ouvrir la dernière bande dessinée + &Auto scroll + + + + MainWindowViewer - - Open the latest comic opened in the previous reading session - Ouvrir la dernière bande dessinée ouverte lors de la session de lecture précédente + Go + Aller - - Clear open recent list - Vider la liste d'ouverture récente + Edit + Editer - - Save - Sauvegarder + File + Fichier - - - Save current page - Sauvegarder la page actuelle + Help + Aide - - Previous Comic - Bande dessinée précédente + Save + Sauvegarder - - Open previous comic - Ouvrir la bande dessiné précédente + View + Vue - - Next Comic - Bande dessinée suivante + &File + &Fichier - - Open next comic - Ouvrir la bande dessinée suivante + &Next + &Suivant - - &Previous - &Précédent + &Open + &Ouvrir - - Go to previous page - Aller à la page précédente + Close + Fermer - - &Next - &Suivant + Open Comic + Ouvrir la bande dessinée - - Go to next page - Aller à la page suivante + Go To + Aller à - - Fit Width - Ajuster la largeur + Zoom+ + Zoom+ - - Fit image to height - Ajuster l'image à la hauteur + Zoom- + Zoom- - - Fit Height - Ajuster la hauteur + Open image folder + Ouvrir un dossier d'images - - Fit image to width - Ajuster l'image à la largeur + Size down magnifying glass + Réduire la taille de la loupe - - Rotate image to the left - Rotation à gauche + Zoom out magnifying glass + Dézoomer - L - L + Open latest comic + Ouvrir la dernière bande dessinée - - Rotate image to the right - Rotation à droite + Autoscroll up + Défilement automatique vers le haut - R - R + Set bookmark + Placer un marque-page - - Double page mode - Mode double page + page_%1.jpg + page_%1.jpg + + + Autoscroll forward, vertical first + Défilement automatique en avant, vertical - Switch to double page mode Passer en mode double page - D - D + Save current page + Sauvegarder la page actuelle - - Go To - Aller à + Size up magnifying glass + Augmenter la taille de la loupe - G - G + Double page mode + Mode double page - - Go to page ... - Aller à la page ... + Move up + Monter - - Options - Options + Switch Magnifying glass + Utiliser la loupe - C - C + Open Folder + Ouvrir un dossier - - YACReader options - Options de YACReader + Comics + Bandes dessinées - - - Help - Aide + Fit Height + Ajuster la hauteur - - Help, About YACReader - Aide, à propos de YACReader + Autoscroll backward, vertical first + Défilement automatique en arrière, verticak - - Magnifying glass - Loupe + Comic files + Bande dessinée - - Switch Magnifying glass - Utiliser la loupe + Not now + Pas maintenant - Z - Z + Go to the first page + Aller à la première page - - Set bookmark - Placer un marque-page + Go to previous page + Aller à la page précédente - - Set a bookmark on the current page - Placer un marque-page sur la page actuelle + Window + Fenêtre - - Show bookmarks - Voir les marque-pages + Open the latest comic opened in the previous reading session + Ouvrir la dernière bande dessinée ouverte lors de la session de lecture précédente - - Show the bookmarks of the current comic - Voir les marque-pages de cette bande dessinée + Open a comic + Ouvrir une bande dessinée - M - M + Image files (*.jpg) + Image(*.jpg) - - Show keyboard shortcuts - Voir les raccourcis + Next Comic + Bande dessinée suivante - - Show Info - Voir les infos + Fit Width + Ajuster la largeur - I - I + Options + Options - - Close - Fermer + Show Info + Voir les infos - - Show Dictionary - Dictionnaire + Open folder + Ouvirir le dossier - - Always on top - Toujours au dessus + Go to page ... + Aller à la page ... - - Show full size - Plein écran + Magnifiying glass + Loupe - - Clear - + Fit image to width + Ajuster l'image à la largeur - - Fit to page - Ajuster à la page + Toggle fullscreen mode + Basculer en mode plein écran - - Reset zoom - Réinitialiser le zoom + Toggle between fit to width and fit to height + Basculer entre adapter à la largeur et adapter à la hauteur - - Show zoom slider - Afficher le curseur de zoom + Move right + Déplacer à droite - - Zoom+ - Zoom+ + Zoom in magnifying glass + Zoomer - - Zoom- - Zoom- + Open recent + Ouvrir récent - - Double page manga mode - Mode manga en double page + Reading + Lecture - - Reverse reading order in double page mode - Ordre de lecture inversée en mode double page + &Previous + &Précédent - - Show go to flow - Afficher le flux + Autoscroll forward, horizontal first + Défilement automatique en avant, horizontal - - Edit shortcuts - Modifier les raccourcis + Go to next page + Aller à la page suivante - - &File - &Fichier + Show keyboard shortcuts + Voir les raccourcis - - - Open recent - Ouvrir récent + Double page manga mode + Mode manga en double page - - File - Fichier + There is a new version available + Une nouvelle version est disponible - - Edit - Editer + Autoscroll down + Défilement automatique vers le bas - - View - Vue + Open next comic + Ouvrir la bande dessinée suivante - - Go - Aller + Remind me in 14 days + Rappelez-moi dans 14 jours - - Window - Fenêtre + Fit to page + Ajuster à la page - - - Open Comic - Ouvrir la bande dessinée + Show bookmarks + Voir les marque-pages - - - Comic files - Bande dessinée + Open previous comic + Ouvrir la bande dessiné précédente - - Open folder - Ouvirir le dossier + Rotate image to the left + Rotation à gauche - - Image files (*.jpg) - Image(*.jpg) + Fit image to height + Ajuster l'image à la hauteur - - page_%1.jpg - page_%1.jpg + Reset zoom + Réinitialiser le zoom - - Comics - Bandes dessinées + Show the bookmarks of the current comic + Voir les marque-pages de cette bande dessinée - - Toggle fullscreen mode - Basculer en mode plein écran - - - - Hide/show toolbar - Masquer / afficher la barre d'outils - - - - General - Général - - - - Size up magnifying glass - Augmenter la taille de la loupe + Show Dictionary + Dictionnaire - - Size down magnifying glass - Réduire la taille de la loupe + Move down + Descendre - - Zoom in magnifying glass - Zoomer + Move left + Déplacer à gauche - - Zoom out magnifying glass - Dézoomer + Reverse reading order in double page mode + Ordre de lecture inversée en mode double page - - Magnifiying glass - Loupe + YACReader options + Options de YACReader - - Toggle between fit to width and fit to height - Basculer entre adapter à la largeur et adapter à la hauteur + Clear open recent list + Vider la liste d'ouverture récente - - Page adjustement - Ajustement de la page + Help, About YACReader + Aide, à propos de YACReader - - Autoscroll down - Défilement automatique vers le bas + Show go to flow + Afficher le flux - - Autoscroll up - Défilement automatique vers le haut + Previous Comic + Bande dessinée précédente - - Autoscroll forward, horizontal first - Défilement automatique en avant, horizontal + Show full size + Plein écran - - Autoscroll backward, horizontal first - Défilement automatique en arrière horizontal + Hide/show toolbar + Masquer / afficher la barre d'outils - - Autoscroll forward, vertical first - Défilement automatique en avant, vertical + Magnifying glass + Loupe - - Autoscroll backward, vertical first - Défilement automatique en arrière, verticak + Edit shortcuts + Modifier les raccourcis - - Move down - Descendre + General + Général - - Move up - Monter + Set a bookmark on the current page + Placer un marque-page sur la page actuelle - - Move left - Déplacer à gauche + Page adjustement + Ajustement de la page - - Move right - Déplacer à droite + Show zoom slider + Afficher le curseur de zoom - - Go to the first page - Aller à la première page + Go to the last page + Aller à la dernière page - - Go to the last page - Aller à la dernière page + Do you want to download the new version? + Voulez-vous télécharger la nouvelle version? - - Reading - Lecture + Rotate image to the right + Rotation à droite - - There is a new version available - Une nouvelle version est disponible + Always on top + Toujours au dessus - - Do you want to download the new version? - Voulez-vous télécharger la nouvelle version? + Autoscroll backward, horizontal first + Défilement automatique en arrière horizontal - - Remind me in 14 days - Rappelez-moi dans 14 jours + New instance + - - Not now - Pas maintenant + Clear + OptionsDialog - - "Go to flow" size - Taille du flux + Gamma + Gamma + + + Reset + Remise à zéro - My comics path - Chemin de mes bandes dessinées + Chemin de mes bandes dessinées - Page width stretch - Etirer la page + Image adjustment + Ajustement de l'image - - Background color - Couleur d'arrière plan + "Go to flow" size + Taille du flux - Choose Choisir - - Quick Navigation Mode - Mode navigation rapide + Image options + Option de l'image - - Disable mouse over activation - Désactiver la souris sur l'activation + Contrast + Contraste - - Restart is needed - Redémarrage nécessaire + Options + Options - - Brightness - Luminosité + Comics directory + Répertoire des bandes dessinées - - Contrast - Contraste + Quick Navigation Mode + Mode navigation rapide - - Gamma - Gamma + Background color + Couleur d'arrière plan - - Reset - Remise à zéro + Disable mouse over activation + Désactiver la souris sur l'activation - - Image options - Option de l'image + Page Flow + Flux des pages - General Général - - Page Flow - Flux des pages + Brightness + Luminosité - - Image adjustment - Ajustement de l'image + Restart is needed + Redémarrage nécessaire - - Options - Options + Fit options + - - Comics directory - Répertoire des bandes dessinées + Enlarge images to fit width/height + + + + Double Page options + + + + Show covers as single page + QObject - 7z lib not found - lib 7z introuvable + lib 7z introuvable - unable to load 7z lib from ./utils - impossible de charger 7z depuis ./utils + impossible de charger 7z depuis ./utils + + + Trace + + + + Debug + + + + Info + + + + Warning + + + + Error + + + + Fatal + - ShortcutsDialog + QsLogging::LogWindowModel - - YACReader keyboard shortcuts - Raccourcis clavier de YACReader + Time + + + + Level + + + + Message + + + + + QsLogging::Window + + &Pause + + + + &Resume + - + Save log + + + + Log file (*.log) + + + + + ShortcutsDialog + Close Fermer - + YACReader keyboard shortcuts + Raccourcis clavier de YACReader + + Keyboard Shortcuts Raccourcis clavier @@ -773,101 +694,86 @@ Viewer - - - Press 'O' to open comic. - Appuyez sur "O" pour ouvrir une bande dessinée. - - - - Not found - Introuvable + Page not available! + Page non disponible ! - - Comic not found - Bande dessinée introuvable + Press 'O' to open comic. + Appuyez sur "O" pour ouvrir une bande dessinée. - Error opening comic - Erreur d'ouverture de la bande dessinée + Erreur d'ouverture de la bande dessinée - - CRC Error - Erreur CRC + Cover! + Couverture! - - Loading...please wait! - Chargement... Patientez + CRC Error + Erreur CRC - - Page not available! - Page non disponible ! + Comic not found + Bande dessinée introuvable - - Cover! - Couverture! + Not found + Introuvable - Last page! Dernière page! + + Loading...please wait! + Chargement... Patientez + - YACReaderFieldEdit + YACReader::WhatsNewDialog - - - Click to overwrite - Cliquez pour remplacer + Close + Fermer + + + YACReaderFieldEdit - Restore to default Rétablir les paramètres par défaut - - - YACReaderFieldPlainTextEdit - - - - Click to overwrite - Cliquez pour remplacer + Cliquez pour remplacer + + + YACReaderFieldPlainTextEdit - Restore to default Rétablir les paramètres par défaut + + Click to overwrite + Cliquez pour remplacer + YACReaderFlowConfigWidget - - How to show covers: - Comment voir les couvertures: - - - CoverFlow look Vue CoverFlow - + How to show covers: + Comment voir les couvertures: + + Stripe look Vue alignée - Overlapped Stripe look Vue superposée @@ -875,179 +781,145 @@ YACReaderGLFlowConfigWidget - - Presets: - Réglages: - - - - Classic look - Vue classique - - - - Stripe look - Vue alignée + Zoom + Zoom - - Overlapped Stripe look - Vue superposée + Light + Lumière - - Modern look - Vue moderne + Show advanced settings + Voir les paramètres avancés - Roulette look Vue roulette - - Show advanced settings - Voir les paramètres avancés - - - - Custom: - Personnalisation: + Cover Angle + Angle des couvertures - - View angle - Angle de vue + Stripe look + Vue alignée - Position Position - - Cover gap - Espace entre les couvertures + Z offset + Axe Z + + + Y offset + Axe Y - Central gap Espace couverture centrale - - Zoom - Zoom + Presets: + Réglages: - - Y offset - Axe Y + Overlapped Stripe look + Vue superposée - - Z offset - Axe Z + Modern look + Vue moderne - - Cover Angle - Angle des couvertures + View angle + Angle de vue - - Visibility - Visibilité + Max angle + Angle Maximum - - Light - Lumière + Custom: + Personnalisation: - - Max angle - Angle Maximum + Classic look + Vue classique - - Low Performance - Faible performance + Cover gap + Espace entre les couvertures - High Performance Haute performance - + Performance: + Performance: + + Use VSync (improve the image quality in fullscreen mode, worse performance) Utiliser VSync (Améliore la qualité d'image en mode plein écran, ralentit la performance) - - Performance: - Performance: + Visibility + Visibilité + + + Low Performance + Faible performance YACReaderOptionsDialog - Save Sauvegarder - - Cancel - Annuler + Use hardware acceleration (restart needed) + Utiliser accélération hardware (redémarrage nécessaire) - - Edit shortcuts - Modifier les raccourcis + Cancel + Annuler - Shortcuts - Raccourcis + Raccourcis - - Use hardware acceleration (restart needed) - Utiliser accélération hardware (redémarrage nécessaire) + Edit shortcuts + Modifier les raccourcis YACReaderSlider - Reset - Remise à zéro + Remise à zéro YACReaderTranslator - - YACReader translator - Traducteur YACReader + clear + effacer - - - Translation - Traduction + Service not available + Service non disponible - - clear - effacer + Translation + Traduction - - Service not available - Service non disponible + YACReader translator + Traducteur YACReader diff --git a/YACReader/yacreader_images.qrc b/YACReader/yacreader_images.qrc index 2e1e5f6a7..5488564b2 100644 --- a/YACReader/yacreader_images.qrc +++ b/YACReader/yacreader_images.qrc @@ -66,5 +66,7 @@ ../images/shortcuts_group_page.png ../images/shortcuts_group_reading.png ../images/shortcuts_group_visualization.png + ../images/custom_dialog/custom_close_button.svg + ../images/whats_new/whatsnew_header.svg diff --git a/YACReader/yacreader_it.ts b/YACReader/yacreader_it.ts new file mode 100644 index 000000000..32d73b598 --- /dev/null +++ b/YACReader/yacreader_it.ts @@ -0,0 +1,925 @@ + + + + + ActionsShortcutsModel + + None + Nessuno + + + + BookmarksDialog + + Close + Chiudi + + + Loading... + Caricamento... + + + Click on any image to go to the bookmark + Click su qualsiasi immagine per andare al bookmark + + + Lastest Page + Ultima Pagina + + + + EditShortcutsDialog + + Shortcut in use + Scorciatoia in uso + + + Restore defaults + Resetta al default + + + Shortcuts settings + impostazione scorciatoie + + + The shortcut "%1" is already assigned to other function + La scorciatoia "%1" è già assegnata ad un'altra funzione + + + To change a shortcut, double click in the key combination and type the new keys. + Per cambiare una scorciatoia doppio click sulla combinazione tasti e digita la nuova combinazione. + + + + FileComic + + Format not supported + Formato non supportato + + + 7z not found + 7z non trovato + + + Unknown error opening the file + Errore sconosciuto aprendo il file + + + CRC error on page (%1): some of the pages will not be displayed correctly + Errore CRC alla pagina (%1): alcune pagine non saranno visualizzate correttamente + + + + GoToDialog + + Go To + Vai a + + + Go to... + Vai a... + + + Total pages : + Pagine totali: + + + Cancel + Annulla + + + Page : + Pagina: + + + + GoToFlowToolBar + + Page : + Pagina: + + + + HelpAboutDialog + + Help + Aiuto + + + About + About + + + + LogWindow + + Log window + + + + &Pause + + + + &Save + + + + C&lear + + + + &Copy + + + + Level: + + + + &Auto scroll + + + + + MainWindowViewer + + Go + Vai + + + Edit + Edit + + + File + File + + + Help + Aiuto + + + Save + Salva + + + View + Mostra + + + &File + &File + + + &Next + &Prossimo + + + &Open + &Apri + + + Clear + Cancella + + + Close + Chiudi + + + Open Comic + Apri Fumetto + + + Go To + Vai a + + + Zoom+ + Zoom+ + + + Zoom- + Zoom- + + + Open image folder + Apri la crettal immagini + + + Size down magnifying glass + Riduci lente ingrandimento + + + Zoom out magnifying glass + Riduci in lente di ingrandimento + + + Open latest comic + Apri l'ultimo fumetto + + + Autoscroll up + Autoscorri Sù + + + Set bookmark + Imposta Segnalibro + + + page_%1.jpg + Pagina_%1.jpg + + + Autoscroll forward, vertical first + Autoscorri avanti, priorità Verticale + + + Switch to double page mode + Passa alla modalità doppia pagina + + + Save current page + Salva la pagina corrente + + + Size up magnifying glass + Ingrandisci lente ingrandimento + + + Double page mode + Modalita doppia pagina + + + Move up + Muovi Sù + + + Switch Magnifying glass + Passa a lente ingrandimento + + + Open Folder + Apri una cartella + + + Comics + Fumetto + + + Fit Height + Adatta altezza + + + Autoscroll backward, vertical first + Autoscorri indietro, priorità Verticale + + + Comic files + File Fumetto + + + Not now + Non ora + + + Go to the first page + Vai alla pagina iniziale + + + Go to previous page + Vai alla pagina precedente + + + Window + Finestra + + + Open the latest comic opened in the previous reading session + Apri l'ultimo fumetto aperto nella sessione precedente + + + Open a comic + Apri un Fumetto + + + Image files (*.jpg) + File immagine (*.jpg) + + + Next Comic + Prossimo fumetto + + + Fit Width + Adatta Larghezza + + + Options + Opzioni + + + Show Info + Mostra info + + + Open folder + Apri cartella + + + Go to page ... + Vai a Pagina ... + + + Magnifiying glass + Lente ingrandimento + + + Fit image to width + Adatta immagine in larghezza + + + Toggle fullscreen mode + Attiva/Disattiva schermo intero + + + Toggle between fit to width and fit to height + Passa tra adatta in larghezza ad altezza + + + Move right + Muovi Destra + + + Zoom in magnifying glass + Ingrandisci in lente di ingrandimento + + + Open recent + Apri i recenti + + + Reading + Leggi + + + &Previous + &Precedente + + + Autoscroll forward, horizontal first + Autoscorri avanti, priorità Orizzontale + + + Go to next page + Vai alla prossima Pagina + + + Show keyboard shortcuts + Mostra scorciatoie da tastiera + + + Double page manga mode + Modalità doppia pagina Manga + + + There is a new version available + Nuova versione disponibile + + + Autoscroll down + Autoscorri Giù + + + Open next comic + Apri il prossimo fumetto + + + Remind me in 14 days + Ricordamelo in 14 giorni + + + Fit to page + Adatta alla pagina + + + Show bookmarks + Mostra segnalibro + + + Open previous comic + Apri il fumetto precendente + + + Rotate image to the left + Ruota immagine a sinistra + + + Fit image to height + Adatta immagine all'altezza + + + Reset zoom + Resetta Zoom + + + Show the bookmarks of the current comic + Mostra il segnalibro del fumetto corrente + + + Show Dictionary + Mostra dizionario + + + Move down + Muovi Giù + + + Move left + Muovi Sinistra + + + Reverse reading order in double page mode + Ordine lettura inverso in modo doppia pagina + + + YACReader options + Opzioni YACReader + + + Clear open recent list + Svuota la lista degli aperti + + + Help, About YACReader + Aiuto, crediti YACReader + + + Show go to flow + Mostra vai all'elenco + + + Previous Comic + Fumetto precendente + + + Show full size + Mostra dimesioni reali + + + Hide/show toolbar + Mostra/Nascondi Barra strumenti + + + Magnifying glass + Lente ingrandimento + + + Edit shortcuts + Edita scorciatoie + + + General + Generale + + + Set a bookmark on the current page + Imposta segnalibro a pagina corrente + + + Page adjustement + Correzioni di pagna + + + Show zoom slider + Mostra cursore di zoom + + + Go to the last page + Vai all'ultima pagina + + + Do you want to download the new version? + Vuoi scaricare la nuova versione? + + + Rotate image to the right + Ruota immagine a destra + + + Always on top + Sempre in primo piano + + + Autoscroll backward, horizontal first + Autoscorri indietro, priorità Orizzontale + + + New instance + + + + + OptionsDialog + + Gamma + Gamma + + + Reset + Reset + + + My comics path + Percorso dei miei fumetti + + + Image adjustment + Correzioni immagine + + + "Go to flow" size + Dimensione "Vai all'elenco" + + + Choose + Scegli + + + Image options + Opzione immagine + + + Contrast + Contrasto + + + Options + Opzioni + + + Comics directory + Cartella Fumetti + + + Quick Navigation Mode + Modo navigazione rapida + + + Background color + Colore di sfondo + + + Disable mouse over activation + Disabilita il mouse all'attivazione + + + Page Flow + Flusso pagine + + + General + Generale + + + Brightness + Luminosità + + + Restart is needed + Riavvio Necessario + + + Fit options + + + + Enlarge images to fit width/height + + + + Double Page options + + + + Show covers as single page + + + + + QObject + + 7z lib not found + Libreria 7z non trovata + + + unable to load 7z lib from ./utils + Impossibile caricare 7z da ./utils + + + Trace + + + + Debug + + + + Info + + + + Warning + + + + Error + + + + Fatal + + + + + QsLogging::LogWindowModel + + Time + + + + Level + + + + Message + + + + + QsLogging::Window + + &Pause + + + + &Resume + + + + Save log + + + + Log file (*.log) + + + + + ShortcutsDialog + + Close + Chiudi + + + YACReader keyboard shortcuts + Scorciatoie da tastiera di YACReader + + + Keyboard Shortcuts + Scorciatoia da tastiera + + + + Viewer + + Page not available! + Pagina non disponibile! + + + Press 'O' to open comic. + Premi "O" per aprire il fumettto. + + + Error opening comic + Errore nell'apertura + + + Cover! + Copertina! + + + CRC Error + Errore CRC + + + Comic not found + Fumetto non trovato + + + Not found + Non trovato + + + Last page! + Ultima pagina! + + + Loading...please wait! + In caricamento...Attendi! + + + + YACReader::WhatsNewDialog + + Close + Chiudi + + + + YACReaderFieldEdit + + Restore to default + Resetta al default + + + Click to overwrite + Click per sovrascrivere + + + + YACReaderFieldPlainTextEdit + + Restore to default + Resetta al default + + + Click to overwrite + Click per sovrascrivere + + + + YACReaderFlowConfigWidget + + CoverFlow look + Aspetto flusso Copertine + + + How to show covers: + Come mostrare le copertine: + + + Stripe look + Aspetto a strisce + + + Overlapped Stripe look + Aspetto a strisce sovrapposto + + + + YACReaderGLFlowConfigWidget + + Zoom + Zoom + + + Light + Luce + + + Show advanced settings + Mostra opzioni avanzate + + + Roulette look + Aspetto Roulette + + + Cover Angle + Angolo copertine + + + Stripe look + Aspetto a strisce + + + Position + Posizione + + + Z offset + Compensazione Z + + + Y offset + Compensazione Y + + + Central gap + Distanza centrale + + + Presets: + Preselezioni: + + + Overlapped Stripe look + Aspetto a strisce sovrapposto + + + Modern look + Aspetto moderno + + + View angle + Angolo di vista + + + Max angle + Angolo massimo + + + Custom: + Personalizzazione: + + + Classic look + Aspetto Classico + + + Cover gap + Distanza Copertine + + + High Performance + Prestazioni Alte + + + Performance: + Prestazioni: + + + Use VSync (improve the image quality in fullscreen mode, worse performance) + Usa VSync (migliora la qualtà a tutto schermo, peggiora le prestazioni) + + + Visibility + Visibilità + + + Low Performance + Prestazioni Basse + + + + YACReaderOptionsDialog + + Save + Salva + + + Use hardware acceleration (restart needed) + Usa accelerazione Hardware (necessita restart) + + + Cancel + Cancella + + + Shortcuts + Scorciatoia + + + Edit shortcuts + Edita Scorciatoia + + + + YACReaderSlider + + Reset + Resetta + + + + YACReaderTranslator + + clear + Cancella + + + Service not available + Servizio non disponibile + + + Translation + Traduzione + + + YACReader translator + Traduttore YACReader + + + diff --git a/YACReader/yacreader_nl.ts b/YACReader/yacreader_nl.ts index b22de12a6..f19541b06 100644 --- a/YACReader/yacreader_nl.ts +++ b/YACReader/yacreader_nl.ts @@ -1,10 +1,9 @@ - + ActionsShortcutsModel - None @@ -12,51 +11,41 @@ BookmarksDialog - - Lastest Page - Laatste Pagina + Close + Sluiten - - Close - Sluiten + Loading... + Inladen... - Click on any image to go to the bookmark - Klik op een afbeelding om naar de bladwijzer te gaan + Klik op een afbeelding om naar de bladwijzer te gaan - - - Loading... - Inladen... + Lastest Page + Laatste Pagina EditShortcutsDialog - Restore defaults - To change a shortcut, double click in the key combination and type the new keys. - Shortcuts settings - Shortcut in use - The shortcut "%1" is already assigned to other function @@ -64,585 +53,469 @@ FileComic - - Unknown error opening the file - + 7z not found + 7Z Archiefbestand niet gevonden - - 7z not found - 7Z Archiefbestand niet gevonden + CRC error on page (%1): some of the pages will not be displayed correctly + - - Format not supported + Unknown error opening the file - - CRC error on page (%1): some of the pages will not be displayed correctly + Format not supported GoToDialog - - Page : - Pagina : - - - Go To - Ga Naar + Ga Naar - - Cancel - Annuleren + Go to... + Ga naar... - - Total pages : - Totaal aantal pagina's : + Totaal aantal pagina's : - - Go to... - Ga naar... + Cancel + Annuleren + + + Page : + Pagina : GoToFlowToolBar - Page : - Pagina : + Pagina : HelpAboutDialog - - About - Over + Help + Help - - Help - Help + About + Over - MainWindowViewer - - - &Open - &Open - + LogWindow - O - O + Log window + - - Open a comic - Open een strip + &Pause + - - Open Folder - Map Openen + &Save + - Ctrl+O - Ctrl+O + C&lear + - - Open image folder - Open afbeeldings map + &Copy + - - Open latest comic + Level: - - Open the latest comic opened in the previous reading session + &Auto scroll + + + MainWindowViewer - - Clear open recent list - + Help + Help - Save - Bewaar + Bewaar - - - Save current page - Bewaren huidige pagina + &File + &Bestand - - Previous Comic - Vorige Strip + &Next + &Volgende - - Open previous comic - Open de vorige strip + &Open + &Open - - Next Comic - Volgende Strip + Close + Sluiten - - Open next comic - Open volgende strip + Open Comic + Open een Strip - - &Previous - &Vorige + Go To + Ga Naar - - Go to previous page - Ga naar de vorige pagina + Open image folder + Open afbeeldings map - - &Next - &Volgende + Set bookmark + Bladwijzer instellen - - Go to next page - Ga naar de volgende pagina + page_%1.jpg + pagina_%1.jpg - - Fit Width - Vensterbreedte aanpassen + Switch to double page mode + Naar dubbele bladzijde modus - - Fit image to height - Afbeelding aanpassen aan hoogte + Save current page + Bewaren huidige pagina - - Fit Height - + Double page mode + Dubbele bladzijde modus - - Fit image to width - Afbeelding aanpassen aan breedte + Switch Magnifying glass + Overschakelen naar Vergrootglas - - Rotate image to the left - Links omdraaien + Open Folder + Map Openen - L - L + Comic files + Strip bestanden - - Rotate image to the right - Rechts omdraaien + Go to previous page + Ga naar de vorige pagina - R - R + Open a comic + Open een strip - - Double page mode - Dubbele bladzijde modus + Image files (*.jpg) + Afbeelding bestanden (*.jpg) - - Switch to double page mode - Naar dubbele bladzijde modus + Next Comic + Volgende Strip - D - D + Fit Width + Vensterbreedte aanpassen - - Go To - Ga Naar + Options + Opties - G - G + Show Info + Info tonen - - Go to page ... - Ga naar bladzijde ... + Open folder + Open een Map - - Options - Opties + Go to page ... + Ga naar bladzijde ... - C - C + Fit image to width + Afbeelding aanpassen aan breedte - - YACReader options - YACReader opties + &Previous + &Vorige - - - Help - Help + Go to next page + Ga naar de volgende pagina - - Help, About YACReader - Help, Over YACReader + Show keyboard shortcuts + Toon de sneltoetsen - - Magnifying glass - Vergrootglas + There is a new version available + Er is een nieuwe versie beschikbaar - - Switch Magnifying glass - Overschakelen naar Vergrootglas + Open next comic + Open volgende strip - Z - Z + Show bookmarks + Bladwijzers weergeven - - Set bookmark - Bladwijzer instellen + Open previous comic + Open de vorige strip - - Set a bookmark on the current page - Een bladwijzer toevoegen aan de huidige pagina + Rotate image to the left + Links omdraaien - - Show bookmarks - Bladwijzers weergeven + Fit image to height + Afbeelding aanpassen aan hoogte - Show the bookmarks of the current comic - Toon de bladwijzers van de huidige strip + Toon de bladwijzers van de huidige strip - M - M + Show Dictionary + Woordenlijst weergeven - - Show keyboard shortcuts - Toon de sneltoetsen + YACReader options + YACReader opties - - Show Info - Info tonen + Help, About YACReader + Help, Over YACReader - I - I + Show go to flow + Toon ga naar de Omslagbrowser - - Close - Sluiten + Previous Comic + Vorige Strip - - Show Dictionary - Woordenlijst weergeven + Show full size + Volledig Scherm + + + Magnifying glass + Vergrootglas + + + General + Algemeen + + + Set a bookmark on the current page + Een bladwijzer toevoegen aan de huidige pagina + + + Do you want to download the new version? + Wilt u de nieuwe versie downloaden? + + + Rotate image to the right + Rechts omdraaien - Always on top - Altijd op voorgrond + Altijd op voorgrond - - Show full size - Volledig Scherm + New instance + + + + Open latest comic + + + + Open the latest comic opened in the previous reading session + - Clear - + Clear open recent list + + + + Fit Height + + + Fit to page - Reset zoom - Show zoom slider - Zoom+ - Zoom- - Double page manga mode - Reverse reading order in double page mode - - Show go to flow - Toon ga naar de Omslagbrowser - - - Edit shortcuts - - &File - &Bestand - - - - Open recent - File - Edit - View - Go - Window - - - Open Comic - Open een Strip - - - - - Comic files - Strip bestanden - - - - Open folder - Open een Map - - - - Image files (*.jpg) - Afbeelding bestanden (*.jpg) - - - - page_%1.jpg - pagina_%1.jpg - - - Comics - Toggle fullscreen mode - Hide/show toolbar - - General - Algemeen - - - Size up magnifying glass - Size down magnifying glass - Zoom in magnifying glass - Zoom out magnifying glass - Magnifiying glass - Toggle between fit to width and fit to height - Page adjustement - Autoscroll down - Autoscroll up - Autoscroll forward, horizontal first - Autoscroll backward, horizontal first - Autoscroll forward, vertical first - Autoscroll backward, vertical first - Move down - Move up - Move left - Move right - Go to the first page - Go to the last page - Reading - - There is a new version available - Er is een nieuwe versie beschikbaar - - - - Do you want to download the new version? - Wilt u de nieuwe versie downloaden? - - - Remind me in 14 days - Not now @@ -650,402 +523,401 @@ OptionsDialog - - "Go to flow" size - "Naar Omslagbrowser" afmetingen + Gamma + Gamma + + + Reset + Standaardwaarden terugzetten - My comics path - Pad naar mijn strips + Pad naar mijn strips - Page width stretch - Pagina breedte + Image adjustment + Beeldaanpassing - - Background color - Achtergrondkleur + "Go to flow" size + "Naar Omslagbrowser" afmetingen - Choose - Kies + Kies + + + Image options + Afbeelding opties + + + Contrast + Contrast + + + Options + Opties + + + Comics directory + Strips map + + + Background color + Achtergrondkleur + + + Page Flow + Omslagbrowser + + + General + Algemeen + + + Brightness + Helderheid + + + Restart is needed + Herstart is nodig - Quick Navigation Mode - Disable mouse over activation - - Restart is needed - Herstart is nodig + Fit options + - - Brightness - Helderheid + Enlarge images to fit width/height + - - Contrast - Contrast + Double Page options + - - Gamma - Gamma + Show covers as single page + + + + QObject - - Reset - Standaardwaarden terugzetten + 7z lib not found + - - Image options - Afbeelding opties + unable to load 7z lib from ./utils + - - General - Algemeen + Trace + - - Page Flow - Omslagbrowser + Debug + - - Image adjustment - Beeldaanpassing + Info + - - Options - Opties + Warning + - - Comics directory - Strips map + Error + + + + Fatal + - QObject + QsLogging::LogWindowModel - - 7z lib not found + Time - - unable to load 7z lib from ./utils + Level + + + + Message - ShortcutsDialog + QsLogging::Window - - YACReader keyboard shortcuts - YACReader sneltoetsen + &Pause + - + &Resume + + + + Save log + + + + Log file (*.log) + + + + + ShortcutsDialog + Close - Sluiten + Sluiten + + + YACReader keyboard shortcuts + YACReader sneltoetsen - Keyboard Shortcuts - Sneltoetsen + Sneltoetsen Viewer - - Press 'O' to open comic. - Druk 'O' om een strip te openen. + Druk 'O' om een strip te openen. - - Not found - Niet gevonden + Cover! + Omslag! - Comic not found - Strip niet gevonden + Strip niet gevonden - - Error opening comic - + Not found + Niet gevonden - - CRC Error - + Last page! + Laatste pagina! - Loading...please wait! - Inladen...even wachten! + Inladen...even wachten! - - Page not available! + Error opening comic - - Cover! - Omslag! + CRC Error + - - Last page! - Laatste pagina! + Page not available! + - YACReaderFieldEdit + YACReader::WhatsNewDialog - - - Click to overwrite - Klik hier om te overschrijven + Close + Sluiten + + + YACReaderFieldEdit - Restore to default - Standaardwaarden herstellen + Standaardwaarden herstellen + + + Click to overwrite + Klik hier om te overschrijven YACReaderFieldPlainTextEdit - - - - - Click to overwrite - Klik hier om te overschrijven + Restore to default + Standaardwaarden herstellen - - Restore to default - Standaardwaarden herstellen + Click to overwrite + Klik hier om te overschrijven YACReaderFlowConfigWidget - - How to show covers: - Omslagbladen bekijken: + CoverFlow look + Omslagbrowser uiterlijk - - CoverFlow look - Omslagbrowser uiterlijk + How to show covers: + Omslagbladen bekijken: - Stripe look - Brede band + Brede band - Overlapped Stripe look - Overlappende band + Overlappende band YACReaderGLFlowConfigWidget - - Presets: - Voorinstellingen: - - - - Classic look - Klassiek - - - - Stripe look - Brede band + Zoom + Zoom - - Overlapped Stripe look - Overlappende band + Light + Licht - - Modern look - Modern + Show advanced settings + Toon geavanceerde instellingen - Roulette look - Roulette + Roulette - - Show advanced settings - Toon geavanceerde instellingen + Cover Angle + Omslag hoek - - Custom: - Aangepast: + Stripe look + Brede band - - View angle - Kijkhoek + Position + Positie - - Position - Positie + Z offset + Z- positie - - Cover gap - Ruimte tss Omslag + Y offset + Y-positie - Central gap - Centrale ruimte + Centrale ruimte - - Zoom - Zoom + Presets: + Voorinstellingen: - - Y offset - Y-positie + Overlapped Stripe look + Overlappende band - - Z offset - Z- positie + Modern look + Modern - - Cover Angle - Omslag hoek + View angle + Kijkhoek - - Visibility - Zichtbaarheid + Max angle + Maximale hoek - - Light - Licht + Custom: + Aangepast: - - Max angle - Maximale hoek + Classic look + Klassiek - - Low Performance - Lage Prestaties + Cover gap + Ruimte tss Omslag - High Performance - Hoge Prestaties + Hoge Prestaties + + + Performance: + Prestatie: - Use VSync (improve the image quality in fullscreen mode, worse performance) - Gebruik VSync (verbetering van de beeldkwaliteit in de modus volledig scherm, slechtere prestatie) + Gebruik VSync (verbetering van de beeldkwaliteit in de modus volledig scherm, slechtere prestatie) - - Performance: - Prestatie: + Visibility + Zichtbaarheid + + + Low Performance + Lage Prestaties YACReaderOptionsDialog - Save - Bewaar + Bewaar + + + Use hardware acceleration (restart needed) + Gebruik hardware versnelling (opnieuw opstarten vereist) - Cancel - Annuleren + Annuleren - Edit shortcuts - Shortcuts - - - Use hardware acceleration (restart needed) - Gebruik hardware versnelling (opnieuw opstarten vereist) - YACReaderSlider - Reset - Standaardwaarden terugzetten + Standaardwaarden terugzetten YACReaderTranslator - YACReader translator - - Translation - clear - Service not available diff --git a/YACReader/yacreader_pt.ts b/YACReader/yacreader_pt.ts index 56d03d620..de0d5191c 100644 --- a/YACReader/yacreader_pt.ts +++ b/YACReader/yacreader_pt.ts @@ -4,7 +4,6 @@ ActionsShortcutsModel - None @@ -12,51 +11,41 @@ BookmarksDialog - - Lastest Page - Última Página - - - Close Fechar - + Loading... + Carregando... + + Click on any image to go to the bookmark Clique em qualquer imagem para ir para o marcador - - - Loading... - Carregando... + Lastest Page + Última Página EditShortcutsDialog - Restore defaults - To change a shortcut, double click in the key combination and type the new keys. - Shortcuts settings - Shortcut in use - The shortcut "%1" is already assigned to other function @@ -64,59 +53,48 @@ FileComic - - Unknown error opening the file - + 7z not found + 7z não encontrado - - 7z not found - 7z não encontrado + CRC error on page (%1): some of the pages will not be displayed correctly + - - Format not supported + Unknown error opening the file - - CRC error on page (%1): some of the pages will not be displayed correctly + Format not supported GoToDialog - - Page : - Página : - - - Go To Ir Para - - Cancel - Cancelar + Go to... + Ir para... - - Total pages : Total de páginas : - - Go to... - Ir para... + Cancel + Cancelar + + + Page : + Página : GoToFlowToolBar - Page : Página : @@ -124,648 +102,591 @@ HelpAboutDialog - - About - - - - Help Ajuda + + About + + - MainWindowViewer + LogWindow - - &Open - &Abrir + Log window + - O - O + &Pause + - - Open a comic - Abrir um quadrinho + &Save + - - Open Folder - Abrir Pasta + C&lear + - Ctrl+O - Ctrl+O + &Copy + - - Open image folder + Level: - - Clear + &Auto scroll + + + MainWindowViewer + + Help + Ajuda + - Save Salvar - - - Save current page - Salvar página atual + &File + &Arquivo - - Previous Comic - Quadrinho Anterior + &Next + &Próxima - - Open previous comic - Abrir quadrinho anterior + &Open + &Abrir - - Next Comic - Próximo Quadrinho + Close + Fechar - - Open next comic - Abrir próximo quadrinho + Open Comic + Abrir Quadrinho - - &Previous - A&nterior + Go To + Ir Para - - Go to previous page - Ir para a página anterior + Set bookmark + Definir marcador - - &Next - &Próxima + Switch to double page mode + Alternar para o modo dupla página - - Go to next page - Ir para a próxima página + Save current page + Salvar página atual - - Fit Width - Ajustar à Largura + Double page mode + Modo dupla página - - Fit image to height - + Switch Magnifying glass + Alternar Lupa - - Fit Height - + Open Folder + Abrir Pasta - - Fit image to width - + Go to previous page + Ir para a página anterior - - Rotate image to the left - Girar imagem à esquerda + Open a comic + Abrir um quadrinho - L - L + Image files (*.jpg) + Arquivos de imagem (*.jpg) - - Rotate image to the right - Girar imagem à direita + Next Comic + Próximo Quadrinho - R - R + Fit Width + Ajustar à Largura - - Double page mode - Modo dupla página + Options + Opções - - Switch to double page mode - Alternar para o modo dupla página + Show Info + Mostrar Informações - D - D + Open folder + Abrir pasta - - Go To - Ir Para + Go to page ... + Ir para a página... - G - G + &Previous + A&nterior - - Go to page ... - Ir para a página... + Go to next page + Ir para a próxima página - - Options - Opções + Show keyboard shortcuts + Mostrar teclas de atalhos - C - C + There is a new version available + Há uma nova versão disponível - - YACReader options - Opções do YACReader + Open next comic + Abrir próximo quadrinho - - - Help - Ajuda + Show bookmarks + Mostrar marcadores - - Help, About YACReader - Ajuda, Sobre o YACReader + Open previous comic + Abrir quadrinho anterior - - Magnifying glass - Lupa + Rotate image to the left + Girar imagem à esquerda - - Switch Magnifying glass - Alternar Lupa + Show the bookmarks of the current comic + Mostrar os marcadores do quadrinho atual - Z - Z + YACReader options + Opções do YACReader - - Set bookmark - Definir marcador + Help, About YACReader + Ajuda, Sobre o YACReader - - Set a bookmark on the current page - Definir um marcador na página atual + Previous Comic + Quadrinho Anterior - - Show bookmarks - Mostrar marcadores + Magnifying glass + Lupa - - Show the bookmarks of the current comic - Mostrar os marcadores do quadrinho atual + Set a bookmark on the current page + Definir um marcador na página atual - M - M + Do you want to download the new version? + Você deseja baixar a nova versão? - - Show keyboard shortcuts - Mostrar teclas de atalhos + Rotate image to the right + Girar imagem à direita - - Show Info - Mostrar Informações + New instance + - I - I + Open image folder + - - Close - Fechar + Open latest comic + - - Show Dictionary + Open the latest comic opened in the previous reading session - - Always on top + Clear - - Show full size + Clear open recent list - - Open latest comic + Fit Height - - Open the latest comic opened in the previous reading session + Fit image to height - - Clear open recent list + Fit image to width + + + + Show full size - Fit to page - Reset zoom - Show zoom slider - Zoom+ - Zoom- - Double page manga mode - Reverse reading order in double page mode - - Show go to flow + Show Dictionary - - Edit shortcuts + Always on top - - &File - &Arquivo + Show go to flow + + + + Edit shortcuts + - - Open recent - File - Edit - View - Go - Window - - - Open Comic - Abrir Quadrinho + Comic files + - - - Comic files + page_%1.jpg - Comics - Toggle fullscreen mode - Hide/show toolbar - General - Size up magnifying glass - Size down magnifying glass - Zoom in magnifying glass - Zoom out magnifying glass - Magnifiying glass - Toggle between fit to width and fit to height - Page adjustement - Autoscroll down - Autoscroll up - Autoscroll forward, horizontal first - Autoscroll backward, horizontal first - Autoscroll forward, vertical first - Autoscroll backward, vertical first - Move down - Move up - Move left - Move right - Go to the first page - Go to the last page - Reading - Remind me in 14 days - Not now - - - Open folder - Abrir pasta - - - - Image files (*.jpg) - Arquivos de imagem (*.jpg) - - - - page_%1.jpg - - - - - There is a new version available - Há uma nova versão disponível - - - - Do you want to download the new version? - Você deseja baixar a nova versão? - OptionsDialog - + My comics path + Meu caminho de quadrinhos + + "Go to flow" size Tamanho do "Ir para cheia" - - My comics path - Meu caminho de quadrinhos + Options + Opções - Page width stretch - Trecho da largura da página + Comics directory + Diretório de quadrinhos + + + Restart is needed + Reiniciar é necessário - Background color - Choose - Quick Navigation Mode - Disable mouse over activation - - Restart is needed - Reiniciar é necessário - - - Brightness - Contrast - Gamma - Reset - Image options - - General + Fit options - - Page Flow + Enlarge images to fit width/height - - Image adjustment + Double Page options - - Options - Opções + Show covers as single page + - - Comics directory - Diretório de quadrinhos + General + + + + Page Flow + + + + Image adjustment + QObject - 7z lib not found - unable to load 7z lib from ./utils + + Trace + + + + Debug + + + + Info + + + + Warning + + + + Error + + + + Fatal + + - ShortcutsDialog + QsLogging::LogWindowModel - - YACReader keyboard shortcuts - Teclas de atalhos do YACReader + Time + + + + Level + + + + Message + + + + + QsLogging::Window + + &Pause + + + + &Resume + + + + Save log + + + + Log file (*.log) + + + + ShortcutsDialog - Close Fechar - + YACReader keyboard shortcuts + Teclas de atalhos do YACReader + + Keyboard Shortcuts @@ -773,62 +694,56 @@ Viewer - - Press 'O' to open comic. Pressione 'O' para abrir um quadrinho. - + Loading...please wait! + Carregando... por favor, aguarde! + + Not found - Comic not found - Error opening comic - CRC Error - - Loading...please wait! - Carregando... por favor, aguarde! - - - Page not available! - Cover! - Last page! + + YACReader::WhatsNewDialog + + Close + Fechar + + YACReaderFieldEdit - - Click to overwrite - Restore to default @@ -836,15 +751,10 @@ YACReaderFieldPlainTextEdit - - - - Click to overwrite - Restore to default @@ -852,140 +762,113 @@ YACReaderFlowConfigWidget - - How to show covers: - - - - CoverFlow look Olhar capa cheia - Stripe look Olhar lista - Overlapped Stripe look Olhar lista sobreposta - - - YACReaderGLFlowConfigWidget - - - Presets: - - - - Classic look + How to show covers: + + + YACReaderGLFlowConfigWidget - Stripe look Olhar lista - Overlapped Stripe look Olhar lista sobreposta - + Presets: + + + + Classic look + + + Modern look - Roulette look - Show advanced settings - Custom: - View angle - Position - Cover gap - Central gap - Zoom - Y offset - Z offset - Cover Angle - Visibility - Light - Max angle - Low Performance - High Performance - Use VSync (improve the image quality in fullscreen mode, worse performance) - Performance: @@ -993,27 +876,22 @@ YACReaderOptionsDialog - Save Salvar - Cancel Cancelar - Edit shortcuts - Shortcuts - Use hardware acceleration (restart needed) @@ -1021,7 +899,6 @@ YACReaderSlider - Reset @@ -1029,23 +906,18 @@ YACReaderTranslator - YACReader translator - - Translation - clear - Service not available diff --git a/YACReader/yacreader_ru.ts b/YACReader/yacreader_ru.ts index 96fb536fa..87e18703a 100644 --- a/YACReader/yacreader_ru.ts +++ b/YACReader/yacreader_ru.ts @@ -1,10 +1,9 @@ - + ActionsShortcutsModel - None @@ -12,74 +11,60 @@ BookmarksDialog - - Lastest Page - Последняя страница - - - Close Закрыть - + Loading... + Загрузка... + + Click on any image to go to the bookmark Нажмите на любое изображение чтобы перейти к закладке - - - Loading... - Загрузка... + Lastest Page + Последняя страница EditShortcutsDialog - - Restore defaults - Восстановить значения по умолчанию + Shortcut in use + Горячая клавиша уже занята - - To change a shortcut, double click in the key combination and type the new keys. - Чтобы изменить горячую клавишу дважды щелкните по выбранной комбинации клавиш и введите новые сочетания клавиш. + Restore defaults + Восстановить значения по умолчанию - Shortcuts settings Горячие клавиши - - Shortcut in use - Горячая клавиша уже занята - - - The shortcut "%1" is already assigned to other function Сочетание клавиш "%1" уже назначено для другой функции + + To change a shortcut, double click in the key combination and type the new keys. + Чтобы изменить горячую клавишу дважды щелкните по выбранной комбинации клавиш и введите новые сочетания клавиш. + FileComic - - Unknown error opening the file - Неизвестная ошибка при открытии файла + Format not supported + Формат не поддерживается - 7z not found 7z не найден - - Format not supported - Формат не поддерживается + Unknown error opening the file + Неизвестная ошибка при открытии файла - CRC error on page (%1): some of the pages will not be displayed correctly Ошибка контрольной суммы CRC на странице (%1): некоторые страницы будут отображаться неправильно @@ -87,36 +72,29 @@ GoToDialog - - Page : - Страница : - - - Go To Перейти к странице... - - Cancel - Отмена + Go to... + Перейти к странице... - - Total pages : Общее количество страниц : - - Go to... - Перейти к странице... + Cancel + Отмена + + + Page : + Страница : GoToFlowToolBar - Page : Страница : @@ -124,648 +102,591 @@ HelpAboutDialog - - About - О программе - - - Help Справка + + About + О программе + - MainWindowViewer + LogWindow - - &Open - &Открыть + Log window + - O - О + &Pause + - - Open a comic - Открыть комикс + &Save + - - Open Folder - Открыть папку + C&lear + - Ctrl+O - Ctrl+О + &Copy + - - Open image folder - Открыть папку с изображениями + Level: + - - Open latest comic - Открыть последний комикс + &Auto scroll + + + + MainWindowViewer - - Open the latest comic opened in the previous reading session - Открыть комикс открытый в предыдущем сеансе чтения + Go + Перейти - - Clear open recent list - Очистить список недавно открытых файлов + Edit + Редактировать + + + File + Файл + + + Help + Справка - Save Сохранить - - - Save current page - Сохранить текущию страницу + View + Посмотреть - - Previous Comic - Предыдущий комикс + &File + &Отображать панель инструментов - - Open previous comic - Открыть предыдуший комикс + &Next + &Следующий - - Next Comic - Следующий комикс + &Open + &Открыть - - Open next comic - Открыть следующий комикс + Clear + Очистить - - &Previous - &Предыдущий + Close + Закрыть - - Go to previous page - Перейти к предыдущей странице + Open Comic + Открыть комикс - - &Next - &Следующий + Go To + Перейти к странице... - - Go to next page - Перейти к следующей странице + Zoom+ + Увеличить масштаб - - Fit Width - Подогнать по ширине + Zoom- + Уменьшить масштаб - - Fit image to height - Подогнать по высоте + Open image folder + Открыть папку с изображениями - - Fit Height - Подогнать по высоте + Size down magnifying glass + Уменьшение размера окошка увеличительного стекла - - Fit image to width - Подогнать по ширине + Zoom out magnifying glass + Уменьшить - - Rotate image to the left - Повернуть изображение против часовой стрелки + Open latest comic + Открыть последний комикс - L - L + Autoscroll up + Автопрокрутка вверх - - Rotate image to the right - Повернуть изображение по часовой стрелке + Set bookmark + Установить закладку - R - R + page_%1.jpg + страница_%1.jpg - - Double page mode - Двухстраничный режим + Autoscroll forward, vertical first + Автопрокрутка вперед, вертикальная - Switch to double page mode Двухстраничный режим - D - D + Save current page + Сохранить текущию страницу - - Go To - Перейти к странице... + Size up magnifying glass + Увеличение размера окошка увеличительного стекла - G - G + Double page mode + Двухстраничный режим - - Go to page ... - Перейти к странице... + Move up + Переместить вверх - - Options - Настройки + Switch Magnifying glass + Увеличительное стекло - C - С + Open Folder + Открыть папку - - YACReader options - Настройки + Comics + Комикс - - - Help - Справка + Fit Height + Подогнать по высоте - - Help, About YACReader - Справка + Autoscroll backward, vertical first + Автопрокрутка назад, вертикальная - - Magnifying glass - Увеличительное стекло + Comic files + Файлы комикса - - Switch Magnifying glass - Увеличительное стекло + Not now + Не сейчас - Z - Z + Go to the first page + Перейти к первой странице - - Set bookmark - Установить закладку + Go to previous page + Перейти к предыдущей странице - - Set a bookmark on the current page - Установить закладку на текущей странице + Window + Окно - - Show bookmarks - Показать закладки + Open the latest comic opened in the previous reading session + Открыть комикс открытый в предыдущем сеансе чтения - - Show the bookmarks of the current comic - Показать закладки в текущем комиксе + Open a comic + Открыть комикс - M - M + Image files (*.jpg) + Файлы изображений (*.jpg) - - Show keyboard shortcuts - Показать горячие клавиши + Next Comic + Следующий комикс + + + Fit Width + Подогнать по ширине + + + Options + Настройки - Show Info Показать/скрыть номер страницы и текущее время - I - I + Open folder + Открыть папку + + + Go to page ... + Перейти к странице... - - Close - Закрыть + Magnifiying glass + Увеличительное стекло - - Show Dictionary - Переводчик YACreader + Fit image to width + Подогнать по ширине - - Always on top - Всегда сверху + Toggle fullscreen mode + Полноэкранный режим включить/выключить - - Show full size - Показать в полном размере + Toggle between fit to width and fit to height + Переключение режима подгонки страницы по ширине/высоте - - Clear - Очистить + Move right + Переместить вправо - - Fit to page - Подогнать под размер страницы + Zoom in magnifying glass + Увеличить - - Reset zoom - Сбросить масштаб + Open recent + Открыть недавние - - Show zoom slider - Показать ползунок масштабирования + Reading + Чтение - - Zoom+ - Увеличить масштаб + &Previous + &Предыдущий - - Zoom- - Уменьшить масштаб + Autoscroll forward, horizontal first + Автопрокрутка вперед, горизонтальная - - Double page manga mode - Двухстраничный режим манги + Go to next page + Перейти к следующей странице - - Reverse reading order in double page mode + Show keyboard shortcuts + Показать горячие клавиши + + + Double page manga mode Двухстраничный режим манги - - Show go to flow - Показать поток страниц + There is a new version available + Доступна новая версия - - Edit shortcuts - Редактировать горячие клавиши + Autoscroll down + Автопрокрутка вниз - - &File - &Отображать панель инструментов + Open next comic + Открыть следующий комикс - - - Open recent - Открыть недавние + Remind me in 14 days + Напомнить через 14 дней - - File - Файл + Fit to page + Подогнать под размер страницы - - Edit - Редактировать + Show bookmarks + Показать закладки - - View - Посмотреть + Open previous comic + Открыть предыдуший комикс - - Go - Перейти + Rotate image to the left + Повернуть изображение против часовой стрелки - - Window - Окно + Fit image to height + Подогнать по высоте - - - Open Comic - Открыть комикс + Reset zoom + Сбросить масштаб - - - Comic files - Файлы комикса + Show the bookmarks of the current comic + Показать закладки в текущем комиксе - - Open folder - Открыть папку + Show Dictionary + Переводчик YACreader - - Image files (*.jpg) - Файлы изображений (*.jpg) + Move down + Переместить вниз - - page_%1.jpg - страница_%1.jpg + Move left + Переместить влево - - Comics - Комикс + Reverse reading order in double page mode + Двухстраничный режим манги - - Toggle fullscreen mode - Полноэкранный режим включить/выключить + YACReader options + Настройки - - Hide/show toolbar - Показать/скрыть панель инструментов + Clear open recent list + Очистить список недавно открытых файлов - - General - Общие + Help, About YACReader + Справка - - Size up magnifying glass - Увеличение размера окошка увеличительного стекла + Show go to flow + Показать поток страниц - - Size down magnifying glass - Уменьшение размера окошка увеличительного стекла + Previous Comic + Предыдущий комикс - - Zoom in magnifying glass - Увеличить + Show full size + Показать в полном размере - - Zoom out magnifying glass - Уменьшить + Hide/show toolbar + Показать/скрыть панель инструментов - - Magnifiying glass + Magnifying glass Увеличительное стекло - - Toggle between fit to width and fit to height - Переключение режима подгонки страницы по ширине/высоте + Edit shortcuts + Редактировать горячие клавиши + + + General + Общие + + + Set a bookmark on the current page + Установить закладку на текущей странице - Page adjustement Настройка страницы - - Autoscroll down - Автопрокрутка вниз + Show zoom slider + Показать ползунок масштабирования - - Autoscroll up - Автопрокрутка вверх + Go to the last page + Перейти к последней странице - - Autoscroll forward, horizontal first - Автопрокрутка вперед, горизонтальная + Do you want to download the new version? + Хотите загрузить новую версию ? + + + Rotate image to the right + Повернуть изображение по часовой стрелке + + + Always on top + Всегда сверху - Autoscroll backward, horizontal first Автопрокрутка назад, горизонтальная - - Autoscroll forward, vertical first - Автопрокрутка вперед, вертикальная + New instance + + + + OptionsDialog - - Autoscroll backward, vertical first - Автопрокрутка назад, вертикальная + Gamma + Гамма - - Move down - Переместить вниз + Reset + Вернуть к первоначальным значениям - - Move up - Переместить вверх + My comics path + Папка комиксов - - Move left - Переместить влево + Image adjustment + Настройка изображения - - Move right - Переместить вправо + "Go to flow" size + Размер потока страниц - - Go to the first page - Перейти к первой странице + Choose + Выбрать - - Go to the last page - Перейти к последней странице + Image options + Настройки изображения - - Reading - Чтение + Contrast + Контраст - - There is a new version available - Доступна новая версия + Options + Настройки - - Do you want to download the new version? - Хотите загрузить новую версию ? + Comics directory + Папка комиксов - - Remind me in 14 days - Напомнить через 14 дней + Quick Navigation Mode + Ползунок для быстрой навигации по страницам - - Not now - Не сейчас + Background color + Фоновый цвет + + + Disable mouse over activation + Отключить активацию потока при наведении мыши + + + Page Flow + Поток Страниц - - - OptionsDialog - - "Go to flow" size - Размер потока страниц + General + Общие - - My comics path - Папка комиксов + Brightness + Яркость - Page width stretch - Растянуть страницу в ширину + Restart is needed + - - Background color - Фоновый цвет + Fit options + - - Choose - Выбрать + Enlarge images to fit width/height + - - Quick Navigation Mode - Ползунок для быстрой навигации по страницам + Double Page options + - - Disable mouse over activation - Отключить активацию потока при наведении мыши + Show covers as single page + + + + QObject - - Restart is needed - + 7z lib not found + Библиотека распаковщика 7z не найдена - - Brightness - Яркость + unable to load 7z lib from ./utils + не удается загрузить 7z lib из ./ utils - - Contrast - Контраст + Trace + - - Gamma - Гамма + Debug + - - Reset - Вернуть к первоначальным значениям + Info + - - Image options - Настройки изображения + Warning + - - General - Общие + Error + - - Page Flow - Поток Страниц + Fatal + + + + QsLogging::LogWindowModel - - Image adjustment - Настройка изображения + Time + - - Options - Настройки + Level + - - Comics directory - Папка комиксов + Message + - QObject + QsLogging::Window - - 7z lib not found - Библиотека распаковщика 7z не найдена + &Pause + - - unable to load 7z lib from ./utils - не удается загрузить 7z lib из ./ utils + &Resume + + + + Save log + + + + Log file (*.log) + ShortcutsDialog - - YACReader keyboard shortcuts - Клавиатурные комбинации YACReader - - - Close Закрыть - + YACReader keyboard shortcuts + Клавиатурные комбинации YACReader + + Keyboard Shortcuts Клавиатурные комбинации @@ -773,101 +694,86 @@ Viewer - - - Press 'O' to open comic. - Нажмите "O" чтобы открыть комикс. - - - - Not found - Не найдено + Page not available! + Страница недоступна! - - Comic not found - Комикс не найден + Press 'O' to open comic. + Нажмите "O" чтобы открыть комикс. - Error opening comic Ошибка открытия комикса - - CRC Error - Ошибка CRC + Cover! + Начало! - - Loading...please wait! - Загрузка... Пожалуйста подождите! + CRC Error + Ошибка CRC - - Page not available! - Страница недоступна! + Comic not found + Комикс не найден - - Cover! - Начало! + Not found + Не найдено - Last page! Конец! + + Loading...please wait! + Загрузка... Пожалуйста подождите! + - YACReaderFieldEdit + YACReader::WhatsNewDialog - - - Click to overwrite - Изменить + Close + Закрыть + + + YACReaderFieldEdit - Restore to default Восстановить значения по умолчанию - - - YACReaderFieldPlainTextEdit - - - - Click to overwrite Изменить + + + YACReaderFieldPlainTextEdit - Restore to default Вернуть начальные установки + + Click to overwrite + Изменить + YACReaderFlowConfigWidget - - How to show covers: - Как отображать обложки: - - - CoverFlow look Вид рулеткой - + How to show covers: + Как отображать обложки: + + Stripe look Вид полосами - Overlapped Stripe look Вид перекрывающимися полосами @@ -875,153 +781,124 @@ YACReaderGLFlowConfigWidget - - Presets: - Предустановки: - - - - Classic look - Классический вид - - - - Stripe look - Вид полосами + Zoom + Масштабировать - - Overlapped Stripe look - Вид перекрывающимися полосами + Light + Осветить - - Modern look - Современный вид + Show advanced settings + Показать дополнительные настройки - Roulette look Вид рулеткой - - Show advanced settings - Показать дополнительные настройки - - - - Custom: - Пользовательский: + Cover Angle + Охватить угол - - View angle - Угол зрения + Stripe look + Вид полосами - Position Позиция - - Cover gap - Осветить разрыв + Z offset + Смещение по Z + + + Y offset + Смещение по Y - Central gap Сфокусировать разрыв - - Zoom - Масштабировать + Presets: + Предустановки: - - Y offset - Смещение по Y + Overlapped Stripe look + Вид перекрывающимися полосами - - Z offset - Смещение по Z + Modern look + Современный вид - - Cover Angle - Охватить угол + View angle + Угол зрения - - Visibility - Прозрачность + Max angle + Максимальный угол - - Light - Осветить + Custom: + Пользовательский: - - Max angle - Максимальный угол + Classic look + Классический вид - - Low Performance - Минимальная производительность + Cover gap + Осветить разрыв - High Performance Максимальная производительность - + Performance: + Производительность: + + Use VSync (improve the image quality in fullscreen mode, worse performance) Использовать VSync (повысить формат изображения в полноэкранном режиме , хуже производительность) - - Performance: - Производительность: + Visibility + Прозрачность + + + Low Performance + Минимальная производительность YACReaderOptionsDialog - Save Сохранить - - Cancel - Отмена + Use hardware acceleration (restart needed) + Использовать аппаратное ускорение (Требуется перезагрузка) - - Edit shortcuts - Редактировать горячие клавиши + Cancel + Отмена - Shortcuts Горячие клавиши - - Use hardware acceleration (restart needed) - Использовать аппаратное ускорение (Требуется перезагрузка) + Edit shortcuts + Редактировать горячие клавиши YACReaderSlider - Reset Сброс мастштаба @@ -1029,25 +906,20 @@ YACReaderTranslator - - YACReader translator - Переводчик YACReader - - - - - Translation - Перевод - - - clear очистить - Service not available Сервис недоступен + + Translation + Перевод + + + YACReader translator + Переводчик YACReader + diff --git a/YACReader/yacreader_source.ts b/YACReader/yacreader_source.ts index 5c9fa2ed4..dcbd94001 100644 --- a/YACReader/yacreader_source.ts +++ b/YACReader/yacreader_source.ts @@ -4,7 +4,7 @@ ActionsShortcutsModel - + None @@ -17,18 +17,18 @@ - + Close - + Click on any image to go to the bookmark - - + + Loading... @@ -46,17 +46,17 @@ - + Shortcuts settings - + Shortcut in use - + The shortcut "%1" is already assigned to other function @@ -64,22 +64,22 @@ FileComic - + CRC error on page (%1): some of the pages will not be displayed correctly - + Unknown error opening the file - + 7z not found - + Format not supported @@ -87,28 +87,28 @@ GoToDialog - + Page : - + Go To - + Cancel - - + + Total pages : - + Go to... @@ -116,7 +116,7 @@ GoToFlowToolBar - + Page : @@ -134,475 +134,526 @@ + + LogWindow + + + Log window + + + + + &Pause + + + + + &Save + + + + + C&lear + + + + + &Copy + + + + + Level: + + + + + &Auto scroll + + + MainWindowViewer - + &Open - + Open a comic - + Open Folder - + Open image folder - + Save - - + + Save current page - + Previous Comic - + + + Open previous comic - + Next Comic - + + + Open next comic - + &Previous - + + + Go to previous page - + &Next - + + + Go to next page - + Fit Width - + Fit image to height - + Open latest comic - + Open the latest comic opened in the previous reading session - + Clear open recent list - + Fit Height - + Fit image to width - + Rotate image to the left - + Rotate image to the right - + Double page mode - + Switch to double page mode - + Go To - + Go to page ... - + Options - + YACReader options - - + + Help - + Help, About YACReader - + Magnifying glass - + Switch Magnifying glass - + Set bookmark - + Set a bookmark on the current page - + Show bookmarks - + Show the bookmarks of the current comic - + Show keyboard shortcuts - + Show Info - + Close - + Show Dictionary - + Always on top - + Show full size - + + New instance + + + + Clear - + Fit to page - + Reset zoom - + Show zoom slider - + Zoom+ - + Zoom- - + Double page manga mode - + Reverse reading order in double page mode - + Show go to flow - + Edit shortcuts - + &File - - + + Open recent - + File - + Edit - + View - + Go - + Window - - + + Open Comic - - + + Comic files - + Open folder - + Image files (*.jpg) - + page_%1.jpg - + Comics - + Toggle fullscreen mode - + Hide/show toolbar - + General - + Size up magnifying glass - + Size down magnifying glass - + Zoom in magnifying glass - + Zoom out magnifying glass - + Magnifiying glass - + Toggle between fit to width and fit to height - + Page adjustement - + Autoscroll down - + Autoscroll up - + Autoscroll forward, horizontal first - + Autoscroll backward, horizontal first - + Autoscroll forward, vertical first - + Autoscroll backward, vertical first - + Move down - + Move up - + Move left - + Move right - + Go to the first page - + Go to the last page - + Reading - + There is a new version available - + Do you want to download the new version? - + Remind me in 14 days - + Not now @@ -620,77 +671,97 @@ - + Background color - + Choose - + Quick Navigation Mode - + Disable mouse over activation - + Restart is needed - + Brightness - + Contrast - + Gamma - + Reset - + Image options - + + Fit options + + + + + Enlarge images to fit width/height + + + + + Double Page options + + + + + Show covers as single page + + + + General - + Page Flow - + Image adjustment - + Options - + Comics directory @@ -698,15 +769,86 @@ QObject - + 7z lib not found - + unable to load 7z lib from ./utils + + + Trace + + + + + Debug + + + + + Info + + + + + Warning + + + + + Error + + + + + Fatal + + + + + QsLogging::LogWindowModel + + + Time + + + + + Level + + + + + Message + + + + + QsLogging::Window + + + &Pause + + + + + &Resume + + + + + Save log + + + + + Log file (*.log) + + ShortcutsDialog @@ -730,56 +872,64 @@ Viewer - + Press 'O' to open comic. - + Not found - + Comic not found - + Error opening comic - + CRC Error - + Loading...please wait! - + Page not available! - + Cover! - + Last page! + + YACReader::WhatsNewDialog + + + Close + + + YACReaderFieldEdit - + Click to overwrite @@ -793,9 +943,9 @@ YACReaderFieldPlainTextEdit - - - + + + Click to overwrite @@ -831,117 +981,117 @@ YACReaderGLFlowConfigWidget - + Presets: - + Classic look - + Stripe look - + Overlapped Stripe look - + Modern look - + Roulette look - + Show advanced settings - + Custom: - + View angle - + Position - + Cover gap - + Central gap - + Zoom - + Y offset - + Z offset - + Cover Angle - + Visibility - + Light - + Max angle - + Low Performance - + High Performance - + Use VSync (improve the image quality in fullscreen mode, worse performance) - + Performance: @@ -959,17 +1109,17 @@ - + Edit shortcuts - + Shortcuts - + Use hardware acceleration (restart needed) @@ -977,7 +1127,7 @@ YACReaderSlider - + Reset @@ -990,18 +1140,18 @@ - - + + Translation - + clear - + Service not available diff --git a/YACReader/yacreader_tr.ts b/YACReader/yacreader_tr.ts index 9d4d6e752..9cee38f46 100644 --- a/YACReader/yacreader_tr.ts +++ b/YACReader/yacreader_tr.ts @@ -27,17 +27,6 @@ Son Sayfa - - Configuration - - There was a problem saving YACReader configuration. Please, check if you have enough permissions in the YACReader root folder. - Yeni ayarlar kaydedilirken bir problem çıktı. Lütfen YACReader dosyasını açın. - - - Saving config file.... - Config dosyası kaydediliyor... - - EditShortcutsDialog @@ -63,54 +52,10 @@ FileComic - - File not found or not images in file - Dosya bulunamadı yada dosyada resim yok - 7z not found 7z bulunamadı - - Comic not found - Çizgi roman bulunamadı - - - Not found - Bulunamadı - - - File error - Dosya hatası - - - 7z problem - 7z Problemli - - - 7z reading - 7z Okunuyor - - - 7z crashed. - 7z Bozulmuş. - - - problem reading from 7z - 7z Okunurken Problem Oluştu - - - 7z crashed - 7z Bozulması - - - Unknown error 7z - Bilinmeyen 7z hatası - - - 7z wasn't found in your PATH. - 7z Yolu Bulunamadı. - CRC error on page (%1): some of the pages will not be displayed correctly @@ -166,43 +111,38 @@ - MainWindowViewer - - C - C - + LogWindow - D - D - - - G - G + Log window + - I - I + &Pause + - L - L + &Save + - M - M + C&lear + - O - O + &Copy + - R - R + Level: + - Z - Z + &Auto scroll + + + + MainWindowViewer Help Yardım @@ -267,10 +207,6 @@ Open Folder Dosyayı Aç - - Ctrl+O - Ctrl+O - Comic files Çizgi Roman Dosyaları @@ -291,10 +227,6 @@ Next Comic Sırada ki çizgi roman - - Saving error log file.... - Hata dosyasını kaydet... - Fit Width Uygun Genişlik @@ -331,14 +263,14 @@ Show keyboard shortcuts Kılavye kısayollarını göster - - Open next comic - Sıradaki çizgi romanı aç - There is a new version available Yeni versiyon mevcut + + Open next comic + Sıradaki çizgi romanı aç + Show bookmarks Yer imlerini göster @@ -387,6 +319,10 @@ Magnifying glass Büyüteç + + General + Genel + Set a bookmark on the current page Sayfayı yer imi olarak ayarla @@ -395,10 +331,6 @@ Do you want to download the new version? Yeni versiyonu indirmek ister misin ? - - There was a problem saving YACReader error log file. Please, check if you have enough permissions in the YACReader root folder. - Kaydederken bir problem çıktı YACReader hata kayıt dosyası. Lütfen YACReader root dosyasını ziyaret edin. - Rotate image to the right Sayfayı sağa yator @@ -408,23 +340,27 @@ Her zaman üstte - Remind me in 14 days + New instance - Not now + Open latest comic - Fit Height + Open the latest comic opened in the previous reading session - File + Clear - Clear + Clear open recent list + + + + Fit Height @@ -464,127 +400,123 @@ - Comics + File - Toggle fullscreen mode + Edit - Hide/show toolbar + View - General - Genel - - - Size up magnifying glass + Go - Size down magnifying glass + Window - Zoom in magnifying glass + Comics - Zoom out magnifying glass + Toggle fullscreen mode - Magnifiying glass + Hide/show toolbar - Toggle between fit to width and fit to height + Size up magnifying glass - Page adjustement + Size down magnifying glass - Autoscroll down + Zoom in magnifying glass - Autoscroll up + Zoom out magnifying glass - Move down + Magnifiying glass - Move up + Toggle between fit to width and fit to height - Move left + Page adjustement - Move right + Autoscroll down - Go to the first page + Autoscroll up - Go to the last page + Autoscroll forward, horizontal first - Reading + Autoscroll backward, horizontal first - Open latest comic + Autoscroll forward, vertical first - Open the latest comic opened in the previous reading session + Autoscroll backward, vertical first - Clear open recent list + Move down - Edit + Move up - View + Move left - Go + Move right - Window + Go to the first page - Autoscroll forward, horizontal first + Go to the last page - Autoscroll backward, horizontal first + Reading - Autoscroll forward, vertical first + Remind me in 14 days - Autoscroll backward, vertical first + Not now @@ -606,10 +538,6 @@ Image adjustment Resim ayarları - - Page width stretch - Sayfayı uzat - "Go to flow" size Akış görünümüne git @@ -662,6 +590,22 @@ Disable mouse over activation + + Fit options + + + + Enlarge images to fit width/height + + + + Double Page options + + + + Show covers as single page + + QObject @@ -673,6 +617,64 @@ unable to load 7z lib from ./utils + + Trace + + + + Debug + + + + Info + + + + Warning + + + + Error + + + + Fatal + + + + + QsLogging::LogWindowModel + + Time + + + + Level + + + + Message + + + + + QsLogging::Window + + &Pause + + + + &Resume + + + + Save log + + + + Log file (*.log) + + ShortcutsDialog @@ -729,14 +731,10 @@ - YACReaderDeletingProgress - - cancel - vazgeç - + YACReader::WhatsNewDialog - Please wait, deleting in progress... - Lütfen bekle silme işlemi gerçekleştiriliyor... + Close + Kapat @@ -898,26 +896,11 @@ - - YACReaderSideBar - - Search folders and comics - Dosyaları ve çizgi romanları ara - - - LIBRARIES - KÜTÜPHANELER - - - FOLDERS - DOSYALAR - - YACReaderSlider Reset - Yeniden başlat + Yeniden başlat diff --git a/YACReader/yacreader_zh.ts b/YACReader/yacreader_zh.ts new file mode 100644 index 000000000..48bad086e --- /dev/null +++ b/YACReader/yacreader_zh.ts @@ -0,0 +1,1159 @@ + + + + + ActionsShortcutsModel + + + None + + + + + BookmarksDialog + + + Lastest Page + 尾页 + + + + Close + 关闭 + + + + Click on any image to go to the bookmark + 点击任意图片以跳转至相应书签位置 + + + + + Loading... + 载入中... + + + + EditShortcutsDialog + + + Restore defaults + 恢复默认 + + + + To change a shortcut, double click in the key combination and type the new keys. + 更改快捷键: 双击按键组合并输入新的映射. + + + + Shortcuts settings + 快捷键设置 + + + + Shortcut in use + 快捷键被占用 + + + + The shortcut "%1" is already assigned to other function + 快捷键 "%1" 已被映射至其他功能 + + + + FileComic + + + CRC error on page (%1): some of the pages will not be displayed correctly + 第 %1 页 CRC 校验失败: 部分页面将无法正确显示 + + + + Unknown error opening the file + 打开文件时出现未知错误 + + + + 7z not found + 未找到 7z + + + + Format not supported + 不支持的文件格式 + + + + GoToDialog + + + Page : + 页码 : + + + + Go To + 跳转 + + + + Cancel + 取消 + + + + + Total pages : + 总页数: + + + + Go to... + 跳转至 ... + + + + GoToFlowToolBar + + + Page : + 页码 : + + + + HelpAboutDialog + + + About + 关于 + + + + Help + 帮助 + + + + LogWindow + + + Log window + 日志窗口 + + + + &Pause + 中止(&P) + + + + &Save + 保存(&S) + + + + C&lear + 清空(&l) + + + + &Copy + 复制(&C) + + + + Level: + 等级: + + + + &Auto scroll + 自动滚动(&A) + + + + MainWindowViewer + + + &Open + 打开(&O) + + + + Open a comic + 打开漫画 + + + + Open Folder + 打开文件夹 + + + + Open image folder + 打开图片文件夹 + + + + Save + 保存 + + + + + Save current page + 保存当前页面 + + + + Previous Comic + 上一个漫画 + + + + + + Open previous comic + 打开上一个漫画 + + + + Next Comic + 下一个漫画 + + + + + + Open next comic + 打开下一个漫画 + + + + &Previous + 上一页(&P) + + + + + + Go to previous page + 转至上一页 + + + + &Next + 下一页(&N) + + + + + + Go to next page + 转至下一页 + + + + Fit Width + 适合宽度 + + + + Fit image to height + 缩放图片以适应高度 + + + + Open latest comic + 打开最近的漫画 + + + + Open the latest comic opened in the previous reading session + 打开最近阅读漫画 + + + + Clear open recent list + 清空最近访问列表 + + + + Fit Height + 适应高度 + + + + Fit image to width + 缩放图片以适应宽度 + + + + Rotate image to the left + 向左旋转图片 + + + + Rotate image to the right + 向右旋转图片 + + + + Double page mode + 双页模式 + + + + Switch to double page mode + 切换至双页模式 + + + + Go To + 跳转 + + + + Go to page ... + 跳转至页面 ... + + + + Options + 选项 + + + + YACReader options + YACReader 选项 + + + + + Help + 帮助 + + + + Help, About YACReader + 帮助, 关于 YACReader + + + + Magnifying glass + 放大镜 + + + + Switch Magnifying glass + 切换放大镜 + + + + Set bookmark + 设置书签 + + + + Set a bookmark on the current page + 在当前页面设置书签 + + + + Show bookmarks + 显示书签 + + + + Show the bookmarks of the current comic + 显示当前漫画的书签 + + + + Show keyboard shortcuts + 显示键盘快捷键 + + + + Show Info + 显示信息 + + + + Close + 关闭 + + + + Show Dictionary + 显示字典 + + + + Always on top + 总在最上 + + + + Show full size + 显示全尺寸 + + + + New instance + 新建实例 + + + + Clear + 清空 + + + + Fit to page + 适应页面 + + + + Reset zoom + 重置缩放 + + + + Show zoom slider + 显示缩放滑块 + + + + Zoom+ + 放大 + + + + Zoom- + 缩小 + + + + Double page manga mode + 双页漫画模式 + + + + Reverse reading order in double page mode + 双页模式 (逆序阅读) + + + + Show go to flow + 显示Go to flow + + + + Edit shortcuts + 编辑快捷键 + + + + &File + 文件(&F) + + + + + Open recent + 最近打开的文件 + + + + File + 文件 + + + + Edit + 编辑 + + + + View + 查看 + + + + Go + 转到 + + + + Window + 窗口 + + + + + Open Comic + 打开漫画 + + + + + Comic files + 漫画文件 + + + + Open folder + 打开文件夹 + + + + Image files (*.jpg) + 图像文件 (*.jpg) + + + + page_%1.jpg + page_%1.jpg + + + + Comics + 漫画 + + + + Toggle fullscreen mode + 切换全屏模式 + + + + Hide/show toolbar + 隐藏/显示 工具栏 + + + + General + 常规 + + + + Size up magnifying glass + 增大放大镜尺寸 + + + + Size down magnifying glass + 减小放大镜尺寸 + + + + Zoom in magnifying glass + 增大缩放级别 + + + + Zoom out magnifying glass + 减小缩放级别 + + + + Magnifiying glass + 放大镜 + + + + Toggle between fit to width and fit to height + 切换显示为"适应宽度"或"适应高度" + + + + Page adjustement + 页面调整 + + + + Autoscroll down + 向下自动滚动 + + + + Autoscroll up + 向上自动滚动 + + + + Autoscroll forward, horizontal first + 向前自动滚动,水平优先 + + + + Autoscroll backward, horizontal first + 向后自动滚动,水平优先 + + + + Autoscroll forward, vertical first + 向前自动滚动,垂直优先 + + + + Autoscroll backward, vertical first + 向后自动滚动,垂直优先 + + + + Move down + 向下移动 + + + + Move up + 向上移动 + + + + Move left + 向左移动 + + + + Move right + 向右移动 + + + + Go to the first page + 转到第一页 + + + + Go to the last page + 转到最后一页 + + + + Reading + 阅读 + + + + There is a new version available + 有新版本可用 + + + + Do you want to download the new version? + 你要下载新版本吗? + + + + Remind me in 14 days + 14天后提醒我 + + + + Not now + 现在不 + + + + OptionsDialog + + + "Go to flow" size + "Go to flow" 尺寸 + + + + My comics path + 我的漫画路径 + + + + Background color + 背景颜色 + + + + Choose + 选择 + + + + Quick Navigation Mode + 快速导航模式 + + + + Disable mouse over activation + 禁用鼠标激活 + + + + Restart is needed + 需要重启 + + + + Brightness + 亮度 + + + + Contrast + 对比度 + + + + Gamma + Gamma值 + + + + Reset + 重置 + + + + Image options + 图片选项 + + + + Fit options + 适应项 + + + + Enlarge images to fit width/height + 放大图片以适应宽度/高度 + + + + Double Page options + 双页选项 + + + + Show covers as single page + 显示封面为单页 + + + + General + 常规 + + + + Page Flow + 页面流 + + + + Image adjustment + 图像调整 + + + + Options + 选项 + + + + Comics directory + 漫画目录 + + + + QObject + + + 7z lib not found + 未找到 7z 库文件 + + + + unable to load 7z lib from ./utils + 无法从 ./utils 载入 7z 库文件 + + + + Trace + 追踪 + + + + Debug + 除错 + + + + Info + 信息 + + + + Warning + 警告 + + + + Error + 错误 + + + + Fatal + 严重错误 + + + + QsLogging::LogWindowModel + + + Time + 时间 + + + + Level + 等级 + + + + Message + 信息 + + + + QsLogging::Window + + + &Pause + 中止(&P) + + + + &Resume + 恢复(&R) + + + + Save log + 保存日志 + + + + Log file (*.log) + 日志文件 (*.log) + + + + ShortcutsDialog + + + YACReader keyboard shortcuts + YACReader 键盘快捷键 + + + + Close + 关闭 + + + + Keyboard Shortcuts + 键盘快捷键 + + + + Viewer + + + + Press 'O' to open comic. + 按下 'O' 以打开漫画. + + + + Not found + 未找到 + + + + Comic not found + 未找到漫画 + + + + Error opening comic + 打开漫画时发生错误 + + + + CRC Error + CRC 校验失败 + + + + Loading...please wait! + 载入中... 请稍候! + + + + Page not available! + 页面不可用! + + + + Cover! + 封面! + + + + Last page! + 尾页! + + + + YACReader::WhatsNewDialog + + + Close + 关闭 + + + + YACReaderFieldEdit + + + + Click to overwrite + 点击以覆盖 + + + + Restore to default + 恢复默认 + + + + YACReaderFieldPlainTextEdit + + + + + + Click to overwrite + 点击以覆盖 + + + + Restore to default + 恢复默认 + + + + YACReaderFlowConfigWidget + + + How to show covers: + 封面显示方式: + + + + CoverFlow look + 封面流 + + + + Stripe look + 条状 + + + + Overlapped Stripe look + 重叠条状 + + + + YACReaderGLFlowConfigWidget + + + Presets: + 预设: + + + + Classic look + 经典 + + + + Stripe look + 条状 + + + + Overlapped Stripe look + 重叠条状 + + + + Modern look + 现代 + + + + Roulette look + 轮盘 + + + + Show advanced settings + 显示高级选项 + + + + Custom: + 自定义: + + + + View angle + 视角 + + + + Position + 位置 + + + + Cover gap + 封面间距 + + + + Central gap + 中心间距 + + + + Zoom + 缩放 + + + + Y offset + Y位移 + + + + Z offset + Z位移 + + + + Cover Angle + 封面角度 + + + + Visibility + 透明度 + + + + Light + 亮度 + + + + Max angle + 最大角度 + + + + Low Performance + 低性能 + + + + High Performance + 高性能 + + + + Use VSync (improve the image quality in fullscreen mode, worse performance) + 使用VSync (在全屏模式下提高图像质量, 性能更差) + + + + Performance: + 性能: + + + + YACReaderOptionsDialog + + + Save + 保存 + + + + Cancel + 取消 + + + + Edit shortcuts + 编辑快捷键 + + + + Shortcuts + 快捷键 + + + + Use hardware acceleration (restart needed) + 使用硬件加速 (需要重启) + + + + YACReaderSlider + + + Reset + 重置 + + + + YACReaderTranslator + + + YACReader translator + YACReader 翻译 + + + + + Translation + 翻译 + + + + clear + 清空 + + + + Service not available + 服务不可用 + + + diff --git a/YACReaderLibrary/YACReaderLibrary.pro b/YACReaderLibrary/YACReaderLibrary.pro index 2e6d6888e..9a0e4bf29 100644 --- a/YACReaderLibrary/YACReaderLibrary.pro +++ b/YACReaderLibrary/YACReaderLibrary.pro @@ -67,20 +67,17 @@ macx { QT += macextras gui-private } -unix:!macx { - CONFIG += c++11 -} - #CONFIG += release CONFIG -= flat -QT += sql network widgets script -!CONFIG(no_opengl) { - QT += opengl -} +QT += sql network widgets svg # Input HEADERS += comic_flow.h \ + ../common/concurrent_queue.h \ create_library_dialog.h \ + db/comic_query_result_processor.h \ + db/folder_query_result_processor.h \ + db/query_lexer.h \ library_creator.h \ library_window.h \ add_library_dialog.h \ @@ -147,6 +144,7 @@ HEADERS += comic_flow.h \ yacreader_comics_selection_helper.h \ yacreader_comic_info_helper.h \ db/reading_list.h \ + db/query_parser.h \ current_comic_view_helper.h !CONFIG(no_opengl) { @@ -155,6 +153,9 @@ HEADERS += comic_flow.h \ SOURCES += comic_flow.cpp \ create_library_dialog.cpp \ + db/comic_query_result_processor.cpp \ + db/folder_query_result_processor.cpp \ + db/query_lexer.cpp \ library_creator.cpp \ library_window.cpp \ main.cpp \ @@ -219,15 +220,16 @@ SOURCES += comic_flow.cpp \ yacreader_comics_selection_helper.cpp \ yacreader_comic_info_helper.cpp\ db/reading_list.cpp \ - current_comic_view_helper.cpp + current_comic_view_helper.cpp \ + db/query_parser.cpp !CONFIG(no_opengl) { SOURCES += ../common/gl/yacreader_flow_gl.cpp } macx { - HEADERS += trayhandler.h - OBJECTIVE_SOURCES += trayhandler.mm + HEADERS += trayhandler.h + OBJECTIVE_SOURCES += trayhandler.mm } include(./server/server.pri) @@ -264,6 +266,8 @@ TRANSLATIONS = yacreaderlibrary_es.ts \ yacreaderlibrary_nl.ts \ yacreaderlibrary_tr.ts \ yacreaderlibrary_de.ts \ + yacreaderlibrary_zh.ts \ + yacreaderlibrary_it.ts \ yacreaderlibrary_source.ts #QML/GridView diff --git a/YACReaderLibrary/classic_comics_view.cpp b/YACReaderLibrary/classic_comics_view.cpp index 56d35fc1f..f7b7b552e 100644 --- a/YACReaderLibrary/classic_comics_view.cpp +++ b/YACReaderLibrary/classic_comics_view.cpp @@ -258,6 +258,15 @@ void ClassicComicsView::updateCurrentComicView() { } +void ClassicComicsView::focusComicsNavigation(Qt::FocusReason reason) +{ + const bool comicFlowVisible = stack->currentWidget() == comicFlow && sVertical->sizes().constFirst() != 0; + if (comicFlowVisible) + comicFlow->setFocus(reason); + else // Let the user navigate the table. + tableView->setFocus(reason); +} + void ClassicComicsView::selectAll() { tableView->selectAll(); @@ -291,6 +300,10 @@ void ClassicComicsView::centerComicFlow(const QModelIndex &mi) void ClassicComicsView::updateTableView(int i) { + if (model == nullptr) { + return; + } + QModelIndex mi = model->index(i, 2); tableView->setCurrentIndex(mi); tableView->scrollTo(mi, QAbstractItemView::EnsureVisible); diff --git a/YACReaderLibrary/classic_comics_view.h b/YACReaderLibrary/classic_comics_view.h index a5d51f147..87122dc71 100644 --- a/YACReaderLibrary/classic_comics_view.h +++ b/YACReaderLibrary/classic_comics_view.h @@ -19,7 +19,7 @@ class ClassicComicsView : public ComicsView { Q_OBJECT public: - ClassicComicsView(QWidget *parent = 0); + explicit ClassicComicsView(QWidget *parent = nullptr); void setToolBar(QToolBar *toolBar) override; void setModel(ComicModel *model) override; @@ -32,6 +32,7 @@ class ClassicComicsView : public ComicsView void enableFilterMode(bool enabled) override; void selectIndex(int index) override; void updateCurrentComicView() override; + void focusComicsNavigation(Qt::FocusReason reason) override; public slots: void setCurrentIndex(const QModelIndex &index) override; diff --git a/YACReaderLibrary/comic_vine/comic_vine_all_volume_comics_retriever.cpp b/YACReaderLibrary/comic_vine/comic_vine_all_volume_comics_retriever.cpp index 9b468afef..10b864fc4 100644 --- a/YACReaderLibrary/comic_vine/comic_vine_all_volume_comics_retriever.cpp +++ b/YACReaderLibrary/comic_vine/comic_vine_all_volume_comics_retriever.cpp @@ -3,7 +3,9 @@ #include "http_worker.h" #include "response_parser.h" -#include +#include +#include +#include ComicVineAllVolumeComicsRetriever::ComicVineAllVolumeComicsRetriever(const QString &volumeURLString, QObject *parent) : QObject(parent), volumeURLString(volumeURLString) diff --git a/YACReaderLibrary/comic_vine/comic_vine_dialog.cpp b/YACReaderLibrary/comic_vine/comic_vine_dialog.cpp index 8047b4f37..237519b93 100644 --- a/YACReaderLibrary/comic_vine/comic_vine_dialog.cpp +++ b/YACReaderLibrary/comic_vine/comic_vine_dialog.cpp @@ -1,21 +1,22 @@ #include "comic_vine_dialog.h" -#include -#include #include #include +#include #include -#include #include -#include +#include #include +#include +#include #if QT_VERSION >= 0x050000 #include #else #include #endif -#include -#include #include "data_base_management.h" +#include +#include +#include #include "yacreader_busy_widget.h" #include "comic_vine_client.h" @@ -56,6 +57,11 @@ void ComicVineDialog::doLayout() searchButton = new QPushButton(tr("search")); closeButton = new QPushButton(tr("close")); + backButton->setShortcut(QKeySequence(Qt::Key_Backspace)); + + closeButton->setDefault(false); + closeButton->setAutoDefault(false); + skipButton->setStyleSheet(dialogButtonsStyleSheet); backButton->setStyleSheet(dialogButtonsStyleSheet); nextButton->setStyleSheet(dialogButtonsStyleSheet); @@ -302,10 +308,9 @@ void ComicVineDialog::showSeriesQuestion() searchButton->setHidden(true); closeButton->setVisible(true); - if (mode == SingleComicInList) - skipButton->setVisible(true); - else - skipButton->setHidden(true); + nextButton->setDefault(true); + + toggleSkipButton(); } void ComicVineDialog::showSearchSingleComic() @@ -318,10 +323,9 @@ void ComicVineDialog::showSearchSingleComic() searchButton->setVisible(true); closeButton->setVisible(true); - if (mode == SingleComicInList) - skipButton->setVisible(true); - else - skipButton->setHidden(true); + searchButton->setDefault(true); + + toggleSkipButton(); } void ComicVineDialog::showSearchVolume() @@ -332,6 +336,9 @@ void ComicVineDialog::showSearchVolume() nextButton->setHidden(true); searchButton->setVisible(true); closeButton->setVisible(true); + + searchButton->setDefault(true); + toggleSkipButton(); } @@ -351,6 +358,9 @@ void ComicVineDialog::showSelectVolume() nextButton->setVisible(true); searchButton->setHidden(true); closeButton->setVisible(true); + + nextButton->setDefault(true); + toggleSkipButton(); } @@ -365,6 +375,9 @@ void ComicVineDialog::showSelectComic(const QString &json) nextButton->setVisible(true); searchButton->setHidden(true); closeButton->setVisible(true); + + nextButton->setDefault(true); + toggleSkipButton(); } @@ -380,6 +393,9 @@ void ComicVineDialog::showSortVolumeComics(const QString &json) nextButton->setVisible(true); searchButton->setHidden(true); closeButton->setVisible(true); + + nextButton->setDefault(true); + toggleSkipButton(); } @@ -488,138 +504,114 @@ void ComicVineDialog::getComicInfo(const QString &comicId, int count, const QStr ComicDB ComicVineDialog::parseComicInfo(ComicDB &comic, const QString &json, int count, const QString &publisher) { - QScriptEngine engine; - QScriptValue sc; - sc = engine.evaluate("(" + json + ")"); + QJsonParseError Err; - if (!sc.property("error").isValid() && sc.property("error").toString() != "OK") { + QVariantMap sc = QJsonDocument::fromJson(json.toUtf8(), &Err).toVariant().toMap(); + if (Err.error != QJsonParseError::NoError) { qDebug("Error detected"); - } else { - int numResults = sc.property("number_of_total_results").toString().toInt(); //fix to weird behaviour using hasNext - - if (numResults > 0) { - QScriptValue result = sc.property("results"); - - if (!result.property("name").isNull()) { - QString title = result.property("name").toString(); - - comic.info.title = title; - } - - if (!result.property("issue_number").isNull()) { - QString number = result.property("issue_number").toString(); - - comic.info.number = number; - } - - if (!result.property("volume").property("name").isNull()) { - QString volume = result.property("volume").property("name").toString(); - - comic.info.volume = volume; - } - - if (!result.property("person_credits").isNull()) { - QMap authors = getAuthors(result.property("person_credits")); - - QString writer = QStringList(authors.values("writer")).join("\n"); - QString penciller = QStringList(authors.values("penciller")).join("\n"); - QString inker = QStringList(authors.values("inker")).join("\n"); - QString colorist = QStringList(authors.values("colorist")).join("\n"); - QString letterer = QStringList(authors.values("letterer")).join("\n"); - QString coverArtist = QStringList(authors.values("cover")).join("\n"); - - comic.info.writer = writer; - comic.info.penciller = penciller; - comic.info.inker = inker; - comic.info.colorist = colorist; - comic.info.letterer = letterer; - comic.info.coverArtist = coverArtist; - } + return comic; + } - if (!result.property("cover_date").isNull()) { - QString date = result.property("cover_date").toString(); + int numResults = sc.value("number_of_total_results").toInt(); //fix to weird behaviour using hasNext + + if (numResults > 0) { + QVariantMap result = sc.value("results").toMap(); + comic.info.title = result.value("name"); + comic.info.number = result.value("issue_number"); + comic.info.volume = result.value("volume").toMap().value("name"); + + if (result.contains("person_credits") && !result.value("person_credits").isNull()) { + QMap authors = getAuthors(result.value("person_credits")); + + QString writer = QStringList(authors.values("writer")).join("\n"); + QString penciller = QStringList(authors.values("penciller")).join("\n"); + QString inker = QStringList(authors.values("inker")).join("\n"); + QString colorist = QStringList(authors.values("colorist")).join("\n"); + QString letterer = QStringList(authors.values("letterer")).join("\n"); + QString coverArtist = QStringList(authors.values("cover")).join("\n"); + + comic.info.writer = writer; + comic.info.penciller = penciller; + comic.info.inker = inker; + comic.info.colorist = colorist; + comic.info.letterer = letterer; + comic.info.coverArtist = coverArtist; + } - QStringList tempList = date.split("-"); + if (result.contains("cover_date") && !result.value("conver_date").isNull()) { + QString date = result.value("cover_date").toString(); - if (tempList.length() == 3) { - std::reverse(tempList.begin(), tempList.end()); - comic.info.date = tempList.join("/"); - } - } + QStringList tempList = date.split("-"); - if (!result.property("description").isNull()) { - QString synopsis = result.property("description").toString().remove(QRegExp("<[^>]*>")); //description - comic.info.synopsis = synopsis; + if (tempList.length() == 3) { + std::reverse(tempList.begin(), tempList.end()); + comic.info.date = tempList.join("/"); } + } - if (!result.property("character_credits").isNull()) { - QString characters = getCharacters(result.property("character_credits")); + if (result.contains("description") && !result.value("description").isNull()) { + comic.info.synopsis = result.value("description"); + } - comic.info.characters = characters; - } + if (result.contains("character_credits") && !result.value("character_credits").isNull()) { + comic.info.characters = getCharacters(result.value("character_credits")); + } - if (!result.property("story_arc_credits").isNull()) { - QPair storyArcIdAndName = getFirstStoryArcIdAndName(result.property("story_arc_credits")); - QString storyArcId = storyArcIdAndName.first; - QString storyArcName = storyArcIdAndName.second; - if (!storyArcId.isNull()) { + if (result.contains("story_arc_credits") && !result.value("story_arc_credits").isNull()) { + QPair storyArcIdAndName = getFirstStoryArcIdAndName(result.value("story_arc_credits")); + QString storyArcId = storyArcIdAndName.first; + QString storyArcName = storyArcIdAndName.second; + if (!storyArcId.isNull()) { - QString comicId = result.property("id").toString(); + QString comicId = result.value("id").toString(); - QPair arcNumberAndArcCount = getArcNumberAndArcCount(storyArcId, comicId); - if (!arcNumberAndArcCount.first.isNull()) { - QString arcNumber = arcNumberAndArcCount.first; - QString arcCount = arcNumberAndArcCount.second; + QPair arcNumberAndArcCount = getArcNumberAndArcCount(storyArcId, comicId); + if (!arcNumberAndArcCount.first.isNull()) { + QString arcNumber = arcNumberAndArcCount.first; + QString arcCount = arcNumberAndArcCount.second; - comic.info.storyArc = storyArcName; - comic.info.arcNumber = arcNumber; - comic.info.arcCount = arcCount; - } + comic.info.storyArc = storyArcName; + comic.info.arcNumber = arcNumber; + comic.info.arcCount = arcCount; } } + } - comic.info.count = count; + comic.info.count = count; - comic.info.publisher = publisher; - } + comic.info.publisher = publisher; } return comic; } -QString ComicVineDialog::getCharacters(const QScriptValue &json_characters) +QString ComicVineDialog::getCharacters(const QVariant &json_characters) { - QString characters; + QStringList characters; - QScriptValueIterator it(json_characters); - QScriptValue resultsValue; + QListIterator it(json_characters.toList()); + QVariantMap resultsValue; while (it.hasNext()) { - it.next(); - if (it.flags() & QScriptValue::SkipInEnumeration) - continue; - resultsValue = it.value(); + resultsValue = it.next().toMap(); - characters += resultsValue.property("name").toString() + "\n"; + characters << resultsValue.value("name").toString(); } - return characters; + return (characters.isEmpty()) ? "" : (characters.join("\n") + "\n"); } -QMap ComicVineDialog::getAuthors(const QScriptValue &json_authors) +QMap ComicVineDialog::getAuthors(const QVariant &json_authors) { QMap authors; - QScriptValueIterator it(json_authors); - QScriptValue resultsValue; + QListIterator it(json_authors.toList()); + QVariantMap resultsValue; while (it.hasNext()) { - it.next(); - if (it.flags() & QScriptValue::SkipInEnumeration) - continue; - resultsValue = it.value(); + resultsValue = it.next().toMap(); - QString authorName = resultsValue.property("name").toString(); + QString authorName = resultsValue.value("name").toString(); - QStringList roles = resultsValue.property("role").toString().split(","); + QStringList roles = resultsValue.value("role").toString().split(","); foreach (QString role, roles) { if (role.trimmed() == "writer") authors.insertMulti("writer", authorName); @@ -639,20 +631,17 @@ QMap ComicVineDialog::getAuthors(const QScriptValue &json_auth return authors; } -QPair ComicVineDialog::getFirstStoryArcIdAndName(const QScriptValue &json_story_arcs) +QPair ComicVineDialog::getFirstStoryArcIdAndName(const QVariant &json_story_arcs) { QString story_arc_id = QString(); QString story_arc_name = QString(); - QScriptValueIterator it(json_story_arcs); - QScriptValue resultsValue; + QListIterator it(json_story_arcs.toList()); + QVariantMap resultsValue; while (it.hasNext()) { - it.next(); - if (it.flags() & QScriptValue::SkipInEnumeration) - continue; - resultsValue = it.value(); - story_arc_id = resultsValue.property("id").toString(); - story_arc_name = resultsValue.property("name").toString(); + resultsValue = it.next().toMap(); + story_arc_id = resultsValue.value("id").toString(); + story_arc_name = resultsValue.value("name").toString(); break; } return qMakePair(story_arc_id, story_arc_name); @@ -668,40 +657,33 @@ QPair ComicVineDialog::getArcNumberAndArcCount(const QString & return qMakePair(QString(), QString()); QString json = result; - QScriptEngine engine; - QScriptValue sc; - sc = engine.evaluate("(" + json + ")"); + QJsonParseError Err; + QVariantMap sc = QJsonDocument::fromJson(json.toUtf8(), &Err).toVariant().toMap(); - if (!sc.property("error").isValid() && sc.property("error").toString() != "OK") { + if (Err.error != QJsonParseError::NoError) { qDebug("Error detected"); return qMakePair(QString(), QString()); - } else { - int numResults = sc.property("number_of_total_results").toString().toInt(); //fix to weird behaviour using hasNext - - if (numResults > 0) { - QScriptValue result = sc.property("results"); - - if (!result.property("issues").isNull()) { - QScriptValue issues = result.property("issues"); - - int arcNumber = 0; - int arcCount = 0; - - QScriptValueIterator it(issues); - QScriptValue resultsValue; - while (it.hasNext()) { - it.next(); - if (it.flags() & QScriptValue::SkipInEnumeration) - continue; - resultsValue = it.value(); - if (comicId == resultsValue.property("id").toString()) { - arcNumber = arcCount + 1; - } - arcCount++; + } + + int numResults = sc.value("number_of_total_results").toInt(); //fix to weird behaviour using hasNext + + if (numResults > 0) { + QVariantMap result = sc.value("results").toMap(); + + if (result.contains("issues")) { + QListIterator it(result.value("issues").toList()); + int arcNumber = 0; + int arcCount = 0; + + QVariantMap resultsValue; + while (it.hasNext()) { + resultsValue = it.next().toMap(); + if (comicId == resultsValue.value("id").toString()) { + arcNumber = arcCount + 1; } - return qMakePair(QString::number(arcNumber), QString::number(arcCount)); + arcCount++; } - return qMakePair(QString(), QString()); + return qMakePair(QString::number(arcNumber), QString::number(arcCount)); } return qMakePair(QString(), QString()); } diff --git a/YACReaderLibrary/comic_vine/comic_vine_dialog.h b/YACReaderLibrary/comic_vine/comic_vine_dialog.h index 77b8427b7..7e4291cc4 100644 --- a/YACReaderLibrary/comic_vine/comic_vine_dialog.h +++ b/YACReaderLibrary/comic_vine/comic_vine_dialog.h @@ -18,7 +18,6 @@ class SearchVolume; class SelectComic; class SelectVolume; class SortVolumeComics; -class QScriptValue; //TODO this should use a QStateMachine //---------------------------------------- @@ -64,9 +63,9 @@ protected slots: void goToNextComic(); private: - QString getCharacters(const QScriptValue &json_characters); - QMap getAuthors(const QScriptValue &json_authors); - QPair getFirstStoryArcIdAndName(const QScriptValue &json_story_arcs); + QString getCharacters(const QVariant &json_characters); + QMap getAuthors(const QVariant &json_authors); + QPair getFirstStoryArcIdAndName(const QVariant &json_story_arcs); QPair getArcNumberAndArcCount(const QString &storyArcId, const QString &comicId); void toggleSkipButton(); diff --git a/YACReaderLibrary/comic_vine/model/response_parser.cpp b/YACReaderLibrary/comic_vine/model/response_parser.cpp index b521d4fca..033fd6077 100644 --- a/YACReaderLibrary/comic_vine/model/response_parser.cpp +++ b/YACReaderLibrary/comic_vine/model/response_parser.cpp @@ -1,7 +1,7 @@ #include "response_parser.h" - -#include #include +#include +#include ResponseParser::ResponseParser(QObject *parent) : QObject(parent), error(false), errorTxt("None"), numResults(-1), currentPage(-1), totalPages(-1) @@ -46,32 +46,43 @@ bool ResponseParser::isError(qint32 error) void ResponseParser::loadJSONResponse(const QString &response) { - QScriptEngine engine; - QScriptValue sc; - sc = engine.evaluate("(" + response + ")"); + QJsonParseError Err; + QVariantMap sc = QJsonDocument::fromJson(response.toUtf8(), &Err).toVariant().toMap(); errorTxt = "None"; - if (!sc.property("status_code").isValid() || isError(sc.property("status_code").toInt32())) { + if (Err.error != QJsonParseError::NoError) { + errorTxt = "Json syntax error"; + error = true; + return; + } + + if (!sc.value("status_code").isValid() || isError(sc.value("status_code").toInt())) { error = true; - if (sc.property("error").isValid()) - errorTxt = sc.property("error").toString(); - else + if (sc.value("error").isValid()) { + errorTxt = sc.value("error").toString(); + + } else { errorTxt = "Unknown error"; + } + return; + } + + error = false; + if (sc.value("number_of_total_results").isValid()) { + numResults = sc.value("number_of_total_results").toInt(); // sc.property("number_of_total_results").toInt32(); + + } else { + qDebug() << sc.value("oops").toString(); + } + + auto limit = sc.value("limit").toInt(); + auto offset = sc.value("offset").toInt(); + auto total = sc.value("number_of_total_results").toInt(); + if (limit > 0) { + totalPages = (total / limit) + (total % limit > 0 ? 1 : 0); + currentPage = (offset / limit) + 1; } else { - error = false; - if (sc.property("number_of_total_results").isValid()) - numResults = sc.property("number_of_total_results").toString().toInt(); // sc.property("number_of_total_results").toInt32(); - else - qDebug() << sc.property("oops").toString(); - - int limit = sc.property("limit").toInt32(); - int offset = sc.property("offset").toInt32(); - int total = sc.property("number_of_total_results").toInt32(); - if (limit > 0) { - totalPages = (total / limit) + (total % limit > 0 ? 1 : 0); - currentPage = (offset / limit) + 1; - } else - totalPages = currentPage = 1; + totalPages = currentPage = 1; } } diff --git a/YACReaderLibrary/comic_vine/model/volume_comics_model.cpp b/YACReaderLibrary/comic_vine/model/volume_comics_model.cpp index e08080f9d..f490454cb 100644 --- a/YACReaderLibrary/comic_vine/model/volume_comics_model.cpp +++ b/YACReaderLibrary/comic_vine/model/volume_comics_model.cpp @@ -1,7 +1,8 @@ #include "volume_comics_model.h" #include "qnaturalsorting.h" -#include +#include +#include bool lessThan(const QList &left, const QList &right) { @@ -18,33 +19,29 @@ VolumeComicsModel::VolumeComicsModel(QObject *parent) void VolumeComicsModel::load(const QString &json) { - QScriptEngine engine; - QScriptValue sc; - sc = engine.evaluate("(" + json + ")"); + QJsonParseError Err; + QVariantMap sc = QJsonDocument::fromJson(json.toUtf8(), &Err).toVariant().toMap(); - if (!sc.property("error").isValid() && sc.property("error").toString() != "OK") { + if (Err.error != QJsonParseError::NoError) { qDebug("Error detected"); - } else { - QScriptValueIterator it(sc.property("results")); - //bool test; - QScriptValue resultsValue; - while (it.hasNext()) { - it.next(); - if (it.flags() & QScriptValue::SkipInEnumeration) - continue; - resultsValue = it.value(); - QString issueNumber = resultsValue.property("issue_number").toString(); - QScriptValue propertyName = resultsValue.property("name"); - QString name = propertyName.isNull() ? "-" : propertyName.toString(); - QString coverURL = resultsValue.property("image").property("medium_url").toString(); - QString id = resultsValue.property("id").toString(); - QStringList l; - l << issueNumber << name << coverURL << id; - _data.push_back(l); - } + return; + } - qSort(_data.begin(), _data.end(), lessThan); + QListIterator it(sc.value("results").toList()); + QVariantMap resultsValue; + while (it.hasNext()) { + resultsValue = it.next().toMap(); + QString issueNumber = resultsValue.value("issue_number").toString(); + QVariant propertyName = resultsValue.value("name"); + QString name = propertyName.isNull() ? "-" : propertyName.toString(); + QString coverURL = resultsValue.value("image").toMap().value("medium_url").toString(); + QString id = resultsValue.value("id").toString(); + QStringList l; + l << issueNumber << name << coverURL << id; + _data.push_back(l); } + + std::sort(_data.begin(), _data.end(), lessThan); } /*void VolumeComicsModel::load(const QStringList &jsonList) diff --git a/YACReaderLibrary/comic_vine/model/volumes_model.cpp b/YACReaderLibrary/comic_vine/model/volumes_model.cpp index a7d56a51b..9161a0e44 100644 --- a/YACReaderLibrary/comic_vine/model/volumes_model.cpp +++ b/YACReaderLibrary/comic_vine/model/volumes_model.cpp @@ -1,6 +1,7 @@ #include "volumes_model.h" -#include +#include +#include VolumesModel::VolumesModel(QObject *parent) : JSONModel(parent) @@ -14,34 +15,33 @@ VolumesModel::~VolumesModel() void VolumesModel::load(const QString &json) { - QScriptEngine engine; - QScriptValue sc; - sc = engine.evaluate("(" + json + ")"); + QJsonParseError Err; + QVariantMap sc = QJsonDocument::fromJson(json.toUtf8(), &Err).toVariant().toMap(); - if (!sc.property("error").isValid() && sc.property("error").toString() != "OK") { + if (Err.error != QJsonParseError::NoError) { qDebug("Error detected"); - } else { - int numResults = sc.property("number_of_total_results").toString().toInt(); //fix to weird behaviour using hasNext - QScriptValueIterator it(sc.property("results")); - bool test; - QScriptValue resultsValue; - while (it.hasNext()) { - it.next(); - resultsValue = it.value(); - QString numIssues = resultsValue.property("count_of_issues").toString(); - QString year = resultsValue.property("start_year").toString(); - QString name = resultsValue.property("name").toString(); - QString publisher = resultsValue.property("publisher").property("name").toString(); - QString url = resultsValue.property("image").property("medium_url").toString(); - QString deck = resultsValue.property("deck").toString(); - QString id = resultsValue.property("id").toString(); - QStringList l; - l << name << year << numIssues << publisher << url << deck << id; - test = name.isEmpty() && year.isEmpty() && numIssues.isEmpty() && url.isEmpty(); - if (numResults > 0 && !test) - _data.push_back(l); - numResults--; - } + return; + } + + int numResults = sc.value("number_of_total_results").toInt(); //fix to weird behaviour using hasNext + QListIterator it(sc.value("results").toList()); + bool test; + QVariantMap resultsValue; + while (it.hasNext()) { + resultsValue = it.next().toMap(); + QString numIssues = resultsValue.value("count_of_issues").toString(); + QString year = resultsValue.value("start_year").toString(); + QString name = resultsValue.value("name").toString(); + QString publisher = resultsValue.value("publisher").toMap().value("name").toString(); + QString url = resultsValue.value("image").toMap().value("medium_url").toString(); + QString deck = resultsValue.value("deck").toString(); + QString id = resultsValue.value("id").toString(); + QStringList l; + l << name << year << numIssues << publisher << url << deck << id; + test = name.isEmpty() && year.isEmpty() && numIssues.isEmpty() && url.isEmpty(); + if (numResults > 0 && !test) + _data.push_back(l); + numResults--; } } diff --git a/YACReaderLibrary/comic_vine/scraper_results_paginator.cpp b/YACReaderLibrary/comic_vine/scraper_results_paginator.cpp index 0876ad718..aa511c9c7 100644 --- a/YACReaderLibrary/comic_vine/scraper_results_paginator.cpp +++ b/YACReaderLibrary/comic_vine/scraper_results_paginator.cpp @@ -4,7 +4,6 @@ #include #include #include -#include ScraperResultsPaginator::ScraperResultsPaginator(QWidget *parent) : QWidget(parent), customLabel("items") diff --git a/YACReaderLibrary/comic_vine/select_comic.cpp b/YACReaderLibrary/comic_vine/select_comic.cpp index 681e1d20a..103b424e9 100644 --- a/YACReaderLibrary/comic_vine/select_comic.cpp +++ b/YACReaderLibrary/comic_vine/select_comic.cpp @@ -5,9 +5,10 @@ #include "scraper_tableview.h" #include "volume_comics_model.h" +#include +#include #include #include -#include SelectComic::SelectComic(QWidget *parent) : ScraperSelector(parent), model(0) @@ -121,18 +122,17 @@ void SelectComic::setCover(const QByteArray &data) void SelectComic::setDescription(const QString &jsonDetail) { - QScriptEngine engine; - QScriptValue sc; - sc = engine.evaluate("(" + jsonDetail + ")"); + QJsonParseError Err; + QVariantMap sc = QJsonDocument::fromJson(jsonDetail.toUtf8(), &Err).toVariant().toMap(); - if (!sc.property("error").isValid() && sc.property("error").toString() != "OK") { + if (Err.error != QJsonParseError::NoError) { qDebug("Error detected"); - } else { - - QScriptValue descriptionValues = sc.property("results").property("description"); - bool valid = !descriptionValues.isNull() && descriptionValues.isValid(); - detailLabel->setText(valid ? descriptionValues.toString().replace("setText(valid ? descriptionValues.toString().replace(" -#include +#include #include -#include +#include +#include +#include +#include #include #include -#include -#include -#include +#include #include +#include +#include #include "scraper_tableview.h" -#include - #include "volumes_model.h" #include "comic_vine_client.h" #include "scraper_scroll_label.h" @@ -149,18 +149,17 @@ void SelectVolume::setCover(const QByteArray &data) void SelectVolume::setDescription(const QString &jsonDetail) { - QScriptEngine engine; - QScriptValue sc; - sc = engine.evaluate("(" + jsonDetail + ")"); + QJsonParseError Err; + QVariantMap sc = QJsonDocument::fromJson(jsonDetail.toUtf8(), &Err).toVariant().toMap(); - if (!sc.property("error").isValid() && sc.property("error").toString() != "OK") { + if (Err.error != QJsonParseError::NoError) { qDebug("Error detected"); - } else { - - QScriptValue descriptionValues = sc.property("results").property("description"); - bool valid = !descriptionValues.isNull() && descriptionValues.isValid(); - detailLabel->setText(valid ? descriptionValues.toString().replace("setText(valid ? descriptionValues.toString().replace(" *data, const QString &databasePath) { - beginResetModel(); - qDeleteAll(_data); - _data.clear(); _databasePath = databasePath; - QString connectionName = ""; - - { - QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath); - QSqlQuery selectQuery(db); - - switch (modifier) { - case YACReader::NoModifiers: - selectQuery.prepare("SELECT ci.number,ci.title,c.fileName,ci.numPages,c.id,c.parentId,c.path,ci.hash,ci.read,ci.isBis,ci.currentPage,ci.rating,ci.hasBeenOpened " - "FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) " - "WHERE UPPER(ci.title) LIKE UPPER(:filter) OR UPPER(c.fileName) LIKE UPPER(:filter) LIMIT :limit"); - selectQuery.bindValue(":filter", "%%" + filter + "%%"); - selectQuery.bindValue(":limit", 500); //TODO, load this value from settings - break; - - case YACReader::OnlyRead: - selectQuery.prepare("SELECT ci.number,ci.title,c.fileName,ci.numPages,c.id,c.parentId,c.path,ci.hash,ci.read,ci.isBis,ci.currentPage,ci.rating,ci.hasBeenOpened " - "FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) " - "WHERE (UPPER(ci.title) LIKE UPPER(:filter) OR UPPER(c.fileName) LIKE UPPER(:filter)) AND ci.read = 1 LIMIT :limit"); - selectQuery.bindValue(":filter", "%%" + filter + "%%"); - selectQuery.bindValue(":limit", 500); //TODO, load this value from settings - break; - case YACReader::OnlyUnread: - selectQuery.prepare("SELECT ci.number,ci.title,c.fileName,ci.numPages,c.id,c.parentId,c.path,ci.hash,ci.read,ci.isBis,ci.currentPage,ci.rating,ci.hasBeenOpened " - "FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) " - "WHERE (UPPER(ci.title) LIKE UPPER(:filter) OR UPPER(c.fileName) LIKE UPPER(:filter)) AND ci.read = 0 LIMIT :limit"); - selectQuery.bindValue(":filter", "%%" + filter + "%%"); - selectQuery.bindValue(":limit", 500); //TODO, load this value from settings - break; + beginResetModel(); - default: - QLOG_ERROR() << "not implemented"; - break; - } + qDeleteAll(_data); - selectQuery.exec(); + _data.clear(); - QLOG_DEBUG() << selectQuery.lastError() << "--"; + _data.append(*data); - setupModelData(selectQuery); - connectionName = db.connectionName(); - } - QSqlDatabase::removeDatabase(connectionName); endResetModel(); emit searchNumResults(_data.length()); + + delete data; } QString ComicModel::getComicPath(QModelIndex mi) @@ -811,6 +777,24 @@ QVector ComicModel::setComicsRead(QList l return getReadList(); } + +void ComicModel::setComicsManga(QList list, bool isManga) +{ + QString connectionName = ""; + { + QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath); + db.transaction(); + foreach (QModelIndex mi, list) { + ComicDB c = DBHelper::loadComic(_data.value(mi.row())->data(ComicModel::Id).toULongLong(), db); + c.info.manga = isManga; + DBHelper::update(&(c.info), db); + } + db.commit(); + connectionName = db.connectionName(); + } + QSqlDatabase::removeDatabase(connectionName); +} + qint64 ComicModel::asignNumbers(QList list, int startingNumber) { qint64 idFirst; @@ -1003,6 +987,36 @@ void ComicModel::deleteComicsFromFavorites(const QList &comicsList) deleteComicsFromModel(comicsList); } +void ComicModel::deleteComicsFromReading(const QList &comicsList) +{ + QList comics = getComics(comicsList); + QString connectionName = ""; + { + QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath); + + DBHelper::deleteComicsFromReading(comics, db); + connectionName = db.connectionName(); + } + QSqlDatabase::removeDatabase(connectionName); + + if (mode == Reading) + deleteComicsFromModel(comicsList); +} + +void ComicModel::deleteComicsFromSpecialList(const QList &comicsList, qulonglong specialListId) +{ + auto type = (ReadingListModel::TypeSpecialList)specialListId; + + switch (type) { + case ReadingListModel::TypeSpecialList::Reading: + deleteComicsFromReading(comicsList); + break; + case ReadingListModel::TypeSpecialList::Favorites: + deleteComicsFromFavorites(comicsList); + break; + } +} + void ComicModel::deleteComicsFromLabel(const QList &comicsList, qulonglong labelId) { QList comics = getComics(comicsList); diff --git a/YACReaderLibrary/db/comic_model.h b/YACReaderLibrary/db/comic_model.h index 263eaa43c..cbe49d450 100644 --- a/YACReaderLibrary/db/comic_model.h +++ b/YACReaderLibrary/db/comic_model.h @@ -16,7 +16,6 @@ class ComicItem; using namespace YACReader; -//! [0] class ComicModel : public QAbstractItemModel { Q_OBJECT @@ -65,8 +64,8 @@ class ComicModel : public QAbstractItemModel }; public: - ComicModel(QObject *parent = 0); - ComicModel(QSqlQuery &sqlquery, QObject *parent = 0); + explicit ComicModel(QObject *parent = nullptr); + explicit ComicModel(QSqlQuery &sqlquery, QObject *parent = nullptr); ~ComicModel() override; QVariant data(const QModelIndex &index, int role) const override; @@ -76,21 +75,19 @@ class ComicModel : public QAbstractItemModel QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &index) const override; - int rowCount(const QModelIndex &parent = QModelIndex()) const; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const override; bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override; bool canBeResorted(); - QMimeData *mimeData(const QModelIndexList &indexes) const; - QStringList mimeTypes() const; + QMimeData *mimeData(const QModelIndexList &indexes) const override; + QStringList mimeTypes() const override; void setupFolderModelData(unsigned long long int parentFolder, const QString &databasePath); void setupLabelModelData(unsigned long long int parentLabel, const QString &databasePath); void setupReadingListModelData(unsigned long long int parentReadingList, const QString &databasePath); void setupFavoritesModelData(const QString &databasePath); void setupReadingModelData(const QString &databasePath); - //configures the model for showing the comics matching the filter criteria. - void setupModelData(const SearchModifiers modifier, const QString &filter, const QString &databasePath); //Métodos de conveniencia QStringList getPaths(const QString &_source); @@ -108,6 +105,7 @@ class ComicModel : public QAbstractItemModel //setComicInfoForAllComics(); --> inserta la información común a todos los cómics de una sola vez. //setComicInfoForSelectedComis(QList list); -->inserta la información común para los comics seleccionados QVector setComicsRead(QList list, YACReaderComicReadStatus read); + void setComicsManga(QList list, bool isManga); qint64 asignNumbers(QList list, int startingNumber); //void remove(ComicDB * comic, int row); void removeInTransaction(int row); @@ -121,6 +119,8 @@ class ComicModel : public QAbstractItemModel void addComicsToReadingList(const QList &comicsList, qulonglong readingListId); void deleteComicsFromFavorites(const QList &comicsList); + void deleteComicsFromReading(const QList &comicsList); + void deleteComicsFromSpecialList(const QList &comicsList, qulonglong specialListId); void deleteComicsFromLabel(const QList &comicsList, qulonglong labelId); void deleteComicsFromReadingList(const QList &comicsList, qulonglong readingListId); @@ -142,6 +142,8 @@ public slots: void addComicsToLabel(const QList &comicIds, qulonglong labelId); void addComicsToReadingList(const QList &comicIds, qulonglong readingListId); + void setModelData(QList *data, const QString &databasePath); + protected: private: void setupModelData(QSqlQuery &sqlquery); @@ -164,6 +166,5 @@ public slots: void resortedIndexes(QList); void newSelectedIndex(const QModelIndex &); }; -//! [0] #endif diff --git a/YACReaderLibrary/db/comic_query_result_processor.cpp b/YACReaderLibrary/db/comic_query_result_processor.cpp new file mode 100644 index 000000000..d00ddebbe --- /dev/null +++ b/YACReaderLibrary/db/comic_query_result_processor.cpp @@ -0,0 +1,112 @@ +#include "comic_query_result_processor.h" + +#include "comic_item.h" +#include "comic_model.h" +#include "data_base_management.h" +#include "qnaturalsorting.h" +#include "db_helper.h" +#include "query_parser.h" + +#include "QsLog.h" + +QString getLastExecutedQuery(const QSqlQuery &query) +{ + QString str = query.lastQuery(); + QMapIterator it(query.boundValues()); + while (it.hasNext()) { + it.next(); + str.replace(it.key(), it.value().toString()); + } + return str; +} + +YACReader::ComicQueryResultProcessor::ComicQueryResultProcessor() + : querySearchQueue(1) +{ +} + +void YACReader::ComicQueryResultProcessor::createModelData(const YACReader::SearchModifiers modifier, const QString &filter, const QString &databasePath) +{ + querySearchQueue.cancellPending(); + + querySearchQueue.enqueue([=] { + QString connectionName = ""; + { + QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath); + QSqlQuery selectQuery(db); + + std::string queryString("SELECT ci.number,ci.title,c.fileName,ci.numPages,c.id,c.parentId,c.path,ci.hash,ci.read,ci.isBis,ci.currentPage,ci.rating,ci.hasBeenOpened " + "FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) LEFT JOIN folder f ON (f.id == c.parentId) WHERE "); + + try { + QueryParser parser; + auto result = parser.parse(filter.toStdString()); + result.buildSqlString(queryString); + + switch (modifier) { + case YACReader::NoModifiers: + queryString += " LIMIT :limit"; + break; + + case YACReader::OnlyRead: + queryString += " AND ci.read = 1 LIMIT :limit"; + break; + + case YACReader::OnlyUnread: + queryString += " AND ci.read = 0 LIMIT :limit"; + break; + + default: + queryString += " LIMIT :limit"; + QLOG_ERROR() << "not implemented"; + break; + } + selectQuery.prepare(queryString.c_str()); + selectQuery.bindValue(":limit", 500); //TODO, load this value from settings + result.bindValues(selectQuery); + + selectQuery.exec(); + + auto data = modelData(selectQuery); + + emit newData(data, databasePath); + } catch (const std::exception &e) { + //Do nothing, uncomplete search string will end here and it is part of how the QueryParser works + //I don't like the idea of using exceptions for this though + } + + connectionName = db.connectionName(); + } + QSqlDatabase::removeDatabase(connectionName); + }); +} + +QList *YACReader::ComicQueryResultProcessor::modelData(QSqlQuery &sqlquery) +{ + auto list = new QList(); + + int numColumns = sqlquery.record().count(); + + while (sqlquery.next()) { + QList data; + + for (int i = 0; i < numColumns; i++) + data << sqlquery.value(i); + + list->append(new ComicItem(data)); + } + + std::sort(list->begin(), list->end(), [](const ComicItem *c1, const ComicItem *c2) { + if (c1->data(ComicModel::Number).isNull() && c2->data(ComicModel::Number).isNull()) { + return naturalSortLessThanCI(c1->data(ComicModel::FileName).toString(), c2->data(ComicModel::FileName).toString()); + } else { + if (c1->data(ComicModel::Number).isNull() == false && c2->data(ComicModel::Number).isNull() == false) { + return c1->data(ComicModel::Number).toInt() < c2->data(ComicModel::Number).toInt(); + } else { + return c2->data(ComicModel::Number).isNull(); + } + } + }); + + return list; +} diff --git a/YACReaderLibrary/db/comic_query_result_processor.h b/YACReaderLibrary/db/comic_query_result_processor.h new file mode 100644 index 000000000..09b16cb08 --- /dev/null +++ b/YACReaderLibrary/db/comic_query_result_processor.h @@ -0,0 +1,32 @@ +#ifndef COMIC_QUERY_RESULT_PROCESSOR_H +#define COMIC_QUERY_RESULT_PROCESSOR_H + +#include +#include + +#include "yacreader_global.h" +#include "concurrent_queue.h" + +class ComicItem; + +namespace YACReader { + +class ComicQueryResultProcessor : public QObject +{ + Q_OBJECT +public: + ComicQueryResultProcessor(); + +public slots: + void createModelData(const SearchModifiers modifier, const QString &filter, const QString &databasePath); +signals: + void newData(QList *, const QString &); + +private: + ConcurrentQueue querySearchQueue; + + static QList *modelData(QSqlQuery &sqlquery); +}; +}; + +#endif // COMIC_QUERY_RESULT_PROCESSOR_H diff --git a/YACReaderLibrary/db/data_base_management.cpp b/YACReaderLibrary/db/data_base_management.cpp index eb7606dee..93c01af23 100644 --- a/YACReaderLibrary/db/data_base_management.cpp +++ b/YACReaderLibrary/db/data_base_management.cpp @@ -181,7 +181,9 @@ bool DataBaseManagement::createTables(QSqlDatabase &database) //new 9.5 fields "lastTimeOpened INTEGER," "coverSizeRatio REAL," - "originalCoverSize STRING" //h/w + "originalCoverSize STRING," //h/w + //new 9.8 fields + "manga BOOLEAN DEFAULT 0" ")"); success = success && queryComicInfo.exec(); @@ -201,6 +203,8 @@ bool DataBaseManagement::createTables(QSqlDatabase &database) "numChildren INTEGER," "firstChildHash TEXT," "customImage TEXT," + //new 9.8 fields + "manga BOOLEAN DEFAULT 0," "FOREIGN KEY(parentId) REFERENCES folder(id) ON DELETE CASCADE)"); success = success && queryFolder.exec(); @@ -264,6 +268,7 @@ bool DataBaseManagement::createV8Tables(QSqlDatabase &database) "name TEXT NOT NULL, " "finished BOOLEAN DEFAULT 0, " "completed BOOLEAN DEFAULT 1, " + "manga BOOLEAN DEFAULT 0, " "FOREIGN KEY(parentId) REFERENCES reading_list(id) ON DELETE CASCADE)"); QSqlQuery queryIndexReadingList(database); @@ -402,6 +407,7 @@ bool DataBaseManagement::importComicsInfo(QString source, QString dest) "format = :format," "color = :color," "ageRating = :ageRating," + "manga = :manga" "synopsis = :synopsis," "characters = :characters," @@ -478,6 +484,7 @@ bool DataBaseManagement::importComicsInfo(QString source, QString dest) ":format," ":color," ":ageRating," + ":manga," ":synopsis," ":characters," @@ -580,6 +587,7 @@ void DataBaseManagement::bindValuesFromRecord(const QSqlRecord &record, QSqlQuer bindString("format", record, query); bindInt("color", record, query); bindString("ageRating", record, query); + bindInt("manga", record, query); bindString("synopsis", record, query); bindString("characters", record, query); @@ -707,6 +715,7 @@ bool DataBaseManagement::updateToCurrentVersion(const QString &path) bool pre7_1 = false; bool pre8 = false; bool pre9_5 = false; + bool pre9_8 = false; QString fullPath = path + "/library.ydb"; @@ -718,6 +727,8 @@ bool DataBaseManagement::updateToCurrentVersion(const QString &path) pre8 = true; if (compareVersions(DataBaseManagement::checkValidDB(fullPath), "9.5.0") < 0) pre9_5 = true; + if (compareVersions(DataBaseManagement::checkValidDB(fullPath), "9.8.0") < 0) + pre9_8 = true; QString connectionName = ""; bool returnValue = false; @@ -828,6 +839,21 @@ bool DataBaseManagement::updateToCurrentVersion(const QString &path) db.commit(); } } + + if (pre9_8) { + { //comic_info + QStringList columnDefs; + columnDefs << "manga BOOLEAN DEFAULT 0"; + bool successAddingColumns = addColumns("comic_info", columnDefs, db); + returnValue = returnValue && successAddingColumns; + } + { //folder + QStringList columnDefs; + columnDefs << "manga BOOLEAN DEFAULT 0"; + bool successAddingColumns = addColumns("folder", columnDefs, db); + returnValue = returnValue && successAddingColumns; + } + } } connectionName = db.connectionName(); } diff --git a/YACReaderLibrary/db/folder_model.cpp b/YACReaderLibrary/db/folder_model.cpp index 640462d7a..35271125a 100644 --- a/YACReaderLibrary/db/folder_model.cpp +++ b/YACReaderLibrary/db/folder_model.cpp @@ -1,60 +1,17 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "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 Nokia Corporation and its Subsidiary(-ies) 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 -** OWNER 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." -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/* - treemodel.cpp - - Provides a simple tree model to show how to create and use hierarchical - models. -*/ - -#include +#include "folder_model.h" #include "folder_item.h" -#include "folder_model.h" #include "data_base_management.h" #include "folder.h" #include "db_helper.h" #include "qnaturalsorting.h" #include "yacreader_global_gui.h" #include "QsLog.h" +#include "query_parser.h" + +#include + +#include #ifdef Q_OS_MAC #include @@ -103,7 +60,6 @@ FolderModel::FolderModel(QObject *parent) connect(this, SIGNAL(reset()), this, SIGNAL(modelReset())); } -//! [0] FolderModel::FolderModel(QSqlQuery &sqlquery, QObject *parent) : QAbstractItemModel(parent), rootItem(0) { @@ -116,17 +72,13 @@ FolderModel::FolderModel(QSqlQuery &sqlquery, QObject *parent) setupModelData(sqlquery, rootItem); //sqlquery.finish(); } -//! [0] -//! [1] FolderModel::~FolderModel() { if (rootItem != 0) delete rootItem; } -//! [1] -//! [2] int FolderModel::columnCount(const QModelIndex &parent) const { if (parent.isValid()) @@ -134,9 +86,7 @@ int FolderModel::columnCount(const QModelIndex &parent) const else return rootItem->columnCount(); } -//! [2] -//! [3] QVariant FolderModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) @@ -179,6 +129,9 @@ QVariant FolderModel::data(const QModelIndex &index, int role) const if (role == FolderModel::FinishedRole) return item->data(FolderModel::Finished); + if (role == FolderModel::MangaRole) + return item->data(FolderModel::Manga); + if (role == FolderModel::IdRole) return item->id; @@ -187,19 +140,15 @@ QVariant FolderModel::data(const QModelIndex &index, int role) const return item->data(index.column()); } -//! [3] -//! [4] Qt::ItemFlags FolderModel::flags(const QModelIndex &index) const { if (!index.isValid()) - return 0; + return {}; return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled | Qt::ItemIsDragEnabled; } -//! [4] -//! [5] QVariant FolderModel::headerData(int section, Qt::Orientation orientation, int role) const { @@ -208,9 +157,7 @@ QVariant FolderModel::headerData(int section, Qt::Orientation orientation, return QVariant(); } -//! [5] -//! [6] QModelIndex FolderModel::index(int row, int column, const QModelIndex &parent) const { @@ -230,9 +177,7 @@ QModelIndex FolderModel::index(int row, int column, const QModelIndex &parent) else return QModelIndex(); } -//! [6] -//! [7] QModelIndex FolderModel::parent(const QModelIndex &index) const { if (!index.isValid()) @@ -246,19 +191,7 @@ QModelIndex FolderModel::parent(const QModelIndex &index) const return createIndex(parentItem->row(), 0, parentItem); } -//! [7] -/* -QModelIndex FolderModel::indexFromItem(FolderItem * item,int column) -{ - //if(item->parent() != 0) - // return index(item->row(),column,parent(indexFromItem(item->parent(),column-1))); - //else - // return index(item->row(),0,QModelIndex()); - return createIndex(item->row(), column, item); -}*/ - -//! [8] int FolderModel::rowCount(const QModelIndex &parent) const { FolderItem *parentItem; @@ -272,7 +205,6 @@ int FolderModel::rowCount(const QModelIndex &parent) const return parentItem->childCount(); } -//! [8] void FolderModel::setupModelData(QString path) { @@ -319,6 +251,7 @@ void FolderModel::setupModelData(QSqlQuery &sqlquery, FolderItem *parent) int path = record.indexOf("path"); int finished = record.indexOf("finished"); int completed = record.indexOf("completed"); + int manga = record.indexOf("manga"); int id = record.indexOf("id"); int parentId = record.indexOf("parentId"); @@ -329,6 +262,7 @@ void FolderModel::setupModelData(QSqlQuery &sqlquery, FolderItem *parent) data << sqlquery.value(path).toString(); data << sqlquery.value(finished).toBool(); data << sqlquery.value(completed).toBool(); + data << sqlquery.value(manga).toBool(); auto item = new FolderItem(data); item->id = sqlquery.value(id).toULongLong(); @@ -351,6 +285,7 @@ void FolderModel::updateFolderModelData(QSqlQuery &sqlquery, FolderItem *parent) int path = record.indexOf("path"); int finished = record.indexOf("finished"); int completed = record.indexOf("completed"); + int manga = record.indexOf("manga"); int id = record.indexOf("id"); int parentId = record.indexOf("parentId"); @@ -361,6 +296,7 @@ void FolderModel::updateFolderModelData(QSqlQuery &sqlquery, FolderItem *parent) data << sqlquery.value(path).toString(); data << sqlquery.value(finished).toBool(); data << sqlquery.value(completed).toBool(); + data << sqlquery.value(manga).toBool(); auto item = new FolderItem(data); item->id = sqlquery.value(id).toULongLong(); @@ -385,27 +321,6 @@ QString FolderModel::getFolderPath(const QModelIndex &folder) return static_cast(folder.internalPointer())->data(FolderModel::Path).toString(); } -/* -void FolderModel::resetFilter() -{ - beginResetModel(); - filter = ""; - includeComics = false; - //TODO hay que liberar la memoria reservada para el filtrado - //items.clear(); - filteredItems.clear(); - FolderItem * root = rootItem; - rootItem = rootBeforeFilter; //TODO si no se aplica el filtro previamente, esto invalidar�a en modelo - if(root !=0) - delete root; - - rootBeforeFilter = 0; - filterEnabled = false; - endResetModel(); - - -}*/ - void FolderModel::updateFolderCompletedStatus(const QModelIndexList &list, bool status) { QString connectionName = ""; @@ -450,6 +365,36 @@ void FolderModel::updateFolderFinishedStatus(const QModelIndexList &list, bool s emit dataChanged(index(list.first().row(), FolderModel::Name), index(list.last().row(), FolderModel::Completed)); } +void FolderModel::updateFolderManga(const QModelIndexList &list, bool manga) +{ + QString connectionName = ""; + { + QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath); + db.transaction(); + foreach (QModelIndex mi, list) { + auto item = static_cast(mi.internalPointer()); + + std::function setManga; + setManga = [&setManga](FolderItem *item, bool manga) -> void { + item->setData(FolderModel::Manga, manga); + + for (auto child : item->children()) { + setManga(child, manga); + } + }; + + setManga(item, manga); + + DBHelper::updateFolderTreeManga(item->id, db, manga); + } + db.commit(); + connectionName = db.connectionName(); + } + QSqlDatabase::removeDatabase(connectionName); + + emit dataChanged(index(list.first().row(), FolderModel::Name), index(list.last().row(), FolderModel::Manga)); +} + QStringList FolderModel::getSubfoldersNames(const QModelIndex &mi) { QStringList result; @@ -470,8 +415,7 @@ QStringList FolderModel::getSubfoldersNames(const QModelIndex &mi) } QSqlDatabase::removeDatabase(connectionName); - //TODO sort result)) - qSort(result.begin(), result.end(), naturalSortLessThanCI); + std::sort(result.begin(), result.end(), naturalSortLessThanCI); return result; } @@ -555,7 +499,8 @@ QModelIndex FolderModel::addFolderAtParent(const QString &folderName, const QMod Folder newFolder; newFolder.name = folderName; newFolder.parentId = parentItem->id; - newFolder.path = parentItem->data(1).toString() + "/" + folderName; + newFolder.path = parentItem->data(Columns::Path).toString() + "/" + folderName; + newFolder.setManga(parentItem->data(Columns::Manga).toBool()); QString connectionName = ""; { QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath); @@ -572,6 +517,7 @@ QModelIndex FolderModel::addFolderAtParent(const QString &folderName, const QMod data << newFolder.path; data << false; //finished data << true; //completed + data << newFolder.isManga(); auto item = new FolderItem(data); item->id = newFolder.id; @@ -625,7 +571,7 @@ void FolderModel::updateFolderChildrenInfo(qulonglong folderId) //PROXY FolderModelProxy::FolderModelProxy(QObject *parent) - : QSortFilterProxyModel(parent), rootItem(0), includeComics(true), filter(""), filterEnabled(false) + : QSortFilterProxyModel(parent), rootItem(0), filterEnabled(false) { } @@ -648,85 +594,29 @@ bool FolderModelProxy::filterAcceptsRow(int source_row, const QModelIndex &sourc return filteredItems.contains(item->id); } -void FolderModelProxy::setFilter(const YACReader::SearchModifiers modifier, QString filter, bool includeComics) +void FolderModelProxy::setFilterData(QMap *filteredItems, FolderItem *root) { clear(); - this->filter = filter; - this->includeComics = includeComics; - this->modifier = modifier; filterEnabled = true; - setupFilteredModelData(); -} -void FolderModelProxy::setupFilteredModelData() -{ beginResetModel(); - //TODO hay que liberar memoria de anteriores filtrados - - //inicializar el nodo ra�z - if (rootItem != 0) delete rootItem; //TODO comprobar que se libera bien la memoria - rootItem = 0; - - //inicializar el nodo ra�z - QList rootData; - rootData << "root"; - rootItem = new FolderItem(rootData); - rootItem->id = ROOT; - rootItem->parentItem = 0; - - auto model = static_cast(sourceModel()); + rootItem = root; - QString connectionName = ""; - { - QSqlDatabase db = DataBaseManagement::loadDatabase(model->_databasePath); - - QSqlQuery selectQuery(db); //TODO check - if (!includeComics) { - selectQuery.prepare("select * from folder where id <> 1 and upper(name) like upper(:filter) order by parentId,name "); - selectQuery.bindValue(":filter", "%%" + filter + "%%"); - } else { - switch (modifier) { - case YACReader::NoModifiers: - selectQuery.prepare("SELECT DISTINCT f.id, f.parentId, f.name, f.path, f.finished, f.completed " - "FROM folder f LEFT JOIN comic c ON (f.id = c.parentId) " - "WHERE f.id <> 1 AND ((UPPER(c.fileName) like UPPER(:filter)) OR (UPPER(f.name) like UPPER(:filter2))) ORDER BY f.parentId,f.name"); - selectQuery.bindValue(":filter", "%%" + filter + "%%"); - selectQuery.bindValue(":filter2", "%%" + filter + "%%"); - break; - - case YACReader::OnlyRead: - selectQuery.prepare("SELECT DISTINCT f.id, f.parentId, f.name, f.path, f.finished, f.completed " - "FROM folder f LEFT JOIN (comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id)) ON (f.id = c.parentId) " - "WHERE f.id <> 1 AND ((UPPER(c.fileName) like UPPER(:filter)) OR (UPPER(f.name) like UPPER(:filter2))) AND ci.read = 1 ORDER BY f.parentId,f.name;"); - selectQuery.bindValue(":filter", "%%" + filter + "%%"); - selectQuery.bindValue(":filter2", "%%" + filter + "%%"); - break; - - case YACReader::OnlyUnread: - selectQuery.prepare("SELECT DISTINCT f.id, f.parentId, f.name, f.path, f.finished, f.completed " - "FROM folder f LEFT JOIN (comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id)) ON (f.id = c.parentId) " - "WHERE f.id <> 1 AND ((UPPER(c.fileName) like UPPER(:filter)) OR (UPPER(f.name) like UPPER(:filter2))) AND ci.read = 0 ORDER BY f.parentId,f.name;"); - selectQuery.bindValue(":filter", "%%" + filter + "%%"); - selectQuery.bindValue(":filter2", "%%" + filter + "%%"); - break; - - default: - QLOG_ERROR() << "not implemented"; - break; - } - } - selectQuery.exec(); - - setupFilteredModelData(selectQuery, rootItem); - connectionName = db.connectionName(); - } - QSqlDatabase::removeDatabase(connectionName); +#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) + QMap::iterator i; + for (i = filteredItems->begin(); i != filteredItems->end(); ++i) + this->filteredItems.insert(i.key(), i.value()); +#else + this->filteredItems.insert(*filteredItems); +#endif endResetModel(); + + delete filteredItems; } void FolderModelProxy::clear() @@ -735,90 +625,5 @@ void FolderModelProxy::clear() filteredItems.clear(); - QSortFilterProxyModel::clear(); -} - -void FolderModelProxy::setupFilteredModelData(QSqlQuery &sqlquery, FolderItem *parent) -{ - auto model = static_cast(sourceModel()); - - //64 bits para la primary key, es decir la misma precisi�n que soporta sqlit 2^64 - filteredItems.clear(); - - //se a�ade el nodo 0 al modelo que representa el arbol de elementos que cumplen con el filtro - filteredItems.insert(parent->id, parent); - - QSqlRecord record = sqlquery.record(); - - int name = record.indexOf("name"); - int path = record.indexOf("path"); - int finished = record.indexOf("finished"); - int completed = record.indexOf("completed"); - int parentIdIndex = record.indexOf("parentId"); - - while (sqlquery.next()) { //se procesan todos los folders que cumplen con el filtro - //datos de la base de datos - QList data; - - data << sqlquery.value(name).toString(); - data << sqlquery.value(path).toString(); - data << sqlquery.value(finished).toBool(); - data << sqlquery.value(completed).toBool(); - - auto item = new FolderItem(data); - item->id = sqlquery.value(0).toULongLong(); - - //id del padre - quint64 parentId = sqlquery.value(parentIdIndex).toULongLong(); - - //se a�ade el item al map, de forma que se pueda encontrar como padre en siguientes iteraciones - if (!filteredItems.contains(item->id)) - filteredItems.insert(item->id, item); - - //es necesario conocer las coordenadas de origen para poder realizar scroll autom�tico en la vista - item->originalItem = model->items.value(item->id); - - //si el padre ya existe en el modelo, el item se a�ade como hijo - if (filteredItems.contains(parentId)) - filteredItems.value(parentId)->appendChild(item); - else //si el padre a�n no se ha a�adido, hay que a�adirlo a �l y todos los padres hasta el nodo ra�z - { - //comprobamos con esta variable si el �ltimo de los padres (antes del nodo ra�z) ya exist�a en el modelo - bool parentPreviousInserted = false; - - //mientras no se alcance el nodo ra�z se procesan todos los padres (de abajo a arriba) - while (parentId != ROOT) { - //el padre no estaba en el modelo filtrado, as� que se rescata del modelo original - FolderItem *parentItem = model->items.value(parentId); - //se debe crear un nuevo nodo (para no compartir los hijos con el nodo original) - FolderItem *newparentItem = new FolderItem(parentItem->getData()); //padre que se a�adir� a la estructura de directorios filtrados - newparentItem->id = parentId; - - newparentItem->originalItem = parentItem; - - //si el modelo contiene al padre, se a�ade el item actual como hijo - if (filteredItems.contains(parentId)) { - filteredItems.value(parentId)->appendChild(item); - parentPreviousInserted = true; - } - //sino se registra el nodo para poder encontrarlo con posterioridad y se a�ade el item actual como hijo - else { - newparentItem->appendChild(item); - filteredItems.insert(newparentItem->id, newparentItem); - parentPreviousInserted = false; - } - - //variables de control del bucle, se avanza hacia el nodo padre - item = newparentItem; - parentId = parentItem->parentItem->id; - } - - //si el nodo es hijo de 1 y no hab�a sido previamente insertado como hijo, se a�ade como tal - if (!parentPreviousInserted) { - filteredItems.value(ROOT)->appendChild(item); - } else { - delete item; - } - } - } + QSortFilterProxyModel::invalidate(); } diff --git a/YACReaderLibrary/db/folder_model.h b/YACReaderLibrary/db/folder_model.h index ecac40ee2..8eb19af17 100644 --- a/YACReaderLibrary/db/folder_model.h +++ b/YACReaderLibrary/db/folder_model.h @@ -1,43 +1,3 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "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 Nokia Corporation and its Subsidiary(-ies) 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 -** OWNER 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." -** $QT_END_LICENSE$ -** -****************************************************************************/ - #ifndef TREEMODEL_H #define TREEMODEL_H @@ -49,6 +9,7 @@ #include #include "yacreader_global.h" +#include "folder_query_result_processor.h" class FolderItem; @@ -56,12 +17,10 @@ class FolderModelProxy : public QSortFilterProxyModel { Q_OBJECT public: - explicit FolderModelProxy(QObject *parent = 0); + explicit FolderModelProxy(QObject *parent = nullptr); ~FolderModelProxy() override; - void setFilter(const YACReader::SearchModifiers modifier, QString filter, bool includeComics); - void setupFilteredModelData(QSqlQuery &sqlquery, FolderItem *parent); - void setupFilteredModelData(); + void setFilterData(QMap *filteredItems, FolderItem *root); void clear(); bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; @@ -70,8 +29,6 @@ class FolderModelProxy : public QSortFilterProxyModel FolderItem *rootItem; QMap filteredItems; //relación entre folders - bool includeComics; - QString filter; bool filterEnabled; YACReader::SearchModifiers modifier; @@ -79,14 +36,14 @@ class FolderModelProxy : public QSortFilterProxyModel class FolderModel : public QAbstractItemModel { - Q_OBJECT friend class FolderModelProxy; + friend class YACReader::FolderQueryResultProcessor; public: - FolderModel(QObject *parent = 0); - FolderModel(QSqlQuery &sqlquery, QObject *parent = 0); + explicit FolderModel(QObject *parent = nullptr); + explicit FolderModel(QSqlQuery &sqlquery, QObject *parent = nullptr); ~FolderModel() override; //QAbstractItemModel methods @@ -110,6 +67,7 @@ class FolderModel : public QAbstractItemModel void updateFolderCompletedStatus(const QModelIndexList &list, bool status); void updateFolderFinishedStatus(const QModelIndexList &list, bool status); + void updateFolderManga(const QModelIndexList &list, bool manga); QStringList getSubfoldersNames(const QModelIndex &mi); @@ -121,13 +79,15 @@ class FolderModel : public QAbstractItemModel Name = 0, Path = 1, Finished = 2, - Completed = 3 + Completed = 3, + Manga = 4 }; //id INTEGER PRIMARY KEY, parentId INTEGER NOT NULL, name TEXT NOT NULL, path TEXT NOT NULL enum Roles { FinishedRole = Qt::UserRole + 1, CompletedRole, - IdRole + IdRole, + MangaRole }; public slots: @@ -147,6 +107,5 @@ public slots: void beforeReset(); void reset(); }; -//! [0] #endif diff --git a/YACReaderLibrary/db/folder_query_result_processor.cpp b/YACReaderLibrary/db/folder_query_result_processor.cpp new file mode 100644 index 000000000..3cbde4547 --- /dev/null +++ b/YACReaderLibrary/db/folder_query_result_processor.cpp @@ -0,0 +1,178 @@ +#include "folder_query_result_processor.h" + +#include "folder_item.h" +#include "qnaturalsorting.h" +#include "yacreader_global_gui.h" +#include "query_parser.h" +#include "folder_model.h" +#include "data_base_management.h" + +#include "QsLog.h" + +#include +#include + +//Copy/pasted from "folder_model.cpp" +#define ROOT 1 + +YACReader::FolderQueryResultProcessor::FolderQueryResultProcessor(FolderModel *model) + : querySearchQueue(1), model(model) +{ +} + +void YACReader::FolderQueryResultProcessor::createModelData(const YACReader::SearchModifiers modifier, const QString &filter, bool includeComics) +{ + querySearchQueue.cancellPending(); + + querySearchQueue.enqueue([=] { + QString connectionName = ""; + { + QSqlDatabase db = DataBaseManagement::loadDatabase(model->getDatabase()); + + QSqlQuery selectQuery(db); //TODO check + if (!includeComics) { + selectQuery.prepare("select * from folder where id <> 1 and upper(name) like upper(:filter) order by parentId,name "); + selectQuery.bindValue(":filter", "%%" + filter + "%%"); + } else { + std::string queryString("SELECT DISTINCT f.id, f.parentId, f.name, f.path, f.finished, f.completed " + "FROM folder f LEFT JOIN comic c ON (f.id = c.parentId) " + "INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) WHERE "); + + try { + QueryParser parser; + auto result = parser.parse(filter.toStdString()); + result.buildSqlString(queryString); + + switch (modifier) { + case YACReader::NoModifiers: + queryString += " AND f.id <> 1 ORDER BY f.parentId,f.name"; + break; + + case YACReader::OnlyRead: + queryString += " AND f.id <> 1 AND ci.read = 1 ORDER BY f.parentId,f.name"; + break; + + case YACReader::OnlyUnread: + queryString += " AND f.id <> 1 AND ci.read = 0 ORDER BY f.parentId,f.name"; + break; + + default: + queryString += " AND f.id <> 1 ORDER BY f.parentId,f.name"; + QLOG_ERROR() << "not implemented"; + break; + } + + selectQuery.prepare(queryString.c_str()); + result.bindValues(selectQuery); + + selectQuery.exec(); + QLOG_DEBUG() << selectQuery.lastError() << "--"; + + setupFilteredModelData(selectQuery); + } catch (const std::exception &e) { + //Do nothing, uncomplete search string will end here and it is part of how the QueryParser works + //I don't like the idea of using exceptions for this though + } + } + + connectionName = db.connectionName(); + } + + QSqlDatabase::removeDatabase(connectionName); + }); +} + +void YACReader::FolderQueryResultProcessor::setupFilteredModelData(QSqlQuery &sqlquery) +{ + FolderItem *rootItem = 0; + + //inicializar el nodo ra�z + QList rootData; + rootData << "root"; + rootItem = new FolderItem(rootData); + rootItem->id = ROOT; + rootItem->parentItem = 0; + + FolderItem *parent = rootItem; + + QMap *filteredItems = new QMap(); + + //add tree root node + filteredItems->insert(parent->id, parent); + + QSqlRecord record = sqlquery.record(); + + int name = record.indexOf("name"); + int path = record.indexOf("path"); + int finished = record.indexOf("finished"); + int completed = record.indexOf("completed"); + int parentIdIndex = record.indexOf("parentId"); + + while (sqlquery.next()) { //se procesan todos los folders que cumplen con el filtro + //datos de la base de datos + QList data; + + data << sqlquery.value(name).toString(); + data << sqlquery.value(path).toString(); + data << sqlquery.value(finished).toBool(); + data << sqlquery.value(completed).toBool(); + + auto item = new FolderItem(data); + item->id = sqlquery.value(0).toULongLong(); + + //id del padre + quint64 parentId = sqlquery.value(parentIdIndex).toULongLong(); + + //se a�ade el item al map, de forma que se pueda encontrar como padre en siguientes iteraciones + if (!filteredItems->contains(item->id)) + filteredItems->insert(item->id, item); + + //es necesario conocer las coordenadas de origen para poder realizar scroll autom�tico en la vista + item->originalItem = model->items.value(item->id); + + //si el padre ya existe en el modelo, el item se a�ade como hijo + if (filteredItems->contains(parentId)) + filteredItems->value(parentId)->appendChild(item); + else //si el padre a�n no se ha a�adido, hay que a�adirlo a �l y todos los padres hasta el nodo ra�z + { + //comprobamos con esta variable si el �ltimo de los padres (antes del nodo ra�z) ya exist�a en el modelo + bool parentPreviousInserted = false; + + //mientras no se alcance el nodo ra�z se procesan todos los padres (de abajo a arriba) + while (parentId != ROOT) { + //el padre no estaba en el modelo filtrado, as� que se rescata del modelo original + FolderItem *parentItem = model->items.value(parentId); + //se debe crear un nuevo nodo (para no compartir los hijos con el nodo original) + FolderItem *newparentItem = new FolderItem(parentItem->getData()); //padre que se a�adir� a la estructura de directorios filtrados + newparentItem->id = parentId; + + newparentItem->originalItem = parentItem; + + //si el modelo contiene al padre, se a�ade el item actual como hijo + if (filteredItems->contains(parentId)) { + filteredItems->value(parentId)->appendChild(item); + parentPreviousInserted = true; + } + //sino se registra el nodo para poder encontrarlo con posterioridad y se a�ade el item actual como hijo + else { + newparentItem->appendChild(item); + filteredItems->insert(newparentItem->id, newparentItem); + parentPreviousInserted = false; + } + + //variables de control del bucle, se avanza hacia el nodo padre + item = newparentItem; + parentId = parentItem->parentItem->id; + } + + //si el nodo es hijo de 1 y no hab�a sido previamente insertado como hijo, se a�ade como tal + if (!parentPreviousInserted) { + filteredItems->value(ROOT)->appendChild(item); + } else { + delete item; + } + } + } + + emit newData(filteredItems, rootItem); +} diff --git a/YACReaderLibrary/db/folder_query_result_processor.h b/YACReaderLibrary/db/folder_query_result_processor.h new file mode 100644 index 000000000..faa590462 --- /dev/null +++ b/YACReaderLibrary/db/folder_query_result_processor.h @@ -0,0 +1,36 @@ +#ifndef FOLDER_QUERY_RESULT_PROCESSOR_H +#define FOLDER_QUERY_RESULT_PROCESSOR_H + +#include + +#include "yacreader_global.h" +#include "concurrent_queue.h" + +class FolderItem; +class FolderModel; +class QSqlQuery; + +namespace YACReader { + +class FolderQueryResultProcessor : public QObject +{ + Q_OBJECT +public: + FolderQueryResultProcessor(FolderModel *model); + +public slots: + void createModelData(const SearchModifiers modifier, const QString &filter, bool includeComics); + +signals: + void newData(QMap *filteredItems, FolderItem *root); + +private: + ConcurrentQueue querySearchQueue; + + FolderModel *model; + + void setupFilteredModelData(QSqlQuery &sqlquery); +}; +}; + +#endif // FOLDER_QUERY_RESULT_PROCESSOR_H diff --git a/YACReaderLibrary/db/query_lexer.cpp b/YACReaderLibrary/db/query_lexer.cpp new file mode 100644 index 000000000..832b49782 --- /dev/null +++ b/YACReaderLibrary/db/query_lexer.cpp @@ -0,0 +1,84 @@ +#include "query_lexer.h" + +QueryLexer::QueryLexer(const std::string &input) + : input(input) +{ +} + +Token QueryLexer::next() +{ + while (isSpace(peek())) { + get(); + } + + switch (peek()) { + case '\0': + return Token(Token::Type::eof); + case '(': + case ')': + return single(Token::Type::opcode); + case '"': + return quotedWord(); + default: + return word(); + } +} + +char QueryLexer::peek() +{ + return input[index]; +} + +char QueryLexer::get() +{ + return input[index++]; +} + +Token QueryLexer::single(Token::Type type) +{ + return Token(type, input.substr(index++, 1)); +} + +Token QueryLexer::word() +{ + auto start = index; + get(); + auto current = peek(); + while (current != '\0' && !isSpace(current) && current != '"' && current != '(' && current != ')') { + get(); + current = peek(); + } + return Token(Token::Type::word, input.substr(start, index - start)); +} + +Token QueryLexer::quotedWord() +{ + auto start = index; + get(); + auto current = peek(); + while (current != '\0' && current != '"') { + get(); + current = peek(); + } + + if (current == '"') { + get(); + return Token(Token::Type::quotedWord, input.substr(start, index - start)); + } + + //This should be a lexical error, but the grammar doesn't support it + return Token(Token::Type::eof); +} + +bool QueryLexer::isSpace(char c) +{ + switch (c) { + case ' ': + case '\t': + case '\r': + case '\n': + return true; + default: + return false; + } +} diff --git a/YACReaderLibrary/db/query_lexer.h b/YACReaderLibrary/db/query_lexer.h new file mode 100644 index 000000000..4cc2b61f1 --- /dev/null +++ b/YACReaderLibrary/db/query_lexer.h @@ -0,0 +1,57 @@ +#ifndef QUERY_LEXER_H +#define QUERY_LEXER_H + +#include + +class Token +{ +public: + enum class Type { + eof, + opcode, + word, + quotedWord, + undefined + }; + + Token(Type type, std::string lexeme = "") + : _type(type), _lexeme(std::move(lexeme)) + { + } + + Type type() const + { + return _type; + } + + std::string lexeme() const + { + return _lexeme; + } + +private: + Type _type {}; + std::string _lexeme {}; +}; + +class QueryLexer +{ +public: + QueryLexer(const std::string &input); + Token next(); + +private: + std::string input; + int index = 0; + + char peek(); + char get(); + + Token single(Token::Type type); + Token word(); + Token quotedWord(); + + bool isSpace(char c); +}; + +#endif // QUERY_LEXER_H diff --git a/YACReaderLibrary/db/query_parser.cpp b/YACReaderLibrary/db/query_parser.cpp new file mode 100644 index 000000000..25cf71aee --- /dev/null +++ b/YACReaderLibrary/db/query_parser.cpp @@ -0,0 +1,247 @@ +#include "query_parser.h" + +#include +#include +#include +#include + +const std::map> QueryParser::fieldNames { + { FieldType::numeric, { "numpages", "number", "count", "arcnumber", "arccount" } }, + { FieldType::text, { "title", "volume", "storyarc", "genere", "writer", "penciller", "inker", "colorist", "letterer", "coverartist", "publisher", "format", "agerating", "synopsis", "characters", "notes" } }, + { FieldType::boolean, { "isbis", "color", "read", "manga" } }, + { FieldType::date, { "date" } }, + { FieldType::filename, { "filename" } }, + { FieldType::folder, { "folder" } }, + { FieldType::booleanFolder, { "completed", "finished" } }, +}; + +int QueryParser::TreeNode::buildSqlString(std::string &sqlString, int bindPosition) const +{ + if (t == "token") { + ++bindPosition; + if (toLower(children[0].t) == "all") { + sqlString += "("; + for (const auto &field : fieldNames.at(FieldType::text)) { + sqlString += "UPPER(ci." + field + ") LIKE UPPER(:bindPosition" + std::to_string(bindPosition) + ") OR "; + } + sqlString += "UPPER(c.filename) LIKE UPPER(:bindPosition" + std::to_string(bindPosition) + ") OR "; + sqlString += "UPPER(f.name) LIKE UPPER(:bindPosition" + std::to_string(bindPosition) + ")) "; + } else if (isIn(fieldType(children[0].t), { FieldType::numeric, FieldType::boolean })) { + sqlString += "ci." + children[0].t + " = :bindPosition" + std::to_string(bindPosition) + " "; + } else if (fieldType(children[0].t) == FieldType::filename) { + sqlString += "(UPPER(c." + children[0].t + ") LIKE UPPER(:bindPosition" + std::to_string(bindPosition) + ")) "; + } else if (fieldType(children[0].t) == FieldType::folder) { + sqlString += "(UPPER(f.name) LIKE UPPER(:bindPosition" + std::to_string(bindPosition) + ")) "; + } else if (fieldType(children[0].t) == FieldType::booleanFolder) { + sqlString += "f." + children[0].t + " = :bindPosition" + std::to_string(bindPosition) + " "; + } else { + sqlString += "(UPPER(ci." + children[0].t + ") LIKE UPPER(:bindPosition" + std::to_string(bindPosition) + ")) "; + } + } else if (t == "not") { + sqlString += "(NOT "; + bindPosition = children[0].buildSqlString(sqlString, bindPosition); + sqlString += ")"; + } else { + sqlString += "("; + bindPosition = children[0].buildSqlString(sqlString, bindPosition); + sqlString += " " + t + " "; + bindPosition = children[1].buildSqlString(sqlString, bindPosition); + sqlString += ")"; + } + + return bindPosition; +} + +int QueryParser::TreeNode::bindValues(QSqlQuery &selectQuery, int bindPosition) const +{ + if (t == "token") { + std::string bind_string(":bindPosition" + std::to_string(++bindPosition)); + if (isIn(fieldType(children[0].t), { FieldType::numeric })) { + selectQuery.bindValue(QString::fromStdString(bind_string), std::stoi(children[1].t)); + } else if (isIn(fieldType(children[0].t), { FieldType::boolean, FieldType::booleanFolder })) { + auto value = toLower(children[1].t); + if (value == "true") { + selectQuery.bindValue(QString::fromStdString(bind_string), 1); + } else if (value == "false") { + selectQuery.bindValue(QString::fromStdString(bind_string), 0); + } else { + selectQuery.bindValue(QString::fromStdString(bind_string), std::stoi(value)); + } + } else { + selectQuery.bindValue(QString::fromStdString(bind_string), QString::fromStdString("%%" + children[1].t + "%%")); + } + } else if (t == "not") { + bindPosition = children[0].bindValues(selectQuery, bindPosition); + } else { + bindPosition = children[0].bindValues(selectQuery, bindPosition); + bindPosition = children[1].bindValues(selectQuery, bindPosition); + } + + return bindPosition; +} + +QueryParser::QueryParser() +{ +} + +QueryParser::TreeNode QueryParser::parse(const std::string &expr) +{ + lexer = QueryLexer(expr); + advance(); + + auto prog = orExpression(); + + if (!isEof()) { + throw std::invalid_argument("Extra characters at end of search"); + } + + return prog; +} + +std::string QueryParser::toLower(const std::string &string) +{ + std::string res(string); + std::transform(res.begin(), res.end(), res.begin(), ::tolower); + return res; +} + +std::string QueryParser::token(bool advance) +{ + if (isEof()) { + return ""; + } + + auto lexeme = currentToken.lexeme(); + + auto res = (tokenType() == Token::Type::quotedWord) ? currentToken.lexeme().substr(1, lexeme.size() - 2) : lexeme; //TODO process quotedWordDiferently? + if (advance) { + this->advance(); + } + return res; +} + +std::string QueryParser::lcaseToken(bool advance) +{ + if (isEof()) { + return ""; + } + + auto lexeme = currentToken.lexeme(); + + auto res = (tokenType() == Token::Type::quotedWord) ? currentToken.lexeme().substr(1, lexeme.size() - 2) : lexeme; + + if (advance) { + this->advance(); + } + return toLower(res); +} + +Token::Type QueryParser::tokenType() +{ + return currentToken.type(); +} + +bool QueryParser::isEof() const +{ + return currentToken.type() == Token::Type::eof; +} + +void QueryParser::advance() +{ + currentToken = lexer.next(); +} + +QueryParser::FieldType QueryParser::fieldType(const std::string &str) +{ + for (const auto &names : fieldNames) { + if (std::find(names.second.begin(), names.second.end(), toLower(str)) != names.second.end()) { + return names.first; + } + } + + return FieldType::unknown; +} + +std::string QueryParser::join(const QStringList &strings, const std::string &delim) +{ + return std::accumulate(strings.begin(), strings.end(), std::string(), + [&delim](const std::string &a, const QString &b) -> std::string { + return a + (a.length() > 0 && b.length() > 0 ? delim : "") + b.toStdString(); + }); +} + +QStringList QueryParser::split(const std::string &string, char delim) +{ + auto words = QString::fromStdString(string).split(delim); + return words; +} + +QueryParser::TreeNode QueryParser::orExpression() +{ + auto lhs = andExpression(); + if (lcaseToken() == "or") { + advance(); + return TreeNode("or", { lhs, orExpression() }); + } + return lhs; +} + +QueryParser::TreeNode QueryParser::andExpression() +{ + auto lhs = notExpression(); + if (lcaseToken() == "and") { + advance(); + return TreeNode("and", { lhs, andExpression() }); + } + + if ((isIn(tokenType(), { Token::Type::word, Token::Type::quotedWord }) || token() == "(") && lcaseToken() != "or") { + return TreeNode("and", { lhs, andExpression() }); + } + + return lhs; +} + +QueryParser::TreeNode QueryParser::notExpression() +{ + if (lcaseToken() == "not") { + advance(); + return TreeNode("not", { notExpression() }); + } + return locationExpression(); +} + +QueryParser::TreeNode QueryParser::locationExpression() +{ + if (tokenType() == Token::Type::opcode && token() == "(") { + advance(); + auto res = orExpression(); + if (tokenType() != Token::Type::opcode || token(true) != ")") { + throw std::invalid_argument("missing )'"); + } + return res; + } + if (!isIn(tokenType(), { Token::Type::word, Token::Type::quotedWord })) { + throw std::invalid_argument("Invalid syntax. Expected a lookup name or a word"); + } + return baseToken(); +} + +QueryParser::TreeNode QueryParser::baseToken() +{ + if (tokenType() == Token::Type::quotedWord) { + return TreeNode("token", { TreeNode("all", {}), TreeNode(token(true), {}) }); + } + + auto words(split(token(true), ':')); + + if (words.size() > 1 && fieldType(words[0].toStdString()) != FieldType::unknown) { + auto loc(toLower(words[0].toStdString())); + words.erase(words.begin()); + if (words.size() == 1 && tokenType() == Token::Type::quotedWord) { + return TreeNode("token", { TreeNode(loc, {}), TreeNode(token(true), {}) }); + } + return TreeNode("token", { TreeNode(loc, {}), TreeNode(join(words, ":"), {}) }); + } + + return TreeNode("token", { TreeNode("all", {}), TreeNode(join(words, ":"), {}) }); +} diff --git a/YACReaderLibrary/db/query_parser.h b/YACReaderLibrary/db/query_parser.h new file mode 100644 index 000000000..4b8f0c4e5 --- /dev/null +++ b/YACReaderLibrary/db/query_parser.h @@ -0,0 +1,100 @@ +#ifndef QUERY_PARSER_H +#define QUERY_PARSER_H + +#include "query_lexer.h" + +#include +#include +#include +#include +#include + +/** + * This class is used to generate an SQL query string from a search expression, + * with a syntax very similar to that used by the Google search engine. + * + * The code herein is based upon the SearchQueryParser python class written by + * Kovid Goyal as part of the Calibre eBook manager (https://calibre-ebook.com) + * + * Grammar: + * prog ::= or_expression + * or_expression ::= and_expression [ 'or' or_expression ] + * and_expression ::= not_expression [ [ 'and' ] and_expression ] + * not_expression ::= [ 'not' ] location_expression + * location_expression ::= base_token | ( '(' or_expression ')' ) + * base_token ::= a sequence of letters and colons, perhaps quoted + * + * Usage Example: + * QSqlQuery selectQuery(db); + * std::string queryString("SELECT ... FROM ... WHERE "); + * + * QueryParser parser; // Create the parser object + * TreeNode result = parser.parse(expr); // Parse the query expression + * + * result.buildSqlString(queryString); // Append the SQL query to a string + * + * selectQuery.prepare(queryString.c_str()); // Convert the string to a query + * result.bindValues(selectQuery); // Populate the SQL query variables + * + * selectQuery.exec(); + */ +class QueryParser +{ +public: + struct TreeNode { + std::string t; + std::vector children; + + explicit TreeNode(std::string t, std::vector children) + : t(t), children(children) + { + } + + int buildSqlString(std::string &sqlString, int bindPosition = 0) const; + int bindValues(QSqlQuery &selectQuery, int bindPosition = 0) const; + }; + + explicit QueryParser(); + TreeNode parse(const std::string &expr); + +private: + static std::string toLower(const std::string &string); + + std::string token(bool advance = false); + std::string lcaseToken(bool advance = false); + Token::Type tokenType(); + bool isEof() const; + void advance(); + + QueryLexer lexer = QueryLexer(""); + Token currentToken = Token(Token::Type::undefined); + + template + static bool isIn(const T &e, const std::list &v) + { + return std::find(v.begin(), v.end(), e) != v.end(); + } + + enum class FieldType { unknown, + numeric, + text, + boolean, + date, + folder, + booleanFolder, + filename }; + static FieldType fieldType(const std::string &str); + + static std::string join(const QStringList &strings, const std::string &delim); + static QStringList split(const std::string &string, char delim); + + TreeNode orExpression(); + TreeNode andExpression(); + TreeNode notExpression(); + TreeNode locationExpression(); + TreeNode baseToken(); + + static const std::map> fieldNames; +}; + +#endif // QUERY_PARSER_H diff --git a/YACReaderLibrary/db/reading_list_item.cpp b/YACReaderLibrary/db/reading_list_item.cpp index f80e34b3b..53bf7199a 100644 --- a/YACReaderLibrary/db/reading_list_item.cpp +++ b/YACReaderLibrary/db/reading_list_item.cpp @@ -44,6 +44,15 @@ QIcon SpecialListItem::getIcon() const return QIcon(); } +qulonglong SpecialListItem::getId() const +{ + if (itemData.count() > Id) { + return itemData.at(Id).toInt(); + } + + return 0; +} + ReadingListModel::TypeSpecialList SpecialListItem::getType() const { if (itemData.count() > Id) { diff --git a/YACReaderLibrary/db/reading_list_item.h b/YACReaderLibrary/db/reading_list_item.h index a6849afd6..612bc6cf1 100644 --- a/YACReaderLibrary/db/reading_list_item.h +++ b/YACReaderLibrary/db/reading_list_item.h @@ -27,6 +27,7 @@ class SpecialListItem : public ListItem public: SpecialListItem(const QList &data); QIcon getIcon() const override; + qulonglong getId() const override; ReadingListModel::TypeSpecialList getType() const; private: diff --git a/YACReaderLibrary/db/reading_list_model.cpp b/YACReaderLibrary/db/reading_list_model.cpp index b1991d4de..5f3012572 100644 --- a/YACReaderLibrary/db/reading_list_model.cpp +++ b/YACReaderLibrary/db/reading_list_model.cpp @@ -101,11 +101,11 @@ QVariant ReadingListModel::data(const QModelIndex &index, int role) const Qt::ItemFlags ReadingListModel::flags(const QModelIndex &index) const { if (!index.isValid()) - return 0; + return {}; auto item = static_cast(index.internalPointer()); if (typeid(*item) == typeid(ReadingListSeparatorItem)) - return 0; + return {}; if (typeid(*item) == typeid(ReadingListItem) && static_cast(item)->parent->getId() != 0) return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled | Qt::ItemIsDragEnabled; //only sublists are dragable diff --git a/YACReaderLibrary/db/reading_list_model.h b/YACReaderLibrary/db/reading_list_model.h index 5a22a02a4..71d66b924 100644 --- a/YACReaderLibrary/db/reading_list_model.h +++ b/YACReaderLibrary/db/reading_list_model.h @@ -19,14 +19,14 @@ class ReadingListModelProxy : public QSortFilterProxyModel { Q_OBJECT public: - explicit ReadingListModelProxy(QObject *parent = 0); + explicit ReadingListModelProxy(QObject *parent = nullptr); }; class ReadingListModel : public QAbstractItemModel { Q_OBJECT public: - explicit ReadingListModel(QObject *parent = 0); + explicit ReadingListModel(QObject *parent = nullptr); //QAbstractItemModel methods int rowCount(const QModelIndex &parent = QModelIndex()) const override; diff --git a/YACReaderLibrary/db_helper.cpp b/YACReaderLibrary/db_helper.cpp index 47fdc68c6..de3a4d56d 100644 --- a/YACReaderLibrary/db_helper.cpp +++ b/YACReaderLibrary/db_helper.cpp @@ -12,6 +12,7 @@ #include #include +#include #include #include "reading_list.h" @@ -32,6 +33,7 @@ YACReaderLibraries DBHelper::getLibraries() libraries.load(); return libraries; } + QList DBHelper::getFolderSubfoldersFromLibrary(qulonglong libraryId, qulonglong folderId) { QString libraryPath = DBHelper::getLibraries().getPath(libraryId); @@ -46,11 +48,34 @@ QList DBHelper::getFolderSubfoldersFromLibrary(qulonglong library QSqlDatabase::removeDatabase(connectionName); return list; } + QList DBHelper::getFolderComicsFromLibrary(qulonglong libraryId, qulonglong folderId) { return DBHelper::getFolderComicsFromLibrary(libraryId, folderId, false); } +QList DBHelper::getFolderComicsFromLibraryForReading(qulonglong libraryId, qulonglong folderId) +{ + auto list = DBHelper::getFolderComicsFromLibrary(libraryId, folderId, false); + + std::sort(list.begin(), list.end(), [](LibraryItem *i1, LibraryItem *i2) { + auto c1 = static_cast(i1); + auto c2 = static_cast(i2); + + if (c1->info.number.isNull() && c2->info.number.isNull()) { + return naturalSortLessThanCI(c1->name, c2->name); + } else { + if (c1->info.number.isNull() == false && c2->info.number.isNull() == false) { + return c1->info.number.toInt() < c2->info.number.toInt(); + } else { + return c2->info.number.isNull(); + } + } + }); + + return list; +} + QList DBHelper::getFolderComicsFromLibrary(qulonglong libraryId, qulonglong folderId, bool sort) { QString libraryPath = DBHelper::getLibraries().getPath(libraryId); @@ -165,8 +190,8 @@ QString DBHelper::getFolderName(qulonglong libraryId, qulonglong id) } QList DBHelper::getLibrariesNames() { - QStringList names = getLibraries().getNames(); - qSort(names.begin(), names.end(), naturalSortLessThanCI); + auto names = getLibraries().getNames(); + std::sort(names.begin(), names.end(), naturalSortLessThanCI); return names; } QString DBHelper::getLibraryName(int id) @@ -446,6 +471,22 @@ void DBHelper::deleteComicsFromFavorites(const QList &comicsList, QSqlD db.commit(); } +//a.k.a set comics as unread by reverting the conditions used to load the comics -> void ComicModel::setupReadingModelData(const QString &databasePath) +void DBHelper::deleteComicsFromReading(const QList &comicsList, QSqlDatabase &db) +{ + db.transaction(); + + QLOG_DEBUG() << "deleteComicsFromReading----------------------------------"; + + for (auto comic : comicsList) { + comic.info.hasBeenOpened = false; + comic.info.currentPage = 0; //update sets hasBeenOpened to true if currentPage > 0; + DBHelper::update(&comic.info, db); + } + + db.commit(); +} + void DBHelper::deleteComicsFromLabel(const QList &comicsList, qulonglong labelId, QSqlDatabase &db) { db.transaction(); @@ -564,7 +605,11 @@ void DBHelper::update(ComicInfo *comicInfo, QSqlDatabase &db) "lastTimeOpened = :lastTimeOpened," "coverSizeRatio = :coverSizeRatio," - "originalCoverSize = :originalCoverSize" + "originalCoverSize = :originalCoverSize," + //-- + + //new 9.8 fields + "manga = :manga" //-- " WHERE id = :id "); @@ -596,6 +641,7 @@ void DBHelper::update(ComicInfo *comicInfo, QSqlDatabase &db) updateComicInfo.bindValue(":format", comicInfo->format); updateComicInfo.bindValue(":color", comicInfo->color); updateComicInfo.bindValue(":ageRating", comicInfo->ageRating); + updateComicInfo.bindValue(":manga", comicInfo->manga); updateComicInfo.bindValue(":synopsis", comicInfo->synopsis); updateComicInfo.bindValue(":characters", comicInfo->characters); @@ -644,10 +690,12 @@ void DBHelper::update(const Folder &folder, QSqlDatabase &db) QSqlQuery updateFolderInfo(db); updateFolderInfo.prepare("UPDATE folder SET " "finished = :finished, " - "completed = :completed " + "completed = :completed, " + "manga = :manga " "WHERE id = :id "); updateFolderInfo.bindValue(":finished", folder.isFinished() ? 1 : 0); updateFolderInfo.bindValue(":completed", folder.isCompleted() ? 1 : 0); + updateFolderInfo.bindValue(":manga", folder.isManga() ? 1 : 0); updateFolderInfo.bindValue(":id", folder.id); updateFolderInfo.exec(); } @@ -1330,6 +1378,7 @@ QList DBHelper::getSortedComicsFromParent(qulonglong parentId, QSqlData int format = record.indexOf("format"); int color = record.indexOf("color"); int ageRating = record.indexOf("ageRating"); + int manga = record.indexOf("manga"); int synopsis = record.indexOf("synopsis"); int characters = record.indexOf("characters"); @@ -1394,6 +1443,7 @@ QList DBHelper::getSortedComicsFromParent(qulonglong parentId, QSqlData currentItem.info.format = selectQuery.value(format); currentItem.info.color = selectQuery.value(color); currentItem.info.ageRating = selectQuery.value(ageRating); + currentItem.info.manga = selectQuery.value(manga); currentItem.info.synopsis = selectQuery.value(synopsis); currentItem.info.characters = selectQuery.value(characters); @@ -1509,6 +1559,36 @@ QList diff --git a/YACReaderLibrary/yacreaderlibrary_es.ts b/YACReaderLibrary/yacreaderlibrary_es.ts index d12190a33..b6bfa4e42 100644 --- a/YACReaderLibrary/yacreaderlibrary_es.ts +++ b/YACReaderLibrary/yacreaderlibrary_es.ts @@ -4,7 +4,6 @@ ActionsShortcutsModel - None @@ -12,200 +11,162 @@ AddLabelDialog - + cancel + cancelar + + Label name: - Choose a color: - red - orange - yellow - green - cyan - blue - violet - purple - pink - white - light - dark - accept - - - cancel - cancelar - AddLibraryDialog - - Comics folder : - Carpeta de cómics: - - - - Library name : - Library Name : - Nombre de la biblioteca: - - - Add Añadir - + Add an existing library + Añadir una biblioteca existente + + Cancel Cancelar - - Add an existing library - Añadir una biblioteca existente + Comics folder : + Carpeta de cómics: + + + Library name : + Nombre de la biblioteca: ApiKeyDialog - + Cancel + Cancelar + + Before you can connect to Comic Vine, you need your own API key. Please, get one free <a href="http://www.comicvine.com/api/">here</a> - Paste here your Comic Vine API key - Accept - - - Cancel - Cancelar - ClassicComicsView - Hide comic flow - Ocultar cómic flow + Ocultar cómic flow ComicInfoView - Authors - Autores + Autores - writer - penciller - inker - colorist - letterer - cover artist - Publisher - color - b/w - Characters @@ -213,191 +174,147 @@ ComicModel - - yes - + no + no - - no - no + yes + - - Title - Título + Read + Leído - - File Name - Nombre de archivo + Size + Tamaño - Pages - Páginas + Páginas - - Size - Tamaño + Title + Título - - Read - Leído + Current Page + Página Actual - - Current Page - Página Actual + File Name + Nombre de archivo - Rating - Nota + Nota ComicVineDialog - - skip - omitir - - - back atrás - next siguiente - - search - buscar + skip + omitir - close cerrar - - - - - + Retrieving tags for : %1 + Recuperando etiquetas para : %1 + + + Looking for comic... + Buscando cómic... + + + search + buscar + + Looking for volume... Buscando volumen... - - comic %1 of %2 - %3 cómic %1 de %2 - %3 - %1 comics selected %1 comics seleccionados - Error connecting to ComicVine Error conectando a ComicVine - unknown error - error desconocido - - - - - Retrieving tags for : %1 - Recuperando etiquetas para : %1 - - - Retrieving volume info... Recuperando imformación del volumen... - - - Looking for comic... - Buscando cómic... - CreateLibraryDialog - - Comics folder : - Carpeta de cómics: + Create new library + Crear la nueva biblioteca - - Library Name : - Nombre de la biblioteca: + Cancel + Cancelar - Create Crear - - Cancel - Cancelar - - - Create a library could take several minutes. You can stop the process and update the library later for completing the task. Crear una biblioteca puede llevar varios minutos. Puedes parar el proceso en cualquier momento y completar la tarea más tarde. - - Create new library - Crear la nueva biblioteca + The selected path does not exist or is not a valid path. Be sure that you have write access to this folder + La ruta seleccionada no existe o no es válida. Asegúrate de que tienes privilegios de escritura en esta carpeta - - Path not found - Ruta no encontrada + Comics folder : + Carpeta de cómics: - - The selected path does not exist or is not a valid path. Be sure that you have write access to this folder - La ruta seleccionada no existe o no es válida. Asegúrate de que tienes privilegios de escritura en esta carpeta + Library Name : + Nombre de la biblioteca: + + + Path not found + Ruta no encontrada EditShortcutsDialog - Restore defaults - To change a shortcut, double click in the key combination and type the new keys. - Shortcuts settings - Shortcut in use - The shortcut "%1" is already assigned to other function @@ -405,18 +322,14 @@ EmptyFolderWidget - - Subfolders in this folder - Empty folder - Drag and drop folders and comics here @@ -424,7 +337,6 @@ EmptyLabelWidget - This label doesn't contain comics yet @@ -432,84 +344,68 @@ EmptyReadingListWidget - This reading list does not contain any comics yet - This reading list doesn't contain comics yet ExportComicsInfoDialog - Output file : Archivo de salida : - - Create - Crear + Destination database name + Nombre de la base de datos de destino - Cancel Cancelar - - Export comics info - Exportar información de los cómics + Create + Crear - - Destination database name - Nombre de la base de datos de destino + The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder + La ruta seleccionada para el archivo de salida no existe o no es una ruta válida. Asegúrate de que tienes permisos de escritura en esta carpeta - - Problem found while writing - Problema encontrado mientras se escribía + Export comics info + Exportar información de los cómics - - The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder - La ruta seleccionada para el archivo de salida no existe o no es una ruta válida. Asegúrate de que tienes permisos de escritura en esta carpeta + Problem found while writing + Problema encontrado mientras se escribía ExportLibraryDialog - - Output folder : - Carpeta de destino: + Cancel + Cancelar - Create Crear - - Cancel - Cancelar + The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder + La ruta seleccionada para el archivo de salida no existe o no es una ruta válida. Asegúrate de que tienes permisos de escritura en esta carpeta - - Create covers package - Crear paquete de portadas + Output folder : + Carpeta de destino: - Problem found while writing Problema encontrado mientras se escribía - - The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder - La ruta seleccionada para el archivo de salida no existe o no es una ruta válida. Asegúrate de que tienes permisos de escritura en esta carpeta + Create covers package + Crear paquete de portadas - Destination directory Carpeta de destino @@ -517,22 +413,18 @@ FileComic - - Unknown error opening the file - Error desconocido abriendo el archivo + Format not supported + Formato no soportado - 7z not found 7z no encontrado - - Format not supported - Formato no soportado + Unknown error opening the file + Error desconocido abriendo el archivo - CRC error on page (%1): some of the pages will not be displayed correctly Error CRC en la página (%1): algunas de las páginas no se mostrarán correctamente @@ -540,7 +432,6 @@ GridComicsView - Show info @@ -548,40 +439,33 @@ HelpAboutDialog - - About - Acerca de - - - Help Ayuda + + About + Acerca de + ImportComicsInfoDialog - - Import comics info - Importar información de cómics - - - - Info database location : - Ubicación de la base de datos de información : + Cancel + Cancelar - Import Importar - - Cancel - Cancelar + Info database location : + Ubicación de la base de datos de información : + + + Import comics info + Importar información de cómics - Comics info file (*.ydb) Archivo de información de cómics (*.ydb) @@ -589,82 +473,65 @@ ImportLibraryDialog - - Library Name : - Nombre de la biblioteca : - - - - Package location : - Ubicación del paquete: - - - Destination folder : Directorio de destino: - - Unpack - Desempaquetar - - - Cancel Cancelar - - Extract a catalog - Extraer un catálogo + Unpack + Desempaquetar - Compresed library covers (*.clc) Compresed library covers (*.clc) + + Package location : + Ubicación del paquete: + + + Library Name : + Nombre de la biblioteca : + + + Extract a catalog + Extraer un catálogo + ImportWidget - - Importing comics - Importando cómics - - - stop parar - - Some of the comics being added... - Algunos de los cómics que estan siendo añadidos.... + Importing comics + Importando cómics - <p>YACReaderLibrary is now creating a new library.</p><p>Create a library could take several minutes. You can stop the process and update the library later for completing the task.</p> - Create a library could take several minutes. You can stop the process and update the library later for completing the task. <p>YACReaderLibrary está creando una nueva biblioteca.</p><p>Crear una biblioteca puede llevar varios minutos. Puedes parar el proceso en cualquier momento y actualizar la biblioteca más tarde para completar el proceso.</p> - + Some of the comics being added... + Algunos de los cómics que estan siendo añadidos.... + + Updating the library Actualizando la biblioteca - <p>The current library is being updated. For faster updates, please, update your libraries frequently.</p><p>You can stop the process and continue updating this library later.</p> - <p>The current library is being updated. For faster updates, please, update your libraries frequently.</p><p>You can stop the process and continue updating this library later. <p>La biblioteca actual está siendo actualizada. Para actualizaciones más rápidas, por favor, actualiza tus bibliotecas frecuentemente.</p><p>Puedes parar el proceso y continunar la actualización más tarde.</p> - Upgrading the library - <p>The current library is being upgraded, please wait.</p> @@ -672,590 +539,454 @@ LibraryWindow - <font color='white'> press 'F' to close fullscreen mode </font> - <font color='white'> presiona 'F' para salir de pantalla completa </font> + Edit + Editar - - YACReader Library - YACReader Library + The selected folder doesn't contain any library. + La carpeta seleccionada no contiene ninguna biblioteca. - - Create a new library - Crear una nueva biblioteca + This library was created with a previous version of YACReaderLibrary. It needs to be updated. Update now? + Esta biblioteca fue creada con una versión anterior de YACReaderLibrary. Es necesario que se actualice. ¿Deseas hacerlo ahora? - - Open an existing library - Abrir una biblioteca existente + Comic + Cómic - - - Export comics info - Exportar información de los cómics + Error opening the library + Error abriendo la biblioteca - - - Import comics info - Importar información de cómics + Show/Hide marks + Mostrar/Ocultar marcas - - Pack covers - Empaquetar portadas + YACReader not found + YACReader no encontrado - - Pack the covers of the selected library - Empaquetar las portadas de la biblioteca seleccionada + Show comics server options dialog + - - Unpack covers - Desempaquetar portadas + Remove current library from your collection + Eliminar biblioteca de la colección - - Unpack a catalog - Desempaquetar un catálogo + Set comic as read + Marcar cómic como leído - - Update library - Actualizar biblioteca + Remove and delete metadata + Eliminar y borrar metadatos - - Update current library - Actualizar la biblioteca seleccionada + Old library + Biblioteca antigua - - Rename library - Renombrar biblioteca + Update cover + Actualizar portada + + + Set as completed + Marcar como completo + + + Library + Librería - Rename current library Renombrar la biblioteca seleccionada - - Remove current library from your collection - Eliminar biblioteca de la colección + Fullscreen mode on/off + Modo a pantalla completa on/off - - Open current comic - Abrir cómic actual + This library was created with a newer version of YACReaderLibrary. Download the new version now? + Esta biblioteca fue creada con una versión más nueva de YACReaderLibrary. ¿Deseas descargar la nueva versión ahora? - Open current comic on YACReader Abrir el cómic actual en YACReader - - Save selected covers to... - - - - - Save covers of the selected comics as JPG files - + Update current library + Actualizar la biblioteca seleccionada - - - Set as read - Marcar como leído + Library '%1' is no longer available. Do you want to remove it? + La biblioteca '%1' no está disponible. ¿Deseas eliminarla? - - Set comic as read - Marcar cómic como leído + Update library + Actualizar biblioteca - - - Set as unread - Marcar como no leído + Open folder... + Abrir carpeta... - - Set comic as unread - Marcar cómic como no leído + Do you want remove + ¿Deseas eliminar la biblioteca - - Show/Hide marks - Mostrar/Ocultar marcas + Set as uncompleted + Marcar como incompleto - Show or hide readed marks - Mostrar u ocultar marcas + Reset comic rating + Reseteal cómic rating - - - Fullscreen mode on/off - Modo a pantalla completa on/off + Error updating the library + Error actualizando la biblioteca - Fullscreen mode on/off (F) - Activar/desactivar modo a pantalla completa (F) + Folder + Carpeta - - Help, About YACReader - Ayuda, A cerca de... YACReader + Expand all nodes + Expandir todos los nodos - - Select root node - Seleccionar el nodo raíz + Library '%1' has been created with an older version of YACReaderLibrary. It must be created again. Do you want to create the library now? + La biblioteca '%1' ha sido creada con una versión más antigua de YACReaderLibrary y debe ser creada de nuevo. ¿Deseas crear la biblioteca ahora? - + - + + Pack covers + Empaquetar portadas - - Expand all nodes - Expandir todos los nodos + Set as read + Marcar como leído - - - - + Delete selected comics + Borrar los cómics seleccionados - Colapse all nodes - Contraer todos los nodos + Export comics info + Exportar información de los cómics - Show options dialog Mostrar opciones - - Show comics server options dialog - + Create a new library + Crear una nueva biblioteca - - Open folder... - Abrir carpeta... + Library not available + Biblioteca no disponible - - Set as uncompleted - Marcar como incompleto + Import comics info + Importar información de cómics - - Set as completed - Marcar como completo + There was an issue trying to delete the selected comics. Please, check for write permissions in the selected files or containing folder. + Ha habido algún problema intentando borrar los cómics selecionados. Por favor, verifica los permisos de escritura en los arhicovs seleccionados o los directorios que los conienen. - - Open containing folder... - Abrir carpeta contenedora... + Open current comic + Abrir cómic actual - - Reset comic rating - Reseteal cómic rating + YACReader Library + YACReader Library - - Select all comics - Seleccionar todos los cómics + Error creating the library + Errar creando la biblioteca - - Edit - Editar + Unpack covers + Desempaquetar portadas - Asign current order to comics - Asignar el orden actual a los cómics + Update needed + Se necesita actualizar - - Update cover - Actualizar portada + Open an existing library + Abrir una biblioteca existente - - Delete selected comics - Borrar los cómics seleccionados + Library name already exists + Ya existe el nombre de la biblioteca - Hide comic flow - Ocultar cómic flow + There is another library with the name '%1'. + Hay otra biblioteca con el nombre '%1'. - - Download tags from Comic Vine - Descargar etiquetas de Comic Vine + Download new version + Descargar la nueva versión - - Folder - Carpeta + Delete comics + Borrar cómics - - Comic - Cómic + Select all comics + Seleccionar todos los cómics - - Library not available - Library ' - Biblioteca no disponible + Pack the covers of the selected library + Empaquetar las portadas de la biblioteca seleccionada - - Library '%1' is no longer available. Do you want to remove it? - La biblioteca '%1' no está disponible. ¿Deseas eliminarla? + Help, About YACReader + Ayuda, A cerca de... YACReader - - Library '%1' has been created with an older version of YACReaderLibrary. It must be created again. Do you want to create the library now? - La biblioteca '%1' ha sido creada con una versión más antigua de YACReaderLibrary y debe ser creada de nuevo. ¿Deseas crear la biblioteca ahora? + Set comic as unread + Marcar cómic como no leído - - Old library - Biblioteca antigua + Select root node + Seleccionar el nodo raíz - - - YACReader not found - YACReader no encontrado + Unpack a catalog + Desempaquetar un catálogo - YACReader not found, YACReader should be installed in the same folder as YACReaderLibrary. - YACReader no encontrado, YACReader debe estar instalado en el mismo directorio que YACReaderLibrary. + All the selected comics will be deleted from your disk. Are you sure? + Todos los cómics seleccionados serán borrados de tu disco. ¿Estás seguro? - - - Unable to delete - No se ha podido borrar + Download tags from Comic Vine + Descargar etiquetas de Comic Vine - - There was an issue trying to delete the selected comics. Please, check for write permissions in the selected files or containing folder. - Ha habido algún problema intentando borrar los cómics selecionados. Por favor, verifica los permisos de escritura en los arhicovs seleccionados o los directorios que los conienen. + Set as unread + Marcar como no leído - - Assign comics numbers - + Library not found + Biblioteca no encontrada - - Assign numbers starting in: - + Rename library + Renombrar biblioteca - - Error creating the library - Errar creando la biblioteca + Remove library + Eliminar biblioteca - - Error updating the library - Error actualizando la biblioteca + Open containing folder... + Abrir carpeta contenedora... - - Error opening the library - Error abriendo la biblioteca + Unable to delete + No se ha podido borrar - - Delete comics - Borrar cómics + library? + ? - - All the selected comics will be deleted from your disk. Are you sure? - Todos los cómics seleccionados serán borrados de tu disco. ¿Estás seguro? + Are you sure? + ¿Estás seguro? - - Remove comics + Save selected covers to... - - Comics will only be deleted from the current label/list. Are you sure? + Save covers of the selected comics as JPG files - - Library name already exists - Ya existe el nombre de la biblioteca + Set as manga + - - There is another library with the name '%1'. - Hay otra biblioteca con el nombre '%1'. + Set issue as manga + - - Library - Librería + Set as normal + - - Remove library - Eliminar biblioteca + Set issue as normal + - Show or hide read marks - - Add new folder - Add new folder to the current library - - Delete folder - Delete current folder from disk - Collapse all nodes - - Change between comics views - + Set as comic + + + Assign current order to comics - Edit shortcuts - Update folder - Update current folder - Add new reading list - Add a new reading list to the current library - Remove reading list - Remove current reading list from the library - Add new label - Add a new label to this library - Rename selected list - Rename any selected labels or lists - Add to... - Favorites - Add selected comics to favorites list - Upgrade failed - There were errors during library upgrade in: - - Update needed - Se necesita actualizar - - - - This library was created with a previous version of YACReaderLibrary. It needs to be updated. Update now? - Esta biblioteca fue creada con una versión anterior de YACReaderLibrary. Es necesario que se actualice. ¿Deseas hacerlo ahora? - - - Update failed - La actualización ha fallado - - - The current library can't be udpated. Check for write write permissions on: - La librería actual no ha podido ser actualizada. Verifica que posees permisos de escritura en: - - - - Download new version - Descargar la nueva versión - - - - This library was created with a newer version of YACReaderLibrary. Download the new version now? - Esta biblioteca fue creada con una versión más nueva de YACReaderLibrary. ¿Deseas descargar la nueva versión ahora? - - - - Copying comics... - - Moving comics... - Folder name: - No folder selected - Please, select a folder first - Error in path - There was an error accessing the folder's path - The selected folder and all its contents will be deleted from your disk. Are you sure? - There was an issue trying to delete the selected folders. Please, check for write permissions and be sure that any applications are using these folders or any of the contained files. - Add new reading lists - - List name: - Delete list/label - The selected item will be deleted, your comics or folders will NOT be deleted from your disk. Are you sure? - Rename list name - Save covers - You are adding too many libraries. - You are adding too many libraries. You probably only need one library in your top level comics folder, you can browse any subfolders using the folders section in the left sidebar. @@ -1264,81 +995,83 @@ YACReaderLibrary will not stop you from creating more libraries but you should k - YACReader not found. YACReader should be installed in the same folder as YACReaderLibrary. - YACReader not found. There might be a problem with your YACReader installation. - - Library not found - Biblioteca no encontrada + Assign comics numbers + - - The selected folder doesn't contain any library. - La carpeta seleccionada no contiene ninguna biblioteca. + Assign numbers starting in: + - - Are you sure? - ¿Estás seguro? + Remove comics + - - library? - ? + Comics will only be deleted from the current label/list. Are you sure? + + + + LocalComicListModel - - Remove and delete metadata - Eliminar y borrar metadatos - + file name + nombre de archivo + + + + LogWindow - - Do you want remove - ¿Deseas eliminar la biblioteca + Log window + - Asign comics numbers - Asignar números de cómic + &Pause + - Asign numbers starting in: - Asignar números empezando en: + &Save + - - - LocalComicListModel - - file name - nombre de archivo + C&lear + + + + &Copy + + + + Level: + + + + &Auto scroll + NoLibrariesWidget - + create your first library + crea tu primera biblioteca + + You don't have any libraries yet Aún no tienes ninguna biblioteca - <p>You can create a library in any folder, YACReaderLibrary will import all comics and folders from this folder. If you have created any library in the past you can open them.</p><p>Don't forget that you can use YACReader as a stand alone application for reading the comics on your computer.</p> <p>Puedes crear una biblioteca en cualquier carpeta, YACReaderLibrary importará todos las carpetas y cómics de esa carpeta. Si has creado alguna biblioteca anteriormente, puedes abrirla sin volver a crearla.</p><p>No olvides que puedes usar YACReader como una aplicación independiente para leer los cómics en tu ordenador.</p> - - create your first library - crea tu primera biblioteca - - - add an existing one añade una existente @@ -1346,306 +1079,327 @@ YACReaderLibrary will not stop you from creating more libraries but you should k OptionsDialog - + Options + Opciones + + + Tray icon settings (experimental) + + + + Close to tray + + + + Start into the system tray + + + Edit Comic Vine API key - Comic Vine API key - Enable background image - Opacity level - Blur level - Use selected comic cover as background - Restore defautls - Background - + Display continue reading banner + + + + Continue reading + + + Comic Flow - Grid view - General - - - Options - Opciones - PropertiesDialog - - General info - Información general + Day: + Día: - - Authors - Autores + Plot + Argumento - - Publishing - Publicación + Size: + Tamaño: - - Plot - Argumento + Year: + Año: - - Cover page - Página de portada + Inker(s): + Entintador(es): - - Title: - Título: + Publishing + Publicación - - - of: - + Publisher: + Editorial: - - Issue number: - Número: + General info + Información general - - Volume: - Volumen: + Color/BW: + Color/BN: - - Arc number: - + Edit selected comics information + Editar la información de los cómics seleccionados - - Story arc: - Arco argumental: + Penciller(s): + Dibujant(es): + + + Colorist(s): + Color: - Genre: - Genere: - Género: + Género: - - Size: - Tamaño: + Issue number: + Número: - - Writer(s): - Guionista(s): + Month: + Mes: - - Penciller(s): - Dibujant(es): + Notes: + Notas: - - Inker(s): - Entintador(es): + Synopsis: + Sinopsis: - - Colorist(s): - Color: + Title: + Título: - - Letterer(s): - Letterer(es): - Rotulista(s): + Not found + No encontrado - - Cover Artist(s): - Artista(s) portada: + Characters: + Personajes: - - Day: - Día: + Authors + Autores - - Month: - Mes: + Age rating: + Casificación edades: - - Year: - Año: + Story arc: + Arco argumental: - - Publisher: - Editorial: + Writer(s): + Guionista(s): - - Format: - Formato: + Comic not found. You should update your library. + Cómic no encontrado. Deberias actualizar tu biblioteca. - - Color/BW: - Color/BN: + Edit comic information + Editar la información del cócmic - - Age rating: - Casificación edades: + Cover page + Página de portada - - Synopsis: - Sinopsis: + Cover Artist(s): + Artista(s) portada: - - Characters: - Personajes: + Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> view </a> + Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> ver </a> - - Notes: - Notas: + Volume: + Volumen: - - Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> view </a> - Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> ver </a> + Format: + Formato: - - Not found - No encontrado + Letterer(s): + Rotulista(s): - - Comic not found. You should update your library. - Cómic no encontrado. Deberias actualizar tu biblioteca. + of: + - - Edit selected comics information - Editar la información de los cómics seleccionados + Arc number: + - - Edit comic information - Editar la información del cócmic + Manga: + QObject - 7z lib not found 7z lib no encontrado - unable to load 7z lib from ./utils imposible cargar 7z lib de ./utils + + Trace + + + + Debug + + + + Info + + + + Warning + + + + Error + + + + Fatal + + - RenameLibraryDialog + QsLogging::LogWindowModel - - New Library Name : - Nuevo nombre de la biblioteca : + Time + - - Rename - Renombrar + Level + - - Cancel - Cancelar + Message + + + + + QsLogging::Window + + &Pause + - + &Resume + + + + Save log + + + + Log file (*.log) + + + + + RenameLibraryDialog + Rename current library Renombrar la biblioteca seleccionada + + Cancel + Cancelar + + + Rename + Renombrar + + + New Library Name : + Nuevo nombre de la biblioteca : + ScraperResultsPaginator - - Number of volumes found : %1 - Número de volúmenes encontrados : %1 + Number of %1 found : %2 + Número de %1 encontrados : %2 - - page %1 of %2 página %1 de %2 - - Number of %1 found : %2 - Número de %1 encontrados : %2 + Number of volumes found : %1 + Número de volúmenes encontrados : %1 SearchSingleComic - Please provide some additional information. Por favor, proporciona alguna información adicional. - Series: Series: @@ -1653,12 +1407,10 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SearchVolume - Please provide some additional information. Por favor, proporciona alguna informacion adicional. - Series: Series: @@ -1666,27 +1418,22 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SelectComic - - Please, select the right comic info. - Por favor, selecciona la información correcta. + loading description + cargando descripción - comics cómics - loading cover cargando portada - - loading description - cargando descripción + Please, select the right comic info. + Por favor, selecciona la información correcta. - description unavailable descripción no disponible @@ -1694,27 +1441,22 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SelectVolume - - Please, select the right series for your comic. - Por favor, seleciona la serie correcta para tu cómic. + loading description + cargando descripción - - volumes - volúmenes + Please, select the right series for your comic. + Por favor, seleciona la serie correcta para tu cómic. - loading cover cargando portada - - loading description - cargando descripción + volumes + volúmenes - description unavailable descripción no disponible @@ -1722,170 +1464,84 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SeriesQuestion - - You are trying to get information for various comics at once, are they part of the same series? - Estás intentando obtener información de varios cómics a la vez, ¿son parte de la misma serie? + no + no - yes - - no - no + You are trying to get information for various comics at once, are they part of the same series? + Estás intentando obtener información de varios cómics a la vez, ¿son parte de la misma serie? ServerConfigDialog - - set port - fijar puerto - - - EASY SERVER CONNECTION - CONEXIÓN AL SERVIDOR FÁCILMENTE - - - SERVER ADDRESS - DATOS SERVIDOR - - - just scan the code with your device!! - ¡simplemente escanea el código con tu dispositivo! + Port + Puerto - YACReader is now available for iOS devices, the best comic reading experience now in your iPad, iPhone or iPod touch. <a href='http://ios.yacreader.com' style='color:rgb(193, 148, 65)'> Discover it! </a> - YACReader is now available for iOS devices, the best comic reading experience now in your iPad, iPhone or iPod touch. <a href='http://ios.yacreader.com'> Discover it! </a> - YACReader está ahora disponible para dispositivos iOS, la mejor experiencia de lectura de cómics ahora en tu iPad, iPhone o iPod touch. <a href='http://ios.yacreader.com' style='color:rgb(193, 148, 65)'> ¡Descúbrelo! </a> + enable the server + activar el servidor - IP address - IP usada + set port + fijar puerto - Server connectivity information - Scan it! - YACReader is available for iOS devices. <a href='http://ios.yacreader.com' style='color:rgb(193, 148, 65)'> Discover it! </a> - Choose an IP address - - Port - Puerto - - - - enable the server - activar el servidor - - - display less information about folders in the browser to improve the performance - Could not load libqrencode. - - QR generator error! - ¡Error del generador QR! - SortVolumeComics - - Please, sort the list of comics on the left until it matches the comics' information. - Por favor, ordena la lista de cómics en la izquiera hasta que coincida con la información adecuada. + remove selected comics + eliminar cómics seleccionados - sort comics to match comic information ordena los cómics para coincidir con la información - - issues - números - - - - remove selected comics - eliminar cómics seleccionados - - - restore all removed comics restaurar todos los cómics eliminados - restore removed comics - restaurar cómics eliminados - - - - TableModel - - yes - - - - no - no - - - Title - Título - - - File Name - Nombre de archivo - - - Pages - Páginas - - - Size - Tamaño - - - Read - Leído - - - Current Page - Página Actual + issues + números - Rating - Nota + Please, sort the list of comics on the left until it matches the comics' information. + Por favor, ordena la lista de cómics en la izquiera hasta que coincida con la información adecuada. TitleHeader - SEARCH BUSCAR @@ -1893,25 +1549,21 @@ to improve the performance UpdateLibraryDialog - - Updating.... - Actualizado... + Update library + Actualizar biblioteca - Cancel Cancelar - - Update library - Actualizar biblioteca + Updating.... + Actualizado... VolumeComicsModel - title título @@ -1919,83 +1571,92 @@ to improve the performance VolumesModel - year año - issues números - publisher editor - YACReaderDeletingProgress + YACReader::TrayIconController - - Please wait, deleting in progress... - Borrando, por favor espera... + &Restore + + + + &Quit + + + + Systray + + + + YACReaderLibrary will keep running in the system tray. To terminate the program, choose <b>Quit</b> in the context menu of the system tray icon. + + + + YACReader::WhatsNewDialog + + Close + + + + + YACReaderDeletingProgress - cancel cancelar + + Please wait, deleting in progress... + Borrando, por favor espera... + YACReaderFieldEdit - - - Click to overwrite - Click para sobreescribir - - - Restore to default Restaurar valor por defecto - - - YACReaderFieldPlainTextEdit - - - - Click to overwrite Click para sobreescribir + + + YACReaderFieldPlainTextEdit - Restore to default Restaurar valor por defecto + + Click to overwrite + Click para sobreescribir + YACReaderFlowConfigWidget - - How to show covers: - Cómo mostrar las portadas: - - - CoverFlow look Tipo CoverFlow - + How to show covers: + Cómo mostrar las portadas: + + Stripe look Tipo tira - Overlapped Stripe look Tipo tira solapada @@ -2003,130 +1664,105 @@ to improve the performance YACReaderGLFlowConfigWidget - - Presets: - Predeterminados: - - - - Classic look - Tipo clásico - - - - Stripe look - Tipo tira + Zoom + Zoom - - Overlapped Stripe look - Tipo tira solapada + Light + Luz - - Modern look - Tipo moderno + Show advanced settings + Opciones avanzadas - Roulette look Tipo ruleta - - Show advanced settings - Opciones avanzadas - - - - Custom: - Personalizado: + Cover Angle + Ángulo de las portadas - - View angle - Ángulo de vista + Stripe look + Tipo tira - Position Posición - - Cover gap - Hueco entre portadas + Z offset + Desplazamiento en Z + + + Y offset + Desplazamiento en Y - Central gap Hueco central - - Zoom - Zoom + Presets: + Predeterminados: - - Y offset - Desplazamiento en Y + Overlapped Stripe look + Tipo tira solapada - - Z offset - Desplazamiento en Z + Modern look + Tipo moderno - - Cover Angle - Ángulo de las portadas + View angle + Ángulo de vista - - Visibility - Visibilidad + Max angle + Ángulo máximo - - Light - Luz + Custom: + Personalizado: - - Max angle - Ángulo máximo + Classic look + Tipo clásico - - Low Performance - Rendimiento bajo + Cover gap + Hueco entre portadas - High Performance Alto rendimiento - + Performance: + Rendimiento: + + Use VSync (improve the image quality in fullscreen mode, worse performance) Usar VSync (mejora la calidad de imagen en pantalla completa, peor rendimiento) - - Performance: - Rendimiento: + Visibility + Visibilidad + + + Low Performance + Rendimiento bajo YACReaderNavigationController - No favorites - You are not reading anything yet, come on!! @@ -2134,35 +1770,29 @@ to improve the performance YACReaderOptionsDialog - Save Guardar - + Use hardware acceleration (restart needed) + Usar aceleración por hardware (necesario reiniciar) + + Cancel Cancelar - Edit shortcuts - Shortcuts - - - Use hardware acceleration (restart needed) - Usar aceleración por hardware (necesario reiniciar) - YACReaderSearchLineEdit - type to search @@ -2170,38 +1800,28 @@ to improve the performance YACReaderSideBar - + LIBRARIES + BIBLIOTECAS + + + FOLDERS + CARPETAS + + Libraries - Folders - Reading Lists - - LIBRARIES - BIBLIOTECAS - - - - FOLDERS - CARPETAS - - - READING LISTS - - Search folders and comics - Buscar carpetas y cómics - diff --git a/YACReaderLibrary/yacreaderlibrary_fr.ts b/YACReaderLibrary/yacreaderlibrary_fr.ts old mode 100755 new mode 100644 index 6faebbb64..b1524fa5f --- a/YACReaderLibrary/yacreaderlibrary_fr.ts +++ b/YACReaderLibrary/yacreaderlibrary_fr.ts @@ -1,399 +1,320 @@ - + ActionsShortcutsModel - None - Rien + Rien AddLabelDialog - - Label name: - + red + rouge - - Choose a color: - Choisissez une couleur: + blue + bleu - - red - rouge + dark + foncé - - orange - orange + cyan + cyan - - yellow - jaune + pink + rose - green - vert + vert - - cyan - cyan + light + clair - - blue - bleu + white + blanc - - violet - violet + Choose a color: + Choisissez une couleur: - - purple - violet + accept + accepter - - pink - rose + cancel + Annuler - - white - blanc + orange + orange - - light - clair + purple + violet - - dark - foncé + violet + violet - - accept - accepter + yellow + jaune - - cancel - Annuler + Label name: + AddLibraryDialog - - Comics folder : - Dossier des bandes dessinées : - - - - Library name : - Library Name : - Nom de la librairie : - - - Add Ajouter - + Add an existing library + Ajouter une librairie existante + + Cancel Annuler - - Add an existing library - Ajouter une librairie existante + Comics folder : + Dossier des bandes dessinées : + + + Library name : + Nom de la librairie : ApiKeyDialog - - Before you can connect to Comic Vine, you need your own API key. Please, get one free <a href="http://www.comicvine.com/api/">here</a> - Avant de pouvoir vous connecter à Comic Vine, vous avez besoin de votre propre clé API. Veuillez en obtenir une gratuitement ici: <a href="http://www.comicvine.com/api/"></a> + Accept + Accepter - - Paste here your Comic Vine API key - Collez ici votre clé API Comic Vine + Cancel + Annuler - - Accept - Accepter + Before you can connect to Comic Vine, you need your own API key. Please, get one free <a href="http://www.comicvine.com/api/">here</a> + Avant de pouvoir vous connecter à Comic Vine, vous avez besoin de votre propre clé API. Veuillez en obtenir une gratuitement ici: <a href="http://www.comicvine.com/api/"></a> - - Cancel - Annuler + Paste here your Comic Vine API key + Collez ici votre clé API Comic Vine ClassicComicsView - Hide comic flow - Cacher le flux de bande dessinée + Cacher le flux de bande dessinée ComicInfoView - - Authors - Auteurs + b/w + noir et blanc - - writer - scénario + cover artist + couverture - - penciller - dessin + color + couleur - inker encre - - colorist - couleur + penciller + dessin - - letterer - lettreur + colorist + couleur - - cover artist - couverture + writer + scénario - - Publisher - Editeur + Characters + Personnages - - color - couleur + Authors + Auteurs - - b/w - noir et blanc + Publisher + Editeur - - Characters - Personnages + letterer + lettreur ComicModel - - yes - oui + no + non - - no - non + yes + oui - - Title - Titre + Read + Lu - - File Name - Nom du fichier + Size + Taille - Pages - Pages + Pages - - Size - Taille + Title + Titre - - Read - Lu + Current Page + Page en cours - - Current Page - Page en cours + File Name + Nom du fichier - Rating - Note + Note ComicVineDialog - - skip - passer - - - back - retour + retour - next - suivant + suivant - - search - chercher + skip + passer - close - fermer + fermer - - - - - - Looking for volume... - + Retrieving tags for : %1 + Retrouver les infomartions de: %1 + + + Looking for comic... + Vous cherchez une bande dessinée ... + + + search + chercher - - comic %1 of %2 - %3 - bande dessinée %1 sur %2 - %3 + bande dessinée %1 sur %2 - %3 - %1 comics selected - %1 bande(s) dessinnée(s) sélectionnée(s) + %1 bande(s) dessinnée(s) sélectionnée(s) - Error connecting to ComicVine - Erreur de connexion à Comic Vine + Erreur de connexion à Comic Vine - - - Retrieving tags for : %1 - Retrouver les infomartions de: %1 + Looking for volume... + - Retrieving volume info... - - - Looking for comic... - Vous cherchez une bande dessinée ... - CreateLibraryDialog - - Comics folder : - Dossier des bandes dessinées : + Create new library + Créer une nouvelle librairie - - Library Name : - Nom de la librairie : + Cancel + Annuler - Create Créer - - Cancel - Annuler - - - Create a library could take several minutes. You can stop the process and update the library later for completing the task. La création d'une librairie peut prendre quelques minutes. Vous pouvez arrêter le processus et continuer plus tard. - - Create new library - Créer une nouvelle librairie + The selected path does not exist or is not a valid path. Be sure that you have write access to this folder + Le chemin sélectionné n'existe pas ou contient un chemin invalide. Assurez-vous d'avoir les droits d'accès à ce dossier - - Path not found - Chemin introuvable + Comics folder : + Dossier des bandes dessinées : - - The selected path does not exist or is not a valid path. Be sure that you have write access to this folder - Le chemin sélectionné n'existe pas ou contient un chemin invalide. Assurez-vous d'avoir les droits d'accès à ce dossier + Library Name : + Nom de la librairie : + + + Path not found + Chemin introuvable EditShortcutsDialog - Restore defaults - To change a shortcut, double click in the key combination and type the new keys. - Shortcuts settings - Shortcut in use - The shortcut "%1" is already assigned to other function @@ -401,111 +322,90 @@ EmptyFolderWidget - - Subfolders in this folder - Sous-dossiers dans ce dossier + Sous-dossiers dans ce dossier - - Empty folder - + Drag and drop folders and comics here + Glissez et déposez les dossiers et les bandes dessinées ici - - Drag and drop folders and comics here - Glissez et déposez les dossiers et les bandes dessinées ici + Empty folder + EmptyLabelWidget - This label doesn't contain comics yet - Ce dossier ne contient pas encore de bandes dessinées + Ce dossier ne contient pas encore de bandes dessinées EmptyReadingListWidget - This reading list does not contain any comics yet - This reading list doesn't contain comics yet - Cette liste de lecture ne contient aucune bande dessinée + Cette liste de lecture ne contient aucune bande dessinée ExportComicsInfoDialog - Output file : Fichier de sortie : - - Create - Créer + Destination database name + Nom de la base de données de destination - Cancel Annuler - - Export comics info - Exporter les infos des bandes dessinées + Create + Créer - - Destination database name - Nom de la base de données de destination + The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder + Le chemin sélectionné pour le fichier n'existe pas ou contient un chemin invalide. Assurez-vous d'avoir les droits d'accès à ce dossier - - Problem found while writing - Problème durant l'écriture + Export comics info + Exporter les infos des bandes dessinées - - The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder - Le chemin sélectionné pour le fichier n'existe pas ou contient un chemin invalide. Assurez-vous d'avoir les droits d'accès à ce dossier + Problem found while writing + Problème durant l'écriture ExportLibraryDialog - - Output folder : - Dossier de sortie : + Cancel + Annuler - Create Créer - - Cancel - Annuler + The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder + Le chemin sélectionné pour le fichier n'existe pas ou contient un chemin invalide. Assurez-vous d'avoir les droits d'accès à ce dossier - - Create covers package - Créer un pack de couvertures + Output folder : + Dossier de sortie : - Problem found while writing Problème durant l'écriture - - The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder - Le chemin sélectionné pour le fichier n'existe pas ou contient un chemin invalide. Assurez-vous d'avoir les droits d'accès à ce dossier + Create covers package + Créer un pack de couvertures - Destination directory Répertoire de destination @@ -513,30 +413,25 @@ FileComic - - Unknown error opening the file - + 7z not found + 7z introuvable - - 7z not found - 7z introuvable + CRC error on page (%1): some of the pages will not be displayed correctly + - - Format not supported + Unknown error opening the file - - CRC error on page (%1): some of the pages will not be displayed correctly + Format not supported GridComicsView - Show info @@ -544,121 +439,99 @@ HelpAboutDialog - - About - A propos - - - Help Aide + + About + A propos + ImportComicsInfoDialog - - Import comics info - Importer les infos des bandes dessinées - - - - Info database location : - Emplacement des infos: + Cancel + Annuler - Import Importer - - Cancel - Annuler + Info database location : + Emplacement des infos: + + + Import comics info + Importer les infos des bandes dessinées - Comics info file (*.ydb) - Fichier infos BD (*.ydb) + Fichier infos BD (*.ydb) ImportLibraryDialog - - Library Name : - Nom de la librairie : - - - - Package location : - Emplacement : - - - Destination folder : Dossier de destination : - - Unpack - Désarchiver - - - Cancel Annuler - - Extract a catalog - Extraire un catalogue + Unpack + Désarchiver - Compresed library covers (*.clc) Compresed library covers (*.clc) - - - ImportWidget - - stop - Stop + Package location : + Emplacement : - - Some of the comics being added... - Ajout de bande dessinée... - + Library Name : + Nom de la librairie : + + + Extract a catalog + Extraire un catalogue + + + + ImportWidget + + stop + Stop + - Importing comics - Importation de bande dessinée + Importation de bande dessinée - <p>YACReaderLibrary is now creating a new library.</p><p>Create a library could take several minutes. You can stop the process and update the library later for completing the task.</p> <p>YACReaderLibrary est en train de créer une nouvelle librairie.</p><p>La création d'une librairie peut prendre quelques minutes. Vous pouvez arrêter le processus et poursuivre plus tard.</p> - + Some of the comics being added... + Ajout de bande dessinée... + + Updating the library Mise à jour de la librairie - <p>The current library is being updated. For faster updates, please, update your libraries frequently.</p><p>You can stop the process and continue updating this library later.</p> <p>Mise à jour de la librairie. Pour plus de rapidité lors de la mise à jour, veuillez effectuer cette dernière régulièrement.</p><p>Vous pouvez arrêter le processus et poursuivre plus tard.</p> - Upgrading the library - <p>The current library is being upgraded, please wait.</p> @@ -666,673 +539,543 @@ LibraryWindow - - YACReader Library - Librairie de YACReader + Edit + Editer - - Library - Librairie + The selected folder doesn't contain any library. + Le dossier sélectionné ne contient aucune librairie. - <font color='white'> press 'F' to close fullscreen mode </font> - <font color='white'> appuyez sur 'F' pour quitter le mode plein écran </font> + This library was created with a previous version of YACReaderLibrary. It needs to be updated. Update now? + Cette librairie a été créée avec une ancienne version de YACReaderLibrary. Mise à jour necessaire. Mettre à jour? - - Create a new library - Créer une nouvelle librairie + Comic + Bande dessinée - - Open an existing library - Ouvrir une librairie existante + Update current folder + Mettre à jour ce dossier - - - Export comics info - Exporter les infos des bandes dessinées + Error opening the library + Erreur lors de l'ouverture de la librairie - - - Import comics info - Importer les infos des bandes dessinées + Show/Hide marks + Afficher/Cacher les marqueurs - - Pack covers - Archiver les couvertures + Show comics server options dialog + Ouvrir la boite de dialogue du serveur - - Pack the covers of the selected library - Archiver les couvertures de la librairie sélectionnée + Remove current library from your collection + Enlever cette librairie de votre collection - - Unpack covers - Désarchiver les couvertures + Set comic as read + Marquer cette bande dessinée comme lu - - Unpack a catalog - Désarchiver un catalogue + Add selected comics to favorites list + Ajouter la bande dessinée sélectionnée à la liste des favoris - - Update library - Mettre la librairie à jour + Remove and delete metadata + Supprimer les métadata - - Update current library - Mettre à jour la librairie actuelle + Old library + Ancienne librairie - - Rename library - Renommer la librairie + Update cover + Mise à jour des couvertures + + + Set as completed + Marquer comme complet + + + Library + Librairie - Rename current library Renommer la librairie actuelle - - Remove library - Supprimer la librairie + Fullscreen mode on/off + Mode plein écran activé/désactivé - - Remove current library from your collection - Enlever cette librairie de votre collection + This library was created with a newer version of YACReaderLibrary. Download the new version now? + Cette librairie a été créée avec une version plus récente de YACReaderLibrary. Télécharger la nouvelle version? - - Open current comic - Ouvrir cette bande dessinée + Moving comics... + Déplacer la bande dessinée... - Open current comic on YACReader - Ouvrir cette bande dessinée dans YACReader - - - - Save selected covers to... - Exporter la couverture vers... + Ouvrir cette bande dessinée dans YACReader - - Save covers of the selected comics as JPG files - Enregistrer les couvertures des bandes dessinées sélectionnées en tant que fichiers JPG + Update current library + Mettre à jour la librairie actuelle - - - Set as read - Marquer comme lu + Copying comics... + Copier la bande dessinée... - - Set comic as read - Marquer cette bande dessinée comme lu + Library '%1' is no longer available. Do you want to remove it? + La librarie '%1' n'est plus disponible. Voulez-vous la supprimer? - - - Set as unread - Marquer comme non-lu + Update library + Mettre la librairie à jour - - Set comic as unread - Marquer cette bande dessinée comme non-lu + Open folder... + Ouvrir le dossier... - - Show/Hide marks - Afficher/Cacher les marqueurs + Do you want remove + Voulez-vous supprimer - Show or hide readed marks - Afficher ou cacher les marqueurs pour les livres lus + Set as uncompleted + Marquer comme incomplet - - Library not available - Library ' - Librairie non disponible + Reset comic rating + Supprimer la note d'évaluation - - - Fullscreen mode on/off - Mode plein écran activé/désactivé + Error updating the library + Erreur lors de la mise à jour de la librairie - Fullscreen mode on/off (F) - Mode plein écran activé/désactivé (F) + Folder + Dossier - - Help, About YACReader - Aide, à propos de YACReader + The selected item will be deleted, your comics or folders will NOT be deleted from your disk. Are you sure? + L'élément sélectionné sera supprimé, vos bandes dessinées ou dossiers ne seront pas supprimés de votre disque. Êtes-vous sûr? - - Select root node - Allerà la racine + Expand all nodes + Afficher tous les noeuds - + - + + Add to... + Ajouter à... - - Expand all nodes - Afficher tous les noeuds + Library '%1' has been created with an older version of YACReaderLibrary. It must be created again. Do you want to create the library now? + La librarie '%1' a été créée avec une ancienne version de YACReaderLibrary. Elle doit être re-créée. Voulez-vous créer la librairie? - - - - + Pack covers + Archiver les couvertures - Colapse all nodes - Masquer tous les noeuds + Remove current reading list from the library + Supprimer la liste de lecture actuelle de la bibliothèque - - Show options dialog - Ouvrir la boite de dialogue + Add new reading lists + Ajouter de nouvelles listes de lecture - - Show comics server options dialog - Ouvrir la boite de dialogue du serveur + You are adding too many libraries. + +You probably only need one library in your top level comics folder, you can browse any subfolders using the folders section in the left sidebar. + +YACReaderLibrary will not stop you from creating more libraries but you should keep the number of libraries low. + Vous ajoutez trop de bibliothèques. + +Vous n'avez probablement besoin que d'une bibliothèque dans votre dossier BD de niveau supérieur, vous pouvez parcourir les sous-dossiers en utilisant la section des dossiers dans la barre latérale gauche. + +YACReaderLibrary ne vous empêchera pas de créer plus de bibliothèques, mais vous devriez garder le nombre de bibliothèques bas. - - Open folder... - Ouvrir le dossier... + Set as read + Marquer comme lu - - Set as uncompleted - Marquer comme incomplet + Delete selected comics + Supprimer la bande dessinée sélectionnée - - Set as completed - Marquer comme complet + Export comics info + Exporter les infos des bandes dessinées - - Open containing folder... - Ouvrir le dossier... + Show options dialog + Ouvrir la boite de dialogue - - Reset comic rating - Supprimer la note d'évaluation + Create a new library + Créer une nouvelle librairie - - Select all comics - Sélectionner toutes les bandes dessinées + Library not available + Librairie non disponible - - Edit - Editer + Import comics info + Importer les infos des bandes dessinées - Asign current order to comics - Assigner l'ordre actuel à vos comics + Add new reading list + Ajouter une nouvelle liste de lecture - - Update cover - Mise à jour des couvertures + Save selected covers to... + Exporter la couverture vers... - - Delete selected comics - Supprimer la bande dessinée sélectionnée + Open current comic + Ouvrir cette bande dessinée - Hide comic flow - Cacher le comic flow + YACReader Library + Librairie de YACReader - - Download tags from Comic Vine - Télécharger les informations de Comic Vine + Add a new reading list to the current library + Ajouter une nouvelle liste de lecture à la bibliothèque actuelle - - Edit shortcuts - + Error creating the library + Erreur lors de la création de la librairie - Update folder - Mettre à jour le dossier + Mettre à jour le dossier - - Update current folder - Mettre à jour ce dossier + Unpack covers + Désarchiver les couvertures - - Add new reading list - Ajouter une nouvelle liste de lecture + Update needed + Mise à jour requise - - Add a new reading list to the current library - Ajouter une nouvelle liste de lecture à la bibliothèque actuelle + Open an existing library + Ouvrir une librairie existante - - Remove reading list - Supprimer la liste de lecture + Show or hide read marks + Afficher ou masquer les marques de lecture - - Remove current reading list from the library - Supprimer la liste de lecture actuelle de la bibliothèque + Library name already exists + Le nom de la librairie existe déjà - - Add new label - + There is another library with the name '%1'. + Une autre librairie a le nom '%1'. - - Add a new label to this library - + Remove reading list + Supprimer la liste de lecture - - Rename selected list - + Download new version + Téléchrger la nouvelle version - - Rename any selected labels or lists - + Delete comics + Supprimer les comics - - Add to... - Ajouter à... + Select all comics + Sélectionner toutes les bandes dessinées - - Favorites - Favoris + Assign current order to comics + Assigner l'ordre actuel aux bandes dessinées - - Add selected comics to favorites list - Ajouter la bande dessinée sélectionnée à la liste des favoris + Pack the covers of the selected library + Archiver les couvertures de la librairie sélectionnée - - Folder - Dossier + Help, About YACReader + Aide, à propos de YACReader - - Comic - Bande dessinée + Favorites + Favoris - - Upgrade failed - + Set comic as unread + Marquer cette bande dessinée comme non-lu - - There were errors during library upgrade in: - + Select root node + Allerà la racine - - Update needed - Mise à jour requise + Unpack a catalog + Désarchiver un catalogue - - This library was created with a previous version of YACReaderLibrary. It needs to be updated. Update now? - Cette librairie a été créée avec une ancienne version de YACReaderLibrary. Mise à jour necessaire. Mettre à jour? + All the selected comics will be deleted from your disk. Are you sure? + Tous les comics sélectionnés vont être supprimés de votre disque. Êtes-vous sûr? - Update failed - Echec de la mise à jour + Download tags from Comic Vine + Télécharger les informations de Comic Vine - The current library can't be udpated. Check for write write permissions on: - Cette librairie ne peut pas être mise à jour. Vérifiez les droits d'accès: + Set as unread + Marquer comme non-lu - - Download new version - Téléchrger la nouvelle version + Library not found + Librairie introuvable - - This library was created with a newer version of YACReaderLibrary. Download the new version now? - Cette librairie a été créée avec une version plus récente de YACReaderLibrary. Télécharger la nouvelle version? + Rename library + Renommer la librairie - - Library '%1' is no longer available. Do you want to remove it? - La librarie '%1' n'est plus disponible. Voulez-vous la supprimer? + Remove library + Supprimer la librairie - - Old library - Ancienne librairie + Open containing folder... + Ouvrir le dossier... - - Library '%1' has been created with an older version of YACReaderLibrary. It must be created again. Do you want to create the library now? - La librarie '%1' a été créée avec une ancienne version de YACReaderLibrary. Elle doit être re-créée. Voulez-vous créer la librairie? + library? + la librairie? - - - Copying comics... - Copier la bande dessinée... + Save covers of the selected comics as JPG files + Enregistrer les couvertures des bandes dessinées sélectionnées en tant que fichiers JPG - - - Moving comics... - Déplacer la bande dessinée... + Are you sure? + Êtes-vous sûr? - - Folder name: + Set as manga - - No folder selected + Set issue as manga - - Please, select a folder first + Set as normal - - Error in path + Set issue as normal - - There was an error accessing the folder's path + Add new folder - - The selected folder and all its contents will be deleted from your disk. Are you sure? + Add new folder to the current library - - There was an issue trying to delete the selected folders. Please, check for write permissions and be sure that any applications are using these folders or any of the contained files. + Delete folder - - Add new reading lists - Ajouter de nouvelles listes de lecture + Delete current folder from disk + - - - List name: + Collapse all nodes - - Delete list/label + Change between comics views - - The selected item will be deleted, your comics or folders will NOT be deleted from your disk. Are you sure? - L'élément sélectionné sera supprimé, vos bandes dessinées ou dossiers ne seront pas supprimés de votre disque. Êtes-vous sûr? + Set as comic + - - Rename list name + Edit shortcuts - - Save covers + Add new label - - You are adding too many libraries. + Add a new label to this library - - You are adding too many libraries. - -You probably only need one library in your top level comics folder, you can browse any subfolders using the folders section in the left sidebar. - -YACReaderLibrary will not stop you from creating more libraries but you should keep the number of libraries low. - Vous ajoutez trop de bibliothèques. - -Vous n'avez probablement besoin que d'une bibliothèque dans votre dossier BD de niveau supérieur, vous pouvez parcourir les sous-dossiers en utilisant la section des dossiers dans la barre latérale gauche. - -YACReaderLibrary ne vous empêchera pas de créer plus de bibliothèques, mais vous devriez garder le nombre de bibliothèques bas. + Rename selected list + - - - YACReader not found + Rename any selected labels or lists - - Library not found - Librairie introuvable + Upgrade failed + - - The selected folder doesn't contain any library. - Le dossier sélectionné ne contient aucune librairie. + There were errors during library upgrade in: + - - Are you sure? - Êtes-vous sûr? + Folder name: + - - Do you want remove - Voulez-vous supprimer + No folder selected + - - library? - la librairie? + Please, select a folder first + - - Remove and delete metadata - Supprimer les métadata + Error in path + - - Assign comics numbers + There was an error accessing the folder's path - - Assign numbers starting in: + The selected folder and all its contents will be deleted from your disk. Are you sure? - - Unable to delete - - Show or hide read marks - Afficher ou masquer les marques de lecture - - - - - Add new folder + There was an issue trying to delete the selected folders. Please, check for write permissions and be sure that any applications are using these folders or any of the contained files. - - Add new folder to the current library + List name: - - - Delete folder + Delete list/label - - Delete current folder from disk + Rename list name - - Collapse all nodes + Save covers - - - Change between comics views + You are adding too many libraries. - - Assign current order to comics - Assigner l'ordre actuel aux bandes dessinées + YACReader not found + - YACReader not found. YACReader should be installed in the same folder as YACReaderLibrary. - YACReader not found. There might be a problem with your YACReader installation. - There was an issue trying to delete the selected comics. Please, check for write permissions in the selected files or containing folder. - Asign comics numbers - Assigner les numéros aux comics + Assign comics numbers + - Asign numbers starting in: - Assigner les numéros: + Assign numbers starting in: + - - Error creating the library - Erreur lors de la création de la librairie + Remove comics + - - Error updating the library - Erreur lors de la mise à jour de la librairie + Comics will only be deleted from the current label/list. Are you sure? + + + + LocalComicListModel - - Error opening the library - Erreur lors de l'ouverture de la librairie + file name + + + + LogWindow - - Delete comics - Supprimer les comics + Log window + - - All the selected comics will be deleted from your disk. Are you sure? - Tous les comics sélectionnés vont être supprimés de votre disque. Êtes-vous sûr? + &Pause + - - Remove comics + &Save - - Comics will only be deleted from the current label/list. Are you sure? + C&lear - - Library name already exists - Le nom de la librairie existe déjà + &Copy + - - There is another library with the name '%1'. - Une autre librairie a le nom '%1'. + Level: + - - - LocalComicListModel - - file name + &Auto scroll NoLibrariesWidget - + create your first library + Créez votre première librairie + + You don't have any libraries yet Vous n'avez pas encore de librairie - <p>You can create a library in any folder, YACReaderLibrary will import all comics and folders from this folder. If you have created any library in the past you can open them.</p><p>Don't forget that you can use YACReader as a stand alone application for reading the comics on your computer.</p> - <p>Vous pouvez creer une librairie dans n'importe quel dossierr, YACReaderLibrary importera les dossiers et les bandes dessinées contenus dans ce dossier. Si vous avez déjà crer des librairies, vous pouvez les ouvrir.</p><p>N'oubliez pas que vous pouvez utiliser YACReader en tant que stand alone pour lire vos bandes dessinées sur votre ordinateur.</p> - - - - create your first library - Créez votre première librairie + <p>Vous pouvez creer une librairie dans n'importe quel dossierr, YACReaderLibrary importera les dossiers et les bandes dessinées contenus dans ce dossier. Si vous avez déjà crer des librairies, vous pouvez les ouvrir.</p><p>N'oubliez pas que vous pouvez utiliser YACReader en tant que stand alone pour lire vos bandes dessinées sur votre ordinateur.</p> - add an existing one Ajouter une librairie existante @@ -1340,292 +1083,316 @@ YACReaderLibrary ne vous empêchera pas de créer plus de bibliothèques, mais v OptionsDialog - + Options + Options + + + Tray icon settings (experimental) + + + + Close to tray + + + + Start into the system tray + + + Edit Comic Vine API key - Comic Vine API key - Enable background image - Opacity level - Blur level - Use selected comic cover as background - Restore defautls - Background - + Display continue reading banner + + + + Continue reading + + + Comic Flow - Grid view - General - - - Options - Options - PropertiesDialog - - General info - Infos générales + of: + sur: - - Authors - Auteurs + Day: + Jour: + + + Plot + Intrigue + + + Size: + Taille: + + + Year: + Année: + + + Inker(s): + Encreur(s): - Publishing Publication - - Plot - Intrigue + Publisher: + Editeur: - - Cover page - Couverture + General info + Infos générales - - Title: - Titre: + Color/BW: + Couleur/Noir et blanc: - - - of: - sur: + Edit selected comics information + Editer les informations du comic sélectionné + + + Penciller(s): + Dessinateur(s): + + + Colorist(s): + Coloriste(s): + + + Genre: + Genre: - Issue number: Numéro: - - Volume: - Volume: + Month: + Mois: + + + Notes: + Notes: + + + Synopsis: + Synopsis: + + + Title: + Titre: - Arc number: Arc numéro: - - Story arc: - Arc narratif: + Not found + Introuvable - - Genre: - Genere: - Genre: + Characters: + Personnages: - - Size: - Taille: + Authors + Auteurs - - Writer(s): - Scénariste(s): + Age rating: + Limite d'âge: - - Penciller(s): - Dessinateur(s): + Story arc: + Arc narratif: - - Inker(s): - Encreur(s): + Writer(s): + Scénariste(s): - - Colorist(s): - Coloriste(s): + Comic not found. You should update your library. + Comic introuvable. Vous devriez mettre à jour votre librairie. - - Letterer(s): - Lettreur(s): + Edit comic information + Editer les informations du comic + + + Cover page + Couverture - Cover Artist(s): Artiste(s) de couverture: - - Day: - Jour: + Volume: + Volume: - - Month: - Mois: + Format: + Format: - - Year: - Année: + Letterer(s): + Lettreur(s): - - Publisher: - Editeur: + Manga: + - - Format: - Format: + Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> view </a> + + + + QObject - - Color/BW: - Couleur/Noir et blanc: + 7z lib not found + - - Age rating: - Limite d'âge: + unable to load 7z lib from ./utils + - - Synopsis: - Synopsis: + Trace + - - Characters: - Personnages: + Debug + - - Notes: - Notes: + Info + + + + Warning + - - Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> view </a> + Error + + + + Fatal + + + + + QsLogging::LogWindowModel + + Time - - Not found - Introuvable + Level + - - Comic not found. You should update your library. - Comic introuvable. Vous devriez mettre à jour votre librairie. + Message + + + + QsLogging::Window - - Edit selected comics information - Editer les informations du comic sélectionné + &Pause + - - Edit comic information - Editer les informations du comic + &Resume + - - - QObject - - 7z lib not found + Save log - - unable to load 7z lib from ./utils + Log file (*.log) RenameLibraryDialog - - New Library Name : - Nouveau nom de librairie: - - - - Rename - Renommer + Rename current library + Renommer la librairie actuelle - Cancel Annuler - - Rename current library - Renommer la librairie actuelle + Rename + Renommer + + + New Library Name : + Nouveau nom de librairie: ScraperResultsPaginator - Number of volumes found : %1 - - page %1 of %2 - Number of %1 found : %2 @@ -1633,12 +1400,10 @@ YACReaderLibrary ne vous empêchera pas de créer plus de bibliothèques, mais v SearchSingleComic - Please provide some additional information. - Series: @@ -1646,12 +1411,10 @@ YACReaderLibrary ne vous empêchera pas de créer plus de bibliothèques, mais v SearchVolume - Please provide some additional information. - Series: @@ -1659,27 +1422,22 @@ YACReaderLibrary ne vous empêchera pas de créer plus de bibliothèques, mais v SelectComic - Please, select the right comic info. - comics - loading cover - loading description - description unavailable @@ -1687,27 +1445,22 @@ YACReaderLibrary ne vous empêchera pas de créer plus de bibliothèques, mais v SelectVolume - Please, select the right series for your comic. - volumes - loading cover - loading description - description unavailable @@ -1715,157 +1468,84 @@ YACReaderLibrary ne vous empêchera pas de créer plus de bibliothèques, mais v SeriesQuestion - - You are trying to get information for various comics at once, are they part of the same series? - + no + non - yes - oui + oui - - no - non + You are trying to get information for various comics at once, are they part of the same series? + ServerConfigDialog - - set port - Configurer le port - - - EASY SERVER CONNECTION - CONNECTION AU SERVEUR - - - SERVER ADDRESS - ADRESSE DU SERVEUR - - - just scan the code with your device!! - Scannez simplement le code!! + Port + Port - YACReader is now available for iOS devices, the best comic reading experience now in your iPad, iPhone or iPod touch. <a href='http://ios.yacreader.com' style='color:rgb(193, 148, 65)'> Discover it! </a> - YACReader est désormais disponible sur iOS, la meilleur manière de lire sur iPad, iPhone ou iPod touch. <a href='http://ios.yacreader.com' style='color:rgb(193, 148, 65)'> Essayez-le! </a> + enable the server + Autoriser le serveur - IP address - Adresse IP + set port + Configurer le port - Server connectivity information - Scan it! - YACReader is available for iOS devices. <a href='http://ios.yacreader.com' style='color:rgb(193, 148, 65)'> Discover it! </a> - Choose an IP address - - Port - Port - - - - enable the server - Autoriser le serveur - - - display less information about folders in the browser to improve the performance - Could not load libqrencode. - - QR generator error! - QR generator error! - SortVolumeComics - Please, sort the list of comics on the left until it matches the comics' information. - sort comics to match comic information - issues - remove selected comics - restore all removed comics - - TableModel - - yes - oui - - - no - non - - - Title - Titre - - - File Name - Nom du fichier - - - Pages - Pages - - - Size - Taille - - - Read - Lu - - TitleHeader - SEARCH @@ -1873,25 +1553,21 @@ to improve the performance UpdateLibraryDialog - - Updating.... - Mise à jour... + Update library + Mettre la librairie à jour - Cancel Annuler - - Update library - Mettre la librairie à jour + Updating.... + Mise à jour... VolumeComicsModel - title @@ -1899,83 +1575,92 @@ to improve the performance VolumesModel - + publisher + éditeur + + year - issues + + + YACReader::TrayIconController - - publisher - éditeur + &Restore + + + + &Quit + + + + Systray + + + + YACReaderLibrary will keep running in the system tray. To terminate the program, choose <b>Quit</b> in the context menu of the system tray icon. + - YACReaderDeletingProgress + YACReader::WhatsNewDialog - - Please wait, deleting in progress... - Attendez, suppression en cours... + Close + + + + YACReaderDeletingProgress - cancel Annuler + + Please wait, deleting in progress... + Attendez, suppression en cours... + YACReaderFieldEdit - - - Click to overwrite - Cliquer pour modifier - - - Restore to default Restaurer les paramètres par défaut - - - YACReaderFieldPlainTextEdit - - - - Click to overwrite Cliquer pour modifier + + + YACReaderFieldPlainTextEdit - Restore to default Restaurer les paramètres par défaut + + Click to overwrite + Cliquer pour modifier + YACReaderFlowConfigWidget - - How to show covers: - Comment voir les couvertures: - - - CoverFlow look Vue CoverFlow - + How to show covers: + Comment voir les couvertures: + + Stripe look Vue alignée - Overlapped Stripe look Vue superposée @@ -1983,166 +1668,135 @@ to improve the performance YACReaderGLFlowConfigWidget - - Presets: - Réglages: - - - - Classic look - Vue classique - - - - Stripe look - Vue alignée + Zoom + Zoom - - Overlapped Stripe look - Vue superposée + Light + Lumière - - Modern look - Vue moderne + Show advanced settings + Réglages avancés - Roulette look Vue roulette - - Show advanced settings - Réglages avancés - - - - Custom: - Personnalisation: + Cover Angle + Angle des couvertures - - View angle - Angle de vue + Stripe look + Vue alignée - Position Position - - Cover gap - Espace entre les couvertures + Z offset + Axe Z + + + Y offset + Axe Y - Central gap Espace central - - Zoom - Zoom + Presets: + Réglages: - - Y offset - Axe Y + Overlapped Stripe look + Vue superposée - - Z offset - Axe Z + Modern look + Vue moderne - - Cover Angle - Angle des couvertures + View angle + Angle de vue - - Visibility - Visibilité + Max angle + Angle maximum - - Light - Lumière + Custom: + Personnalisation: - - Max angle - Angle maximum + Classic look + Vue classique - - Low Performance - Basse performance + Cover gap + Espace entre les couvertures - High Performance Haute performance - + Performance: + Performance: + + Use VSync (improve the image quality in fullscreen mode, worse performance) Utiliser VSync (améliore la qualité de l'image en plein écran, diminue la performance) - - Performance: - Performance: + Visibility + Visibilité + + + Low Performance + Basse performance YACReaderNavigationController - - No favorites - Pas de favoris + You are not reading anything yet, come on!! + Vous ne lisez rien encore, allez !! - - You are not reading anything yet, come on!! - Vous ne lisez rien encore, allez !! + No favorites + Pas de favoris YACReaderOptionsDialog - Save Sauvegarder - + Use hardware acceleration (restart needed) + Utiliser l'accélération hardware (redémarrage nécessaire) + + Cancel Annuler - Edit shortcuts - Shortcuts - - - Use hardware acceleration (restart needed) - Utiliser l'accélération hardware (redémarrage nécessaire) - YACReaderSearchLineEdit - type to search @@ -2150,38 +1804,28 @@ to improve the performance YACReaderSideBar - - Libraries - - - - - Folders - - - - Reading Lists - Listes de lecture + Listes de lecture - LIBRARIES LIBRAIRIES - FOLDERS DOSSIERS - READING LISTS - Listes de lecture + Listes de lecture + + + Libraries + - Search folders and comics - Recherche de dossiers et de comics + Folders + diff --git a/YACReaderLibrary/yacreaderlibrary_it.ts b/YACReaderLibrary/yacreaderlibrary_it.ts new file mode 100644 index 000000000..faec6a886 --- /dev/null +++ b/YACReaderLibrary/yacreaderlibrary_it.ts @@ -0,0 +1,1856 @@ + + + + + ActionsShortcutsModel + + None + Nessuno + + + + AddLabelDialog + + red + Rosso + + + blue + Blu + + + dark + Scuro + + + cyan + Azzurro + + + pink + Rosa + + + green + Verde + + + light + Luminoso + + + white + Bianco + + + Choose a color: + Seleziona un colore: + + + accept + Accetta + + + cancel + Cancella + + + orange + Arancione + + + purple + Porpora + + + violet + Viola + + + yellow + Giallo + + + Label name: + Nome etichetta: + + + + AddLibraryDialog + + Add + Aggiungi + + + Add an existing library + Aggiungi ad una libreria esistente + + + Cancel + Cancella + + + Comics folder : + Cartella fumetti: + + + Library Name : + Nome libreria: + + + Library name : + + + + + ApiKeyDialog + + Accept + Accetta + + + Cancel + Cancella + + + Before you can connect to Comic Vine, you need your own API key. Please, get one free <a href="http://www.comicvine.com/api/">here</a> + Prima di conneterti a "Comic Vine" devi avere la tua chiave API. Per favore recuperane una da <a href="http://www.comicvine.com/api/">QUI</a + + + Paste here your Comic Vine API key + Incolla qui la tua chiave API di "Comic Vine" + + + + ClassicComicsView + + Hide comic flow + Nascondi il flusso dei fumetti + + + + ComicInfoView + + Authors + Autori + + + writer + + + + penciller + + + + inker + + + + colorist + + + + letterer + + + + cover artist + + + + Publisher + + + + color + + + + b/w + + + + Characters + + + + + ComicModel + + no + No + + + yes + Si + + + Read + Leggi + + + Size + Dimensione + + + Pages + Pagine + + + Title + Titolo + + + Current Page + Pagina corrente + + + File Name + Nome file + + + Rating + Valutazione + + + + ComicVineDialog + + back + Indietro + + + next + Prossimo + + + skip + Salta + + + close + Chiudi + + + Retrieving tags for : %1 + Ricezione tag per: %1 + + + Looking for comic... + Sto cercando il fumetto... + + + search + Cerca + + + Looking for volume... + Sto cercando il fumetto... + + + comic %1 of %2 - %3 + Fumetto %1 di %2 - %3 + + + %1 comics selected + Fumetto %1 selezionato + + + Error connecting to ComicVine + Errore durante la connessione a ComicVine + + + Retrieving volume info... + Sto ricevendo le informazioni per l'abum... + + + + CreateLibraryDialog + + Create new library + Crea una nuova libreria + + + Cancel + Cancella + + + Create + Crea + + + Create a library could take several minutes. You can stop the process and update the library later for completing the task. + Creare una Libreria può aver bisogno di alcuni minuti. Puoi fermare il processo ed aggiornare la libreria più tardi. + + + The selected path does not exist or is not a valid path. Be sure that you have write access to this folder + Il percorso selezionato non esiste oppure non è valido. Controlla di avere i permessi di scrittura per questa cartella + + + Comics folder : + Cartella fumetti: + + + Library Name : + Nome libreria: + + + Path not found + Percorso non trovato + + + + EditShortcutsDialog + + Shortcut in use + Scorciatoia in uso + + + Restore defaults + Resetta al Default + + + Shortcuts settings + Impostazioni scorciatoie + + + The shortcut "%1" is already assigned to other function + La scorciatoia "%1" è già assegnata ad un' altra funzione + + + To change a shortcut, double click in the key combination and type the new keys. + Per cambiare una sorciatoia fai doppio click sulla combinazione tasti e digita la nuova combinazione. + + + + EmptyFolderWidget + + Empty folder + Cartella vuota + + + Subfolders in this folder + Sottocartelle in questa cartella + + + Drag and drop folders and comics here + Prendi e sposta le cartelle qui + + + + EmptyLabelWidget + + This label doesn't contain comics yet + Per ora questa etichetta non contiene fumetti + + + + EmptyReadingListWidget + + This reading list does not contain any comics yet + Per ora questa lista non contiene fumetti + + + + ExportComicsInfoDialog + + Output file : + File di Output: + + + Destination database name + Nome database di destinazione + + + Cancel + Cancella + + + Create + Crea + + + The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder + Il percorso selezionato per il file di Output non esiste oppure non è valido. Controlla di avere i permessi di scrittura per questa cartella + + + Export comics info + Esporta informazioni fumetto + + + Problem found while writing + Trovato problema durante la scrittura + + + + ExportLibraryDialog + + Cancel + Cancella + + + Create + Crea + + + The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder + Il percorso selezionato per il file di Output non esiste oppure non è valido. Controlla di avere i permessi di scrittura per questa cartella + + + Output folder : + Cartella di Output: + + + Problem found while writing + Trovato problema durante la scrittura + + + Create covers package + Crea pacchetto delle copertine + + + Destination directory + Cartella di destinazione + + + + FileComic + + Format not supported + Formato non supportato + + + 7z not found + 7z non trovato + + + Unknown error opening the file + Errore sconosciuto all'apertura del file + + + CRC error on page (%1): some of the pages will not be displayed correctly + Errore CRC alla pagina (%1): alcune pagine potrebbero non essere visualizzate correttamente + + + + GridComicsView + + Show info + Mostra informazioni + + + + HelpAboutDialog + + Help + Aiuto + + + About + Informazioni + + + + ImportComicsInfoDialog + + Cancel + Cancella + + + Import + Importa + + + Info database location : + Informazioni posizione database: + + + Import comics info + Importa informazioni fumetto + + + Comics info file (*.ydb) + File informazioni fumetto (*.ydb) + + + + ImportLibraryDialog + + Destination folder : + Cartella di destinazione: + + + Cancel + Cancella + + + Unpack + Decomprimi + + + Compresed library covers (*.clc) + Libreria di copertine compresse (*.clc) + + + Package location : + Posizione PAcchetto: + + + Library Name : + Nome libreria: + + + Extract a catalog + Estrai un catalogo + + + + ImportWidget + + stop + Ferma + + + Importing comics + Sto importando i fumetti + + + <p>YACReaderLibrary is now creating a new library.</p><p>Create a library could take several minutes. You can stop the process and update the library later for completing the task.</p> + <p>YacReader sta creando una nuova libreria.</p><p>La creazione di una libreria può durare diversi minuti. Puoi fermare l'attività ed aggiornare la libreria più tardi, completando l'attività</p> + + + Some of the comics being added... + Alcuni fumetti che sto aggiungendo... + + + Updating the library + Sto aggiornando la Libreria + + + <p>The current library is being updated. For faster updates, please, update your libraries frequently.</p><p>You can stop the process and continue updating this library later.</p> + <p>Quest alibreria si sta aggiornando. Per aggiornamenti più veloci aggiorna la tua libreria di frequente.</p><p>Puoi fermare il processo ed aggiornare la libreria più tardi.</p> + + + Upgrading the library + + + + <p>The current library is being upgraded, please wait.</p> + + + + + LibraryWindow + + Edit + Edita + + + The selected folder doesn't contain any library. + La cartella selezionata non contiene nessuna Libreria. + + + This library was created with a previous version of YACReaderLibrary. It needs to be updated. Update now? + Questa libreria è stata creata con una versione precedente di YACREaderLibrary. Deve essere aggiornata. Aggiorno ora? + + + Comic + Fumetto + + + Folder name: + Nome della cartella: + + + The selected folder and all its contents will be deleted from your disk. Are you sure? + La cartella seleziona e tutto il suo contenuto verranno cancellati dal tuo disco. Sei sicuro? + + + Update current folder + Aggiorna la cartella corrente + + + Error opening the library + Errore nell'apertura della libreria + + + Show/Hide marks + Mostra/Nascondi + + + YACReader not found + YACReader non trovato + + + Show comics server options dialog + Mostra le opzioni per il server dei fumetti + + + There was an issue trying to delete the selected folders. Please, check for write permissions and be sure that any applications are using these folders or any of the contained files. + C'è stato un problema cancellando le cartelle selezionate. Per favore controlla i tuoi permessi di scrittura e sii sicuro che non ci siano altre applicazioni che usano le stesse cartelle. + + + Remove current library from your collection + Rimuovi la libreria corrente dalla tua collezione + + + Set comic as read + Setta il fumetto come letto + + + Rename list name + Rinomina la lista + + + Add selected comics to favorites list + Aggiungi i fumetti selezionati alla lista dei favoriti + + + Remove and delete metadata + Rimuovi e cancella i Metadati + + + YACReader not found, YACReader should be installed in the same folder as YACReaderLibrary. + YACReader non trovato, YACReader deve esere installato nella stessa cartella di YACReaderLibrary. + + + Old library + Vecchia libreria + + + Update cover + Aggiorna copertina + + + Rename any selected labels or lists + Rinomina qualsiasi etichetta o lista selezionata + + + Set as completed + Segna come completo + + + There was an error accessing the folder's path + C'è stato un errore nell'accesso al percorso della cartella + + + Library + Libreria + + + Add new folder to the current library + Aggiungi una nuova cartella alla libreria corrente + + + Comics will only be deleted from the current label/list. Are you sure? + I fumetti verranno cancellati dall'etichetta/lista corrente. Sei sicuro? + + + Rename current library + Rinomina la libreria corrente + + + Fullscreen mode on/off + Modalità a schermo interno on/off + + + This library was created with a newer version of YACReaderLibrary. Download the new version now? + Questa libreria è stata creata con una verisone più recente di YACReaderLibrary. Scarico la versione aggiornata ora? + + + Moving comics... + Sto muovendo i fumetti... + + + Open current comic on YACReader + Apri il fumetto corrente con YACReader + + + Update current library + Aggiorna la Libreria corrente + + + Copying comics... + Sto copiando i fumetti... + + + Library '%1' is no longer available. Do you want to remove it? + La libreria '%1' non è più disponibile, la vuoi cancellare? + + + Update library + Aggiorna Libreria + + + Open folder... + Apri Cartella... + + + Do you want remove + Vuoi rimuovere + + + Set as uncompleted + Segna come non completo + + + Error in path + Errore nel percorso + + + Reset comic rating + Resetta la valutazione dei fumetti + + + Error updating the library + Errore aggiornando la libreria + + + Folder + Cartella + + + The selected item will be deleted, your comics or folders will NOT be deleted from your disk. Are you sure? + Gli elementi selezionati verranno cancellati, i tuoi fumetti o cartella NON verranno cancellati dal tuo disco. Sei sicuro? + + + Expand all nodes + Espandi tutti i nodi + + + Delete current folder from disk + Cancella la cartella corrente dal disco + + + List name: + Nome lista: + + + Add to... + Aggiungi a... + + + Library '%1' has been created with an older version of YACReaderLibrary. It must be created again. Do you want to create the library now? + La libreria '%1' è stata creata con una versione precedente di YACREaderLibrary. Deve essere ricreata. Lo vuoi fare ora? + + + Pack covers + Compatta Copertine + + + Save covers + Salva Copertine + + + Change between comics views + Cambia tra i modi di visualizzazione dei fumetti + + + Remove current reading list from the library + Rimuovi la lista di lettura dalla libreria + + + Add new reading lists + Aggiungi una lista di lettura + + + You are adding too many libraries. + +You probably only need one library in your top level comics folder, you can browse any subfolders using the folders section in the left sidebar. + +YACReaderLibrary will not stop you from creating more libraries but you should keep the number of libraries low. + Stai aggiungendo troppe Libreire + +Hai probabilemnte bisogno di una sola Libreria al livello superiore, puoi poi navigare qualsiasi sotto cartella usando la selezione delle cartella a sinistra + +YACReader non ti fermerà dal creare altre librerie ma è meglio se terrai il numero di librerie basso. + + + Set as read + Setta come letto + + + Assign comics numbers + Assegna un numero ai fumetti + + + Delete selected comics + Cancella i fumetti selezionati + + + Export comics info + Esporta informazioni fumetto + + + Show options dialog + Mostra le opzioni + + + Please, select a folder first + Per cortesia prima seleziona una cartella + + + Create a new library + Crea una nuova libreria + + + Library not available + Libreria non disponibile + + + Import comics info + Importa informazioni fumetto + + + The current library can't be udpated. Check for write write permissions on: + La libreria corrente non può essere aggiornata. Controlla i tuoi permessi di scrittura su: + + + There was an issue trying to delete the selected comics. Please, check for write permissions in the selected files or containing folder. + C'è un problema nel cancellare i fumetti selezionati. Per favore controlla i tuoi permessi di scrittura sui file o sulla cartella. + + + Add new reading list + Aggiorna la lista di lettura + + + Save selected covers to... + Salva le copertine selezionate in... + + + Open current comic + Apri il fumetto corrente + + + YACReader Library + Libreria YACReader + + + Add a new reading list to the current library + Aggiungi una lista di lettura alla libreria corrente + + + Error creating the library + Errore creando la libreria + + + Update failed + Aggiornamento fallito + + + You are adding too many libraries. + Stai aggiungendto troppe librerie. + + + Update folder + Aggiorna Cartella + + + Unpack covers + Scompatta le Copertine + + + Update needed + Devi aggiornarmi + + + Open an existing library + Apri una libreria esistente + + + Show or hide read marks + Mostra o nascondi lo stato di lettura + + + Library name already exists + Esiste già una libreria con lo stesso nome + + + There is another library with the name '%1'. + Esiste già una libreria con il nome '%1'. + + + Remove reading list + Rimuovi la lista di lettura + + + Delete folder + Cancella Cartella + + + Assign numbers starting in: + Assegna numeri partendo da: + + + Download new version + Scarica la nuova versione + + + Delete comics + Cancella i fumetti + + + Add new folder + Aggiungi una nuova cartella + + + Select all comics + Seleziona tutti i fumetti + + + Assign current order to comics + Assegna l'ordinamento corrente ai fumetti + + + Pack the covers of the selected library + Compatta le copertine della libreria selezionata + + + Help, About YACReader + Aiuto, Crediti YACReader + + + Collapse all nodes + Compatta tutti i nodi + + + Favorites + Favoriti + + + Rename selected list + Rinomina la lista selezionata + + + Delete list/label + Cancella Lista/Etichetta + + + Set comic as unread + Setta il fumetto come non letto + + + Edit shortcuts + Edita scorciatoie + + + Select root node + Seleziona il nodo principale + + + No folder selected + Nessuna cartella selezionata + + + Unpack a catalog + Scompatta un catalogo + + + All the selected comics will be deleted from your disk. Are you sure? + Tutti i fumetti selezionati saranno cancellati dal tuo disco. Sei sicuro? + + + Download tags from Comic Vine + Scarica i Tag da Comic Vine + + + Remove comics + Rimuovi i fumetti + + + Add a new label to this library + Aggiungi una nuova etichetta a questa libreria + + + Set as unread + Setta come non letto + + + Library not found + Libreria non trovata + + + Rename library + Rinomina la libreria + + + Remove library + Rimuovi la libreria + + + Open containing folder... + Apri la cartella dei contenuti... + + + Add new label + Aggiungi una nuova etichetta + + + Unable to delete + Non posso cancellare + + + library? + Libreria? + + + Save covers of the selected comics as JPG files + Salva le copertine dei fumetti selezionati come file JPG + + + Are you sure? + Sei sicuro? + + + Set as manga + + + + Set issue as manga + + + + Set as normal + + + + Set issue as normal + + + + Set as comic + + + + Upgrade failed + + + + There were errors during library upgrade in: + + + + YACReader not found. YACReader should be installed in the same folder as YACReaderLibrary. + + + + YACReader not found. There might be a problem with your YACReader installation. + + + + + LocalComicListModel + + file name + Nome file + + + + LogWindow + + Log window + + + + &Pause + + + + &Save + + + + C&lear + + + + &Copy + + + + Level: + + + + &Auto scroll + + + + + NoLibrariesWidget + + create your first library + Crea la tua prima libreria + + + You don't have any libraries yet + Per ora non hai ancora nessuna libreria + + + <p>You can create a library in any folder, YACReaderLibrary will import all comics and folders from this folder. If you have created any library in the past you can open them.</p><p>Don't forget that you can use YACReader as a stand alone application for reading the comics on your computer.</p> + <p>Puoi creare una libreria in qualsiasi cartella, YACReader importerà tutti i fumetti e struttura da questa certella. Se hai creato una qualsiasia libreria nel passato la puoi aprire. </p><p>Non dimenticare che puoi usare YACReader come applicazione stand alone per leggere i fumetti sul tuo PC.</p> + + + add an existing one + Aggiungine una esistente + + + + OptionsDialog + + Restore defautls + Resetta al Default + + + Background + Sfondo + + + Blur level + Livello di sfumatura + + + Enable background image + Abilita l'immagine di sfondo + + + Options + Opzioni + + + Comic Vine API key + API di ComicVine + + + Edit Comic Vine API key + Edita l'API di ComicVine + + + Opacity level + Livello di opacità + + + General + Generale + + + Use selected comic cover as background + Usa la cover del fumetto selezionato come sfondo + + + Comic Flow + Flusso dei fumetti + + + Grid view + Vista a Griglia + + + Tray icon settings (experimental) + + + + Close to tray + + + + Start into the system tray + + + + Display continue reading banner + + + + Continue reading + + + + + PropertiesDialog + + Day: + Giorno: + + + Plot + Trama + + + Size: + Dimesioni: + + + Year: + Anno: + + + Inker(s): + Inchiostratore(i): + + + Publishing + Pubblicazione + + + Publisher: + Editore: + + + General info + Informazioni generali + + + Color/BW: + Colore o B/N: + + + Edit selected comics information + Edita le informazioni del fumetto selezionato + + + Penciller(s): + Mine: + + + Colorist(s): + Colorista(i): + + + Genre: + Genere: + + + Issue number: + Numeri emessi: + + + Month: + Mese: + + + Notes: + Note: + + + Synopsis: + Sinossi: + + + Title: + Titolo: + + + Not found + Non trovato + + + Characters: + Personaggi: + + + Authors + Autori + + + Age rating: + Valutazione età: + + + Story arc: + Arco Narrativo: + + + Writer(s): + Scrittore(i): + + + Comic not found. You should update your library. + Fumetto non trovato, dovresti aggiornare la Libreria. + + + Edit comic information + Edita le informazioni del fumetto + + + Cover page + Pagina Copertina + + + Cover Artist(s): + Artista(i) copertina: + + + Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> view </a> + Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> Vai </a> + + + Volume: + Album: + + + Format: + Formato: + + + Letterer(s): + Letterista(i): + + + of: + + + + Arc number: + + + + Manga: + + + + + QObject + + 7z lib not found + Libreria 7z non trovata + + + unable to load 7z lib from ./utils + Impossibile caricare la libreria 7z da ./utils + + + Trace + + + + Debug + + + + Info + + + + Warning + + + + Error + + + + Fatal + + + + + QsLogging::LogWindowModel + + Time + + + + Level + + + + Message + + + + + QsLogging::Window + + &Pause + + + + &Resume + + + + Save log + + + + Log file (*.log) + + + + + RenameLibraryDialog + + Rename current library + Rinomina la libreria corrente + + + Cancel + Cancella + + + Rename + Rinomina + + + New Library Name : + Nome della nuova libreria: + + + + ScraperResultsPaginator + + Number of %1 found : %2 + Numero di %1 trovati; %2 + + + page %1 of %2 + pagina %1 di %2 + + + Number of volumes found : %1 + Numero di volumi trovati: %1 + + + + SearchSingleComic + + Please provide some additional information. + Per favore aggiugi informazioni addizionali. + + + Series: + Serie: + + + + SearchVolume + + Please provide some additional information. + Per favore aggiugi informazioni addizionali. + + + Series: + Serie: + + + + SelectComic + + loading description + Caricamento descrizione + + + comics + Fumetti + + + loading cover + Caricamento copertine + + + Please, select the right comic info. + Per favore seleziona le informazioni corrette per il fumetto. + + + description unavailable + Descrizione non disponibile + + + + SelectVolume + + loading description + Caricamento descrizione + + + Please, select the right series for your comic. + Per favore seleziona la serie corretta per il fumetto. + + + loading cover + Caricamento copertine + + + volumes + Volumi + + + description unavailable + Descrizione non disponibile + + + + SeriesQuestion + + no + No + + + yes + Si + + + You are trying to get information for various comics at once, are they part of the same series? + Stai cercando di recuperare informazioni per diversi fumetti in una sola volta, sono parte della stessa serie? + + + + ServerConfigDialog + + Port + Porta + + + YACReader is available for iOS devices. <a href='http://ios.yacreader.com' style='color:rgb(193, 148, 65)'> Discover it! </a> + YACReader è disponibile per dispositivi iOS. <a href='http://ios.yacreader.com' style='color:rgb(193, 148, 65)'> Provalo! </a> + + + enable the server + Abilita il server + + + Server connectivity information + Informazioni sulla connettività del server + + + display less information about folders in the browser +to improve the performance + Mostra meno informazioni sulle cartelle nel Browser. +Migliora le prestazioni! + + + Scan it! + Scansiona! + + + QR generator error! + Errore nel generatore QR! + + + set port + Configura porta + + + Choose an IP address + Scegli un indirizzo IP + + + Could not load libqrencode. + + + + + SortVolumeComics + + remove selected comics + Rimuovi i fumetti selezionati + + + sort comics to match comic information + Ordina i fumetti per far corrispondere le informazioni + + + restore all removed comics + Ripristina tutti i fumetti rimossi + + + issues + Emissione + + + Please, sort the list of comics on the left until it matches the comics' information. + Per favore ordina la lista dei fumetti a sinistra sino a che corrisponde alle informazioni dei fumetti. + + + restore removed comics + Ripristina i fumetti rimossi + + + + TitleHeader + + SEARCH + CERCA + + + + UpdateLibraryDialog + + Update library + Aggiorna Libreria + + + Cancel + Cancella + + + Updating.... + Aggiornamento... + + + + VolumeComicsModel + + title + Titolo + + + + VolumesModel + + year + Anno + + + issues + Emissione + + + publisher + Pubblicato da + + + + YACReader::TrayIconController + + &Restore + + + + &Quit + + + + Systray + + + + YACReaderLibrary will keep running in the system tray. To terminate the program, choose <b>Quit</b> in the context menu of the system tray icon. + + + + + YACReader::WhatsNewDialog + + Close + + + + + YACReaderDeletingProgress + + cancel + Cancella + + + Please wait, deleting in progress... + Aspetta, cancellazione in corso... + + + + YACReaderFieldEdit + + Restore to default + Resetta al Default + + + Click to overwrite + Clikka per sovrascrivere + + + + YACReaderFieldPlainTextEdit + + Restore to default + Resetta al Default + + + Click to overwrite + Clikka per sovrascrivere + + + + YACReaderFlowConfigWidget + + CoverFlow look + Aspetto del flusso copertine + + + How to show covers: + Come mostrare le copertine: + + + Stripe look + Aspetto a striscia + + + Overlapped Stripe look + Aspetto a striscia sovrapposta + + + + YACReaderGLFlowConfigWidget + + Zoom + Zoom + + + Light + Luminoso + + + Show advanced settings + Mostra le impostazioni avanzate + + + Roulette look + Aspetto a Roulette + + + Cover Angle + Angolo copertine + + + Stripe look + Aspetto a striscia + + + Position + Posizione + + + Z offset + Traslazione Z + + + Y offset + Traslazione Y + + + Central gap + Distanza centrale + + + Presets: + Preselezione: + + + Overlapped Stripe look + Aspetto a Striscia sovrapposto + + + Modern look + Aspetto moderno + + + View angle + Vista ad Angolo + + + Max angle + Angolo massimo + + + Custom: + Personalizza: + + + Classic look + Aspetto Classico + + + Cover gap + Distanza tra le Cover + + + High Performance + Alte Prestazioni + + + Performance: + Prestazioni: + + + Use VSync (improve the image quality in fullscreen mode, worse performance) + UIsa VSync. (Migliora la qualità dell'immagine a modalità tutto schermo, peggiora le prestazioni) + + + Visibility + Visibilità + + + Low Performance + Basse Prestazioni + + + + YACReaderNavigationController + + You are not reading anything yet, come on!! + Non stai ancora leggendo nulla, Forza!! + + + No favorites + Nessun Favorito + + + + YACReaderOptionsDialog + + Save + Salva + + + Use hardware acceleration (restart needed) + Usa accelerazione hardware (necessita riavvio) + + + Cancel + Cancella + + + Shortcuts + Scorciatoie + + + Edit shortcuts + Modifica scorciatoia + + + + YACReaderSearchLineEdit + + type to search + Digita per cercare + + + + YACReaderSideBar + + Reading Lists + Lista di lettura + + + LIBRARIES + LIBRERIE + + + Libraries + Librerie + + + FOLDERS + CARTELLE + + + Folders + Cartelle + + + READING LISTS + LISTA DI LETTURA + + + diff --git a/YACReaderLibrary/yacreaderlibrary_nl.ts b/YACReaderLibrary/yacreaderlibrary_nl.ts index 3823cc6ac..527c563ee 100644 --- a/YACReaderLibrary/yacreaderlibrary_nl.ts +++ b/YACReaderLibrary/yacreaderlibrary_nl.ts @@ -1,10 +1,9 @@ - + ActionsShortcutsModel - None @@ -12,200 +11,162 @@ AddLabelDialog - + cancel + annuleren + + Label name: - Choose a color: - red - orange - yellow - green - cyan - blue - violet - purple - pink - white - light - dark - accept - - - cancel - annuleren - AddLibraryDialog - - Comics folder : - Strips map: + Add + Toevoegen - - Library name : - Library Name : - Bibliotheek Naam : + Add an existing library + Voeg een bestaand bibliotheek toe - - Add - Toevoegen + Cancel + Annuleren - - Cancel - Annuleren + Comics folder : + Strips map: - - Add an existing library - Voeg een bestaand bibliotheek toe + Library name : + Bibliotheek Naam : ApiKeyDialog - + Cancel + Annuleren + + Before you can connect to Comic Vine, you need your own API key. Please, get one free <a href="http://www.comicvine.com/api/">here</a> - Paste here your Comic Vine API key - Accept - - - Cancel - Annuleren - ClassicComicsView - Hide comic flow - Sluit de Omslagbrowser + Sluit de Omslagbrowser ComicInfoView - Authors - Auteurs + Auteurs - writer - penciller - inker - colorist - letterer - cover artist - Publisher - color - b/w - Characters @@ -213,47 +174,38 @@ ComicModel - - yes - Ja + no + neen - - no - neen + yes + Ja - - Title - Titel + Read + Gelezen - - File Name - Bestandsnaam + Size + Grootte(MB) - Pages - Pagina's + Pagina's - - Size - Grootte(MB) + Title + Titel - - Read - Gelezen + File Name + Bestandsnaam - Current Page - Rating @@ -261,68 +213,50 @@ ComicVineDialog - skip - back - next - search - close - - - - - Looking for volume... - - comic %1 of %2 - %3 - %1 comics selected - Error connecting to ComicVine - - Retrieving tags for : %1 - Retrieving volume info... - Looking for comic... @@ -330,70 +264,57 @@ CreateLibraryDialog - - Comics folder : - Strips map: + Create new library + Een nieuwe Bibliotheek aanmaken - - Library Name : - Bibliotheek Naam : + Cancel + Annuleren - Create - Aanmaken + Aanmaken - - Cancel - Annuleren + Create a library could take several minutes. You can stop the process and update the library later for completing the task. + Een bibliotheek aanmaken kan enkele minuten duren. U kunt het proces stoppen en de bibliotheek later voltooien. - - Create a library could take several minutes. You can stop the process and update the library later for completing the task. - Een bibliotheek aanmaken kan enkele minuten duren. U kunt het proces stoppen en de bibliotheek later voltooien. + The selected path does not exist or is not a valid path. Be sure that you have write access to this folder + De geselecteerde pad bestaat niet of is geen geldig pad. Controleer of u schrijftoegang hebt tot deze map - - Create new library - Een nieuwe Bibliotheek aanmaken + Comics folder : + Strips map: - - Path not found - Pad niet gevonden + Library Name : + Bibliotheek Naam : - - The selected path does not exist or is not a valid path. Be sure that you have write access to this folder - De geselecteerde pad bestaat niet of is geen geldig pad. Controleer of u schrijftoegang hebt tot deze map + Path not found + Pad niet gevonden EditShortcutsDialog - Restore defaults - To change a shortcut, double click in the key combination and type the new keys. - Shortcuts settings - Shortcut in use - The shortcut "%1" is already assigned to other function @@ -401,18 +322,14 @@ EmptyFolderWidget - - Subfolders in this folder - Empty folder - Drag and drop folders and comics here @@ -420,7 +337,6 @@ EmptyLabelWidget - This label doesn't contain comics yet @@ -428,115 +344,94 @@ EmptyReadingListWidget - This reading list does not contain any comics yet - This reading list doesn't contain comics yet ExportComicsInfoDialog - Output file : - Uitvoerbestand: + Uitvoerbestand: - - Create - Aanmaken + Destination database name + Bestemmingsdatabase naam - Cancel - Annuleren + Annuleren - - Export comics info - Strip info exporteren + Create + Aanmaken - - Destination database name - Bestemmingsdatabase naam + The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder + Het gekozen pad voor het uitvoerbestand bestaat niet of is geen geldig pad. Controleer of u schrijftoegang hebt tot deze map - - Problem found while writing - Probleem bij het schrijven + Export comics info + Strip info exporteren - - The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder - Het gekozen pad voor het uitvoerbestand bestaat niet of is geen geldig pad. Controleer of u schrijftoegang hebt tot deze map + Problem found while writing + Probleem bij het schrijven ExportLibraryDialog - - Output folder : - Uitvoermap : + Cancel + Annuleren - Create - Aanmaken + Aanmaken - - Cancel - Annuleren + The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder + Het gekozen pad voor het uitvoerbestand bestaat niet of is geen geldig pad. Controleer of u schrijftoegang hebt tot deze map - - Create covers package - Aanmaken omslag pakket + Output folder : + Uitvoermap : - Problem found while writing - Probleem bij het schrijven + Probleem bij het schrijven - - The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder - Het gekozen pad voor het uitvoerbestand bestaat niet of is geen geldig pad. Controleer of u schrijftoegang hebt tot deze map + Create covers package + Aanmaken omslag pakket - Destination directory - Doeldirectory + Doeldirectory FileComic - - Unknown error opening the file - + 7z not found + 7Z Archiefbestand niet gevonden - - 7z not found - 7Z Archiefbestand niet gevonden + CRC error on page (%1): some of the pages will not be displayed correctly + - - Format not supported + Unknown error opening the file - - CRC error on page (%1): some of the pages will not be displayed correctly + Format not supported GridComicsView - Show info @@ -544,121 +439,99 @@ HelpAboutDialog - - About - Over + Help + Help - - Help - Help + About + Over ImportComicsInfoDialog - - Import comics info - Strip info Importeren + Cancel + Annuleren - - Info database location : - Info database locatie : + Import + Importeren - - Import - Importeren + Info database location : + Info database locatie : - - Cancel - Annuleren + Import comics info + Strip info Importeren - Comics info file (*.ydb) - Strips info bestand ( * .ydb) + Strips info bestand ( * .ydb) ImportLibraryDialog - - Library Name : - Bibliotheek Naam : + Destination folder : + Doelmap: - - Package location : - Arrangement locatie : + Cancel + Annuleren - - Destination folder : - Doelmap: + Unpack + Uitpakken - - Unpack - Uitpakken + Compresed library covers (*.clc) + Compresed omslag- bibliotheek ( * .clc) - - Cancel - Annuleren + Package location : + Arrangement locatie : - - Extract a catalog - Een catalogus uitpakken + Library Name : + Bibliotheek Naam : - - Compresed library covers (*.clc) - Compresed omslag- bibliotheek ( * .clc) + Extract a catalog + Een catalogus uitpakken ImportWidget - stop - stop - - - - Some of the comics being added... - Enkele strips zijn toegevoegd ... + stop - Importing comics - Strips importeren + Strips importeren - <p>YACReaderLibrary is now creating a new library.</p><p>Create a library could take several minutes. You can stop the process and update the library later for completing the task.</p> - <P>YACReaderLibrary maak nu een nieuwe bibliotheek. < /p> <p>Een bibliotheek aanmaken kan enkele minuten duren. U kunt het proces stoppen en de bibliotheek later voltooien. < /p> + <P>YACReaderLibrary maak nu een nieuwe bibliotheek. < /p> <p>Een bibliotheek aanmaken kan enkele minuten duren. U kunt het proces stoppen en de bibliotheek later voltooien. < /p> + + + Some of the comics being added... + Enkele strips zijn toegevoegd ... - Updating the library - Actualisering van de bibliotheek + Actualisering van de bibliotheek - <p>The current library is being updated. For faster updates, please, update your libraries frequently.</p><p>You can stop the process and continue updating this library later.</p> - <P>De huidige bibliotheek wordt bijgewerkt. Voor snellere updates, update uw bibliotheken regelmatig. < /p> <p>u kunt het proces stoppen om later bij te werken. < /p> + <P>De huidige bibliotheek wordt bijgewerkt. Voor snellere updates, update uw bibliotheken regelmatig. < /p> <p>u kunt het proces stoppen om later bij te werken. < /p> - Upgrading the library - <p>The current library is being upgraded, please wait.</p> @@ -666,962 +539,856 @@ LibraryWindow - - YACReader Library - YACReader Bibliotheek + Edit + Bewerken - - Library - Bibliotheek + The selected folder doesn't contain any library. + De geselecteerde map bevat geen bibliotheek. - <font color='white'> press 'F' to close fullscreen mode </font> - <font color='white'>Druk op "F" om 'volledig scherm modus' te sluiten </font> + This library was created with a previous version of YACReaderLibrary. It needs to be updated. Update now? + Deze bibliotheek is gemaakt met een vorige versie van YACReaderLibrary. Het moet worden bijgewerkt. Nu bijwerken? - - Create a new library - Maak een nieuwe Bibliotheek + Error opening the library + Fout bij openen Bibliotheek - - Open an existing library - Open een bestaande Bibliotheek + Show/Hide marks + Toon/Verberg markeringen - - - Export comics info - Exporteren van strip info + Show comics server options dialog + Toon strips-server opties dialoog - - - Import comics info - Importeren van strip info + Remove current library from your collection + De huidige Bibliotheek verwijderen uit uw verzameling - - Pack covers - Inpakken strip voorbladen + Set comic as read + Strip Instellen als gelezen - - Pack the covers of the selected library - Inpakken alle strip voorbladen van de geselecteerde Bibliotheek + Remove and delete metadata + Verwijder metagegevens - - Unpack covers - Uitpakken voorbladen + Old library + Oude Bibliotheek - - Unpack a catalog - Uitpaken van een catalogus + Update cover + Strip omslagen bijwerken - - Update library - Bibliotheek bijwerken + Library + Bibliotheek + + + Rename current library + Huidige Bibliotheek hernoemen + + + Fullscreen mode on/off + Volledig scherm modus aan/of + + + This library was created with a newer version of YACReaderLibrary. Download the new version now? + Deze bibliotheek is gemaakt met een nieuwere versie van YACReaderLibrary. Download de nieuwe versie? + + + Open current comic on YACReader + Huidige strip openen in YACReader - Update current library - Huidige Bibliotheek bijwerken + Huidige Bibliotheek bijwerken - - Rename library - Bibliotheek hernoemen + Library '%1' is no longer available. Do you want to remove it? + Bibliotheek ' %1' is niet langer beschikbaar. Wilt u het verwijderen? - - Rename current library - Huidige Bibliotheek hernoemen + Update library + Bibliotheek bijwerken - - Remove library - Bibliotheek verwijderen + Open folder... + Map openen ... - - Remove current library from your collection - De huidige Bibliotheek verwijderen uit uw verzameling + Do you want remove + Wilt u verwijderen - - Open current comic - Huidige strip openen + Error updating the library + Fout bij bijwerken Bibliotheek - - Open current comic on YACReader - Huidige strip openen in YACReader + Expand all nodes + Alle categorieën uitklappen - - Save selected covers to... - + Library '%1' has been created with an older version of YACReaderLibrary. It must be created again. Do you want to create the library now? + Bibliotheek ' %1' is gemaakt met een oudere versie van YACReaderLibrary. Zij moet opnieuw worden aangemaakt. Wilt u de bibliotheek nu aanmaken? - - Save covers of the selected comics as JPG files - + Pack covers + Inpakken strip voorbladen - - Set as read - Instellen als gelezen + Instellen als gelezen - - Set comic as read - Strip Instellen als gelezen + Delete selected comics + Geselecteerde strips verwijderen - - - Set as unread - Instellen als ongelezen + Export comics info + Exporteren van strip info - - Set comic as unread - Strip Instellen als ongelezen + Show options dialog + Toon opties dialoog - - Show/Hide marks - Toon/Verberg markeringen + Create a new library + Maak een nieuwe Bibliotheek - Show or hide readed marks - Toon of Verberg gelezen markeringen + Library not available + Bibliotheek niet beschikbaar - - Library not available - Library ' - Bibliotheek niet beschikbaar + Import comics info + Importeren van strip info - - - Fullscreen mode on/off - Volledig scherm modus aan/of + Open current comic + Huidige strip openen - Fullscreen mode on/off (F) - Volledig scherm modus aan/of (F) + YACReader Library + YACReader Bibliotheek - - Help, About YACReader - Help, Over YACReader + Error creating the library + Fout bij aanmaken Bibliotheek - - Select root node - Selecteer de hoofd categorie + Unpack covers + Uitpakken voorbladen - + - + + Update needed + Bijwerken is nodig - - Expand all nodes - Alle categorieën uitklappen + Open an existing library + Open een bestaande Bibliotheek - - - - + Library name already exists + Bibliotheek naam bestaat al - Colapse all nodes - Alle categorieën inklappen + There is another library with the name '%1'. + Er is al een bibliotheek met de naam ' %1 '. - - Show options dialog - Toon opties dialoog + Download new version + Nieuwe versie ophalen - - Show comics server options dialog - Toon strips-server opties dialoog + Delete comics + Strips verwijderen - - Open folder... - Map openen ... + Select all comics + Selecteer alle strips - - Set as uncompleted - + Pack the covers of the selected library + Inpakken alle strip voorbladen van de geselecteerde Bibliotheek - - Set as completed - + Help, About YACReader + Help, Over YACReader - - Open containing folder... - Open map ... + Set comic as unread + Strip Instellen als ongelezen - - Reset comic rating - + Select root node + Selecteer de hoofd categorie - - Select all comics - Selecteer alle strips + Unpack a catalog + Uitpaken van een catalogus - - Edit - Bewerken + All the selected comics will be deleted from your disk. Are you sure? + Alle geselecteerde strips worden verwijderd van uw schijf. Weet u het zeker? - Asign current order to comics - Nummeren van strips + Set as unread + Instellen als ongelezen - - Update cover - Strip omslagen bijwerken + Library not found + Bibliotheek niet gevonden - - Delete selected comics - Geselecteerde strips verwijderen + Rename library + Bibliotheek hernoemen - Hide comic flow - Sluit de Omslagbrowser + Remove library + Bibliotheek verwijderen - - Download tags from Comic Vine - + Open containing folder... + Open map ... - - Edit shortcuts - + library? + Bibliotheek? - - Update folder - + Are you sure? + Weet u het zeker? - - Update current folder + Save selected covers to... - - Add new reading list + Save covers of the selected comics as JPG files - - Add a new reading list to the current library + Set as manga - - Remove reading list + Set issue as manga - - Remove current reading list from the library + Set as normal - - Add new label + Set issue as normal - - Add a new label to this library + Show or hide read marks - - Rename selected list + Add new folder - - Rename any selected labels or lists + Add new folder to the current library - - Add to... + Delete folder - - Favorites + Delete current folder from disk - - Add selected comics to favorites list + Collapse all nodes - - Folder + Change between comics views - - Comic + Set as uncompleted - - Upgrade failed + Set as completed - - There were errors during library upgrade in: + Set as comic - - Update needed - Bijwerken is nodig + Reset comic rating + - - This library was created with a previous version of YACReaderLibrary. It needs to be updated. Update now? - Deze bibliotheek is gemaakt met een vorige versie van YACReaderLibrary. Het moet worden bijgewerkt. Nu bijwerken? + Assign current order to comics + - Update failed - Bijwerken mislukt + Download tags from Comic Vine + - The current library can't be udpated. Check for write write permissions on: - De huidige bibliotheek kan niet worden bijgewerkt. Controleer bij of u schrijfbevoegdheid hebt: - - - - Download new version - Nieuwe versie ophalen - - - - This library was created with a newer version of YACReaderLibrary. Download the new version now? - Deze bibliotheek is gemaakt met een nieuwere versie van YACReaderLibrary. Download de nieuwe versie? - - - - Library '%1' is no longer available. Do you want to remove it? - Bibliotheek ' %1' is niet langer beschikbaar. Wilt u het verwijderen? - - - - Old library - Oude Bibliotheek + Edit shortcuts + - - Library '%1' has been created with an older version of YACReaderLibrary. It must be created again. Do you want to create the library now? - Bibliotheek ' %1' is gemaakt met een oudere versie van YACReaderLibrary. Zij moet opnieuw worden aangemaakt. Wilt u de bibliotheek nu aanmaken? + Update folder + - - - Copying comics... + Update current folder - - - Moving comics... + Add new reading list - - Folder name: + Add a new reading list to the current library - - No folder selected + Remove reading list - - Please, select a folder first + Remove current reading list from the library - - Error in path + Add new label - - There was an error accessing the folder's path + Add a new label to this library - - The selected folder and all its contents will be deleted from your disk. Are you sure? + Rename selected list - - There was an issue trying to delete the selected folders. Please, check for write permissions and be sure that any applications are using these folders or any of the contained files. + Rename any selected labels or lists - - Add new reading lists + Add to... - - - List name: + Favorites - - Delete list/label + Add selected comics to favorites list - - The selected item will be deleted, your comics or folders will NOT be deleted from your disk. Are you sure? + Folder - - Rename list name + Comic - - Save covers + Upgrade failed - - You are adding too many libraries. + There were errors during library upgrade in: - - You are adding too many libraries. - -You probably only need one library in your top level comics folder, you can browse any subfolders using the folders section in the left sidebar. - -YACReaderLibrary will not stop you from creating more libraries but you should keep the number of libraries low. + Copying comics... - - - YACReader not found + Moving comics... - - Library not found - Bibliotheek niet gevonden + Folder name: + - - The selected folder doesn't contain any library. - De geselecteerde map bevat geen bibliotheek. + No folder selected + - - Are you sure? - Weet u het zeker? + Please, select a folder first + - - Do you want remove - Wilt u verwijderen + Error in path + - - library? - Bibliotheek? + There was an error accessing the folder's path + - - Remove and delete metadata - Verwijder metagegevens + The selected folder and all its contents will be deleted from your disk. Are you sure? + - - Assign comics numbers + Unable to delete - - Assign numbers starting in: + There was an issue trying to delete the selected folders. Please, check for write permissions and be sure that any applications are using these folders or any of the contained files. - - - Unable to delete + Add new reading lists - - Show or hide read marks + List name: - - - Add new folder + Delete list/label - - Add new folder to the current library + The selected item will be deleted, your comics or folders will NOT be deleted from your disk. Are you sure? - - - Delete folder + Rename list name - - Delete current folder from disk + Save covers - - Collapse all nodes + You are adding too many libraries. - - - Change between comics views + You are adding too many libraries. + +You probably only need one library in your top level comics folder, you can browse any subfolders using the folders section in the left sidebar. + +YACReaderLibrary will not stop you from creating more libraries but you should keep the number of libraries low. - - Assign current order to comics + YACReader not found - YACReader not found. YACReader should be installed in the same folder as YACReaderLibrary. - YACReader not found. There might be a problem with your YACReader installation. - There was an issue trying to delete the selected comics. Please, check for write permissions in the selected files or containing folder. - Asign comics numbers - Strips nummeren + Assign comics numbers + - Asign numbers starting in: - Strips nummeren beginnen bij: + Assign numbers starting in: + - - Error creating the library - Fout bij aanmaken Bibliotheek + Remove comics + - - Error updating the library - Fout bij bijwerken Bibliotheek + Comics will only be deleted from the current label/list. Are you sure? + + + + LocalComicListModel - - Error opening the library - Fout bij openen Bibliotheek + file name + + + + LogWindow - - Delete comics - Strips verwijderen + Log window + - - All the selected comics will be deleted from your disk. Are you sure? - Alle geselecteerde strips worden verwijderd van uw schijf. Weet u het zeker? + &Pause + - - Remove comics + &Save - - Comics will only be deleted from the current label/list. Are you sure? + C&lear - - Library name already exists - Bibliotheek naam bestaat al + &Copy + - - There is another library with the name '%1'. - Er is al een bibliotheek met de naam ' %1 '. + Level: + - - - LocalComicListModel - - file name + &Auto scroll NoLibrariesWidget - - You don't have any libraries yet - Je hebt geen nog libraries + create your first library + Maak uw eerste bibliotheek - - <p>You can create a library in any folder, YACReaderLibrary will import all comics and folders from this folder. If you have created any library in the past you can open them.</p><p>Don't forget that you can use YACReader as a stand alone application for reading the comics on your computer.</p> - <P>u kunt een bibliotheek maken in een willekeurige map, YACReaderLibrary importeert alle strips en mappen uit deze map. Alle bibliotheek aangemaakt in het verleden kan je openen. < /p> <p>vergeet niet dat u YACReader kan gebruiken als stand-alone applicatie voor het lezen van de strips op de computer. < /p> + You don't have any libraries yet + Je hebt geen nog libraries - - create your first library - Maak uw eerste bibliotheek + <p>You can create a library in any folder, YACReaderLibrary will import all comics and folders from this folder. If you have created any library in the past you can open them.</p><p>Don't forget that you can use YACReader as a stand alone application for reading the comics on your computer.</p> + <P>u kunt een bibliotheek maken in een willekeurige map, YACReaderLibrary importeert alle strips en mappen uit deze map. Alle bibliotheek aangemaakt in het verleden kan je openen. < /p> <p>vergeet niet dat u YACReader kan gebruiken als stand-alone applicatie voor het lezen van de strips op de computer. < /p> - add an existing one - voeg een bestaande bibliotheek toe + voeg een bestaande bibliotheek toe OptionsDialog - + Options + Opties + + + Tray icon settings (experimental) + + + + Close to tray + + + + Start into the system tray + + + Edit Comic Vine API key - Comic Vine API key - Enable background image - Opacity level - Blur level - Use selected comic cover as background - Restore defautls - Background - + Display continue reading banner + + + + Continue reading + + + Comic Flow - Grid view - General - - - Options - Opties - PropertiesDialog - - General info - Algemene Info + Day: + Dag: - - Authors - Auteurs + Plot + Verhaal - - Publishing - Uitgever + Size: + Grootte(MB): - - Plot - Verhaal + Year: + Jaar: - - Cover page - Omslag + Inker(s): + Inker(s): - - Title: - Titel: + Publishing + Uitgever - - - of: - + Publisher: + Uitgever: - - Issue number: - Ids: + General info + Algemene Info - - Volume: - Inhoud: + Color/BW: + Kleur/ZW: - - Arc number: - + Edit selected comics information + Geselecteerde strip informatie bijwerken - - Story arc: - Verhaallijn: + Penciller(s): + Tekenaar(s): + + + Colorist(s): + Inkleurder(s): - Genre: - Genere: - Genre: + Genre: - - Size: - Grootte(MB): + Issue number: + Ids: - - Writer(s): - Schrijver(s): + Month: + Maand: - - Penciller(s): - Tekenaar(s): + Notes: + Opmerkingen: - - Inker(s): - Inker(s): + Synopsis: + Synopsis: - - Colorist(s): - Inkleurder(s): + Title: + Titel: - - Letterer(s): - Letterzetter(s): + Not found + Niet gevonden - - Cover Artist(s): - Omslag ontwikkelaar(s): + Characters: + Personages: - - Day: - Dag: + Authors + Auteurs - - Month: - Maand: + Age rating: + Leeftijdsbeperking: - - Year: - Jaar: + Story arc: + Verhaallijn: - - Publisher: - Uitgever: + Writer(s): + Schrijver(s): - - Format: - Formaat: + Comic not found. You should update your library. + Strip niet gevonden. U moet uw bibliotheek.bijwerken. - - Color/BW: - Kleur/ZW: + Edit comic information + Strip informatie bijwerken - - Age rating: - Leeftijdsbeperking: + Cover page + Omslag - - Synopsis: - Synopsis: + Cover Artist(s): + Omslag ontwikkelaar(s): - - Characters: - Personages: + Volume: + Inhoud: - - Notes: - Opmerkingen: + Format: + Formaat: - - Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> view </a> - + Letterer(s): + Letterzetter(s): - - Not found - Niet gevonden + of: + - - Comic not found. You should update your library. - Strip niet gevonden. U moet uw bibliotheek.bijwerken. + Arc number: + - - Edit selected comics information - Geselecteerde strip informatie bijwerken + Manga: + - - Edit comic information - Strip informatie bijwerken + Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> view </a> + QObject - 7z lib not found - unable to load 7z lib from ./utils + + Trace + + + + Debug + + + + Info + + + + Warning + + + + Error + + + + Fatal + + - RenameLibraryDialog + QsLogging::LogWindowModel - - New Library Name : - Nieuwe Bibliotheek Naam : + Time + - - Rename - Hernoem + Level + - - Cancel - Annuleren + Message + + + + + QsLogging::Window + + &Pause + + + + &Resume + + + + Save log + + + + Log file (*.log) + + + + RenameLibraryDialog - Rename current library - Hernoem de huidige bibiliotheek + Hernoem de huidige bibiliotheek + + + Cancel + Annuleren + + + Rename + Hernoem + + + New Library Name : + Nieuwe Bibliotheek Naam : ScraperResultsPaginator - Number of volumes found : %1 - - page %1 of %2 - Number of %1 found : %2 @@ -1629,12 +1396,10 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SearchSingleComic - Please provide some additional information. - Series: @@ -1642,12 +1407,10 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SearchVolume - Please provide some additional information. - Series: @@ -1655,27 +1418,22 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SelectComic - Please, select the right comic info. - comics - loading cover - loading description - description unavailable @@ -1683,27 +1441,22 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SelectVolume - Please, select the right series for your comic. - volumes - loading cover - loading description - description unavailable @@ -1711,157 +1464,84 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SeriesQuestion - - You are trying to get information for various comics at once, are they part of the same series? - + no + neen - yes - Ja + Ja - - no - neen + You are trying to get information for various comics at once, are they part of the same series? + ServerConfigDialog - - set port - Poort instellen - - - EASY SERVER CONNECTION - GEMAKKELIJKE VERBINDING MET DE SERVER - - - SERVER ADDRESS - SERVERADRES - - - just scan the code with your device!! - Scan de code met uw apparaat! + Port + Poort - YACReader is now available for iOS devices, the best comic reading experience now in your iPad, iPhone or iPod touch. <a href='http://ios.yacreader.com' style='color:rgb(193, 148, 65)'> Discover it! </a> - YACReader is nu beschikbaar voor iOS apparaten, de beste strip leeservaring nu op uw iPad, iPhone of iPod touch. <A href= "http://ios.yacreader.com' style= "color:rgb(193, 148, 65) "> Ontdek het zelf! < /A> + enable the server + De server instellen - IP address - IP-adres + set port + Poort instellen - Server connectivity information - Scan it! - YACReader is available for iOS devices. <a href='http://ios.yacreader.com' style='color:rgb(193, 148, 65)'> Discover it! </a> - Choose an IP address - - Port - Poort - - - - enable the server - De server instellen - - - display less information about folders in the browser to improve the performance - Could not load libqrencode. - - QR generator error! - QR generator fout! - SortVolumeComics - Please, sort the list of comics on the left until it matches the comics' information. - sort comics to match comic information - issues - remove selected comics - restore all removed comics - - TableModel - - yes - Ja - - - no - neen - - - Title - Titel - - - File Name - Bestandsnaam - - - Pages - Pagina's - - - Size - Grootte(MB) - - - Read - Gelezen - - TitleHeader - SEARCH @@ -1869,25 +1549,21 @@ to improve the performance UpdateLibraryDialog - - Updating.... - Bijwerken.... + Update library + Bibliotheek bijwerken - Cancel - Annuleren + Annuleren - - Update library - Bibliotheek bijwerken + Updating.... + Bijwerken.... VolumeComicsModel - title @@ -1895,214 +1571,198 @@ to improve the performance VolumesModel - year - issues - publisher - YACReaderDeletingProgress + YACReader::TrayIconController - - Please wait, deleting in progress... - Even geduld, verwijderen ... + &Restore + + + + &Quit + - + Systray + + + + YACReaderLibrary will keep running in the system tray. To terminate the program, choose <b>Quit</b> in the context menu of the system tray icon. + + + + + YACReader::WhatsNewDialog + + Close + + + + + YACReaderDeletingProgress + cancel - annuleren + annuleren + + + Please wait, deleting in progress... + Even geduld, verwijderen ... YACReaderFieldEdit - - - Click to overwrite - Klik hier om te overschrijven + Restore to default + Standaardwaarden herstellen - - Restore to default - Standaardwaarden herstellen + Click to overwrite + Klik hier om te overschrijven YACReaderFieldPlainTextEdit - - - - - Click to overwrite - Klik hier om te overschrijven + Restore to default + Standaardwaarden herstellen - - Restore to default - Standaardwaarden herstellen + Click to overwrite + Klik hier om te overschrijven YACReaderFlowConfigWidget - - How to show covers: - Hoe omslagbladen bekijken: + CoverFlow look + Omslagbrowser uiterlijk - - CoverFlow look - Omslagbrowser uiterlijk + How to show covers: + Hoe omslagbladen bekijken: - Stripe look - Brede band + Brede band - Overlapped Stripe look - Overlappende band + Overlappende band YACReaderGLFlowConfigWidget - - Presets: - Voorinstellingen: - - - - Classic look - Klassiek - - - - Stripe look - Brede band + Zoom + Zoom - - Overlapped Stripe look - Overlappende band + Light + Licht - - Modern look - Modern + Show advanced settings + Toon geavanceerde instellingen - Roulette look - Roulette + Roulette - - Show advanced settings - Toon geavanceerde instellingen + Cover Angle + Omslag hoek - - Custom: - Aangepast: + Stripe look + Brede band - - View angle - Kijkhoek + Position + Positie - - Position - Positie + Z offset + Z- positie - - Cover gap - Ruimte tss Omslag + Y offset + Y-positie - Central gap - Centrale ruimte + Centrale ruimte - - Zoom - Zoom + Presets: + Voorinstellingen: - - Y offset - Y-positie + Overlapped Stripe look + Overlappende band - - Z offset - Z- positie + Modern look + Modern - - Cover Angle - Omslag hoek + View angle + Kijkhoek - - Visibility - Zichtbaarheid + Max angle + Maximale hoek - - Light - Licht + Custom: + Aangepast: - - Max angle - Maximale hoek + Classic look + Klassiek - - Low Performance - Lage Prestaties + Cover gap + Ruimte tss Omslag - High Performance - Hoge Prestaties + Hoge Prestaties + + + Performance: + Prestatie: - Use VSync (improve the image quality in fullscreen mode, worse performance) - Gebruik VSync (verbetering van de beeldkwaliteit in de modus volledig scherm, slechtere prestatie) + Gebruik VSync (verbetering van de beeldkwaliteit in de modus volledig scherm, slechtere prestatie) - - Performance: - Prestatie: + Visibility + Zichtbaarheid + + + Low Performance + Lage Prestaties YACReaderNavigationController - No favorites - You are not reading anything yet, come on!! @@ -2110,35 +1770,29 @@ to improve the performance YACReaderOptionsDialog - Save - Bewaar + Bewaar + + + Use hardware acceleration (restart needed) + Gebruik hardware versnelling (opnieuw opstarten vereist) - Cancel - Annuleren + Annuleren - Edit shortcuts - Shortcuts - - - Use hardware acceleration (restart needed) - Gebruik hardware versnelling (opnieuw opstarten vereist) - YACReaderSearchLineEdit - type to search @@ -2146,38 +1800,28 @@ to improve the performance YACReaderSideBar - + LIBRARIES + BIBLIOTHEKEN + + + FOLDERS + MAPPEN + + Libraries - Folders - Reading Lists - - LIBRARIES - BIBLIOTHEKEN - - - - FOLDERS - MAPPEN - - - READING LISTS - - Search folders and comics - Zoeken in mappen en strips - diff --git a/YACReaderLibrary/yacreaderlibrary_pt.ts b/YACReaderLibrary/yacreaderlibrary_pt.ts index aea19095c..f5199410e 100644 --- a/YACReaderLibrary/yacreaderlibrary_pt.ts +++ b/YACReaderLibrary/yacreaderlibrary_pt.ts @@ -4,7 +4,6 @@ ActionsShortcutsModel - None @@ -12,82 +11,66 @@ AddLabelDialog - Label name: - Choose a color: - red - orange - yellow - green - cyan - blue - violet - purple - pink - white - light - dark - accept - cancel @@ -95,59 +78,48 @@ AddLibraryDialog - - Comics folder : - Pasta dos quadrinhos : - - - - Library name : - Library Name : - Nome da Biblioteca : - - - Add Adicionar - + Add an existing library + Adicionar uma biblioteca existente + + Cancel Cancelar - - Add an existing library - Adicionar uma biblioteca existente + Comics folder : + Pasta dos quadrinhos : + + + Library name : + Nome da Biblioteca : ApiKeyDialog - + Cancel + Cancelar + + Before you can connect to Comic Vine, you need your own API key. Please, get one free <a href="http://www.comicvine.com/api/">here</a> - Paste here your Comic Vine API key - Accept - - - Cancel - Cancelar - ClassicComicsView - Hide comic flow @@ -155,57 +127,46 @@ ComicInfoView - Authors - writer - penciller - inker - colorist - letterer - cover artist - Publisher - color - b/w - Characters @@ -213,47 +174,38 @@ ComicModel - yes - no - Title - File Name - Pages - Size - Read - Current Page - Rating @@ -261,68 +213,50 @@ ComicVineDialog - skip - back - next - search - close - - - - - Looking for volume... - - comic %1 of %2 - %3 - %1 comics selected - Error connecting to ComicVine - - Retrieving tags for : %1 - Retrieving volume info... - Looking for comic... @@ -330,42 +264,34 @@ CreateLibraryDialog - - Comics folder : - Pasta dos quadrinhos : + Create new library + Criar uma nova biblioteca - - Library Name : - Nome da Biblioteca : + Cancel + Cancelar - Create Criar - - Cancel - Cancelar + Comics folder : + Pasta dos quadrinhos : - - Create a library could take several minutes. You can stop the process and update the library later for completing the task. - + Library Name : + Nome da Biblioteca : - - Create new library - Criar uma nova biblioteca + Create a library could take several minutes. You can stop the process and update the library later for completing the task. + - Path not found - The selected path does not exist or is not a valid path. Be sure that you have write access to this folder @@ -373,27 +299,22 @@ EditShortcutsDialog - Restore defaults - To change a shortcut, double click in the key combination and type the new keys. - Shortcuts settings - Shortcut in use - The shortcut "%1" is already assigned to other function @@ -401,18 +322,14 @@ EmptyFolderWidget - - Subfolders in this folder - Empty folder - Drag and drop folders and comics here @@ -420,7 +337,6 @@ EmptyLabelWidget - This label doesn't contain comics yet @@ -428,46 +344,37 @@ EmptyReadingListWidget - This reading list does not contain any comics yet - This reading list doesn't contain comics yet ExportComicsInfoDialog - - Output file : - + Cancel + Cancelar - Create Criar - - Cancel - Cancelar + Output file : + - Export comics info - Destination database name - Problem found while writing - The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder @@ -475,68 +382,56 @@ ExportLibraryDialog - - Output folder : - Pasta de saída : + Cancel + Cancelar - Create Criar - - Cancel - Cancelar + Output folder : + Pasta de saída : - Create covers package Criar pacote de capas - + Destination directory + Diretório de destino + + Problem found while writing - The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder - - - Destination directory - Diretório de destino - FileComic - - Unknown error opening the file - + 7z not found + 7z não encontrado - - 7z not found - 7z não encontrado + CRC error on page (%1): some of the pages will not be displayed correctly + - - Format not supported + Unknown error opening the file - - CRC error on page (%1): some of the pages will not be displayed correctly + Format not supported GridComicsView - Show info @@ -544,12 +439,10 @@ HelpAboutDialog - About - Help @@ -557,27 +450,22 @@ ImportComicsInfoDialog - + Cancel + Cancelar + + Import comics info - Info database location : - Import - - Cancel - Cancelar - - - Comics info file (*.ydb) @@ -585,82 +473,65 @@ ImportLibraryDialog - - Library Name : - Nome da Biblioteca : - - - - Package location : - Local do pacote : - - - Destination folder : Pasta de destino : - - Unpack - Desempacotar - - - Cancel Cancelar - - Extract a catalog - Extrair um catálogo + Unpack + Desempacotar - Compresed library covers (*.clc) Capas da biblioteca compactada (*.clc) + + Package location : + Local do pacote : + + + Library Name : + Nome da Biblioteca : + + + Extract a catalog + Extrair um catálogo + ImportWidget - - Importing comics + stop - - stop + Some of the comics being added... - - Some of the comics being added... + Importing comics - <p>YACReaderLibrary is now creating a new library.</p><p>Create a library could take several minutes. You can stop the process and update the library later for completing the task.</p> - Create a library could take several minutes. You can stop the process and update the library later for completing the task. - Updating the library - <p>The current library is being updated. For faster updates, please, update your libraries frequently.</p><p>You can stop the process and continue updating this library later.</p> - <p>The current library is being updated. For faster updates, please, update your libraries frequently.</p><p>You can stop the process and continue updating this library later. - Upgrading the library - <p>The current library is being upgraded, please wait.</p> @@ -668,558 +539,402 @@ LibraryWindow - <font color='white'> press 'F' to close fullscreen mode </font> - <font color='white'> pressione 'F' para fechar o modo tela cheia </font> - - - - YACReader Library - Biblioteca YACReader - - - - Create a new library - Criar uma nova biblioteca - - - - Open an existing library - Abrir uma biblioteca existente - - - - - Export comics info - - - - - - Import comics info - - - - - Pack covers - - - - - Pack the covers of the selected library - Pacote de capas da biblioteca selecionada - - - - Unpack covers - - - - - Unpack a catalog - Desempacotar um catálogo - - - - Update current library - Atualizar biblioteca atual + Remove current library from your collection + Remover biblioteca atual da sua coleção - - Rename library - + Library + Biblioteca - Rename current library Renomear biblioteca atual - - Remove current library from your collection - Remover biblioteca atual da sua coleção - - - - Open current comic - - - - Open current comic on YACReader Abrir quadrinho atual no YACReader - - Save selected covers to... - + Update current library + Atualizar biblioteca atual - - Save covers of the selected comics as JPG files - + Open folder... + Abrir pasta... - - - Set as read - + Do you want remove + Você deseja remover - - Set comic as read - + Expand all nodes + Expandir todos - - - Set as unread - + Show options dialog + Mostrar opções - - Set comic as unread - + Create a new library + Criar uma nova biblioteca - - Show/Hide marks - + YACReader Library + Biblioteca YACReader - - - Fullscreen mode on/off - + Open an existing library + Abrir uma biblioteca existente - Fullscreen mode on/off (F) - Modo tela cheia ligar/desligar (F) + Pack the covers of the selected library + Pacote de capas da biblioteca selecionada - Help, About YACReader Ajuda, Sobre o YACReader - Select root node Selecionar raiz - - Expand all nodes - Expandir todos + Unpack a catalog + Desempacotar um catálogo - Colapse all nodes - Contrair todos + Open containing folder... + Abrir a pasta contendo... - - Show options dialog - Mostrar opções + Are you sure? + Você tem certeza? - - Show comics server options dialog + Export comics info - - Open folder... - Abrir pasta... - - - - Set as uncompleted + Import comics info - - Set as completed + Pack covers - - Open containing folder... - Abrir a pasta contendo... - - - - Reset comic rating + Unpack covers - - Select all comics + Update library - - Edit + Rename library - - Update cover + Remove library - - Delete selected comics + Open current comic - - Download tags from Comic Vine + Save selected covers to... - - Folder + Save covers of the selected comics as JPG files - - Comic + Set as read - - Library not available - Library ' + Set comic as read - - Old library + Set as unread - - - YACReader not found + Set comic as unread - - - Unable to delete + Set as manga - - There was an issue trying to delete the selected comics. Please, check for write permissions in the selected files or containing folder. + Set issue as manga - - Assign comics numbers + Set as normal - - Assign numbers starting in: + Set issue as normal - - Error creating the library + Show/Hide marks - - Error updating the library + Show or hide read marks - - Error opening the library + Fullscreen mode on/off - - Delete comics + Add new folder - - All the selected comics will be deleted from your disk. Are you sure? + Add new folder to the current library - - Remove comics + Delete folder - - Comics will only be deleted from the current label/list. Are you sure? + Delete current folder from disk - - Library name already exists + Collapse all nodes - - There is another library with the name '%1'. + Show comics server options dialog - - Library - Biblioteca + Change between comics views + - - Update library + Set as uncompleted - - Remove library + Set as completed - - Show or hide read marks + Set as comic - - - Add new folder + Reset comic rating - - Add new folder to the current library + Select all comics - - - Delete folder + Edit - - Delete current folder from disk + Assign current order to comics - - Collapse all nodes + Update cover - - - Change between comics views + Delete selected comics - - Assign current order to comics + Download tags from Comic Vine - Edit shortcuts - Update folder - Update current folder - Add new reading list - Add a new reading list to the current library - Remove reading list - Remove current reading list from the library - Add new label - Add a new label to this library - Rename selected list - Rename any selected labels or lists - Add to... - Favorites - Add selected comics to favorites list - + Folder + + + + Comic + + + Upgrade failed - There were errors during library upgrade in: - Update needed - This library was created with a previous version of YACReaderLibrary. It needs to be updated. Update now? - Download new version - This library was created with a newer version of YACReaderLibrary. Download the new version now? - + Library not available + + + Library '%1' is no longer available. Do you want to remove it? - + Old library + + + Library '%1' has been created with an older version of YACReaderLibrary. It must be created again. Do you want to create the library now? - - Copying comics... - - Moving comics... - Folder name: - No folder selected - Please, select a folder first - Error in path - There was an error accessing the folder's path - The selected folder and all its contents will be deleted from your disk. Are you sure? - + Unable to delete + + + There was an issue trying to delete the selected folders. Please, check for write permissions and be sure that any applications are using these folders or any of the contained files. - Add new reading lists - - List name: - Delete list/label - The selected item will be deleted, your comics or folders will NOT be deleted from your disk. Are you sure? - Rename list name - Save covers - You are adding too many libraries. - You are adding too many libraries. You probably only need one library in your top level comics folder, you can browse any subfolders using the folders section in the left sidebar. @@ -1228,73 +943,135 @@ YACReaderLibrary will not stop you from creating more libraries but you should k - + YACReader not found + + + YACReader not found. YACReader should be installed in the same folder as YACReaderLibrary. - YACReader not found. There might be a problem with your YACReader installation. - Library not found - The selected folder doesn't contain any library. - - Are you sure? - Você tem certeza? - - - library? - Remove and delete metadata - - Do you want remove - Você deseja remover + There was an issue trying to delete the selected comics. Please, check for write permissions in the selected files or containing folder. + + + + Assign comics numbers + + + + Assign numbers starting in: + + + + Error creating the library + + + + Error updating the library + + + + Error opening the library + + + + Delete comics + + + + All the selected comics will be deleted from your disk. Are you sure? + + + + Remove comics + + + + Comics will only be deleted from the current label/list. Are you sure? + + + + Library name already exists + + + + There is another library with the name '%1'. + LocalComicListModel - file name + + LogWindow + + Log window + + + + &Pause + + + + &Save + + + + C&lear + + + + &Copy + + + + Level: + + + + &Auto scroll + + + NoLibrariesWidget - You don't have any libraries yet - <p>You can create a library in any folder, YACReaderLibrary will import all comics and folders from this folder. If you have created any library in the past you can open them.</p><p>Don't forget that you can use YACReader as a stand alone application for reading the comics on your computer.</p> - create your first library - add an existing one @@ -1302,62 +1079,70 @@ YACReaderLibrary will not stop you from creating more libraries but you should k OptionsDialog - + Tray icon settings (experimental) + + + + Close to tray + + + + Start into the system tray + + + Edit Comic Vine API key - Comic Vine API key - Enable background image - Opacity level - Blur level - Use selected comic cover as background - Restore defautls - Background - + Display continue reading banner + + + + Continue reading + + + Comic Flow - Grid view - General - Options @@ -1365,174 +1150,142 @@ YACReaderLibrary will not stop you from creating more libraries but you should k PropertiesDialog - General info - Authors - Publishing - Plot - Cover page - Title: - - of: - Issue number: - Volume: - Arc number: - Story arc: - Genre: - Genere: - Size: - Writer(s): - Penciller(s): - Inker(s): - Colorist(s): - Letterer(s): - Cover Artist(s): - Day: - Month: - Year: - Publisher: - Format: - Color/BW: - Age rating: - + Manga: + + + Synopsis: - Characters: - Notes: - Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> view </a> - Not found - Comic not found. You should update your library. - Edit selected comics information - Edit comic information @@ -1540,54 +1293,102 @@ YACReaderLibrary will not stop you from creating more libraries but you should k QObject - 7z lib not found - unable to load 7z lib from ./utils + + Trace + + + + Debug + + + + Info + + + + Warning + + + + Error + + + + Fatal + + - RenameLibraryDialog + QsLogging::LogWindowModel - - New Library Name : - Novo nome da biblioteca : + Time + - - Rename - Renomear + Level + - - Cancel - Cancelar + Message + + + + QsLogging::Window + + &Pause + + + + &Resume + + + + Save log + + + + Log file (*.log) + + + + + RenameLibraryDialog - Rename current library Renomear biblioteca atual + + Cancel + Cancelar + + + Rename + Renomear + + + New Library Name : + Novo nome da biblioteca : + ScraperResultsPaginator - Number of volumes found : %1 - - page %1 of %2 - Number of %1 found : %2 @@ -1595,12 +1396,10 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SearchSingleComic - Please provide some additional information. - Series: @@ -1608,12 +1407,10 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SearchVolume - Please provide some additional information. - Series: @@ -1621,27 +1418,22 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SelectComic - Please, select the right comic info. - comics - loading cover - loading description - description unavailable @@ -1649,27 +1441,22 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SelectVolume - Please, select the right series for your comic. - volumes - loading cover - loading description - description unavailable @@ -1677,17 +1464,14 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SeriesQuestion - You are trying to get information for various comics at once, are they part of the same series? - yes - no @@ -1695,48 +1479,39 @@ YACReaderLibrary will not stop you from creating more libraries but you should k ServerConfigDialog - set port - Server connectivity information - Scan it! - YACReader is available for iOS devices. <a href='http://ios.yacreader.com' style='color:rgb(193, 148, 65)'> Discover it! </a> - Choose an IP address - Port - enable the server - display less information about folders in the browser to improve the performance - Could not load libqrencode. @@ -1744,27 +1519,22 @@ to improve the performance SortVolumeComics - Please, sort the list of comics on the left until it matches the comics' information. - sort comics to match comic information - issues - remove selected comics - restore all removed comics @@ -1772,7 +1542,6 @@ to improve the performance TitleHeader - SEARCH @@ -1780,17 +1549,14 @@ to improve the performance UpdateLibraryDialog - - Updating.... - Atualizando.... - - - Cancel Cancelar - + Updating.... + Atualizando.... + + Update library @@ -1798,7 +1564,6 @@ to improve the performance VolumeComicsModel - title @@ -1806,30 +1571,51 @@ to improve the performance VolumesModel - year - issues - publisher + + YACReader::TrayIconController + + &Restore + + + + &Quit + + + + Systray + + + + YACReaderLibrary will keep running in the system tray. To terminate the program, choose <b>Quit</b> in the context menu of the system tray icon. + + + + + YACReader::WhatsNewDialog + + Close + + + YACReaderDeletingProgress - Please wait, deleting in progress... - cancel @@ -1837,13 +1623,10 @@ to improve the performance YACReaderFieldEdit - - Click to overwrite - Restore to default @@ -1851,15 +1634,10 @@ to improve the performance YACReaderFieldPlainTextEdit - - - - Click to overwrite - Restore to default @@ -1867,22 +1645,18 @@ to improve the performance YACReaderFlowConfigWidget - - How to show covers: - Como mostrar capas: - - - CoverFlow look Olhar capa cheia - + How to show covers: + Como mostrar capas: + + Stripe look Olhar lista - Overlapped Stripe look Olhar lista sobreposta @@ -1890,117 +1664,94 @@ to improve the performance YACReaderGLFlowConfigWidget - - Presets: - - - - - Classic look - - - - Stripe look Olhar lista - Overlapped Stripe look Olhar lista sobreposta - + Presets: + + + + Classic look + + + Modern look - Roulette look - Show advanced settings - Custom: - View angle - Position - Cover gap - Central gap - Zoom - Y offset - Z offset - Cover Angle - Visibility - Light - Max angle - Low Performance - High Performance - Use VSync (improve the image quality in fullscreen mode, worse performance) - Performance: @@ -2008,12 +1759,10 @@ to improve the performance YACReaderNavigationController - No favorites - You are not reading anything yet, come on!! @@ -2021,27 +1770,22 @@ to improve the performance YACReaderOptionsDialog - Save Salvar - Cancel Cancelar - Edit shortcuts - Shortcuts - Use hardware acceleration (restart needed) @@ -2049,7 +1793,6 @@ to improve the performance YACReaderSearchLineEdit - type to search @@ -2057,32 +1800,26 @@ to improve the performance YACReaderSideBar - Libraries - Folders - Reading Lists - LIBRARIES - FOLDERS - READING LISTS diff --git a/YACReaderLibrary/yacreaderlibrary_ru.ts b/YACReaderLibrary/yacreaderlibrary_ru.ts index 9940ab54d..795a85f88 100644 --- a/YACReaderLibrary/yacreaderlibrary_ru.ts +++ b/YACReaderLibrary/yacreaderlibrary_ru.ts @@ -4,7 +4,6 @@ ActionsShortcutsModel - None @@ -12,142 +11,115 @@ AddLabelDialog - - Label name: - Название ярлыка: + red + красный - - Choose a color: - Выбрать цвет: + blue + синий - - red - красный + dark + темный - - orange - оранжевый + cyan + голубой - - yellow - желтый + pink + розовый - green зеленый - - cyan - голубой + light + серый - - blue - синий + white + белый - - violet - фиолетовый + Choose a color: + Выбрать цвет: - - purple - пурпурный + accept + добавить - - pink - розовый + cancel + отменить - - white - белый + orange + оранжевый - - light - серый + purple + пурпурный - - dark - темный + violet + фиолетовый - - accept - добавить + yellow + желтый - - cancel - отменить + Label name: + Название ярлыка: AddLibraryDialog - + Add + Добавить + + + Add an existing library + Добавить в существующую библиотеку + + + Cancel + Отмена + + Comics folder : Папка комиксов : - Library name : - Library Name : Имя библиотеки : + + + ApiKeyDialog - - Add - Добавить + Accept + Принять - Cancel Отмена - - Add an existing library - Добавить в существующую библиотеку - - - - ApiKeyDialog - - Before you can connect to Comic Vine, you need your own API key. Please, get one free <a href="http://www.comicvine.com/api/">here</a> Для подключения к Comic Vine вам потребуется ваш личный API ключ. Приобретите его бесплатно вот <a href="http://www.comicvine.com/api/">здесь</a> - Paste here your Comic Vine API key Вставьте сюда ваш Comic Vine API ключ - - - Accept - Принять - - - - Cancel - Отмена - ClassicComicsView - Hide comic flow Показать/скрыть поток комиксов @@ -155,57 +127,46 @@ ComicInfoView - Authors Авторы - writer - penciller - inker - colorist - letterer - cover artist - Publisher - color - b/w - Characters @@ -213,47 +174,38 @@ ComicModel - - yes - да - - - no нет - - Title - Заголовок - - - - File Name - Имя файла + yes + да - - Pages - Всего страниц + Read + Прочитано - Size Размер - - Read - Прочитано + Pages + Всего страниц + + + Title + Заголовок - Current Page Текущая страница - + File Name + Имя файла + + Rating Рейтинг @@ -261,158 +213,123 @@ ComicVineDialog - - skip - пропустить - - - back назад - next дальше - - search - искать + skip + пропустить - close закрыть - - - - - + Retrieving tags for : %1 + Получение тегов для : %1 + + + Looking for comic... + Поиск комикса... + + + search + искать + + Looking for volume... Поиск информации... - - comic %1 of %2 - %3 комикс %1 of %2 - %3 - %1 comics selected %1 было выбрано - Error connecting to ComicVine Ошибка поключения к ComicVine - - - Retrieving tags for : %1 - Получение тегов для : %1 - - - Retrieving volume info... Получение информации... - - - Looking for comic... - Поиск комикса... - CreateLibraryDialog - - Comics folder : - Папка комиксов : + Create new library + Создать новую библиотеку - - Library Name : - Имя библиотеки: + Cancel + Отмена - Create Создать - - Cancel - Отмена - - - Create a library could take several minutes. You can stop the process and update the library later for completing the task. Создание библиотеки может занять несколько минут. Вы можете остановить процесс и обновить библиотеку позже для завершения задачи. - - Create new library - Создать новую библиотеку + The selected path does not exist or is not a valid path. Be sure that you have write access to this folder + Выбранный путь отсутствует, либо неверен. Убедитесь , что у вас есть доступ к этой папке - - Path not found - Путь не найден + Comics folder : + Папка комиксов : - - The selected path does not exist or is not a valid path. Be sure that you have write access to this folder - Выбранный путь отсутствует, либо неверен. Убедитесь , что у вас есть доступ к этой папке + Library Name : + Имя библиотеки: + + + Path not found + Путь не найден EditShortcutsDialog - - Restore defaults - Вернуть к первоначальным значениям + Shortcut in use + Горячая клавиша уже занята - - To change a shortcut, double click in the key combination and type the new keys. - Чтобы изменить горячую клавишу щелкните дважды по выбранной комбинации клавиш и введите новые сочетания клавиш. + Restore defaults + Вернуть к первоначальным значениям - Shortcuts settings Горячие клавиши - - Shortcut in use - Горячая клавиша уже занята - - - The shortcut "%1" is already assigned to other function Сочетание клавиш "%1" уже назначено для другой функции + + To change a shortcut, double click in the key combination and type the new keys. + Чтобы изменить горячую клавишу щелкните дважды по выбранной комбинации клавиш и введите новые сочетания клавиш. + EmptyFolderWidget - - - Subfolders in this folder - Подпапки в этой папке - - - Empty folder Пустая папка - + Subfolders in this folder + Подпапки в этой папке + + Drag and drop folders and comics here Перетащите папки и комиксы сюда @@ -420,7 +337,6 @@ EmptyLabelWidget - This label doesn't contain comics yet Этот ярлык пока ничего не содержит @@ -428,84 +344,68 @@ EmptyReadingListWidget - This reading list does not contain any comics yet - This reading list doesn't contain comics yet Этот список чтения пока ничего не содержит ExportComicsInfoDialog - Output file : - Путь сохранения : + Выходной файл (*.ydb) : - - Create - Создать + Destination database name + Имя этой базы данных - Cancel Отмена - - Export comics info - Экспортировать информацию комикса + Create + Создать - - Destination database name - Имя этой базы данных + The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder + Выбранный путь для импортируемого файла отсутствует, либо неверен. Убедитесь , что у вас есть доступ к этой папке - - Problem found while writing - Обнаружена Ошибка записи + Export comics info + Экспортировать информацию комикса - - The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder - Выбранный путь для импортируемого файла отсутствует, либо неверен. Убедитесь , что у вас есть доступ к этой папке + Problem found while writing + Обнаружена Ошибка записи ExportLibraryDialog - - Output folder : - Папка вывода : + Cancel + Отменить - Create Создать - - Cancel - Отменить + The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder + Выбранный путь для импортируемого файла отсутствует, либо неверен. Убедитесь , что у вас есть доступ к этой папке - - Create covers package - Создать комплект обложек + Output folder : + Папка вывода : - Problem found while writing Проблема при написании - - The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder - Выбранный путь для импортируемого файла отсутствует, либо неверен. Убедитесь , что у вас есть доступ к этой папке + Create covers package + Создать комплект обложек - Destination directory Назначенная директория @@ -513,22 +413,18 @@ FileComic - - Unknown error opening the file - Неизвестная ошибка при открытии файла + Format not supported + Формат не поддерживается - 7z not found 7z не найден - - Format not supported - Формат не поддерживается + Unknown error opening the file + Неизвестная ошибка при открытии файла - CRC error on page (%1): some of the pages will not be displayed correctly Ошибка контрольной суммы CRC на странице (%1): некоторые страницы будут отображаться неправильно @@ -536,7 +432,6 @@ GridComicsView - Show info Показать информацию @@ -544,40 +439,33 @@ HelpAboutDialog - - About - О программе - - - Help Настройки + + About + О программе + ImportComicsInfoDialog - - Import comics info - Импортировать информацию комикса - - - - Info database location : - Путь к файлу : + Cancel + Отмена - Import Импортировать - - Cancel - Отмена + Info database location : + Путь к файлу (*.ydb) : + + + Import comics info + Импортировать информацию комикса - Comics info file (*.ydb) Инфо файл комикса (*.ydb) @@ -585,1048 +473,937 @@ ImportLibraryDialog - - Library Name : - Имя библиотеки : - - - - Package location : - Местоположение комплекта : - - - Destination folder : Папка назначения : - - Unpack - Распаковать - - - Cancel Отмена - - Extract a catalog - Извлечь каталог + Unpack + Распаковать - Compresed library covers (*.clc) Сжатая библиотека обложек (*.clc) + + Package location : + Местоположение комплекта : + + + Library Name : + Имя библиотеки : + + + Extract a catalog + Извлечь каталог + ImportWidget - - Importing comics - Импорт комиксов - - - stop Остановить - - Some of the comics being added... - Поиск новых комиксов... + Importing comics + Импорт комиксов - <p>YACReaderLibrary is now creating a new library.</p><p>Create a library could take several minutes. You can stop the process and update the library later for completing the task.</p> - Create a library could take several minutes. You can stop the process and update the library later for completing the task. <p>YACReaderLibrary сейчас создает библиотеку.</p><p> Создание библиотеки может занять несколько минут. Вы можете остановить процесс и обновить библиотеку позже для завершения задачи.</p> - + Some of the comics being added... + Поиск новых комиксов... + + Updating the library Обновление библиотеки - <p>The current library is being updated. For faster updates, please, update your libraries frequently.</p><p>You can stop the process and continue updating this library later.</p> - <p>The current library is being updated. For faster updates, please, update your libraries frequently.</p><p>You can stop the process and continue updating this library later. - <p>Для сокращения времени этого процесса периодически обновляйте вашу библиотеку после добавления новых комиксов. -Вы можете остановить этот процесс и продолжить обновление этой библиотеки позже.</p> + <p>Текущая библиотека обновляется. Для более быстрого обновления в дальнейшем старайтесь почаще обновлять вашу библиотеку после добавления новых комиксов.</p><p>Вы можете остановить этот процесс и продолжить обновление этой библиотеки позже.</p> - Upgrading the library - Обновление библиотеки + - <p>The current library is being upgraded, please wait.</p> - <p>Библиотека обновляется, пожалуйста подождите.</p> + LibraryWindow - - YACReader Library - Библиотека YACReader - - - <font color='white'> press 'F' to close fullscreen mode </font> - <font color='white'> нажмите 'F' чтобы выйте из Полноэкранного режима </font> - - - - Create a new library - Создать новую библиотеку + Edit + Редактировать информацию - - Open an existing library - Открыть существующую библиотеку + The selected folder doesn't contain any library. + Выбранная папка не содержит ни одной библиотеки. - - - Export comics info - Экспортировать данные комиксов + This library was created with a previous version of YACReaderLibrary. It needs to be updated. Update now? + Эта библиотека была создана с предыдущей версией YACReaderLibrary. Она должна быть обновлена. Обновить сейчас? - - - Import comics info - Импортировать данные комиксов + Comic + Комикс - - Pack covers - Запаковать обложки + Folder name: + Имя папки: - - Pack the covers of the selected library - Запаковать обложки выбранной библиотеки + The selected folder and all its contents will be deleted from your disk. Are you sure? + Выбранная папка и все ее содержимое будет удалено с вашего жёсткого диска. Вы уверены? - - Unpack covers - Распаковать обложки + Update current folder + Обновить выбранную папку - - Unpack a catalog - Распаковать каталог + Error opening the library + Ошибка открытия библиотеки - - Update library - Обновить библиотеку + Show/Hide marks + Показать/Спрятать пометки - - Update current library - Обновить эту библиотеку + YACReader not found + YACReader не найден - - Rename library - Переименовать библиотеку + Show comics server options dialog + Настройки сервера YACReader - - Rename current library - Переименовать эту библиотеку + There was an issue trying to delete the selected folders. Please, check for write permissions and be sure that any applications are using these folders or any of the contained files. + Возникла проблема при удалении выбранных папок. Пожалуйста, проверьте права на запись и убедитесь что другие приложения не используют эти папки или файлы. - Remove current library from your collection Удалить эту библиотеку из своей коллекции - - Open current comic - Открыть выбранный комикс + Set comic as read + Отметить комикс как прочитано - - Open current comic on YACReader - Открыть комикс в YACReader + Rename list name + Изменить имя списка - - Save selected covers to... - Сохранить выбранные обложки в... + Add selected comics to favorites list + Добавить выбранные комиксы в список избранного - - Save covers of the selected comics as JPG files - Сохранить обложки выбранных комиксов как JPG файлы + Remove and delete metadata + Удаление метаданных - - - Set as read - Отметить как прочитано + Old library + Библиотека из старой версии YACreader - - Set comic as read - Отметить комикс как прочитано + Update cover + Обновить обложки - - - Set as unread - Отметить как не прочитано + Rename any selected labels or lists + Переименовать выбранный ярлык/список чтения - - Set comic as unread - Отметить комикс как не прочитано + Set as completed + Отметить как завершено - - Show/Hide marks - Показать/Спрятать пометки + There was an error accessing the folder's path + Ошибка доступа к пути папки - - - Fullscreen mode on/off - Полноэкранный режим включить/выключить + Library + Библиотека - Fullscreen mode on/off (F) - полноекранный режим включить/выключить(F) + Add new folder to the current library + Добавить новую папку в текущую библиотеку - - Help, About YACReader - О программе + Comics will only be deleted from the current label/list. Are you sure? + Комиксы будут удалены только из выбранного списка/ярлыка. Вы уверены? - - Select root node - Домашняя папка + Rename current library + Переименовать эту библиотеку - - Expand all nodes - Раскрыть все папки + Fullscreen mode on/off + Полноэкранный режим включить/выключить - - Show options dialog - Настройки + This library was created with a newer version of YACReaderLibrary. Download the new version now? + Эта библиотека была создана новой версией YACReaderLibrary. Скачать новую версию сейчас? - - Show comics server options dialog - Настройки сервера YACReader + Moving comics... + Переместить комиксы... - - Open folder... - Открыть папку... + Open current comic on YACReader + Открыть комикс в YACReader - - Set as uncompleted - Отметить как не завершено + Update current library + Обновить эту библиотеку - - Set as completed - Отметить как завершено + Copying comics... + Скопировать комиксы... - - Open containing folder... - Открыть выбранную папку... + Library '%1' is no longer available. Do you want to remove it? + Библиотека '%1' больше не доступна. Вы хотите удалить ее? - - Reset comic rating - Сбросить рейтинг комикса + Update library + Обновить библиотеку - - Select all comics - Выбрать все комиксы + Open folder... + Открыть папку... - - Edit - Редактировать информацию + Do you want remove + Вы хотите удалить библиотеку - - Update cover - Обновить обложки + Set as uncompleted + Отметить как не завершено - - Delete selected comics - Удалить выбранное + Error in path + Ошибка в пути - Hide comic flow - Не показывать поток комиксов + Reset comic rating + Сбросить рейтинг комикса - - Download tags from Comic Vine - Скачать теги из Comic Vine + Error updating the library + Ошибка обновления библиотеки - Folder Папка - - Comic - Комикс + The selected item will be deleted, your comics or folders will NOT be deleted from your disk. Are you sure? + Выбранные элементы будут удалены, ваши комиксы или папки НЕ БУДУТ удалены с вашего жёсткого диска. Вы уверены? - - Library not available - Library ' - Библиотека не доступна + Expand all nodes + Раскрыть все папки - - Library '%1' is no longer available. Do you want to remove it? - Библиотека '%1' больше не доступна. Вы хотите удалить ее? + Delete current folder from disk + Удалить выбранную папку с жёсткого диска - - Library '%1' has been created with an older version of YACReaderLibrary. It must be created again. Do you want to create the library now? - Библиотека '%1' была создана старой версией YACReaderLibrary. Она должна быть вновь создана. Вы хотите создать библиотеку сейчас? + List name: + Имя списка: - - Old library - Библиотека из старой версии YACreader + Add to... + Добавить в... - - - YACReader not found - YACReader не найден + Library '%1' has been created with an older version of YACReaderLibrary. It must be created again. Do you want to create the library now? + Библиотека '%1' была создана старой версией YACReaderLibrary. Она должна быть вновь создана. Вы хотите создать библиотеку сейчас? - YACReader not found, YACReader should be installed in the same folder as YACReaderLibrary. - YACReader не найден, YACReader должен быть установлен в ту же папку что и YACReaderLibrary. + Pack covers + Запаковать обложки - - - Unable to delete - Не удалось удалить + Save covers + Сохранить обложки - - There was an issue trying to delete the selected comics. Please, check for write permissions in the selected files or containing folder. - Возникла проблема при удалении выбранных комиксов. Пожалуйста, проверьте права на запись для выбранных файлов или содержащую их папку. + Change between comics views + Изменение внешнего вида потока комиксов - - Assign comics numbers - Порядковый номер + Remove current reading list from the library + Удалить выбранный ярлык/список чтения - - Assign numbers starting in: - Назначить порядковый номер начиная с: + Add new reading lists + Добавить новый список чтения - - Error creating the library - Ошибка создания библиотеки - + You are adding too many libraries. + +You probably only need one library in your top level comics folder, you can browse any subfolders using the folders section in the left sidebar. + +YACReaderLibrary will not stop you from creating more libraries but you should keep the number of libraries low. + Вы добавляете слишком много библиотек. + +Вероятно, вам нужна только одна библиотека в папке комиксов верхнего уровня, вы можете просматривать любые подпапки, используя раздел папок на левой боковой панели. + +YACReaderLibrary не помешает вам создать больше библиотек, но вы должны иметь не большое количество библиотек. + - - Error updating the library - Ошибка обновления библиотеки + Set as read + Отметить как прочитано - - Error opening the library - Ошибка открытия библиотеки + Assign comics numbers + Порядковый номер - - Delete comics - Удалить комиксы + Delete selected comics + Удалить выбранное - - All the selected comics will be deleted from your disk. Are you sure? - Все выбранные комиксы будут удалены с вашего жёсткого диска. Вы уверены? + Export comics info + Экспортировать информацию комикса - - Remove comics - Убрать комиксы + Show options dialog + Настройки - - Comics will only be deleted from the current label/list. Are you sure? - Комиксы будут удалены только из выбранного списка/ярлыка. Вы уверены? + Please, select a folder first + Пожалуйста, сначала выберите папку + + + Create a new library + Создать новую библиотеку + + + Library not available + Библиотека не доступна + + + Import comics info + Импортировать информацию комикса + + + There was an issue trying to delete the selected comics. Please, check for write permissions in the selected files or containing folder. + Возникла проблема при удалении выбранных комиксов. Пожалуйста, проверьте права на запись для выбранных файлов или содержащую их папку. + + + Add new reading list + Создать новый список чтения + + + Save selected covers to... + Сохранить выбранные обложки в... + + + Open current comic + Открыть выбранный комикс + + + YACReader Library + Библиотека YACReader + + + Add a new reading list to the current library + Создать новый список чтения + + + Error creating the library + Ошибка создания библиотеки + + + You are adding too many libraries. + Вы добавляете слишком много библиотек. + + + Update folder + Обновить папку + + + Unpack covers + Распаковать обложки + + + Update needed + Необходимо обновление + + + Open an existing library + Открыть существующую библиотеку + + + Show or hide read marks + Показать или спрятать отметку прочтено - Library name already exists Имя папки уже используется - There is another library with the name '%1'. Уже существует другая папка с именем '%1'. - - Library - Библиотека + Remove reading list + Удалить список чтения - - Remove library - Удалить библиотеку + Delete folder + Удалить папку - - Show or hide read marks - Показать или спрятать отметку прочтено + Assign numbers starting in: + Назначить порядковый номер начиная с: + + + Download new version + Загрузить новую версию + + + Delete comics + Удалить комиксы - - Add new folder Добавить новую папку - - Add new folder to the current library - Добавить новую папку в текущую библиотеку + Select all comics + Выбрать все комиксы - - - Delete folder - Удалить папку + Assign current order to comics + Назначить порядковый номер - - Delete current folder from disk - Удалить выбранную папку с жёсткого диска + Pack the covers of the selected library + Запаковать обложки выбранной библиотеки + + + Help, About YACReader + О программе - Collapse all nodes Свернуть все папки - - - Change between comics views - Может нужно поменять на другое выражение. - Изменение внешнего вида потока комиксов + Favorites + Избранное - - Assign current order to comics - Назначить порядковый номер + Rename selected list + Переименовать выбранный список + + + Delete list/label + Удалить список/ярлык + + + Set comic as unread + Отметить комикс как не прочитано - Edit shortcuts Редактировать горячие клавиши - - Update folder - Обновить папку + Select root node + Домашняя папка - - Update current folder - Обновить выбранную папку + No folder selected + Ни одна папка не была выбрана - - Add new reading list - Создать новый список чтения + Unpack a catalog + Распаковать каталог - - Add a new reading list to the current library - Создать новый список чтения + All the selected comics will be deleted from your disk. Are you sure? + Все выбранные комиксы будут удалены с вашего жёсткого диска. Вы уверены? - - Remove reading list - Удалить список чтения + Download tags from Comic Vine + Скачать теги из Comic Vine - - Remove current reading list from the library - Удалить выбранный ярлык/список чтения + Remove comics + Убрать комиксы - - Add new label + Add a new label to this library Создать новый ярлык - - Add a new label to this library - Создать новый ярлык + Set as unread + Отметить как не прочитано - - Rename selected list - Переименовать выбранный список + Library not found + Библиотека не найдена - - Rename any selected labels or lists - Переименовать выбранный ярлык/список чтения + Rename library + Переименовать библиотеку - - Add to... - Добавить в... + Remove library + Удалить библиотеку - - Favorites - Избранное + Open containing folder... + Открыть выбранную папку... - - Add selected comics to favorites list - Добавить выбранные комиксы в список избранного + Add new label + Создать новый ярлык - - Upgrade failed - Обновить не удалось + Unable to delete + Не удалось удалить - - There were errors during library upgrade in: - При обновлении библиотеки произошли ошибки: + library? + ? - - Update needed - Необходимо обновление + Save covers of the selected comics as JPG files + Сохранить обложки выбранных комиксов как JPG файлы - - This library was created with a previous version of YACReaderLibrary. It needs to be updated. Update now? - Эта библиотека была создана в предыдущей версии YACReaderLibrary. Требуется обновление. Обновить сейчас? + Are you sure? + Вы уверены? - Update failed - Обновить не удалось + Set as manga + - The current library can't be udpated. Check for write write permissions on: - В настоящее время библиотека не может быть обновлена. Проверьте права на чтение/запись: + Set issue as manga + - - Download new version - Загрузить новую версию + Set as normal + - - This library was created with a newer version of YACReaderLibrary. Download the new version now? - Эта библиотека была создана новой версией YACReaderLibrary. Скачать новую версию сейчас? + Set issue as normal + - - - Copying comics... - Скопировать комиксы... + Set as comic + - - - Moving comics... - Переместить комиксы... + Upgrade failed + - - Folder name: - Имя папки: + There were errors during library upgrade in: + - - No folder selected - Ни одна папка не была выбрана + YACReader not found. YACReader should be installed in the same folder as YACReaderLibrary. + - - Please, select a folder first - Пожалуйста, сначала выберите папку + YACReader not found. There might be a problem with your YACReader installation. + + + + LocalComicListModel - - Error in path - Ошибка в пути + file name + имя файла + + + LogWindow - - There was an error accessing the folder's path - Ошибка доступа к пути папки + Log window + - - The selected folder and all its contents will be deleted from your disk. Are you sure? - Выбранная папка и все ее содержимое будет удалено с вашего жёсткого диска. Вы уверены? + &Pause + - - There was an issue trying to delete the selected folders. Please, check for write permissions and be sure that any applications are using these folders or any of the contained files. - Возникла проблема при удалении выбранных папок. Пожалуйста, проверьте права на запись и убедитесь что другие приложения не используют эти папки или файлы. + &Save + - - Add new reading lists - Добавить новый список чтения + C&lear + - - - List name: - Имя списка: + &Copy + - - Delete list/label - Удалить список/ярлык + Level: + - - The selected item will be deleted, your comics or folders will NOT be deleted from your disk. Are you sure? - Выбранные элементы будут удалены, ваши комиксы или папки НЕ БУДУТ удалены с вашего жёсткого диска. Вы уверены? + &Auto scroll + + + + NoLibrariesWidget - - Rename list name - Изменить имя списка + create your first library + создайте свою первую библиотеку - - Save covers - Сохранить обложки + You don't have any libraries yet + У вас нет ни одной библиотеки - - You are adding too many libraries. - Вы добавляете слишком много библиотек. + <p>You can create a library in any folder, YACReaderLibrary will import all comics and folders from this folder. If you have created any library in the past you can open them.</p><p>Don't forget that you can use YACReader as a stand alone application for reading the comics on your computer.</p> + <p>Вы можете создать библиотеку в любой папке, YACReaderLibrary будет импортировать все комиксы и папки из этой папки. Если вы уже ранее создавали библиотеки, их можно будет открыть.< / p > <p>Не забывайте, что Вы можете использовать YACReader в качестве отдельного приложения для чтения комиксов на вашем компьютере.</п> - - You are adding too many libraries. - -You probably only need one library in your top level comics folder, you can browse any subfolders using the folders section in the left sidebar. - -YACReaderLibrary will not stop you from creating more libraries but you should keep the number of libraries low. - Вы добавляете слишком много библиотек. - -Вероятно, вам нужна только одна библиотека в папке комиксов верхнего уровня, вы можете просматривать любые подпапки, используя раздел папок на левой боковой панели. - -YACReaderLibrary не помешает вам создать больше библиотек, но вы должны иметь не большое количество библиотек. + add an existing one + добавить уже существующую + + + OptionsDialog - - YACReader not found. YACReader should be installed in the same folder as YACReaderLibrary. - YACReader не найден, YACReader должен быть установлен в ту же папку что и YACReaderLibrary. + Restore defautls + Вернуть к первоначальным значениям - - YACReader not found. There might be a problem with your YACReader installation. - YACReader не найден. Возможно, повреждены системные файлы YACReader. Переустановите YACReader. + Background + Фоновое изображение - - Library not found - Библиотека не найдена + Blur level + Уровень размытия - - The selected folder doesn't contain any library. - Выбранная папка не содержит ни одной библиотеки. + Enable background image + Включить фоновое изображение - - Are you sure? - Вы уверены? + Options + Настройки - - library? - ? + Comic Vine API key + Comic Vine API ключ + + + Edit Comic Vine API key + Редактировать Comic Vine API ключ + + + Opacity level + Уровень непрозрачности - - Remove and delete metadata - Удаление метаданных + General + Основные - - Do you want remove - Вы хотите удалить библиотеку + Use selected comic cover as background + Обложка комикса фоновое изображение - Asign comics numbers - Назначение номеров комикса + Comic Flow + Поток комиксов - Asign numbers starting in: - Назначьте номера, начинающиеся на: + Grid view + Фоновое изображение - - - LocalComicListModel - - file name - имя файла + Tray icon settings (experimental) + - - - NoLibrariesWidget - - You don't have any libraries yet - У вас нет ни одной библиотеки + Close to tray + - - <p>You can create a library in any folder, YACReaderLibrary will import all comics and folders from this folder. If you have created any library in the past you can open them.</p><p>Don't forget that you can use YACReader as a stand alone application for reading the comics on your computer.</p> - <p>Вы можете создать библиотеку в любой папке, YACReaderLibrary будет импортировать все комиксы и папки из этой папки. Если вы уже ранее создавали библиотеки, их можно будет открыть.< / p > <p>Не забывайте, что Вы можете использовать YACReader в качестве отдельного приложения для чтения комиксов на вашем компьютере.</п> + Start into the system tray + - - create your first library - создайте свою первую библиотеку + Display continue reading banner + - - add an existing one - добавить уже существующую + Continue reading + - OptionsDialog + PropertiesDialog - - Edit Comic Vine API key - Редактировать Comic Vine API ключ + Day: + День: - - Comic Vine API key - Comic Vine API ключ + Plot + Сюжет - - Enable background image - Включить фоновое изображение + Size: + Размер: - - Opacity level - Уровень непрозрачности + Year: + Год: - - Blur level - Уровень размытия + Inker(s): + Контуровщик(и): - - Use selected comic cover as background - Обложка комикса фоновое изображение + Publishing + Издатели - - Restore defautls - Вернуть к первоначальным значениям + Publisher: + Издатель: - - Background - Фоновое изображение + General info + Общая информация - - Comic Flow - Поток комиксов + Color/BW: + Цвет/BW: - - Grid view - Фоновое изображение + Edit selected comics information + Редактировать информацию выбранного комикса - - General - Основные + Penciller(s): + Художник(и): - - Options - Настройки + Colorist(s): + Колорист(ы): - - - PropertiesDialog - - General info - Общая информация + Genre: + Жанр: - - Authors - Авторы + Issue number: + Номер выпуска - - Publishing - Издатели + Month: + Месяц: - - Plot - Сюжет + Notes: + Заметки: - - Cover page - Страница обложки + Synopsis: + Описание: - Title: Заголовок: - - - of: - + Not found + Не найдено - - Issue number: - Номер выпуска + Characters: + Персонажи: - - Volume: - Объём : + Authors + Авторы - - Arc number: - + Age rating: + Возрастной рейтинг: - Story arc: Сюжетная арка: - - Genre: - Genere: - Жанр: + Writer(s): + Писатель(и): - - Size: - Размер: + Comic not found. You should update your library. + Комикс не найден. Обновите вашу библиотеку. - - Writer(s): - Писатель(и): + Edit comic information + Редактировать информацию комикса - - Penciller(s): - Художник(и): + Cover page + Страница обложки - - Inker(s): - Контуровщик(и): + Cover Artist(s): + Художник(и) Обложки: - - Colorist(s): - Колорист(ы): + Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> view </a> + <a style='color: ##666666; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> Открыть страницу этого комикса на сайте Comic Vine </a> - - Letterer(s): - Гравёр-шрифтовик(и): + Volume: + Объём : - - Cover Artist(s): - Художник(и) Обложки: + Format: + Формат: - - Day: - День: + Letterer(s): + Гравёр-шрифтовик(и): - - Month: - Месяц: + of: + - - Year: - Год: + Arc number: + - - Publisher: - Издатель: + Manga: + + + + QObject - - Format: - Формат: + 7z lib not found + Библиотека распаковщика 7z не найдена - - Color/BW: - Цвет/BW: + unable to load 7z lib from ./utils + Не удается загрузить библиотеку распаковщика 7z из ./utils - - Age rating: - Возрастной рейтинг: + Trace + - - Synopsis: - Описание: + Debug + - - Characters: - Персонажи: + Info + - - Notes: - Заметки: + Warning + - - Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> view </a> - <a style='color: ##666666; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> Открыть страницу этого комикса на сайте Comic Vine </a> + Error + - - Not found - Не найдено + Fatal + + + + QsLogging::LogWindowModel - - Comic not found. You should update your library. - Комикс не найден. Обновите вашу библиотеку. + Time + - - Edit selected comics information - Редактировать информацию выбранного комикса + Level + - - Edit comic information - Редактировать информацию комикса + Message + - QObject + QsLogging::Window - - 7z lib not found - Библиотека распаковщика 7z не найдена + &Pause + - - unable to load 7z lib from ./utils - Не удается загрузить библиотеку распаковщика 7z из ./utils + &Resume + + + + Save log + + + + Log file (*.log) + RenameLibraryDialog - - New Library Name : - Новое имя библиотеки: - - - - Rename - Переименовать + Rename current library + Переименовать эту библиотеку - Cancel Отмена - - Rename current library - Переименовать эту библиотеку + Rename + Переименовать + + + New Library Name : + Новое имя библиотеки: ScraperResultsPaginator - - Number of volumes found : %1 - Количество найденных томов : %1 + Number of %1 found : %2 + Количество из %1 найдено : %2 - - page %1 of %2 страница %1 из %2 - - Number of %1 found : %2 - Количество из %1 найдено : %2 + Number of volumes found : %1 + Количество найденных томов : %1 SearchSingleComic - Please provide some additional information. Пожалуйста, введите инфомарцию для поиска. - Series: Серия: @@ -1634,12 +1411,10 @@ YACReaderLibrary не помешает вам создать больше биб SearchVolume - Please provide some additional information. Пожалуйста, введите инфомарцию для поиска. - Series: Серия: @@ -1647,27 +1422,22 @@ YACReaderLibrary не помешает вам создать больше биб SelectComic - - Please, select the right comic info. - Пожалуйста, выберите правильную информацию об комиксе. + loading description + загрузка описания - comics комиксы - loading cover загрузка обложки - - loading description - загрузка описания + Please, select the right comic info. + Пожалуйста, выберите правильную информацию об комиксе. - description unavailable описание недоступно @@ -1675,27 +1445,22 @@ YACReaderLibrary не помешает вам создать больше биб SelectVolume - + loading description + загрузка описания + + Please, select the right series for your comic. Пожалуйста, выберите правильную серию для вашего комикса. - - volumes - тома - - - loading cover загрузка обложки - - loading description - загрузка описания + volumes + тома - description unavailable описание недоступно @@ -1703,126 +1468,85 @@ YACReaderLibrary не помешает вам создать больше биб SeriesQuestion - - You are trying to get information for various comics at once, are they part of the same series? - Вы пытаетесь получить информацию для нескольких комиксов одновременно, являются ли они все частью одной серии? + no + нет - yes да - - no - нет + You are trying to get information for various comics at once, are they part of the same series? + Вы пытаетесь получить информацию для нескольких комиксов одновременно, являются ли они все частью одной серии? ServerConfigDialog - - set port - указать порт - - - - Server connectivity information - Информация о подключении - - - - Scan it! - Сканируйте! + Port + Порт - YACReader is available for iOS devices. <a href='http://ios.yacreader.com' style='color:rgb(193, 148, 65)'> Discover it! </a> <a href='http://ios.yacreader.com' style='color:rgb(102,102,102)'>YACReader доступен для устройств с iOS.</a> - - Choose an IP address - Выбрать IP адрес - - - - Port - Порт - - - enable the server активировать сервер - + Server connectivity information + Информация о подключении + + display less information about folders in the browser to improve the performance отображать меньше информации о папках в браузере для улучшения производительности - - Could not load libqrencode. - + Scan it! + Сканируйте! + + + set port + указать порт + + + Choose an IP address + Выбрать IP адрес - QR generator error! - Ошибка QR генератора! + Could not load libqrencode. + SortVolumeComics - - Please, sort the list of comics on the left until it matches the comics' information. - Пожалуйста, отсортируйте список комиксов слева, пока он не будет соответствовать информации комикса. + remove selected comics + удалить выбранные комиксы - sort comics to match comic information сортировать комиксы, чтобы соответствовать информации комиксов - - issues - выпуск - - - - remove selected comics - удалить выбранные комиксы - - - restore all removed comics восстановить все удаленные комиксы - restore removed comics - восстановить удаленные комиксы - - - - TableModel - - Title - Заголовок - - - File Name - Имя файла + issues + выпуск - Pages - Страницы + Please, sort the list of comics on the left until it matches the comics' information. + Пожалуйста, отсортируйте список комиксов слева, пока он не будет соответствовать информации комикса. TitleHeader - SEARCH ПОИСК @@ -1830,25 +1554,21 @@ to improve the performance UpdateLibraryDialog - - Updating.... - Обновление... + Update library + Обновить библиотеку - Cancel Отмена - - Update library - Обновить библиотеку + Updating.... + Обновление... VolumeComicsModel - title название @@ -1856,83 +1576,92 @@ to improve the performance VolumesModel - year год - issues выпуск - publisher издатель - YACReaderDeletingProgress + YACReader::TrayIconController - - Please wait, deleting in progress... - Пожалуйста подождите, удаление в процессе... + &Restore + + + + &Quit + - + Systray + + + + YACReaderLibrary will keep running in the system tray. To terminate the program, choose <b>Quit</b> in the context menu of the system tray icon. + + + + + YACReader::WhatsNewDialog + + Close + + + + + YACReaderDeletingProgress + cancel отменить + + Please wait, deleting in progress... + Пожалуйста подождите, удаление в процессе... + YACReaderFieldEdit - - - Click to overwrite - Изменить - - - Restore to default Вернуть к первоначальным значениям - - - YACReaderFieldPlainTextEdit - - - - Click to overwrite Изменить + + + YACReaderFieldPlainTextEdit - Restore to default Вернуть к первоначальным значениям + + Click to overwrite + Изменить + YACReaderFlowConfigWidget - - How to show covers: - Выбрать внешний вид потока обложек: - - - CoverFlow look Рулеткой - + How to show covers: + Выбрать внешний вид потока обложек: + + Stripe look Вид полосами - Overlapped Stripe look Вид перекрывающимися полосами @@ -1940,166 +1669,135 @@ to improve the performance YACReaderGLFlowConfigWidget - - Presets: - Предустановки: - - - - Classic look - Классический вид - - - - Stripe look - Вид полосами + Zoom + Масштабировать - - Overlapped Stripe look - Вид перекрывающимися полосами + Light + Осветить - - Modern look - Современный вид + Show advanced settings + Показать дополнительные настройки - Roulette look Вид рулеткой - - Show advanced settings - Показать дополнительные настройки - - - - Custom: - Пользовательский: + Cover Angle + Охватить угол - - View angle - Угол зрения + Stripe look + Вид полосами - Position Позиция - - Cover gap - Охватить разрыв + Z offset + Смещение по Z + + + Y offset + Смещение по Y - Central gap Сфокусировать разрыв - - Zoom - Масштабировать + Presets: + Предустановки: - - Y offset - Смещение по Y + Overlapped Stripe look + Вид перекрывающимися полосами - - Z offset - Смещение по Z + Modern look + Современный вид - - Cover Angle - Охватить угол + View angle + Угол зрения - - Visibility - Прозрачность + Max angle + Максимальный угол - - Light - Осветить + Custom: + Пользовательский: - - Max angle - Максимальный угол + Classic look + Классический вид - - Low Performance - Минимальная производительность + Cover gap + Охватить разрыв - High Performance Максимальная производительность - + Performance: + Производительность: + + Use VSync (improve the image quality in fullscreen mode, worse performance) Использовать VSync (повысить качество изображения в полноэкранном режиме , хуже производительность) - - Performance: - Производительность: + Visibility + Прозрачность + + + Low Performance + Минимальная производительность YACReaderNavigationController - - No favorites - Нет избранного - - - You are not reading anything yet, come on!! Вы пока ничего не читаете. Может самое время почитать? + + No favorites + Нет избранного + YACReaderOptionsDialog - Save Сохранить - - Cancel - Отмена + Use hardware acceleration (restart needed) + Использовать аппаратное ускорение (необходима перезагрузка) - - Edit shortcuts - Редактировать горячие клавиши + Cancel + Отмена - Shortcuts Горячие клавиши - - Use hardware acceleration (restart needed) - Использовать аппаратное ускорение (необходима перезагрузка) + Edit shortcuts + Редактировать горячие клавиши YACReaderSearchLineEdit - type to search Начать поиск @@ -2107,32 +1805,26 @@ to improve the performance YACReaderSideBar - - Libraries - Библиотеки - - - - Folders - Папки - - - Reading Lists Списки чтения - LIBRARIES БИБЛИОТЕКИ - + Libraries + Библиотеки + + FOLDERS ПАПКИ - + Folders + Папки + + READING LISTS СПИСКИ ЧТЕНИЯ diff --git a/YACReaderLibrary/yacreaderlibrary_source.ts b/YACReaderLibrary/yacreaderlibrary_source.ts index f757b11c3..87e652144 100644 --- a/YACReaderLibrary/yacreaderlibrary_source.ts +++ b/YACReaderLibrary/yacreaderlibrary_source.ts @@ -4,7 +4,7 @@ ActionsShortcutsModel - + None @@ -95,28 +95,28 @@ AddLibraryDialog - + Comics folder : - + Library name : Library Name : - + Add - + Cancel - + Add an existing library @@ -147,7 +147,7 @@ ClassicComicsView - + Hide comic flow @@ -155,57 +155,57 @@ ComicInfoView - + Authors - + writer - + penciller - + inker - + colorist - + letterer - + cover artist - + Publisher - + color - + b/w - + Characters @@ -213,47 +213,47 @@ ComicModel - + yes - + no - + Title - + File Name - + Pages - + Size - + Read - + Current Page - + Rating @@ -261,68 +261,68 @@ ComicVineDialog - + skip - + back - + next - + search - + close - - - - - + + + + + Looking for volume... - - + + comic %1 of %2 - %3 - + %1 comics selected - + Error connecting to ComicVine - - + + Retrieving tags for : %1 - + Retrieving volume info... - + Looking for comic... @@ -360,12 +360,12 @@ - + Path not found - + The selected path does not exist or is not a valid path. Be sure that you have write access to this folder @@ -383,17 +383,17 @@ - + Shortcuts settings - + Shortcut in use - + The shortcut "%1" is already assigned to other function @@ -401,18 +401,18 @@ EmptyFolderWidget - - + + Subfolders in this folder - + Empty folder - + Drag and drop folders and comics here @@ -457,17 +457,17 @@ - + Destination database name - + Problem found while writing - + The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder @@ -495,17 +495,17 @@ - + Problem found while writing - + The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder - + Destination directory @@ -513,22 +513,22 @@ FileComic - + CRC error on page (%1): some of the pages will not be displayed correctly - + Unknown error opening the file - + 7z not found - + Format not supported @@ -536,7 +536,7 @@ GridComicsView - + Show info @@ -562,22 +562,22 @@ - + Info database location : - + Import - + Cancel - + Comics info file (*.ydb) @@ -615,7 +615,7 @@ - + Compresed library covers (*.clc) @@ -623,42 +623,42 @@ ImportWidget - + stop - + Some of the comics being added... - + Importing comics - + <p>YACReaderLibrary is now creating a new library.</p><p>Create a library could take several minutes. You can stop the process and update the library later for completing the task.</p> - + Updating the library - + <p>The current library is being updated. For faster updates, please, update your libraries frequently.</p><p>You can stop the process and continue updating this library later.</p> - + Upgrading the library - + <p>The current library is being upgraded, please wait.</p> @@ -666,12 +666,12 @@ LibraryWindow - + YACReader Library - + Library @@ -769,7 +769,7 @@ - + Set as read @@ -780,7 +780,7 @@ - + Set as unread @@ -790,323 +790,349 @@ - + Show/Hide marks - + Collapse all nodes - + Assign current order to comics - + Library not available Library ' - - + + Fullscreen mode on/off - + + + Set as manga + + + + + Set issue as manga + + + + + Set as normal + + + + + Set issue as normal + + + + Help, About YACReader - - + + Delete folder - + Select root node - + Expand all nodes - + Show options dialog - + Show comics server options dialog - + Open folder... - + Set as uncompleted - + Set as completed - + + Set as comic + + + + Open containing folder... - + Reset comic rating - + Select all comics - + Edit - + Update cover - + Delete selected comics - + Download tags from Comic Vine - + Edit shortcuts - + Update folder - + Update current folder - + Add new reading list - + Add a new reading list to the current library - + Remove reading list - + Remove current reading list from the library - + Add new label - + Add a new label to this library - + Rename selected list - + Rename any selected labels or lists - + Add to... - + Favorites - + Add selected comics to favorites list - + Folder - + Comic - + Upgrade failed - + There were errors during library upgrade in: - + Update needed - + This library was created with a previous version of YACReaderLibrary. It needs to be updated. Update now? - + Download new version - + This library was created with a newer version of YACReaderLibrary. Download the new version now? - + Library '%1' is no longer available. Do you want to remove it? - + Old library - + Library '%1' has been created with an older version of YACReaderLibrary. It must be created again. Do you want to create the library now? - - + + Copying comics... - - + + Moving comics... - + Folder name: - + No folder selected - + Please, select a folder first - + Error in path - + There was an error accessing the folder's path - + The selected folder and all its contents will be deleted from your disk. Are you sure? - + There was an issue trying to delete the selected folders. Please, check for write permissions and be sure that any applications are using these folders or any of the contained files. - + Add new reading lists - - + + List name: - + Delete list/label - + The selected item will be deleted, your comics or folders will NOT be deleted from your disk. Are you sure? - + Rename list name - + Save covers - + You are adding too many libraries. - + You are adding too many libraries. You probably only need one library in your top level comics folder, you can browse any subfolders using the folders section in the left sidebar. @@ -1115,141 +1141,141 @@ YACReaderLibrary will not stop you from creating more libraries but you should k - - + + YACReader not found - + Library not found - + The selected folder doesn't contain any library. - + Are you sure? - + Do you want remove - + library? - + Remove and delete metadata - + Assign comics numbers - + Assign numbers starting in: - - + + Unable to delete - + Show or hide read marks - - + + Add new folder - + Add new folder to the current library - + Delete current folder from disk - - + + Change between comics views - + YACReader not found. YACReader should be installed in the same folder as YACReaderLibrary. - + YACReader not found. There might be a problem with your YACReader installation. - + There was an issue trying to delete the selected comics. Please, check for write permissions in the selected files or containing folder. - + Error creating the library - + Error updating the library - + Error opening the library - + Delete comics - + All the selected comics will be deleted from your disk. Are you sure? - + Remove comics - + Comics will only be deleted from the current label/list. Are you sure? - + Library name already exists - + There is another library with the name '%1'. @@ -1257,11 +1283,49 @@ YACReaderLibrary will not stop you from creating more libraries but you should k LocalComicListModel - + file name + + LogWindow + + + Log window + + + + + &Pause + + + + + &Save + + + + + C&lear + + + + + &Copy + + + + + Level: + + + + + &Auto scroll + + + NoLibrariesWidget @@ -1288,62 +1352,87 @@ YACReaderLibrary will not stop you from creating more libraries but you should k OptionsDialog - + + Tray icon settings (experimental) + + + + + Close to tray + + + + + Start into the system tray + + + + Edit Comic Vine API key - + Comic Vine API key - + Enable background image - + Opacity level - + Blur level - + Use selected comic cover as background - + Restore defautls - + Background - + + Display continue reading banner + + + + + Continue reading + + + + Comic Flow - + Grid view - + General - + Options @@ -1376,149 +1465,154 @@ YACReaderLibrary will not stop you from creating more libraries but you should k - + Title: - - + + of: - + Issue number: - + Volume: - + Arc number: - + Story arc: - + Genre: Genere: - + Size: - + Writer(s): - + Penciller(s): - + Inker(s): - + Colorist(s): - + Letterer(s): - + Cover Artist(s): - + Day: - + Month: - + Year: - + Publisher: - + Format: - + Color/BW: - + Age rating: - + + Manga: + + + + Synopsis: - + Characters: - + Notes: - + Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> view </a> - + Not found - + Comic not found. You should update your library. - + Edit selected comics information - + Edit comic information @@ -1526,35 +1620,106 @@ YACReaderLibrary will not stop you from creating more libraries but you should k QObject - + 7z lib not found - + unable to load 7z lib from ./utils + + + Trace + + + + + Debug + + + + + Info + + + + + Warning + + + + + Error + + + + + Fatal + + + + + QsLogging::LogWindowModel + + + Time + + + + + Level + + + + + Message + + + + + QsLogging::Window + + + &Pause + + + + + &Resume + + + + + Save log + + + + + Log file (*.log) + + RenameLibraryDialog - + New Library Name : - + Rename - + Cancel - + Rename current library @@ -1562,18 +1727,18 @@ YACReaderLibrary will not stop you from creating more libraries but you should k ScraperResultsPaginator - + Number of volumes found : %1 - - + + page %1 of %2 - + Number of %1 found : %2 @@ -1607,27 +1772,27 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SelectComic - + Please, select the right comic info. - + comics - + loading cover - + loading description - + description unavailable @@ -1645,17 +1810,17 @@ YACReaderLibrary will not stop you from creating more libraries but you should k - + loading cover - + loading description - + description unavailable @@ -1663,17 +1828,17 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SeriesQuestion - + You are trying to get information for various comics at once, are they part of the same series? - + yes - + no @@ -1681,32 +1846,32 @@ YACReaderLibrary will not stop you from creating more libraries but you should k ServerConfigDialog - + set port - + Server connectivity information - + Scan it! - + YACReader is available for iOS devices. <a href='http://ios.yacreader.com' style='color:rgb(193, 148, 65)'> Discover it! </a> - + Choose an IP address - + Port @@ -1722,7 +1887,7 @@ to improve the performance - + Could not load libqrencode. @@ -1766,17 +1931,17 @@ to improve the performance UpdateLibraryDialog - + Updating.... - + Cancel - + Update library @@ -1784,7 +1949,7 @@ to improve the performance VolumeComicsModel - + title @@ -1792,21 +1957,52 @@ to improve the performance VolumesModel - + year - + issues - + publisher + + YACReader::TrayIconController + + + &Restore + + + + + &Quit + + + + + Systray + + + + + YACReaderLibrary will keep running in the system tray. To terminate the program, choose <b>Quit</b> in the context menu of the system tray icon. + + + + + YACReader::WhatsNewDialog + + + Close + + + YACReaderDeletingProgress @@ -1824,7 +2020,7 @@ to improve the performance YACReaderFieldEdit - + Click to overwrite @@ -1838,9 +2034,9 @@ to improve the performance YACReaderFieldPlainTextEdit - - - + + + Click to overwrite @@ -1876,117 +2072,117 @@ to improve the performance YACReaderGLFlowConfigWidget - + Presets: - + Classic look - + Stripe look - + Overlapped Stripe look - + Modern look - + Roulette look - + Show advanced settings - + Custom: - + View angle - + Position - + Cover gap - + Central gap - + Zoom - + Y offset - + Z offset - + Cover Angle - + Visibility - + Light - + Max angle - + Low Performance - + High Performance - + Use VSync (improve the image quality in fullscreen mode, worse performance) - + Performance: @@ -1994,12 +2190,12 @@ to improve the performance YACReaderNavigationController - + No favorites - + You are not reading anything yet, come on!! @@ -2017,17 +2213,17 @@ to improve the performance - + Edit shortcuts - + Shortcuts - + Use hardware acceleration (restart needed) diff --git a/YACReaderLibrary/yacreaderlibrary_tr.ts b/YACReaderLibrary/yacreaderlibrary_tr.ts index fa34e572c..c7554caf0 100644 --- a/YACReaderLibrary/yacreaderlibrary_tr.ts +++ b/YACReaderLibrary/yacreaderlibrary_tr.ts @@ -10,6 +10,10 @@ AddLabelDialog + + cancel + vazgeç + Label name: @@ -70,10 +74,6 @@ accept - - cancel - vazgeç - AddLibraryDialog @@ -93,10 +93,6 @@ Comics folder : Çizfi roman dosyası : - - Library Name : - Kütüphane adı : - Library name : @@ -104,6 +100,10 @@ ApiKeyDialog + + Cancel + Vazgeç + Before you can connect to Comic Vine, you need your own API key. Please, get one free <a href="http://www.comicvine.com/api/">here</a> @@ -116,23 +116,19 @@ Accept - - Cancel - Vazgeç - ClassicComicsView Hide comic flow - Çizgi roman akışını gizle + Çizgi roman akışını gizle ComicInfoView Authors - Yazarlar + Yazarlar writer @@ -178,32 +174,32 @@ ComicModel - yes - evet + no + hayır - no - hayır + yes + evet - Title - Başlık + Read + Oku - File Name - Dosya Adı + Size + Boyut Pages - Sayfalar + Sayfalar - Size - Boyut + Title + Başlık - Read - Oku + File Name + Dosya Adı Current Page @@ -416,54 +412,10 @@ FileComic - - File not found or not images in file - Dosya bulunamadı yada dosyada resim yok - 7z not found 7z bulunamadı - - Comic not found - Çizgi roman bulunamadı - - - Not found - Bulunamadı - - - File error - Dosya hatası - - - 7z problem - 7z Problemli - - - 7z reading - 7z Okuyor - - - 7z crashed. - 7z Bozulmuş. - - - problem reading from 7z - 7z Dosyası Okunamıyor - - - 7z crashed - 7z Bozulmuş - - - Unknown error 7z - Bilinmeyen 7z hatası - - - 7z wasn't found in your PATH. - 7z Dosya Yolu Bulunamadı. - CRC error on page (%1): some of the pages will not be displayed correctly @@ -587,14 +539,6 @@ LibraryWindow - - + - + - - - - - - - Edit Düzenle @@ -607,14 +551,6 @@ This library was created with a previous version of YACReaderLibrary. It needs to be updated. Update now? Bu kütüphane YACReaderKütüphabenin bir önceki versiyonun oluşturulmuş, güncellemeye ihtiyacın var. Şimdi güncellemek ister misin ? - - <font color='white'> press 'F' to close fullscreen mode </font> - <font color='white'> 'F'ye basarak tam ekran modundan çıkabilirsin </font> - - - Asign current order to comics - Asignar el orden actual a los cómics - Error opening the library Haa kütüphanesini aç @@ -692,10 +628,6 @@ Error updating the library Kütüphane güncelleme sorunu - - Hide comic flow - Çizgi roman akışını gizle - Expand all nodes Tüm düğümleri büyüt @@ -704,10 +636,6 @@ Library '%1' has been created with an older version of YACReaderLibrary. It must be created again. Do you want to create the library now? Kütüphane '%1 YACRKütüphanenin eski bir sürümünde oluşturulmuş, Kütüphaneyi yeniden oluşturmak ister misin? - - There was a problem saving YACReaderLibrary libraries file. Please, check if you have enough permissions in the YACReader root folder. - YACRKütüphane kütüphane dosyaları kaydedilirken bir sorun çıktı. Lütfen, YACReader root dosyalarını kontrol edin. - Pack covers Paket kapakları @@ -716,18 +644,6 @@ Set as read Okundu olarak işaretle - - Fullscreen mode on/off (F) - Tam ekran modunu aç/kapa(F) - - - Saving libraries file.... - Kütüphane dosyalarını kaydet... - - - Asign comics numbers - Çizgi roman numaralarını değiştir - Delete selected comics Seçili çizgi romanları sil @@ -752,18 +668,10 @@ Import comics info Çizgi roman bilgilerini içe aktar - - The current library can't be udpated. Check for write write permissions on: - Kütüphane güncellenmemiş. Lütfen yazım izinlerini kontrol et: - Open current comic Seçili çizgi romanı aç - - Colapse all nodes - Tüm düğümleri daralt - YACReader Library YACReader Kütüphane @@ -772,10 +680,6 @@ Error creating the library Kütüphane oluşturma sorunu - - Update failed - Güncelleme başarısız - Unpack covers Kapakları aç @@ -796,10 +700,6 @@ There is another library with the name '%1'. Bu başka bir kütüphanenin adı '%1'. - - Asign numbers starting in: - Başlangıç sayılarını düzenle: - Download new version Yeni versiyonu indir @@ -808,18 +708,10 @@ Delete comics Çizgi romanları sil - - Show or hide readed marks - Okunmuş işaretleri göster yada gizle - Select all comics Tüm çizgi romanları seç - - Set all comics as read - Tüm çizgi romanları okundu olarak ayarla - Pack the covers of the selected library Kütüphanede ki kapakları paketle @@ -844,10 +736,6 @@ All the selected comics will be deleted from your disk. Are you sure? Seçilen tüm çizgi romanlar diskten silinecek emin misin ? - - Set all as read - Hepsini okundu işaretle - Set as unread Hepsini okunmadı işaretle @@ -868,88 +756,88 @@ Open containing folder... Klasör açılıyor... - - Set all comics as unread - Tüm çizgiromanları okunmadı olarak işaretle - library? kütüphane? - - Set all as unread - Hepsini okunmadı olarak ayarla - Are you sure? Emin misin? - Download tags from Comic Vine + Save selected covers to... - YACReader not found + Save covers of the selected comics as JPG files - Unable to delete + Set as manga - There was an issue trying to delete the selected comics. Please, check for write permissions in the selected files or containing folder. + Set issue as manga - Set as uncompleted + Set as normal - Set as completed + Set issue as normal - Reset comic rating + Show or hide read marks - Folder + Add new folder - Comic + Add new folder to the current library - Save selected covers to... + Delete folder - Save covers of the selected comics as JPG files + Delete current folder from disk - Show or hide read marks + Collapse all nodes - Add new folder + Change between comics views - Add new folder to the current library + Set as uncompleted - Delete folder + Set as completed - Delete current folder from disk + Set as comic - Change between comics views + Reset comic rating + + + + Assign current order to comics + + + + Download tags from Comic Vine @@ -1008,6 +896,22 @@ Add selected comics to favorites list + + Folder + + + + Comic + + + + Upgrade failed + + + + There were errors during library upgrade in: + + Copying comics... @@ -1040,6 +944,10 @@ The selected folder and all its contents will be deleted from your disk. Are you sure? + + Unable to delete + + There was an issue trying to delete the selected folders. Please, check for write permissions and be sure that any applications are using these folders or any of the contained files. @@ -1068,14 +976,6 @@ Save covers - - Remove comics - - - - Comics will only be deleted from the current label/list. Are you sure? - - You are adding too many libraries. @@ -1089,35 +989,35 @@ YACReaderLibrary will not stop you from creating more libraries but you should k - Collapse all nodes + YACReader not found - Assign current order to comics + YACReader not found. YACReader should be installed in the same folder as YACReaderLibrary. - Assign comics numbers + YACReader not found. There might be a problem with your YACReader installation. - Assign numbers starting in: + There was an issue trying to delete the selected comics. Please, check for write permissions in the selected files or containing folder. - Upgrade failed + Assign comics numbers - There were errors during library upgrade in: + Assign numbers starting in: - YACReader not found. YACReader should be installed in the same folder as YACReaderLibrary. + Remove comics - YACReader not found. There might be a problem with your YACReader installation. + Comics will only be deleted from the current label/list. Are you sure? @@ -1128,6 +1028,37 @@ YACReaderLibrary will not stop you from creating more libraries but you should k + + LogWindow + + Log window + + + + &Pause + + + + &Save + + + + C&lear + + + + &Copy + + + + Level: + + + + &Auto scroll + + + NoLibrariesWidget @@ -1153,6 +1084,18 @@ YACReaderLibrary will not stop you from creating more libraries but you should k Options Ayarlar + + Tray icon settings (experimental) + + + + Close to tray + + + + Start into the system tray + + Edit Comic Vine API key @@ -1185,6 +1128,14 @@ YACReaderLibrary will not stop you from creating more libraries but you should k Background + + Display continue reading banner + + + + Continue reading + + Comic Flow @@ -1316,16 +1267,16 @@ YACReaderLibrary will not stop you from creating more libraries but you should k Format: Formato: - - Genere: - Tür: - Letterer(s): Mesaj(lar): - Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> view </a> + of: + + + + Arc number: @@ -1333,11 +1284,11 @@ YACReaderLibrary will not stop you from creating more libraries but you should k - of: + Manga: - Arc number: + Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> view </a> @@ -1351,6 +1302,64 @@ YACReaderLibrary will not stop you from creating more libraries but you should k unable to load 7z lib from ./utils + + Trace + + + + Debug + + + + Info + + + + Warning + + + + Error + + + + Fatal + + + + + QsLogging::LogWindowModel + + Time + + + + Level + + + + Message + + + + + QsLogging::Window + + &Pause + + + + &Resume + + + + Save log + + + + Log file (*.log) + + RenameLibraryDialog @@ -1457,16 +1466,16 @@ YACReaderLibrary will not stop you from creating more libraries but you should k SeriesQuestion - You are trying to get information for various comics at once, are they part of the same series? - + no + hayır yes - evet + evet - no - hayır + You are trying to get information for various comics at once, are they part of the same series? + @@ -1475,38 +1484,14 @@ YACReaderLibrary will not stop you from creating more libraries but you should k Port Port - - EASY SERVER CONNECTION - KOLAY SERVER BAĞLANTISI - - - just scan the code with your device!! - Sadece kodu cihaza tarat !! - enable the server erişilebilir server - - IP address - IP adres - - - YACReader is now available for iOS devices, the best comic reading experience now in your iPad, iPhone or iPod touch. <a href='http://ios.yacreader.com' style='color:rgb(193, 148, 65)'> Discover it! </a> - YACReader şimdi iOS cihazlarda Hemen iPad, iPhone veya iPod Touch'ına kapmak için tıkla (Çevirisi yapılmayacak) <a href='http://ios.yacreader.com' style='color:rgb(193, 148, 65)'> ¡Descúbrelo! </a> - - - QR generator error! - QR kod oluşturma hatası! - set port Port Ayarla - - SERVER ADDRESS - Server Adres - Server connectivity information @@ -1556,37 +1541,6 @@ to improve the performance - - TableModel - - no - hayır - - - yes - evet - - - Read - Oku - - - Size - Boyut - - - Pages - Sayfalar - - - Title - Başlık - - - File Name - Dosya Adı - - TitleHeader @@ -1631,6 +1585,32 @@ to improve the performance + + YACReader::TrayIconController + + &Restore + + + + &Quit + + + + Systray + + + + YACReaderLibrary will keep running in the system tray. To terminate the program, choose <b>Quit</b> in the context menu of the system tray icon. + + + + + YACReader::WhatsNewDialog + + Close + + + YACReaderDeletingProgress @@ -1821,10 +1801,6 @@ to improve the performance YACReaderSideBar - - Search folders and comics - Klasörleri ve çizgi romanları ara - LIBRARIES KÜTÜPHANELER @@ -1850,19 +1826,4 @@ to improve the performance - - YACReaderSocialDialog - - I am reading %1 using YACReader. - YACReader ile okuyorum %1. - - - send to: - Gönder: - - - Follow YACReader! - YACReader'ı takip et ! - - diff --git a/YACReaderLibrary/yacreaderlibrary_zh.ts b/YACReaderLibrary/yacreaderlibrary_zh.ts new file mode 100644 index 000000000..aa48874dd --- /dev/null +++ b/YACReaderLibrary/yacreaderlibrary_zh.ts @@ -0,0 +1,2277 @@ + + + + + ActionsShortcutsModel + + + None + + + + + AddLabelDialog + + + Label name: + 标签名称: + + + + Choose a color: + 选择标签颜色: + + + + red + + + + + orange + + + + + yellow + + + + + green + 绿 + + + + cyan + + + + + blue + + + + + violet + 紫罗兰 + + + + purple + + + + + pink + + + + + white + + + + + light + 浅色 + + + + dark + 深色 + + + + accept + 接受 + + + + cancel + 取消 + + + + AddLibraryDialog + + + Comics folder : + 漫画文件夹: + + + + Library name : + Library Name : + 库名: + + + + Add + 添加 + + + + Cancel + 取消 + + + + Add an existing library + 添加一个现有库 + + + + ApiKeyDialog + + + Before you can connect to Comic Vine, you need your own API key. Please, get one free <a href="http://www.comicvine.com/api/">here</a> + 你需要拥有自己的API密匙才能够连接Comic Vine. 你可以通过这个链接获得一个免费的<a href="http://www.comicvine.com/api/">API</a>密匙 + + + + Paste here your Comic Vine API key + 在此粘贴你的Comic Vine API + + + + Accept + 接受 + + + + Cancel + 取消 + + + + ClassicComicsView + + + Hide comic flow + 隐藏漫画流 + + + + ComicInfoView + + + Authors + 作者 + + + + writer + 作者 + + + + penciller + 线稿 + + + + inker + 墨稿 + + + + colorist + 上色 + + + + letterer + 文本 + + + + cover artist + 封面设计 + + + + Publisher + 出版者 + + + + color + 颜色 + + + + b/w + 黑白 + + + + Characters + 角色 + + + + ComicModel + + + yes + + + + + no + + + + + Title + 标题 + + + + File Name + 文件名 + + + + Pages + 页数 + + + + Size + 大小 + + + + Read + 阅读 + + + + Current Page + 当前页 + + + + Rating + 评分 + + + + ComicVineDialog + + + skip + 忽略 + + + + back + 返回 + + + + next + 下一步 + + + + search + 搜索 + + + + close + 关闭 + + + + + + + + Looking for volume... + 搜索卷... + + + + + comic %1 of %2 - %3 + 第 %1 本 共 %2 本 - %3 + + + + %1 comics selected + 已选择 %1 本漫画 + + + + Error connecting to ComicVine + ComicVine 连接时出错 + + + + + Retrieving tags for : %1 + 正在检索标签: %1 + + + + Retrieving volume info... + 正在接收卷信息... + + + + Looking for comic... + 搜索漫画中... + + + + CreateLibraryDialog + + + Comics folder : + 漫画文件夹: + + + + Library Name : + 库名: + + + + Create + 创建 + + + + Cancel + 取消 + + + + Create a library could take several minutes. You can stop the process and update the library later for completing the task. + 创建一个新的文件库可能需要几分钟时间,您可以先停止该进程,稍后可以通过更新文件库选项来更新数据。 + + + + Create new library + 创建新的漫画库 + + + + Path not found + 未找到路径 + + + + The selected path does not exist or is not a valid path. Be sure that you have write access to this folder + 所选路径不存在或不是有效路径. 确保您具有此文件夹的写入权限 + + + + EditShortcutsDialog + + + Restore defaults + 恢复默认 + + + + To change a shortcut, double click in the key combination and type the new keys. + 更改快捷键: 双击按键组合并输入新的映射. + + + + Shortcuts settings + 快捷键设置 + + + + Shortcut in use + 快捷键被占用 + + + + The shortcut "%1" is already assigned to other function + 快捷键 "%1" 已被映射至其他功能 + + + + EmptyFolderWidget + + + + Subfolders in this folder + 建立子文件夹 + + + + Empty folder + 空文件夹 + + + + Drag and drop folders and comics here + 拖动文件夹或者漫画到这里 + + + + EmptyLabelWidget + + + This label doesn't contain comics yet + 此标签尚未包含漫画 + + + + EmptyReadingListWidget + + + This reading list does not contain any comics yet + This reading list doesn't contain any comics yet + 此阅读列表尚未包含任何漫画 + + + + ExportComicsInfoDialog + + + Output file : + 输出文件: + + + + Create + 创建 + + + + Cancel + 取消 + + + + Export comics info + 导出漫画信息 + + + + Destination database name + 目标数据库名称 + + + + Problem found while writing + 写入时出现问题 + + + + The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder + 选定的输出文件路径不存在或路径无效. 确保您具有此文件夹的写入权限 + + + + ExportLibraryDialog + + + Output folder : + 输出文件夹: + + + + Create + 创建 + + + + Cancel + 取消 + + + + Create covers package + 创建封面包 + + + + Problem found while writing + 写入时出现问题 + + + + The selected path for the output file does not exist or is not a valid path. Be sure that you have write access to this folder + 选定的输出文件路径不存在或路径无效. 确保您具有此文件夹的写入权限 + + + + Destination directory + 目标目录 + + + + FileComic + + + CRC error on page (%1): some of the pages will not be displayed correctly + 第 %1 页 CRC 校验失败: 部分页面将无法正确显示 + + + + Unknown error opening the file + 打开文件时出现未知错误 + + + + 7z not found + 未找到 7z + + + + Format not supported + 不支持的文件格式 + + + + GridComicsView + + + Show info + 显示信息 + + + + HelpAboutDialog + + + About + 关于 + + + + Help + 帮助 + + + + ImportComicsInfoDialog + + + Import comics info + 导入漫画信息 + + + + Info database location : + 数据库地址: + + + + Import + 导入 + + + + Cancel + 取消 + + + + Comics info file (*.ydb) + 漫画信息文件(*.ydb) + + + + ImportLibraryDialog + + + Library Name : + 库名: + + + + Package location : + 打包地址: + + + + Destination folder : + 目标文件夹: + + + + Unpack + 解压 + + + + Cancel + 取消 + + + + Extract a catalog + 提取目录 + + + + Compresed library covers (*.clc) + 已压缩的文件库封面 (*.clc) + + + + ImportWidget + + + stop + 停止 + + + + Some of the comics being added... + 正在添加漫画... + + + + Importing comics + 正在导入漫画 + + + + <p>YACReaderLibrary is now creating a new library.</p><p>Create a library could take several minutes. You can stop the process and update the library later for completing the task.</p> + <p>YACReaderLibrary现在正在创建一个新库。</p><p>这可能需要几分钟时间,您可以先停止该进程,稍后可以通过更新文件库选项来更新数据。</p> + + + + Updating the library + 正在更新文库 + + + + <p>The current library is being updated. For faster updates, please, update your libraries frequently.</p><p>You can stop the process and continue updating this library later.</p> + <p>正在更新当前文件库。要获得更快的更新,请经常更新您的文件库。</p><p>您可以停止该进程,稍后继续更新操作。</p> + + + + Upgrading the library + 正在更新文库 + + + + <p>The current library is being upgraded, please wait.</p> + <p>正在更新当前漫画库, 请稍候.</p> + + + + LibraryWindow + + + YACReader Library + YACReader 库 + + + + Library + + + + + Create a new library + 创建一个新的库 + + + + Open an existing library + 打开现有的库 + + + + + Export comics info + 导出漫画信息 + + + + + Import comics info + 导入漫画信息 + + + + Pack covers + 打包封面 + + + + Pack the covers of the selected library + 打包所选库的封面 + + + + Unpack covers + 解压封面 + + + + Unpack a catalog + 解压目录 + + + + Update library + 更新库 + + + + Update current library + 更新当前库 + + + + Rename library + 重命名库 + + + + Rename current library + 重命名当前库 + + + + Remove library + 移除库 + + + + Remove current library from your collection + 从您的集合中移除当前库 + + + + Open current comic + 打开当前漫画 + + + + Open current comic on YACReader + 用YACReader打开漫画 + + + + Save selected covers to... + 选中的封面保存到... + + + + Save covers of the selected comics as JPG files + 保存所选的封面为jpg + + + + + Set as read + 设为已读 + + + + Set comic as read + 漫画设为已读 + + + + + Set as unread + 设为未读 + + + + Set comic as unread + 漫画设为未读 + + + + Show/Hide marks + 显示/隐藏标记 + + + + Collapse all nodes + 折叠所有节点 + + + + Assign current order to comics + 将当前序号分配给漫画 + + + + Library not available + Library ' + 库不可用 + + + + + Fullscreen mode on/off + 全屏模式 开/关 + + + + + Set as manga + 设为日漫 + + + + Set issue as manga + Set issue as manga + + + + Set as normal + 设置为正常向 + + + + Set issue as normal + 设置发行状态为正常发行 + + + + Help, About YACReader + 帮助, 关于 YACReader + + + + + Delete folder + 删除文件夹 + + + + Select root node + 选择根节点 + + + + Expand all nodes + 展开所有节点 + + + + Show options dialog + 显示选项对话框 + + + + Show comics server options dialog + 显示漫画服务器选项对话框 + + + + Open folder... + 打开文件夹... + + + + Set as uncompleted + 设为未完成 + + + + Set as completed + 设为已完成 + + + + Set as comic + 设置为漫画 + + + + Open containing folder... + 打开包含文件夹... + + + + Reset comic rating + 重置漫画评分 + + + + Select all comics + 全选漫画 + + + + Edit + 编辑 + + + + Update cover + 更新封面 + + + + Delete selected comics + 删除所选的漫画 + + + + Download tags from Comic Vine + 从 Comic Vine 下载标签 + + + + Edit shortcuts + 编辑快捷键 + + + + Update folder + 更新文件夹 + + + + Update current folder + 更新当前文件夹 + + + + Add new reading list + 添加新的阅读列表 + + + + Add a new reading list to the current library + 在当前库添加新的阅读列表 + + + + Remove reading list + 移除阅读列表 + + + + Remove current reading list from the library + 从当前库移除阅读列表 + + + + Add new label + 添加新标签 + + + + Add a new label to this library + 在当前库添加标签 + + + + Rename selected list + 重命名列表 + + + + Rename any selected labels or lists + 重命名任何选定的标签或列表 + + + + Add to... + 添加到... + + + + Favorites + 收藏夹 + + + + Add selected comics to favorites list + 将所选漫画添加到收藏夹列表 + + + + Folder + 文件夹 + + + + Comic + 漫画 + + + + Upgrade failed + 更新失败 + + + + There were errors during library upgrade in: + 漫画库更新时出现错误: + + + + Update needed + 需要更新 + + + + This library was created with a previous version of YACReaderLibrary. It needs to be updated. Update now? + 此库是使用旧版本的YACReaderLibrary创建的. 它需要更新. 现在更新? + + + + Download new version + 下载新版本 + + + + This library was created with a newer version of YACReaderLibrary. Download the new version now? + 此库是使用较新版本的YACReaderLibrary创建的。 立即下载新版本? + + + + Library '%1' is no longer available. Do you want to remove it? + 库 '%1' 不再可用。 你想删除它吗? + + + + Old library + 旧的库 + + + + Library '%1' has been created with an older version of YACReaderLibrary. It must be created again. Do you want to create the library now? + 库 '%1' 是通过旧版本的YACReaderLibrary创建的。 必须再次创建。 你想现在创建吗? + + + + + Copying comics... + 复制漫画中... + + + + + Moving comics... + 移动漫画中... + + + + Folder name: + 文件夹名称: + + + + No folder selected + 没有选中的文件夹 + + + + Please, select a folder first + 请先选择一个文件夹 + + + + Error in path + 路径错误 + + + + There was an error accessing the folder's path + 访问文件夹的路径时出错 + + + + The selected folder and all its contents will be deleted from your disk. Are you sure? + 所选文件夹及其所有内容将从磁盘中删除。 你确定吗? + + + + There was an issue trying to delete the selected folders. Please, check for write permissions and be sure that any applications are using these folders or any of the contained files. + 尝试删除所选文件夹时出现问题。 请检查写入权限,并确保没有其他应用程序在使用这些文件夹或文件。 + + + + Add new reading lists + 添加新的阅读列表 + + + + + List name: + 列表名称: + + + + Delete list/label + 删除 列表/标签 + + + + The selected item will be deleted, your comics or folders will NOT be deleted from your disk. Are you sure? + 所选项目将被删除,您的漫画或文件夹将不会从您的磁盘中删除。 你确定吗? + + + + Rename list name + 重命名列表 + + + + Save covers + 保存封面 + + + + You are adding too many libraries. + 您添加的库太多了。 + + + + You are adding too many libraries. + +You probably only need one library in your top level comics folder, you can browse any subfolders using the folders section in the left sidebar. + +YACReaderLibrary will not stop you from creating more libraries but you should keep the number of libraries low. + 您添加的库太多了。 + +一般情况只需要一个顶级的库,您可以使用左侧边栏中的文件夹功能来进行分类管理。 + +YACReaderLibrary不会阻止您创建更多的库,但是您应该保持较低的库数量来提升性能。 + + + + + YACReader not found + YACReader 未找到 + + + + Library not found + 未找到库 + + + + The selected folder doesn't contain any library. + 所选文件夹不包含任何库。 + + + + Are you sure? + 你确定吗? + + + + Do you want remove + 你想要删除 + + + + library? + 库? + + + + Remove and delete metadata + 移除并删除元数据 + + + + Assign comics numbers + 分配漫画编号 + + + + Assign numbers starting in: + 从以下位置开始分配编号: + + + + + Unable to delete + 无法删除 + + + + Show or hide read marks + 显示或隐藏阅读标记 + + + + + Add new folder + 添加新的文件夹 + + + + Add new folder to the current library + 在当前库下添加新的文件夹 + + + + Delete current folder from disk + 从磁盘上删除当前文件夹 + + + + + Change between comics views + 漫画视图之间的变化 + + + + YACReader not found. YACReader should be installed in the same folder as YACReaderLibrary. + 未找到YACReader. YACReader应安装在与YACReaderLibrary相同的文件夹中. + + + + YACReader not found. There might be a problem with your YACReader installation. + 未找到YACReader. YACReader的安装可能有问题. + + + + There was an issue trying to delete the selected comics. Please, check for write permissions in the selected files or containing folder. + 尝试删除所选漫画时出现问题。 请检查所选文件或包含文件夹中的写入权限。 + + + + Error creating the library + 创建库时出错 + + + + Error updating the library + 更新库时出错 + + + + Error opening the library + 打开库时出错 + + + + Delete comics + 删除漫画 + + + + All the selected comics will be deleted from your disk. Are you sure? + 所有选定的漫画都将从您的磁盘中删除。你确定吗? + + + + Remove comics + 移除漫画 + + + + Comics will only be deleted from the current label/list. Are you sure? + 漫画只会从当前标签/列表中删除。 你确定吗? + + + + Library name already exists + 库名已存在 + + + + There is another library with the name '%1'. + 已存在另一个名为'%1'的库。 + + + + LocalComicListModel + + + file name + 文件名 + + + + LogWindow + + + Log window + 日志窗口 + + + + &Pause + 中止(&P) + + + + &Save + 保存(&S) + + + + C&lear + 清空(&l) + + + + &Copy + 复制(&C) + + + + Level: + 等级: + + + + &Auto scroll + 自动滚动(&A) + + + + NoLibrariesWidget + + + You don't have any libraries yet + 你还没有文件库 + + + + <p>You can create a library in any folder, YACReaderLibrary will import all comics and folders from this folder. If you have created any library in the past you can open them.</p><p>Don't forget that you can use YACReader as a stand alone application for reading the comics on your computer.</p> + <p>您可以在任何文件夹中创建文件库,YACReaderLibrary将导入此文件夹中的所有漫画和文件夹。如果已有文件库,则可以打开它们。</p><p>您可以把YACReader当初独立应用来阅读计算机上的漫画。</p> + + + + create your first library + 创建一个文库 + + + + add an existing one + 添加一个现有库 + + + + OptionsDialog + + + Tray icon settings (experimental) + 托盘图标设置 (实验特性) + + + + Close to tray + 关闭至托盘 + + + + Start into the system tray + 启动至系统托盘 + + + + Edit Comic Vine API key + 编辑Comic Vine API 密匙 + + + + Comic Vine API key + Comic Vine API 密匙 + + + + Enable background image + 启用背景图片 + + + + Opacity level + 透明度 + + + + Blur level + 模糊 + + + + Use selected comic cover as background + 使用选定的漫画封面做背景 + + + + Restore defautls + 恢复默认值 + + + + Background + 背景 + + + + Display continue reading banner + 显示继续阅读横幅 + + + + Continue reading + 继续阅读 + + + + Comic Flow + 漫画流 + + + + Grid view + 网格视图 + + + + General + 常规 + + + + Options + 选项 + + + + PropertiesDialog + + + General info + 基本信息 + + + + Authors + 作者 + + + + Publishing + 出版 + + + + Plot + 情节 + + + + Cover page + 封面 + + + + Title: + 标题: + + + + + of: + of: + + + + Issue number: + 发行数量: + + + + Volume: + 卷: + + + + Arc number: + 世界线数量: + + + + Story arc: + 故事线: + + + + Genre: + Genere: + 类型: + + + + Size: + 大小: + + + + Writer(s): + 作者: + + + + Penciller(s): + 线稿: + + + + Inker(s): + 墨稿: + + + + Colorist(s): + 上色: + + + + Letterer(s): + 文本: + + + + Cover Artist(s): + 封面设计: + + + + Day: + 日: + + + + Month: + 月: + + + + Year: + 年: + + + + Publisher: + 出版者: + + + + Format: + 格式: + + + + Color/BW: + 彩色/黑白: + + + + Age rating: + 年龄等级: + + + + Manga: + 日漫: + + + + Synopsis: + 概要: + + + + Characters: + 角色: + + + + Notes: + 笔记: + + + + Comic Vine link: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> view </a> + Comic Vine 连接: <a style='color: #FFCB00; text-decoration:none; font-weight:bold;' href="http://www.comicvine.com/comic/4000-%1/"> 查看 </a> + + + + Not found + 未找到 + + + + Comic not found. You should update your library. + 未找到漫画,请先更新您的文件库. + + + + Edit selected comics information + 编辑选中的漫画信息 + + + + Edit comic information + 编辑漫画信息 + + + + QObject + + + 7z lib not found + 未找到 7z 库文件 + + + + unable to load 7z lib from ./utils + 无法从 ./utils 载入 7z 库文件 + + + + Trace + 追踪 + + + + Debug + 除错 + + + + Info + 信息 + + + + Warning + 警告 + + + + Error + 错误 + + + + Fatal + 严重错误 + + + + QsLogging::LogWindowModel + + + Time + 时间 + + + + Level + 等级 + + + + Message + 信息 + + + + QsLogging::Window + + + &Pause + 中止(&P) + + + + &Resume + 恢复(&R) + + + + Save log + 保存日志 + + + + Log file (*.log) + 日志文件 (*.log) + + + + RenameLibraryDialog + + + New Library Name : + 新库名: + + + + Rename + 重命名 + + + + Cancel + 取消 + + + + Rename current library + 重命名当前库 + + + + ScraperResultsPaginator + + + Number of volumes found : %1 + 搜索结果: %1 + + + + + page %1 of %2 + 第 %1 页 共 %2 页 + + + + Number of %1 found : %2 + 第 %1 页 共: %2 条 + + + + SearchSingleComic + + + Please provide some additional information. + 请提供附加信息. + + + + Series: + 系列: + + + + SearchVolume + + + Please provide some additional information. + 请提供附加信息. + + + + Series: + 系列: + + + + SelectComic + + + Please, select the right comic info. + 请正确选择漫画信息. + + + + comics + 漫画 + + + + loading cover + 加载封面 + + + + loading description + 加载描述 + + + + description unavailable + 描述不可用 + + + + SelectVolume + + + Please, select the right series for your comic. + 请选择正确的漫画系列。 + + + + volumes + + + + + loading cover + 加载封面 + + + + loading description + 加载描述 + + + + description unavailable + 描述不可用 + + + + SeriesQuestion + + + You are trying to get information for various comics at once, are they part of the same series? + 您正在尝试同时获取各种漫画的信息,它们是同一系列的吗? + + + + yes + + + + + no + + + + + ServerConfigDialog + + + set port + 设置端口 + + + + Server connectivity information + 服务器连接信息 + + + + Scan it! + 扫一扫! + + + + YACReader is available for iOS devices. <a href='http://ios.yacreader.com' style='color:rgb(193, 148, 65)'> Discover it! </a> + YACReader适用于iOS设备. <a href='http://ios.yacreader.com'style ='color:rgb(193,148,65)'>下载</a> + + + + Choose an IP address + 选择IP地址 + + + + Port + 端口 + + + + enable the server + 启用服务器 + + + + display less information about folders in the browser +to improve the performance + 在浏览器中尽量少显示文件夹信息 +以提升浏览性能 + + + + Could not load libqrencode. + 无法载入libqrencode. + + + + SortVolumeComics + + + Please, sort the list of comics on the left until it matches the comics' information. + 请在左侧对漫画列表进行排序,直到它与漫画的信息相符。 + + + + sort comics to match comic information + 排序漫画以匹配漫画信息 + + + + issues + 发行 + + + + remove selected comics + 移除所选漫画 + + + + restore all removed comics + 恢复所有移除的漫画 + + + + TitleHeader + + + SEARCH + 搜索 + + + + UpdateLibraryDialog + + + Updating.... + 更新中... + + + + Cancel + 取消 + + + + Update library + 更新库 + + + + VolumeComicsModel + + + title + 标题 + + + + VolumesModel + + + year + + + + + issues + 发行 + + + + publisher + 出版者 + + + + YACReader::TrayIconController + + + &Restore + 复位(&R) + + + + &Quit + 退出(&Q) + + + + Systray + 系统托盘 + + + + YACReaderLibrary will keep running in the system tray. To terminate the program, choose <b>Quit</b> in the context menu of the system tray icon. + YACReaderLibrary 将继续在系统托盘中运行. 想要终止程序, 请在系统托盘图标的上下文菜单中选择<b>退出</b>. + + + + YACReader::WhatsNewDialog + + + Close + 关闭 + + + + YACReaderDeletingProgress + + + Please wait, deleting in progress... + 请稍候,正在删除... + + + + cancel + 取消 + + + + YACReaderFieldEdit + + + + Click to overwrite + 点击以覆盖 + + + + Restore to default + 恢复默认 + + + + YACReaderFieldPlainTextEdit + + + + + + Click to overwrite + 点击以覆盖 + + + + Restore to default + 恢复默认 + + + + YACReaderFlowConfigWidget + + + How to show covers: + 封面显示方式: + + + + CoverFlow look + 封面流 + + + + Stripe look + 条状 + + + + Overlapped Stripe look + 重叠条状 + + + + YACReaderGLFlowConfigWidget + + + Presets: + 预设: + + + + Classic look + 经典 + + + + Stripe look + 条状 + + + + Overlapped Stripe look + 重叠条状 + + + + Modern look + 现代 + + + + Roulette look + 轮盘 + + + + Show advanced settings + 显示高级选项 + + + + Custom: + 自定义: + + + + View angle + 视角 + + + + Position + 位置 + + + + Cover gap + 封面间距 + + + + Central gap + 中心间距 + + + + Zoom + 缩放 + + + + Y offset + Y位移 + + + + Z offset + Z位移 + + + + Cover Angle + 封面角度 + + + + Visibility + 透明度 + + + + Light + 亮度 + + + + Max angle + 最大角度 + + + + Low Performance + 低性能 + + + + High Performance + 高性能 + + + + Use VSync (improve the image quality in fullscreen mode, worse performance) + 使用VSync (在全屏模式下提高图像质量, 性能更差) + + + + Performance: + 性能: + + + + YACReaderNavigationController + + + No favorites + 没有收藏 + + + + You are not reading anything yet, come on!! + 你还没有阅读任何东西,加油!! + + + + YACReaderOptionsDialog + + + Save + 保存 + + + + Cancel + 取消 + + + + Edit shortcuts + 编辑快捷键 + + + + Shortcuts + 快捷键 + + + + Use hardware acceleration (restart needed) + 使用硬件加速 (需要重启) + + + + YACReaderSearchLineEdit + + + type to search + 搜索类型 + + + + YACReaderSideBar + + + Libraries + + + + + Folders + 文件夹 + + + + Reading Lists + 阅读列表 + + + + LIBRARIES + + + + + FOLDERS + 文件夹 + + + + READING LISTS + 阅读列表 + + + diff --git a/YACReaderLibraryServer/YACReaderLibraryServer.pro b/YACReaderLibraryServer/YACReaderLibraryServer.pro index 64f498be5..78342492f 100644 --- a/YACReaderLibraryServer/YACReaderLibraryServer.pro +++ b/YACReaderLibraryServer/YACReaderLibraryServer.pro @@ -28,10 +28,6 @@ macx { CONFIG += objective_c } -unix { - CONFIG += c++11 -} - unix:haiku { DEFINES += _BSD_SOURCE LIBS += -lnetwork -lbsd diff --git a/YACReaderLibraryServer/main.cpp b/YACReaderLibraryServer/main.cpp index 32f623190..01f4e0680 100644 --- a/YACReaderLibraryServer/main.cpp +++ b/YACReaderLibraryServer/main.cpp @@ -175,6 +175,21 @@ int main(int argc, char **argv) qRegisterMetaType("ComicDB"); + QLOG_INFO() << "YACReaderLibraryServer attempting to start"; + + logSystemAndConfig(); + + if (YACReaderLocalServer::isRunning()) // allow one server instance + { + QLOG_WARN() << "another instance of YACReaderLibrary is running"; +#ifdef Q_OS_WIN + logger.shutDownLoggerThread(); +#endif + return 0; + } + + QLOG_INFO() << "YACReaderLibrary starting"; + QSettings *settings = new QSettings(YACReader::getSettingsPath() + "/" + QCoreApplication::applicationName() + ".ini", QSettings::IniFormat); settings->beginGroup("libraryConfig"); @@ -195,22 +210,9 @@ int main(int argc, char **argv) s->start(); } - QLOG_INFO() << "YACReaderLibraryServer attempting to start"; - - logSystemAndConfig(); - - if (YACReaderLocalServer::isRunning()) // allow one server instance - { - QLOG_WARN() << "another instance of YACReaderLibrary is running"; -#ifdef Q_OS_WIN - logger.shutDownLoggerThread(); -#endif - return 0; - } - QLOG_INFO() << "YACReaderLibrary starting"; QLOG_INFO() << "Running on port" << s->getPort(); - //Update libraries to now versions + //Update libraries to new versions LibrariesUpdater updater; updater.updateIfNeeded(); diff --git a/azure-pipelines-windows-template.yml b/azure-pipelines-windows-template.yml index e14c18b5f..54171f47b 100644 --- a/azure-pipelines-windows-template.yml +++ b/azure-pipelines-windows-template.yml @@ -1,10 +1,10 @@ parameters: name: Windows_x64 architecture: 'x64' - qt_version: '5.12.6' - qt_spec: 'msvc2017_64' - qt_aqt_spec: 'win64_msvc2017_64' - vc_redist_url: 'https://go.microsoft.com/fwlink/?LinkId=746572' + qt_version: '5.15.2' + qt_spec: 'msvc2019_64' + qt_aqt_spec: 'win64_msvc2019_64' + vc_redist_url: 'https://aka.ms/vs/16/release/vc_redist.x64.exe' vc_redist_file_name: 'vc_redist.x64.exe' vc_vars: 'vcvars64.bat' @@ -12,12 +12,12 @@ jobs: - job: ${{ parameters.name }} dependsOn: CodeFormatValidation pool: - vmImage: 'vs2017-win2016' + vmImage: 'windows-2019' steps: - script: | pip install aqtinstall mkdir C:\Qt - python -m aqt install -O c:\Qt ${{ parameters.qt_version }} windows desktop ${{ parameters.qt_aqt_spec }} -m qtscript + python -m aqt install -O c:\Qt ${{ parameters.qt_version }} windows desktop ${{ parameters.qt_aqt_spec }} dir C:\Qt\${{ parameters.qt_version }}\${{ parameters.qt_spec }}\bin choco install -y wget choco install innosetup @@ -26,7 +26,7 @@ jobs: wget "${{ parameters.vc_redist_url }}" -O $(Build.SourcesDirectory)\${{ parameters.vc_redist_file_name }} displayName: 'Install dependencies' - script: | - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\${{ parameters.vc_vars }}" + call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\${{ parameters.vc_vars }}" set PATH=C:\Qt\${{ parameters.qt_version }}\${{ parameters.qt_spec }}\bin;%PATH% set DEFINES_VAR=DEFINES+="BUILD_NUMBER=\\\\\\\"$(Build.BuildNumber)\\\\\\\"" qmake CONFIG+="7zip" %DEFINES_VAR% diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a0c6ddab4..4488a91a2 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -30,15 +30,14 @@ jobs: - job: Linux dependsOn: CodeFormatValidation pool: - vmImage: 'ubuntu-16.04' + vmImage: 'ubuntu-18.04' steps: - script: | - sudo add-apt-repository 'deb http://download.opensuse.org/repositories/home:/selmf/xUbuntu_16.04/ /' - sudo add-apt-repository ppa:kubuntu-ppa/backports - sudo apt-get update - sudo apt-get install -y --allow-unauthenticated qt-default qt5-qmake \ - qtbase5-dev qtmultimedia5-dev libpoppler-qt5-dev qtscript5-dev \ - libqt5opengl5-dev libglu1-mesa-dev libunarr-dev qtdeclarative5-dev + sudo add-apt-repository 'deb http://download.opensuse.org/repositories/home:/selmf/xUbuntu_18.04/ /' + sudo apt-get update --allow-insecure-repositories + sudo apt-get install -y --allow-unauthenticated qt5-default qt5-qmake \ + qtbase5-dev qtmultimedia5-dev libpoppler-qt5-dev \ + libqt5opengl5-dev libunarr-dev qtdeclarative5-dev libqt5svg5-dev displayName: 'Install dependencies' - script: | cd $(Build.SourcesDirectory) @@ -70,8 +69,8 @@ jobs: vmImage: 'macOS-10.15' steps: - script: | - brew install qt - brew link qt --force + brew install qt@5 + brew link qt@5 --force brew install create-dmg brew install node brew link --overwrite node @@ -104,20 +103,20 @@ jobs: parameters: name: Windows_x64 architecture: 'x64' - qt_version: '5.12.6' - qt_spec: 'msvc2017_64' - qt_aqt_spec: 'win64_msvc2017_64' - vc_redist_url: 'https://go.microsoft.com/fwlink/?LinkId=746572' + qt_version: '5.15.2' + qt_spec: 'msvc2019_64' + qt_aqt_spec: 'win64_msvc2019_64' + vc_redist_url: 'https://aka.ms/vs/16/release/vc_redist.x64.exe' vc_redist_file_name: 'vc_redist.x64.exe' vc_vars: 'vcvars64.bat' - template: azure-pipelines-windows-template.yml parameters: name: Windows_x86 architecture: 'x86' - qt_version: '5.12.6' - qt_spec: 'msvc2017' - qt_aqt_spec: 'win32_msvc2017' - vc_redist_url: 'https://go.microsoft.com/fwlink/?LinkId=746571' + qt_version: '5.15.2' + qt_spec: 'msvc2019' + qt_aqt_spec: 'win32_msvc2019' + vc_redist_url: 'https://aka.ms/vs/16/release/vc_redist.x86.exe' vc_redist_file_name: 'vc_redist.x86.exe' vc_vars: 'vcvars32.bat' @@ -130,7 +129,7 @@ jobs: - Windows_x64 condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/develop'), true) variables: - - group: bintray + - group: artifactory pool: vmImage: 'ubuntu-16.04' steps: @@ -145,10 +144,9 @@ jobs: files: '$(Build.SourcesDirectory)/dev_bin/**/*.*' authType: 'userAndPass' username: $(username) - password: $(api-key) - options: -H "X-Bintray-Publish:1" + password: $(pass) remotePath: '' - url: https://api.bintray.com/content/luisangelsm/YACReader/DevBuilds/$(Build.BuildNumber)/ + url: https://yacreader.jfrog.io/artifactory/yacreader/$(Build.BuildNumber)/ - ${{ if and(eq(variables['System.TeamFoundationCollectionUri'], 'https://dev.azure.com/luisangelsm/'), or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), eq(variables['Build.SourceBranch'], 'refs/heads/develop'))) }}: - job: Release diff --git a/ci/win/build_installer.iss b/ci/win/build_installer.iss index 2009b42ae..02e556ce9 100644 --- a/ci/win/build_installer.iss +++ b/ci/win/build_installer.iss @@ -38,11 +38,12 @@ Source: Qt5Multimedia.dll; DestDir: {app} Source: Qt5Network.dll; DestDir: {app} Source: Qt5Qml.dll; DestDir: {app} Source: Qt5Quick.dll; DestDir: {app} -Source: Qt5Script.dll; DestDir: {app} Source: Qt5Sql.dll; DestDir: {app} Source: Qt5Svg.dll; DestDir: {app} Source: Qt5Widgets.dll; DestDir: {app} Source: Qt5QuickWidgets.dll; DestDir: {app} +Source: Qt5QmlModels.dll; DestDir: {app} +Source: Qt5QmlWorkerScript.dll; DestDir: {app} ;Qt Angle Source: D3Dcompiler_47.dll; DestDir: {app} @@ -107,7 +108,7 @@ LaunchYACReader=Start YACreader after finishing installation [Run] Filename: {tmp}\vc_redist.{#PLATFORM}.exe; \ -Parameters: "/q /passive /norestart /Q:a /c:""msiexec /q /i vcredist.msi"""; \ +Parameters: "/install /quiet /norestart"; \ StatusMsg: "Installing VC++ Redistributables..." Filename: {app}\{cm:AppLibrary}.exe; Description: {cm:LaunchYACReaderLibrary,{cm:AppLibrary}}; Flags: nowait postinstall skipifsilent @@ -154,7 +155,7 @@ begin donationPage := CreateOutputMsgPage(wpWelcome, 'Iformation', 'Please read the following information before continuing.', 'YACReader is FREE software. If you like it, please, consider to make a DONATION'#13#13 + - 'YACReader es software libre y GRATUITO. Si te gusta, por favor, considera realizar una DONACIN'#13#13) + 'YACReader es software libre y GRATUITO. Si te gusta, por favor, considera realizar una DONACI�N'#13#13) end; diff --git a/common/comic.cpp b/common/comic.cpp index 514bc084a..4bc1fd5c7 100644 --- a/common/comic.cpp +++ b/common/comic.cpp @@ -23,6 +23,26 @@ enum YACReaderPageSortingMode { void comic_pages_sort(QList &pageNames, YACReaderPageSortingMode sortingMode); +QStringList Comic::getSupportedImageFormats() +{ + QList supportedImageFormats = QImageReader::supportedImageFormats(); + QStringList supportedImageFormatStrings; + for (QByteArray item : supportedImageFormats) { + supportedImageFormatStrings.append(QString::fromLocal8Bit("*." + item)); + } + return supportedImageFormatStrings; +} + +QStringList Comic::getSupportedImageLiteralFormats() +{ + QList supportedImageFormats = QImageReader::supportedImageFormats(); + QStringList supportedImageFormatStrings; + for (QByteArray item : supportedImageFormats) { + supportedImageFormatStrings.append(QString::fromLocal8Bit(item)); + } + return supportedImageFormatStrings; +} + const QStringList Comic::imageExtensions = QStringList() << "*.jpg" << "*.jpeg" << "*.png" diff --git a/common/comic.h b/common/comic.h index 44a4996da..3174746af 100644 --- a/common/comic.h +++ b/common/comic.h @@ -76,8 +76,8 @@ class Comic : public QObject //check if the comic has failed loading bool hasBeenAnErrorOpening(); - inline static QStringList getSupportedImageFormats() { return imageExtensions; } - inline static QStringList getSupportedImageLiteralFormats() { return literalImageExtensions; } + static QStringList getSupportedImageFormats(); + static QStringList getSupportedImageLiteralFormats(); static bool fileIsComic(const QString &path); static QList findValidComicFiles(const QList &list); diff --git a/common/comic_db.cpp b/common/comic_db.cpp index 617c335d4..d508783dd 100644 --- a/common/comic_db.cpp +++ b/common/comic_db.cpp @@ -102,6 +102,9 @@ QString ComicDB::toTXT() if (!info.ageRating.isNull()) txt.append(QString("ageRating:%1\r\n").arg(info.ageRating.toString())); + + if (!info.manga.isNull()) + txt.append(QString("manga:%1\r\n").arg(info.manga.toString())); //Argumento if (!info.synopsis.isNull()) txt.append(QString("synopsis:%1\r\n").arg(info.synopsis.toString())); @@ -232,6 +235,7 @@ ComicInfo &ComicInfo::operator=(const ComicInfo &comicInfo) publisher = comicInfo.publisher; format = comicInfo.format; color = comicInfo.color; + manga = comicInfo.manga; ageRating = comicInfo.ageRating; synopsis = comicInfo.synopsis; characters = comicInfo.characters; @@ -537,6 +541,7 @@ QDataStream &operator<<(QDataStream &stream, const ComicInfo &comicInfo) stream << comicInfo.format; stream << comicInfo.color; stream << comicInfo.ageRating; + stream << comicInfo.manga; stream << comicInfo.synopsis; stream << comicInfo.characters; @@ -598,6 +603,7 @@ QDataStream &operator>>(QDataStream &stream, ComicInfo &comicInfo) stream >> comicInfo.format; stream >> comicInfo.color; stream >> comicInfo.ageRating; + stream >> comicInfo.manga; stream >> comicInfo.synopsis; stream >> comicInfo.characters; diff --git a/common/comic_db.h b/common/comic_db.h index 4dd5507c3..3f8a33ce8 100644 --- a/common/comic_db.h +++ b/common/comic_db.h @@ -73,6 +73,7 @@ class ComicInfo : public QObject QVariant format; //string QVariant color; //bool QVariant ageRating; //string + QVariant manga; //bool QVariant synopsis; //string QVariant characters; //string @@ -180,6 +181,7 @@ class ComicInfo : public QObject Q_PROPERTY(QVariant format MEMBER format CONSTANT) Q_PROPERTY(QVariant color MEMBER color CONSTANT) Q_PROPERTY(QVariant ageRating MEMBER ageRating CONSTANT) + Q_PROPERTY(QVariant manga MEMBER manga CONSTANT) Q_PROPERTY(QVariant synopsis MEMBER synopsis CONSTANT) Q_PROPERTY(QVariant characters MEMBER characters CONSTANT) diff --git a/common/concurrent_queue.h b/common/concurrent_queue.h new file mode 100644 index 000000000..99505df76 --- /dev/null +++ b/common/concurrent_queue.h @@ -0,0 +1,133 @@ +#ifndef CONCURRENT_QUEUE_H +#define CONCURRENT_QUEUE_H + +#include +#include +#include +#include +#include + +namespace YACReader { +class ConcurrentQueue +{ +public: + explicit ConcurrentQueue(int threadCount) + : jobsLeft(0), + bailout(false) + { + threads = std::vector(threadCount); + for (int index = 0; index < threadCount; ++index) { + threads[index] = std::thread([this] { + this->nextJob(); + }); + } + } + + ~ConcurrentQueue() + { + joinAll(); + } + + void enqueue(std::function job) + { + { + std::lock_guard lock(queueMutex); + _queue.emplace(job); + } + + { + std::lock_guard lock(jobsLeftMutex); + ++jobsLeft; + } + + jobAvailableVar.notify_one(); + } + + void cancellPending() + { + std::unique_lock lockQueue(queueMutex); + std::unique_lock lockJobsLeft(jobsLeftMutex); + _queue = std::queue>(); + jobsLeft = 0; + } + + void waitAll() + { + std::unique_lock lock(jobsLeftMutex); + if (jobsLeft > 0) { + _waitVar.wait(lock, [this] { + return jobsLeft == 0; + }); + } + } + +private: + std::vector threads; + std::queue> _queue; + int jobsLeft; + bool bailout; + std::condition_variable jobAvailableVar; + std::condition_variable _waitVar; + std::mutex jobsLeftMutex; + std::mutex queueMutex; + + void nextJob() + { + while (true) { + std::function job; + + { + std::unique_lock lock(queueMutex); + + if (bailout) { + return; + } + + jobAvailableVar.wait(lock, [this] { + return _queue.size() > 0 || bailout; + }); + + if (bailout) { + return; + } + + job = _queue.front(); + _queue.pop(); + } + + job(); + + { + std::lock_guard lock(jobsLeftMutex); + --jobsLeft; + } + + _waitVar.notify_one(); + } + } + + void joinAll() + { + { + std::lock_guard lock(queueMutex); + + if (bailout) { + return; + } + + bailout = true; + } + + jobAvailableVar.notify_all(); + + for (auto &x : threads) { + if (x.joinable()) { + x.join(); + } + } + } +}; + +} + +#endif // CONCURRENT_QUEUE_H diff --git a/common/folder.cpp b/common/folder.cpp index 8f66f76dd..27c58b2aa 100644 --- a/common/folder.cpp +++ b/common/folder.cpp @@ -31,6 +31,7 @@ Folder &Folder::operator=(const Folder &other) this->knownId = other.knownId; this->finished = other.finished; this->completed = other.completed; + this->manga = other.manga; return *this; } diff --git a/common/folder.h b/common/folder.h index 040a181fb..25d03d9ae 100644 --- a/common/folder.h +++ b/common/folder.h @@ -43,6 +43,11 @@ class Folder : public LibraryItem return completed; } + inline bool isManga() const + { + return manga; + } + inline void setFinished(bool b) { finished = b; @@ -53,6 +58,11 @@ class Folder : public LibraryItem completed = b; } + inline void setManga(bool b) + { + manga = b; + } + inline qint32 getNumChildren() const { return numChildren; @@ -86,6 +96,7 @@ class Folder : public LibraryItem private: bool finished; bool completed; + bool manga; qint32 numChildren; //-1 for unknown number of children QString firstChildHash; //empty for unknown first child diff --git a/common/gl/yacreader_flow_gl.cpp b/common/gl/yacreader_flow_gl.cpp index ad59daf73..e468e5319 100644 --- a/common/gl/yacreader_flow_gl.cpp +++ b/common/gl/yacreader_flow_gl.cpp @@ -1,7 +1,6 @@ #include "yacreader_flow_gl.h" #include -#include #include #include @@ -191,7 +190,7 @@ struct Preset pressetYACReaderFlowDownConfig = { }; /*Constructor*/ YACReaderFlowGL::YACReaderFlowGL(QWidget *parent, struct Preset p) - : QOpenGLWidget(/*QOpenGLWidget migration QGLFormat(QGL::SampleBuffers),*/ parent), numObjects(0), lazyPopulateObjects(-1), defaultTexture(nullptr), hasBeenInitialized(false), bUseVSync(false), flowRightToLeft(false) + : QOpenGLWidget(/*QOpenGLWidget migration QGLFormat(QGL::SampleBuffers),*/ parent), numObjects(0), lazyPopulateObjects(-1), hasBeenInitialized(false), bUseVSync(false), flowRightToLeft(false) { updateCount = 0; config = p; diff --git a/common/gl/yacreader_flow_gl.h b/common/gl/yacreader_flow_gl.h index 6fc965a78..c47345d86 100644 --- a/common/gl/yacreader_flow_gl.h +++ b/common/gl/yacreader_flow_gl.h @@ -119,9 +119,9 @@ class YACReaderFlowGL : public QOpenGLWidget, public ScrollManagement int updateCount; int fontSize; - QOpenGLTexture *defaultTexture; - QOpenGLTexture *markTexture; - QOpenGLTexture *readingTexture; + QOpenGLTexture *defaultTexture = nullptr; + QOpenGLTexture *markTexture = nullptr; + QOpenGLTexture *readingTexture = nullptr; void initializeGL(); void paintGL(); void timerEvent(QTimerEvent *); diff --git a/common/qnaturalsorting.h b/common/qnaturalsorting.h index 95a2275cb..3dfc393bb 100644 --- a/common/qnaturalsorting.h +++ b/common/qnaturalsorting.h @@ -13,4 +13,15 @@ bool naturalSortLessThanCI(const QString &left, const QString &right); bool naturalSortLessThanCIFileInfo(const QFileInfo &left, const QFileInfo &right); bool naturalSortLessThanCILibraryItem(LibraryItem *left, LibraryItem *right); +/* TODO, update to use the issue number once the iOS client supports it + * see DBHelper::getFolderComicsFromLibraryForReading + * NOTE, use this only in the server side for now, this way of sorting just matchs what's used in the iOS client + **/ +struct LibraryItemSorter { + bool operator()(const LibraryItem *a, const LibraryItem *b) const + { + return naturalSortLessThanCI(a->name, b->name); + } +}; + #endif diff --git a/common/yacreader_global.h b/common/yacreader_global.h index e52d73a7a..e35dca6e1 100644 --- a/common/yacreader_global.h +++ b/common/yacreader_global.h @@ -3,7 +3,7 @@ #include -#define VERSION "9.7.1" +#define VERSION "9.8.0" #define REMOTE_BROWSE_PERFORMANCE_WORKAROUND "REMOTE_BROWSE_PERFORMANCE_WORKAROUND" @@ -36,8 +36,7 @@ enum YACReaderErrors { enum SearchModifiers { NoModifiers = 0, OnlyRead, - OnlyUnread, - ByAuthor + OnlyUnread }; enum LabelColors { diff --git a/compressed_archive/README_7zip.txt b/compressed_archive/README_7zip.txt index 4ab47185c..5211df33e 100644 --- a/compressed_archive/README_7zip.txt +++ b/compressed_archive/README_7zip.txt @@ -1,9 +1,7 @@ If you are trying to compile YACReader with a 7zip decompression backend, -you need to download de source code of 7zip (Windows) or p7zip (Linux/MacOSX). +you need to download the source code of 7zip 18.05 (Windows) or p7zip 16.02 (Linux/MacOSX). Please extract it and rename the folder to lib7zip (Windows) or libp7zip (Linux/MacOSX), then copy it to $YACREADER_SRC/compressed_archive/ (this folder). -YACReader is compiled using 7zip 18.05 and p7zip 16.02. - 7zip is the recommended library to use is you want support for 7zip files and rar5. diff --git a/compressed_archive/libp7zip.patch b/compressed_archive/libp7zip.patch index 7e226f4f8..872b8d76c 100644 --- a/compressed_archive/libp7zip.patch +++ b/compressed_archive/libp7zip.patch @@ -1,11 +1,305 @@ ---- libp7zip/CPP/include_windows/windows.h 2018-09-18 17:17:26.000000000 +0200 ---- libp7zip/CPP/include_windows/windows.h 2018-09-18 17:17:24.000000000 +0200 +previous patch +--- libp7zip/CPP/include_windows/windows.h ++++ libp7zip/CPP/include_windows/windows.h @@ -36,7 +36,7 @@ - #define WINAPI - + #define WINAPI + #undef BOOL -typedef int BOOL; +typedef signed char BOOL; - - - #define CREATE_NEW 1 + + + #define CREATE_NEW 1 + +fix linux build +--- libp7zip/CPP/myWindows/StdAfx.h ++++ libp7zip/CPP/myWindows/StdAfx.h +@@ -206,8 +206,6 @@ + + #if defined( __x86_64__ ) + +-#define _WIN64 1 +- + #endif + + #endif + +CVE-2016-9296 +--- libp7zip/CPP/7zip/Archive/7z/7zIn.cpp ++++ libp7zip/CPP/7zip/Archive/7z/7zIn.cpp +@@ -1097,7 +1097,8 @@ + if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i]) + ThrowIncorrect(); + } +- HeadersSize += folders.PackPositions[folders.NumPackStreams]; ++ if (folders.PackPositions) ++ HeadersSize += folders.PackPositions[folders.NumPackStreams]; + return S_OK; + } + +CVE-2017-17969 +--- libp7zip/CPP/7zip/Compress/ShrinkDecoder.cpp ++++ libp7zip/CPP/7zip/Compress/ShrinkDecoder.cpp +@@ -121,8 +121,13 @@ + { + _stack[i++] = _suffixes[cur]; + cur = _parents[cur]; ++ if (cur >= kNumItems || i >= kNumItems) ++ break; + } +- ++ ++ if (cur >= kNumItems || i >= kNumItems) ++ break; ++ + _stack[i++] = (Byte)cur; + lastChar2 = (Byte)cur; + + + + +CVE-2018-5996 +--- libp7zip/CPP/7zip/Compress/Rar1Decoder.cpp ++++ libp7zip/CPP/7zip/Compress/Rar1Decoder.cpp +@@ -29,7 +29,7 @@ public: + }; + */ + +-CDecoder::CDecoder(): m_IsSolid(false) { } ++CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { } + + void CDecoder::InitStructures() + { +@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream * + InitData(); + if (!m_IsSolid) + { ++ _errorMode = false; + InitStructures(); + InitHuff(); + } ++ ++ if (_errorMode) ++ return S_FALSE; ++ + if (m_UnpackSize > 0) + { + GetFlagsBuf(); +@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream + const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress) + { + try { return CodeReal(inStream, outStream, inSize, outSize, progress); } +- catch(const CInBufferException &e) { return e.ErrorCode; } +- catch(const CLzOutWindowException &e) { return e.ErrorCode; } +- catch(...) { return S_FALSE; } ++ catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; } ++ catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; } ++ catch(...) { _errorMode = true; return S_FALSE; } + } + + STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size) + +CVE-2018-5996 +--- libp7zip/CPP/7zip/Compress/Rar1Decoder.h ++++ libp7zip/CPP/7zip/Compress/Rar1Decoder.h +@@ -39,6 +39,7 @@ public: + + Int64 m_UnpackSize; + bool m_IsSolid; ++ bool _errorMode; + + UInt32 ReadBits(int numBits); + HRESULT CopyBlock(UInt32 distance, UInt32 len); + +CVE-2018-5996 +--- libp7zip/CPP/7zip/Compress/Rar2Decoder.cpp ++++ blibp7zip/CPP/7zip/Compress/Rar2Decoder.cpp +@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20; + static const UInt32 kWindowReservSize = (1 << 22) + 256; + + CDecoder::CDecoder(): +- m_IsSolid(false) ++ m_IsSolid(false), ++ m_TablesOK(false) + { + } + +@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB + + bool CDecoder::ReadTables(void) + { ++ m_TablesOK = false; ++ + Byte levelLevels[kLevelTableSize]; + Byte newLevels[kMaxTableSize]; + m_AudioMode = (ReadBits(1) == 1); +@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void) + } + + memcpy(m_LastLevels, newLevels, kMaxTableSize); ++ m_TablesOK = true; ++ + return true; + } + +@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream * + return S_FALSE; + } + ++ if (!m_TablesOK) ++ return S_FALSE; ++ + UInt64 startPos = m_OutWindowStream.GetProcessedSize(); + while (pos < unPackSize) + { + +CVE-2018-5996 +--- libp7zip/CPP/7zip/Compress/Rar2Decoder.h ++++ libp7zip/CPP/7zip/Compress/Rar2Decoder.h +@@ -139,6 +139,7 @@ class CDecoder : + + UInt64 m_PackSize; + bool m_IsSolid; ++ bool m_TablesOK; + + void InitStructures(); + UInt32 ReadBits(unsigned numBits); + +CVE-2018-5996 +--- libp7zip/CPP/7zip/Compress/Rar3Decoder.cpp ++++ libp7zip/CPP/7zip/Compress/Rar3Decoder.cpp +@@ -92,7 +92,8 @@ CDecoder::CDecoder(): + _writtenFileSize(0), + _vmData(0), + _vmCode(0), +- m_IsSolid(false) ++ m_IsSolid(false), ++ _errorMode(false) + { + Ppmd7_Construct(&_ppmd); + } +@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing) + return InitPPM(); + } + ++ TablesRead = false; ++ TablesOK = false; ++ + _lzMode = true; + PrevAlignBits = 0; + PrevAlignCount = 0; +@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing) + } + } + } ++ if (InputEofError()) ++ return S_FALSE; ++ + TablesRead = true; + + // original code has check here: +@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing) + RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize])); + + memcpy(m_LastLevels, newLevels, kTablesSizesSum); ++ ++ TablesOK = true; ++ + return S_OK; + } + +@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress) + PpmEscChar = 2; + PpmError = true; + InitFilters(); ++ _errorMode = false; + } ++ ++ if (_errorMode) ++ return S_FALSE; ++ + if (!m_IsSolid || !TablesRead) + { + bool keepDecompressing; +@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress) + bool keepDecompressing; + if (_lzMode) + { ++ if (!TablesOK) ++ return S_FALSE; + RINOK(DecodeLZ(keepDecompressing)) + } + else + + +@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream + _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1; + return CodeReal(progress); + } +- catch(const CInBufferException &e) { return e.ErrorCode; } +- catch(...) { return S_FALSE; } ++ catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; } ++ catch(...) { _errorMode = true; return S_FALSE; } + // CNewException is possible here. But probably CNewException is caused + // by error in data stream. + } + +CVE-2018-5996 +--- libp7zip/CPP/7zip/Compress/Rar3Decoder.h ++++ libp7zip/CPP/7zip/Compress/Rar3Decoder.h +@@ -192,6 +192,7 @@ class CDecoder: + UInt32 _lastFilter; + + bool m_IsSolid; ++ bool _errorMode; + + bool _lzMode; + bool _unsupportedFilter; +@@ -200,6 +201,7 @@ class CDecoder: + UInt32 PrevAlignCount; + + bool TablesRead; ++ bool TablesOK; + + CPpmd7 _ppmd; + int PpmEscChar; + +CVE-2021-3465 +--- libp7zip/CPP/7zip/Common/StreamObjects.cpp ++++ libp7zip/CPP/7zip/Common/StreamObjects.cpp +@@ -157,6 +157,8 @@ STDMETHODIMP CDynBufSeqOutStream::Write( + + STDMETHODIMP CBufPtrSeqOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize) + { ++ if(_buffer == nullptr || _size == _pos) ++ return E_FAIL; + size_t rem = _size - _pos; + if (rem > size) + rem = (size_t)size; + +GCC10 warning fix +--- libp7zip/CPP/Windows/ErrorMsg.cpp 2015-01-18 11:20:28.000000000 -0700 ++++ libp7zip/CPP/Windows/ErrorMsg.cpp 2019-09-24 13:01:18.887289152 -0600 +@@ -14,14 +14,14 @@ UString MyFormatMessage(DWORD errorCode) + AString msg; + + switch(errorCode) { +- case ERROR_NO_MORE_FILES : txt = "No more files"; break ; +- case E_NOTIMPL : txt = "E_NOTIMPL"; break ; +- case E_NOINTERFACE : txt = "E_NOINTERFACE"; break ; +- case E_ABORT : txt = "E_ABORT"; break ; +- case E_FAIL : txt = "E_FAIL"; break ; +- case STG_E_INVALIDFUNCTION : txt = "STG_E_INVALIDFUNCTION"; break ; +- case E_OUTOFMEMORY : txt = "E_OUTOFMEMORY"; break ; +- case E_INVALIDARG : txt = "E_INVALIDARG"; break ; ++ case unsigned (ERROR_NO_MORE_FILES) : txt = "No more files"; break ; ++ case unsigned (E_NOTIMPL) : txt = "E_NOTIMPL"; break ; ++ case unsigned (E_NOINTERFACE) : txt = "E_NOINTERFACE"; break ; ++ case unsigned (E_ABORT) : txt = "E_ABORT"; break ; ++ case unsigned (E_FAIL) : txt = "E_FAIL"; break ; ++ case unsigned (STG_E_INVALIDFUNCTION) : txt = "STG_E_INVALIDFUNCTION"; break ; ++ case unsigned (E_OUTOFMEMORY) : txt = "E_OUTOFMEMORY"; break ; ++ case unsigned (E_INVALIDARG) : txt = "E_INVALIDARG"; break ; + case ERROR_DIRECTORY : txt = "Error Directory"; break ; + default: + txt = strerror(errorCode); diff --git a/compressed_archive/unarr/README.txt b/compressed_archive/unarr/README.txt index 7c2ff285c..f78187196 100644 --- a/compressed_archive/unarr/README.txt +++ b/compressed_archive/unarr/README.txt @@ -1,4 +1,4 @@ -Starting with YACReader 9.0.0 all versions of YACReader use (lib)unarr >= 1.0.1 +Starting with YACReader 9.0.0 all versions of YACReader can use (lib)unarr >= 1.0.1 as decompression backend. For Windows and MacOSX precompiled libraries are available in the dependencies folder (not included in the source tarballs!). diff --git a/config.pri b/config.pri index 70c71a48a..3b14f8c20 100644 --- a/config.pri +++ b/config.pri @@ -2,18 +2,48 @@ # default values if they're not set on build time # for a more detailed description, see INSTALL.TXT -# check Qt version -QT_VERSION = $$[QT_VERSION] -QT_VERSION = $$split(QT_VERSION, ".") -QT_VER_MAJ = $$member(QT_VERSION, 0) -QT_VER_MIN = $$member(QT_VERSION, 1) +CONFIG += c++11 + +unix:QMAKE_CXXFLAGS_RELEASE += -DNDEBUG +win32:QMAKE_CXXFLAGS_RELEASE += /DNDEBUG -lessThan(QT_VER_MAJ, 5) { -error(YACReader requires Qt 5 or newer but Qt $$[QT_VERSION] was detected.) +# check Qt version +defineTest(minQtVersion) { + maj = $$1 + min = $$2 + patch = $$3 + isEqual(QT_MAJOR_VERSION, $$maj) { + isEqual(QT_MINOR_VERSION, $$min) { + isEqual(QT_PATCH_VERSION, $$patch) { + return(true) + } + greaterThan(QT_PATCH_VERSION, $$patch) { + return(true) + } + } + greaterThan(QT_MINOR_VERSION, $$min) { + return(true) + } } -lessThan(QT_VER_MIN, 6):!CONFIG(no_opengl) { - error ("You need at least Qt 5.6 to compile YACReader or YACReaderLibrary.") + greaterThan(QT_MAJOR_VERSION, $$maj) { + return(true) } + return(false) +} + +!minQtVersion(5, 9, 0) { + error(YACReader requires Qt 5.9 or newer but $$[QT_VERSION] was detected) +} + +minQtVersion(6, 0, 0) { + error(YACReader does not support building with Qt6 (yet)) +} + +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x050900 +DEFINES += QT_DEPRECATED_WARNINGS + +# reduce log pollution +CONFIG += silent # Disable coverflow for arm targets isEmpty(QMAKE_TARGET.arch) { diff --git a/custom_widgets/custom_widgets_yacreader.pri b/custom_widgets/custom_widgets_yacreader.pri index 44af8da37..51c9999d2 100644 --- a/custom_widgets/custom_widgets_yacreader.pri +++ b/custom_widgets/custom_widgets_yacreader.pri @@ -1,15 +1,20 @@ INCLUDEPATH += $$PWD DEPENDPATH += $$PWD -HEADERS += $$PWD/help_about_dialog.h \ - $$PWD/yacreader_field_edit.h \ - $$PWD/yacreader_field_plain_text_edit.h \ - $$PWD/yacreader_flow.h \ - $$PWD/yacreader_flow_config_widget.h \ - $$PWD/yacreader_options_dialog.h \ - $$PWD/yacreader_spin_slider_widget.h \ - $$PWD/yacreader_tool_bar_stretch.h \ - $$PWD/yacreader_busy_widget.h +HEADERS += \ + $$PWD/help_about_dialog.h \ + $$PWD/yacreader_field_edit.h \ + $$PWD/yacreader_field_plain_text_edit.h \ + $$PWD/yacreader_flow.h \ + $$PWD/yacreader_flow_config_widget.h \ + $$PWD/yacreader_options_dialog.h \ + $$PWD/yacreader_spin_slider_widget.h \ + $$PWD/yacreader_tool_bar_stretch.h \ + $$PWD/yacreader_busy_widget.h \ + $$PWD/rounded_corners_dialog.h \ + $$PWD/whats_new_dialog.h \ + $$PWD/whats_new_controller.h + !CONFIG(no_opengl) { HEADERS += $$PWD/yacreader_gl_flow_config_widget.h } @@ -20,15 +25,20 @@ HEADERS += $$PWD/yacreader_macosx_toolbar.h -SOURCES += $$PWD/help_about_dialog.cpp \ - $$PWD/yacreader_field_edit.cpp \ - $$PWD/yacreader_field_plain_text_edit.cpp \ - $$PWD/yacreader_flow.cpp \ - $$PWD/yacreader_flow_config_widget.cpp \ - $$PWD/yacreader_options_dialog.cpp \ - $$PWD/yacreader_spin_slider_widget.cpp \ - $$PWD/yacreader_tool_bar_stretch.cpp \ - $$PWD/yacreader_busy_widget.cpp +SOURCES += \ + $$PWD/help_about_dialog.cpp \ + $$PWD/yacreader_field_edit.cpp \ + $$PWD/yacreader_field_plain_text_edit.cpp \ + $$PWD/yacreader_flow.cpp \ + $$PWD/yacreader_flow_config_widget.cpp \ + $$PWD/yacreader_options_dialog.cpp \ + $$PWD/yacreader_spin_slider_widget.cpp \ + $$PWD/yacreader_tool_bar_stretch.cpp \ + $$PWD/yacreader_busy_widget.cpp \ + $$PWD/rounded_corners_dialog.cpp \ + $$PWD/whats_new_dialog.cpp \ + $$PWD/whats_new_controller.cpp + !CONFIG(no_opengl) { SOURCES += $$PWD/yacreader_gl_flow_config_widget.cpp } diff --git a/custom_widgets/custom_widgets_yacreaderlibrary.pri b/custom_widgets/custom_widgets_yacreaderlibrary.pri index ccb13afea..0ea43ca62 100644 --- a/custom_widgets/custom_widgets_yacreaderlibrary.pri +++ b/custom_widgets/custom_widgets_yacreaderlibrary.pri @@ -1,23 +1,27 @@ INCLUDEPATH += $$PWD DEPENDPATH += $$PWD -HEADERS += $$PWD/help_about_dialog.h \ - $$PWD/yacreader_field_edit.h \ - $$PWD/yacreader_field_plain_text_edit.h \ - $$PWD/yacreader_flow.h \ - $$PWD/yacreader_flow_config_widget.h \ - $$PWD/yacreader_options_dialog.h \ - $$PWD/yacreader_search_line_edit.h \ - $$PWD/yacreader_spin_slider_widget.h \ - $$PWD/yacreader_tool_bar_stretch.h \ - $$PWD/yacreader_titled_toolbar.h \ - $$PWD/yacreader_deleting_progress.h \ - $$PWD/yacreader_table_view.h \ - $$PWD/yacreader_sidebar.h \ - $$PWD/yacreader_library_list_widget.h \ - $$PWD/yacreader_library_item_widget.h \ - $$PWD/yacreader_treeview.h \ - $$PWD/yacreader_busy_widget.h +HEADERS += \ + $$PWD/help_about_dialog.h \ + $$PWD/rounded_corners_dialog.h \ + $$PWD/whats_new_dialog.h \ + $$PWD/whats_new_controller.h \ + $$PWD/yacreader_field_edit.h \ + $$PWD/yacreader_field_plain_text_edit.h \ + $$PWD/yacreader_flow.h \ + $$PWD/yacreader_flow_config_widget.h \ + $$PWD/yacreader_options_dialog.h \ + $$PWD/yacreader_search_line_edit.h \ + $$PWD/yacreader_spin_slider_widget.h \ + $$PWD/yacreader_tool_bar_stretch.h \ + $$PWD/yacreader_titled_toolbar.h \ + $$PWD/yacreader_deleting_progress.h \ + $$PWD/yacreader_table_view.h \ + $$PWD/yacreader_sidebar.h \ + $$PWD/yacreader_library_list_widget.h \ + $$PWD/yacreader_library_item_widget.h \ + $$PWD/yacreader_treeview.h \ + $$PWD/yacreader_busy_widget.h !CONFIG(no_opengl){ HEADERS += $$PWD/yacreader_gl_flow_config_widget.h } @@ -26,23 +30,27 @@ macx{ HEADERS += $$PWD/yacreader_macosx_toolbar.h } -SOURCES += $$PWD/help_about_dialog.cpp \ - $$PWD/yacreader_field_edit.cpp \ - $$PWD/yacreader_field_plain_text_edit.cpp \ - $$PWD/yacreader_flow.cpp \ - $$PWD/yacreader_flow_config_widget.cpp \ - $$PWD/yacreader_options_dialog.cpp \ - $$PWD/yacreader_search_line_edit.cpp \ - $$PWD/yacreader_spin_slider_widget.cpp \ - $$PWD/yacreader_tool_bar_stretch.cpp \ - $$PWD/yacreader_titled_toolbar.cpp \ - $$PWD/yacreader_deleting_progress.cpp \ - $$PWD/yacreader_table_view.cpp \ - $$PWD/yacreader_sidebar.cpp \ - $$PWD/yacreader_library_list_widget.cpp \ - $$PWD/yacreader_library_item_widget.cpp \ - $$PWD/yacreader_treeview.cpp \ - $$PWD/yacreader_busy_widget.cpp +SOURCES += \ + $$PWD/help_about_dialog.cpp \ + $$PWD/rounded_corners_dialog.cpp \ + $$PWD/whats_new_dialog.cpp \ + $$PWD/whats_new_controller.cpp \ + $$PWD/yacreader_field_edit.cpp \ + $$PWD/yacreader_field_plain_text_edit.cpp \ + $$PWD/yacreader_flow.cpp \ + $$PWD/yacreader_flow_config_widget.cpp \ + $$PWD/yacreader_options_dialog.cpp \ + $$PWD/yacreader_search_line_edit.cpp \ + $$PWD/yacreader_spin_slider_widget.cpp \ + $$PWD/yacreader_tool_bar_stretch.cpp \ + $$PWD/yacreader_titled_toolbar.cpp \ + $$PWD/yacreader_deleting_progress.cpp \ + $$PWD/yacreader_table_view.cpp \ + $$PWD/yacreader_sidebar.cpp \ + $$PWD/yacreader_library_list_widget.cpp \ + $$PWD/yacreader_library_item_widget.cpp \ + $$PWD/yacreader_treeview.cpp \ + $$PWD/yacreader_busy_widget.cpp !CONFIG(no_opengl){ SOURCES += $$PWD/yacreader_gl_flow_config_widget.cpp diff --git a/custom_widgets/rounded_corners_dialog.cpp b/custom_widgets/rounded_corners_dialog.cpp new file mode 100644 index 000000000..f3ce51795 --- /dev/null +++ b/custom_widgets/rounded_corners_dialog.cpp @@ -0,0 +1,39 @@ +#include "rounded_corners_dialog.h" + +#include + +YACReader::RoundedCornersDialog::RoundedCornersDialog(QWidget *parent) + : QDialog(parent) +{ + setWindowFlags(windowFlags() | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint); + setAttribute(Qt::WA_TranslucentBackground); +} + +void YACReader::RoundedCornersDialog::paintEvent(QPaintEvent *) +{ + qreal radius = 36.0; // desired radius in absolute pixels + qreal borderWidth = 0.0; + + if (!(windowFlags() & Qt::FramelessWindowHint) && !testAttribute(Qt::WA_TranslucentBackground)) + return; // nothing to do + + QPainter p(this); + p.setRenderHint(QPainter::Antialiasing); + + // Paint thyself. + QRectF rect(QPointF(0, 0), size()); + // Check for a border size. + qreal penWidth = borderWidth; + p.setPen(Qt::NoPen); + + // Set the brush from palette role. + p.setBrush(palette().brush(backgroundRole())); + // Got radius? Otherwise draw a quicker rect. + if (radius > 0.0) + p.drawRoundedRect(rect, radius, radius, Qt::AbsoluteSize); + else + p.drawRect(rect); + + // C'est finí + p.end(); +} diff --git a/custom_widgets/rounded_corners_dialog.h b/custom_widgets/rounded_corners_dialog.h new file mode 100644 index 000000000..04679fb82 --- /dev/null +++ b/custom_widgets/rounded_corners_dialog.h @@ -0,0 +1,18 @@ +#ifndef ROUNDEDCORNERSDIALOG_H +#define ROUNDEDCORNERSDIALOG_H + +#include + +namespace YACReader { +class RoundedCornersDialog : public QDialog +{ + Q_OBJECT +public: + explicit RoundedCornersDialog(QWidget *parent = nullptr); + +protected: + void paintEvent(QPaintEvent *) override; +}; +} + +#endif // ROUNDEDCORNERSDIALOG_H diff --git a/custom_widgets/whats_new_controller.cpp b/custom_widgets/whats_new_controller.cpp new file mode 100644 index 000000000..df550ab77 --- /dev/null +++ b/custom_widgets/whats_new_controller.cpp @@ -0,0 +1,29 @@ +#include "whats_new_controller.h" + +#include "whats_new_dialog.h" +#include "yacreader_global.h" + +#include + +YACReader::WhatsNewController::WhatsNewController() { } + +void YACReader::WhatsNewController::showWhatsNewIfNeeded(QWidget *fromParent) +{ + QSettings commonSettings(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + + "/YACReader/YACReaderCommon.ini", + QSettings::IniFormat); + + if (commonSettings.value("LAST_VERSION_INSTALLED").toString() != VERSION) { + showWhatsNew(fromParent); + commonSettings.setValue("LAST_VERSION_INSTALLED", VERSION); + } +} + +void YACReader::WhatsNewController::showWhatsNew(QWidget *fromParent) +{ + auto whatsNewDialog = new WhatsNewDialog(fromParent); + + whatsNewDialog->show(); + + QObject::connect(whatsNewDialog, &QDialog::finished, whatsNewDialog, &QDialog::deleteLater); +} diff --git a/custom_widgets/whats_new_controller.h b/custom_widgets/whats_new_controller.h new file mode 100644 index 000000000..ec13d6574 --- /dev/null +++ b/custom_widgets/whats_new_controller.h @@ -0,0 +1,18 @@ +#ifndef WHATSNEWCONTROLLER_H +#define WHATSNEWCONTROLLER_H + +class QWidget; + +namespace YACReader { + +class WhatsNewController +{ +public: + WhatsNewController(); + void showWhatsNewIfNeeded(QWidget *fromParent = nullptr); + void showWhatsNew(QWidget *fromParent = nullptr); +}; + +} // namespace YACReader + +#endif // WHATSNEWCONTROLLER_H diff --git a/custom_widgets/whats_new_dialog.cpp b/custom_widgets/whats_new_dialog.cpp new file mode 100644 index 000000000..c80cceb8c --- /dev/null +++ b/custom_widgets/whats_new_dialog.cpp @@ -0,0 +1,111 @@ +#include "whats_new_dialog.h" +#include "yacreader_global.h" + +#include + +YACReader::WhatsNewDialog::WhatsNewDialog(QWidget *parent) + : RoundedCornersDialog(parent) +{ + auto scrollArea = new QScrollArea(this); + scrollArea->setStyleSheet("background-color:transparent;" + "border:none;"); + scrollArea->horizontalScrollBar()->setStyleSheet("QScrollBar {height:0px;}"); + scrollArea->verticalScrollBar()->setStyleSheet("QScrollBar {width:0px;}"); + scrollArea->setContentsMargins(0, 0, 0, 0); + + auto mainLayout = new QVBoxLayout(this); + mainLayout->setMargin(0); + auto contentLayout = new QGridLayout(); + + auto content = new QFrame(); + + content->setStyleSheet("background-color:transparent;" + "border:none;"); + + auto headerImageLabel = new QLabel(); + QPixmap headerImage(":/images/whats_new/whatsnew_header.svg"); + headerImageLabel->setPixmap(headerImage); + headerImageLabel->setFixedSize(headerImage.size()); + headerImageLabel->move(50, 20); + + auto headerLabel = new QLabel(); + headerLabel->setText("What's New in\nYACReader"); + QFont headerLabelFont("Arial", 34, QFont::ExtraBold); + headerLabel->setFont(headerLabelFont); + headerLabel->setAlignment(Qt::AlignCenter); + headerLabel->setStyleSheet("padding:18px 0 0 0;" + "background-color:transparent;" + "color:#0A0A0A;"); + + auto versionLabel = new QLabel(); + versionLabel->setText(VERSION); + QFont versionLabelFont("Arial", 12, QFont::Normal); + versionLabel->setFont(versionLabelFont); + versionLabel->setAlignment(Qt::AlignCenter); + versionLabel->setStyleSheet("padding:0 0 0 0;" + "background-color:transparent;" + "color:#858585;"); + + auto text = new QLabel(); + text->setText("Hey, a new version is here, check the new stuff including this What's new dialog:
" + "
" + "YACReader
" + " • Add support for full manga mode.
" + " • Fix UP, DOWN, LEFT, RIGHT shortcuts for moving a zoomed in page around.
" + "
" + "YACReaderLibrary
" + " • New fuzzy search engine. Type to search into any field of the database, or target specific content \"read:false manga:true filename:3x3\", read more about how it works in the web site.
" + " • New `manga` field added to comics and folders to tag content as manga, any content added to a manga folder will become manga automatically.
" + " • Support for HTML in comic synopsis, this fixes the synopsis when it comes from Comic Vine with HTML tags.
" + " • Improve keyboard navigation in Comic Vine dialog. Enter will trigger next or search and Backspace will go back to the previous section.
" + "
" + "Server
" + " • New `manga` field is sent to YACReader for iOS, so comics tagged as manga will be recognized as such when reading remotely or importing comics.
" + "
" + "I hope you enjoy the new update. Please, if you like YACReader consider to become a patron in Patreon or donate some money using Pay-Pal and help keeping the project alive. Remember that there is an iOS version available in the Apple App Store."); + QFont textLabelFont("Arial", 15, QFont::Light); + text->setFont(textLabelFont); + text->setStyleSheet("padding:51px;" + "background-color:transparent;" + "color:#0A0A0A;"); + text->setWordWrap(true); + text->setOpenExternalLinks(true); + + contentLayout->addWidget(headerImageLabel, 0, 0, Qt::AlignTop | Qt::AlignHCenter); + contentLayout->addWidget(headerLabel, 0, 0, Qt::AlignTop | Qt::AlignHCenter); + contentLayout->addWidget(versionLabel, 1, 0, Qt::AlignTop | Qt::AlignHCenter); + contentLayout->addWidget(text, 2, 0, Qt::AlignTop); + contentLayout->setRowStretch(2, 1); + content->setLayout(contentLayout); + + mainLayout->addWidget(scrollArea); + + //containerLayout->addWidget(content); + scrollArea->setWidget(content); + scrollArea->setWidgetResizable(true); + + this->setLayout(mainLayout); + + auto closeButton = new QPushButton(this); + closeButton->setFlat(true); + closeButton->setStyleSheet("background-color:transparent;"); + auto closeIcon = QPixmap(":/images/custom_dialog/custom_close_button.svg"); + if (!closeIcon.isNull()) { + closeButton->setIcon(QPixmap(":/images/custom_dialog/custom_close_button.svg")); + closeButton->setIconSize(QSize(44, 44)); + closeButton->setFixedSize(44, 44); + closeButton->move(656, 20); + } else { + closeButton->setText(tr("Close")); + auto font = closeButton->font(); + font.setPointSize(16); + closeButton->setFont(font); + closeButton->move(616, 20); + } + + scrollArea->setFixedSize(720, 640); + setFixedSize(720, 640); + setModal(true); + + connect(closeButton, &QPushButton::clicked, this, &QDialog::close); +} diff --git a/custom_widgets/whats_new_dialog.h b/custom_widgets/whats_new_dialog.h new file mode 100644 index 000000000..8ec3722b8 --- /dev/null +++ b/custom_widgets/whats_new_dialog.h @@ -0,0 +1,17 @@ +#ifndef WHATSNEWDIALOG_H +#define WHATSNEWDIALOG_H + +#include "rounded_corners_dialog.h" +#include + +namespace YACReader { + +class WhatsNewDialog : public RoundedCornersDialog +{ + Q_OBJECT +public: + explicit WhatsNewDialog(QWidget *parent = nullptr); +}; +} + +#endif // WHATSNEWDIALOG_H diff --git a/custom_widgets/yacreader_macosx_toolbar.h b/custom_widgets/yacreader_macosx_toolbar.h index c6fe90003..b49e6e8bb 100644 --- a/custom_widgets/yacreader_macosx_toolbar.h +++ b/custom_widgets/yacreader_macosx_toolbar.h @@ -12,6 +12,7 @@ class YACReaderMacOSXSearchLineEdit : public QObject Q_OBJECT public: YACReaderMacOSXSearchLineEdit(); + void setFocus(Qt::FocusReason reason); void *getNSTextField(); public slots: diff --git a/custom_widgets/yacreader_macosx_toolbar.mm b/custom_widgets/yacreader_macosx_toolbar.mm index 229e825ae..51ea4d76d 100644 --- a/custom_widgets/yacreader_macosx_toolbar.mm +++ b/custom_widgets/yacreader_macosx_toolbar.mm @@ -316,6 +316,13 @@ - (void)controlTextDidChange:(NSNotification *)notification nstextfield = searchEdit; } +void YACReaderMacOSXSearchLineEdit::setFocus(Qt::FocusReason reason) +{ + Q_UNUSED(reason) + + [((NSTextField *)nstextfield) becomeFirstResponder]; +} + void *YACReaderMacOSXSearchLineEdit::getNSTextField() { return nstextfield; diff --git a/custom_widgets/yacreader_search_line_edit.cpp b/custom_widgets/yacreader_search_line_edit.cpp index 3a209a274..0232184e3 100644 --- a/custom_widgets/yacreader_search_line_edit.cpp +++ b/custom_widgets/yacreader_search_line_edit.cpp @@ -40,7 +40,7 @@ YACReaderSearchLineEdit::YACReaderSearchLineEdit(QWidget *parent) #ifdef Q_OS_MAC setMaximumWidth(212); #else - setMaximumWidth(173); + setMaximumWidth(255); setFixedHeight(26); #endif diff --git a/custom_widgets/yacreader_treeview.cpp b/custom_widgets/yacreader_treeview.cpp index 14a6dd24b..c6dd9d9db 100644 --- a/custom_widgets/yacreader_treeview.cpp +++ b/custom_widgets/yacreader_treeview.cpp @@ -20,44 +20,13 @@ YACReaderTreeView::YACReaderTreeView(QWidget *parent) #ifdef Q_OS_MAC - bool oldStyle = true; - switch (QSysInfo::MacVersion()) { - case QSysInfo::MV_SNOWLEOPARD: - case QSysInfo::MV_LION: - case QSysInfo::MV_MOUNTAINLION: - case QSysInfo::MV_MAVERICKS: - oldStyle = true; //TODO fix this - break; - default: - oldStyle = false; - break; - } + setStyleSheet("QTreeView {background-color:transparent; border: none;}" + "QTreeView::item:selected {background-color:#91c4f4; border-top: 1px solid #91c4f4; border-left:none;border-right:none;border-bottom:1px solid #91c4f4;}" + "QTreeView::branch:selected {background-color:#91c4f4; border-top: 1px solid #91c4f4; border-left:none;border-right:none;border-bottom:1px solid #91c4f4;}" + "QTreeView::branch:open:selected:has-children {image: url(':/images/sidebar/expanded_branch_osx.png');}" + "QTreeView::branch:closed:selected:has-children {image: url(':/images/sidebar/collapsed_branch_osx.png');}" - if (oldStyle) { - setStyleSheet("QTreeView {background-color:transparent; border: none;}" - "QTreeView::item:selected {background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6BAFE4, stop: 1 #3984D2); border-top: 2px solid qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #5EA3DF, stop: 1 #73B8EA); border-left:none;border-right:none;border-bottom:1px solid #3577C2;}" - "QTreeView::branch:selected {background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6BAFE4, stop: 1 #3984D2); border-top: 2px solid qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #5EA3DF, stop: 1 #73B8EA); border-left:none;border-right:none;border-bottom:1px solid #3577C2;}" - "QTreeView::branch:open:selected:has-children {image: url(':/images/sidebar/expanded_branch_osx.png');}" - "QTreeView::branch:closed:selected:has-children {image: url(':/images/sidebar/collapsed_branch_osx.png');}" - - "QScrollBar:vertical { border: none; background: #EFEFEF; width: 9px; margin: 0 3px 0 0; }" - "QScrollBar::handle:vertical { background: #DDDDDD; width: 7px; min-height: 20px; margin: 1px; border: 1px solid #D0D0D0; }" - "QScrollBar::add-line:vertical { border: none; background: #EFEFEF; height: 10px; subcontrol-position: bottom; subcontrol-origin: margin; margin: 0 3px 0 0;}" - - "QScrollBar::sub-line:vertical { border: none; background: #EFEFEF; height: 10px; subcontrol-position: top; subcontrol-origin: margin; margin: 0 3px 0 0;}" - "QScrollBar::up-arrow:vertical {border:none;width: 9px;height: 6px;background: url(':/images/folders_view/line-up.png') center top no-repeat;}" - "QScrollBar::down-arrow:vertical {border:none;width: 9px;height: 6px;background: url(':/images/folders_view/line-down.png') center top no-repeat;}" - - "QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {background: none; }"); - } else { - setStyleSheet("QTreeView {background-color:transparent; border: none;}" - "QTreeView::item:selected {background-color:#91c4f4; border-top: 1px solid #91c4f4; border-left:none;border-right:none;border-bottom:1px solid #91c4f4;}" - "QTreeView::branch:selected {background-color:#91c4f4; border-top: 1px solid #91c4f4; border-left:none;border-right:none;border-bottom:1px solid #91c4f4;}" - "QTreeView::branch:open:selected:has-children {image: url(':/images/sidebar/expanded_branch_osx.png');}" - "QTreeView::branch:closed:selected:has-children {image: url(':/images/sidebar/collapsed_branch_osx.png');}" - - ); - } + ); #else setStyleSheet("QTreeView {background-color:transparent; border: none; color:#DDDFDF; outline:0; show-decoration-selected: 0;}" diff --git a/images/comics_view_toolbar/setManga.png b/images/comics_view_toolbar/setManga.png new file mode 100644 index 000000000..01b4631d0 Binary files /dev/null and b/images/comics_view_toolbar/setManga.png differ diff --git a/images/comics_view_toolbar/setManga@2x.png b/images/comics_view_toolbar/setManga@2x.png new file mode 100644 index 000000000..aaf105969 Binary files /dev/null and b/images/comics_view_toolbar/setManga@2x.png differ diff --git a/images/comics_view_toolbar/setNormal.png b/images/comics_view_toolbar/setNormal.png new file mode 100644 index 000000000..a7e8ae386 Binary files /dev/null and b/images/comics_view_toolbar/setNormal.png differ diff --git a/images/comics_view_toolbar/setNormal@2x.png b/images/comics_view_toolbar/setNormal@2x.png new file mode 100644 index 000000000..8cafb9304 Binary files /dev/null and b/images/comics_view_toolbar/setNormal@2x.png differ diff --git a/images/custom_dialog/custom_close_button.svg b/images/custom_dialog/custom_close_button.svg new file mode 100644 index 000000000..1a6ad742c --- /dev/null +++ b/images/custom_dialog/custom_close_button.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/whats_new/whatsnew_header.svg b/images/whats_new/whatsnew_header.svg new file mode 100644 index 000000000..0cc109c3d --- /dev/null +++ b/images/whats_new/whatsnew_header.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/release/languages/yacreader_it.qm b/release/languages/yacreader_it.qm new file mode 100644 index 000000000..0431af3e7 Binary files /dev/null and b/release/languages/yacreader_it.qm differ diff --git a/release/languages/yacreader_zh.qm b/release/languages/yacreader_zh.qm new file mode 100644 index 000000000..973eaf45d Binary files /dev/null and b/release/languages/yacreader_zh.qm differ diff --git a/release/languages/yacreaderlibrary_it.qm b/release/languages/yacreaderlibrary_it.qm new file mode 100644 index 000000000..24bf5b31d Binary files /dev/null and b/release/languages/yacreaderlibrary_it.qm differ diff --git a/release/languages/yacreaderlibrary_zh.qm b/release/languages/yacreaderlibrary_zh.qm new file mode 100644 index 000000000..7c6e3debc Binary files /dev/null and b/release/languages/yacreaderlibrary_zh.qm differ diff --git a/shortcuts_management/actions_shortcuts_model.cpp b/shortcuts_management/actions_shortcuts_model.cpp index eee5961e6..914472319 100644 --- a/shortcuts_management/actions_shortcuts_model.cpp +++ b/shortcuts_management/actions_shortcuts_model.cpp @@ -33,7 +33,7 @@ QModelIndex ActionsShortcutsModel::index(int row, int column, const QModelIndex Qt::ItemFlags ActionsShortcutsModel::flags(const QModelIndex &index) const { if (!index.isValid()) - return 0; + return {}; if (index.column() == KEYS) return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; return Qt::ItemIsEnabled | Qt::ItemIsSelectable; diff --git a/shortcuts_management/shortcuts_manager.cpp b/shortcuts_management/shortcuts_manager.cpp index 541e4efd7..67e645e4f 100644 --- a/shortcuts_management/shortcuts_manager.cpp +++ b/shortcuts_management/shortcuts_manager.cpp @@ -13,6 +13,7 @@ void ShortcutsManager::initDefaultShorcuts() { #ifdef YACREADER_LIBRARY //ACTIONS + defaultShorcuts.insert(FOCUS_SEARCH_LINE_ACTION_YL, Qt::CTRL | Qt::Key_F); defaultShorcuts.insert(CREATE_LIBRARY_ACTION_YL, Qt::Key_A); defaultShorcuts.insert(OPEN_LIBRARY_ACTION_YL, Qt::Key_O); defaultShorcuts.insert(UPDATE_LIBRARY_ACTION_YL, Qt::Key_U); diff --git a/shortcuts_management/shortcuts_manager.h b/shortcuts_management/shortcuts_manager.h index 2aee76a59..787eee2af 100644 --- a/shortcuts_management/shortcuts_manager.h +++ b/shortcuts_management/shortcuts_manager.h @@ -48,6 +48,8 @@ class ShortcutsManager #define OPEN_COMIC_ACTION_YL "OPEN_COMIC_ACTION_YL" #define SET_AS_READ_ACTION_YL "SET_AS_READ_ACTION_YL" #define SET_AS_NON_READ_ACTION_YL "SET_AS_NON_READ_ACTION_YL" +#define SET_AS_MANGA_ACTION_YL "SET_AS_MANGA_ACTION_YL" +#define SET_AS_NORMAL_ACTION_YL "SET_AS_MANGA_ACTION_YL" #define SHOW_HIDE_MARKS_ACTION_YL "SHOW_HIDE_MARKS_ACTION_YL" #define TOGGLE_FULL_SCREEN_ACTION_YL "TOGGLE_FULL_SCREEN_ACTION_YL" #define HELP_ABOUT_ACTION_YL "HELP_ABOUT_ACTION_YL" @@ -62,6 +64,8 @@ class ShortcutsManager #define SET_FOLDER_AS_COMPLETED_ACTION_YL "SET_FOLDER_AS_COMPLETED_ACTION_YL" #define SET_FOLDER_AS_READ_ACTION_YL "SET_FOLDER_AS_READ_ACTION_YL" #define SET_FOLDER_AS_UNREAD_ACTION_YL "SET_FOLDER_AS_UNREAD_ACTION_YL" +#define SET_FOLDER_AS_MANGA_ACTION_YL "SET_FOLDER_AS_MANGA_ACTION_YL" +#define SET_FOLDER_AS_NORMAL_ACTION_YL "SET_FOLDER_AS_NORMAL_ACTION_YL" #define OPEN_CONTAINING_FOLDER_COMIC_ACTION_YL "OPEN_CONTAINING_FOLDER_COMIC_ACTION_YL" #define RESET_COMIC_RATING_ACTION_YL "RESET_COMIC_RATING_ACTION_YL" #define SELECT_ALL_COMICS_ACTION_YL "SELECT_ALL_COMICS_ACTION_YL" @@ -71,6 +75,8 @@ class ShortcutsManager #define DELETE_COMICS_ACTION_YL "DELETE_COMICS_ACTION_YL" #define HIDE_COMIC_VIEW_ACTION_YL "HIDE_COMIC_VIEW_ACTION_YL" #define GET_INFO_ACTION_YL "GET_INFO_ACTION_YL" +#define FOCUS_SEARCH_LINE_ACTION_YL "FOCUS_SEARCH_LINE_ACTION_YL" +#define FOCUS_COMICS_VIEW_ACTION_YL "FOCUS_COMICS_VIEW_ACTION_YL" #define SHOW_EDIT_SHORTCUTS_ACTION_YL "SHOW_EDIT_SHORTCUTS_ACTION_YL" #define UPDATE_CURRENT_FOLDER_ACTION_YL "UPDATE_CURRENT_FOLDER_ACTION_YL" #define ADD_FOLDER_ACTION_YL "ADD_FOLDER_ACTION_YL"