Commit Graph

606 Commits

Author SHA1 Message Date
Luis Ángel San Martín
6438c9210f Move query execution and model setup to the right scope 2021-01-12 18:41:09 +01:00
Luis Ángel San Martín
255e51da86 Fix binding values to search query
This was broken while doing a rebase
2021-01-08 16:59:17 +01:00
Iain Benson
8efb9912ee Use concatenation, rather than ostringstream 2021-01-08 15:56:16 +01:00
Luis Ángel San Martín
4990093e3d Remove c++17 dependency 2021-01-08 15:56:16 +01:00
Luis Ángel San Martín
2d3888b4b4 Fix scopes 2021-01-08 15:56:13 +01:00
Luis Ángel San Martín
7ccb338455 Apply clang-format 2021-01-08 15:51:59 +01:00
Iain Benson
9a660350d2 Add some documentation and attribution to the query parser 2021-01-08 15:51:59 +01:00
Iain Benson
30529dca43 Some small tidy ups 2021-01-08 15:51:56 +01:00
Iain Benson
673ee1f067 Use the query parser in the comic and folder model 2021-01-08 15:41:29 +01:00
Iain Benson
5fa7da1e46 Add folder into the query parser 2021-01-08 15:41:29 +01:00
Iain Benson
4a50d438d0 Add query parser class 2021-01-08 15:41:28 +01:00
Iain Benson
d3de52ca82 Add commit 43aab01 of BenHanson/lexertl14 from github 2021-01-08 15:41:28 +01:00
Felix Kauselmann
c4f792bd40 Fix port settings
When setting ports, temporary or for good, we need to go via the config
files and not QTcpServer or we get undefined behavior. To support temp
ports, we need to back up the fixed port in the settings.
2020-12-11 12:33:05 +01:00
Luis Ángel San Martín
e79ea56d32 Fix format 2020-12-05 14:49:54 +01:00
Heimen Stoffels
ccf1e4cb56 Updated Dutch translation 2020-10-01 11:56:35 +02:00
Igor Kushnir
04140bef0b Remove an unnecessary indirection in ComicFlow
The timer pointer forced error-prone manual memory management without
any benefits.
2020-08-31 15:45:12 +02:00
Igor Kushnir
cb7c967252 Add WorkerThread class and use it in ComicFlow
In a later commit WorkerThread should also replace classes similar to
ImageLoader: PageLoader, ImageLoaderGL and ImageLoaderByteArrayGL.

Bugs fixed:
  1. Eliminated a data race between ImageLoader::run() and
ComicFlow::updateImageData()->ImageLoader::result(). Specifically when
ImageLoader::busy() returns false, then ImageLoader::run() sets
ImageLoader::working to true, loads the image and starts assigning it to
ImageLoader::img, while ImageLoader::result() is accessed without
locking from updateImageData().
Making ImageLoader::working atomic is clearly insufficient to eliminate
this data race. The fix is to set 'working' to true immediately and
synchronously as soon as a new task is assigned to the worker.
  2. Replaced thread termination with graceful thread exit. ComicFlow
destructor called QThread::terminate(), using which is discouraged by Qt
documentation. The application exited without errors in Release mode.
In Debug mode, however, it received the SIG32 signal on exit and printed
the following warning - "QWaitCondition: mutex destroy failure:
Device or resource busy".
The loop in WorkerThread::run() is no longer endless. The worker thread
properly ends and is joined in WorkerThread destructor.

Design decisions:
 1. WorkerThread could emit a signal when it completes a task.
Thus updateTimer could be removed from ComicFlow and GoToFlow. However,
there is no obvious way to use this new signal in the two GL classes.
Also I don't know whether updateTimer is just an inefficient polling
substitute for notification or an intentional animation mechanism.
 2. The index variable is no longer stored in the worker class, but in
ComicFlow directly. Thing is, this data member was never actually
accessed by the worker, but ComicFlow went so far as to lock worker's
mutex to "protect" access to the index.
 3. The common ImageLoader implementation turned out to be very general.
So I converted it into the WorkerThread class template that is not
restricted to producing QImage results and can be reused elsewhere.
 4. I used standard classes (such as std::thread) instead of their Qt
equivalents (e.g. QThread) because they are more thoroughly documented.
The standard classes should also be more efficient as they were more
carefully designed and provide much fewer unnecessary features.
 5. Release-Acquire ordering is safe for the WorkerThread::working
use case and is more efficient than the std::atomic-default
Sequentially-consistent ordering.
 6. condition.notify_one() is called while the mutex is unlocked
to improve performance. This is safe in both cases:
  a) if the worker thread exits due to a spurious wakeup just before
the condition.notify_one() call in WorkerThread destructor, so much the
better;
  b) if a spurious wakeup lets the worker thread finish the task and
start waiting on the condition again just before the
condition.notify_one() call in WorkerThread::performTask(), the second
waking will be ignored by the worker thread as 'working' and 'abort'
will be false then.
2020-08-31 15:45:12 +02:00
Felix Kauselmann
4a654c38c0 Headless server: Add support for setting a port from commandline
Manual editing of a config file for setting a port is not ideal.
Solution: add a set-port command to save a port and also a
--port option to allow setting a temporary port during startup
2020-08-29 18:21:06 +02:00
Luis Ángel San Martín
b64ea19e8b Use an invalid QVariant to set to NULL a value in the DB
nullptr causes troubles in some platforms/compiles
2020-08-25 19:45:05 +02:00
Luis Ángel San Martín
f11a757141 Code format
I had to update clang-format
2020-08-25 19:13:43 +02:00
Luis Ángel San Martín
5bc3ad5014 Send back more recent comic status to the client on sync 2020-08-25 19:03:00 +02:00
Luis Ángel San Martín
2b780e23a4 Make updateFromRemoteClient return more updated comics
So they can be sent back to the client.
2020-08-25 19:01:43 +02:00
Luis Ángel San Martín
fe15bc2ba8 Include "last_time_opened" in JSON serialization 2020-08-25 19:01:03 +02:00
Luis Ángel San Martín
c84fc20419 Reset last time opened when setting a comic as unread 2020-08-25 19:00:21 +02:00
Felix Kauselmann
4b3042def4 Fix object leaks in database code
Qt's database and query model requires that both the queries and the database
objects are out of scope before a database connection can safely be removed.

Solution: Properly encapsulate databases and queries in "{ }" and use a string
to cache the connection name for out-of-scope removal.
2020-08-25 17:34:46 +02:00
Felix Kauselmann
1b344d70e5 Update server code integration for QtWebApp 1.7.11
- Adapt server code for QtWebapp namespace 'stefanfrings'
- Implement custom modifications needed by v1 controller
  via template engine
- Unify iphone and ipad templates
2020-08-20 18:22:57 +02:00
Felix Kauselmann
3de099491f Move QtWebApp sources to third_party 2020-08-20 18:22:57 +02:00
Felix Kauselmann
1af613663c Fix QsLog setup in Library and LibraryServer
The calls changed, so we need to adapt them.
2020-08-20 17:41:56 +02:00
Felix Kauselmann
c13ec618d0 Move QsLog to third_party directory 2020-08-20 17:41:56 +02:00
Felix Kauselmann
b9acd13120
Fix code format errors due to changes in default coding style. (#150) 2020-07-24 21:17:49 +02:00
Jan Beich
65a77daa75 Explicitly include <sys/socket.h>
server_config_dialog.cpp:57:30: error: member access into incomplete type 'struct sockaddr'
            if (ifa->ifa_addr->sa_family == AF_INET) { // check it is IP4
                             ^
/usr/local/include/qt5/QtNetwork/qhostaddress.h:50:8: note: forward declaration of 'sockaddr'
struct sockaddr;
       ^
server_config_dialog.cpp:61:27: error: use of undeclared identifier 'AF_INET'
                inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
                          ^
server_config_dialog.cpp:64:37: error: member access into incomplete type 'struct sockaddr'
            } else if (ifa->ifa_addr->sa_family == AF_INET6) { // check it is IP6
                                    ^
/usr/local/include/qt5/QtNetwork/qhostaddress.h:50:8: note: forward declaration of 'sockaddr'
struct sockaddr;
       ^
server_config_dialog.cpp:68:27: error: use of undeclared identifier 'AF_INET6'
                inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);
                          ^
2019-11-26 19:03:34 +00:00
Luis Ángel San Martín
e1b0e7c96f Fix full screen mode in windows with qt 5.12.4+ 2019-09-28 10:11:44 +02:00
ivanvranjic
346bcdaf75 Clang format fix. 2019-09-25 17:38:59 +02:00
Ivan Vranjic
cfb4e31af9 Fix for story arcs not being parsed from comicvine. 2019-09-25 17:38:59 +02:00
Luis Ángel San Martín
0b83764734
Revert "Thread ping pong" 2019-09-24 12:00:21 +02:00
Felix Kauselmann
be547081f2 Fix huge memleak in server code caused by thread pingpong fix.
Stopped QThreads don't process events, so cleanup signals get lost.
Prevent this from happening by keeping the threads alive and the comic
inside the thread (as we already do in the viewer). Cleanup happens by
connecting the comic's destroyed() signal to the thread's quit() slot.
2019-09-24 08:21:14 +02:00
Luis Ángel San Martín
68ae40fda7 Fix restoring the window from a minimized state 2019-09-22 15:04:54 +02:00
Luis Ángel San Martín
6990ba0765 Use showNormal in macos and show in other platforms 2019-09-22 13:27:06 +02:00
Luis Ángel San Martín
1ddf0038b8 Use Trigger in linux, we have seen some setups were double click is not reported 2019-09-22 13:14:02 +02:00
Luis Ángel San Martín
94d17a1d5c Use "show" instead of "showNormal" to keep maximized geometry 2019-09-22 13:08:10 +02:00
Luis Ángel San Martín
fc85f77d15 Use LibraryWindow::closeApp to exit from the system tray context menu 2019-09-21 12:12:19 +02:00
Luis Ángel San Martín
9fafa06063 Move call forward 2019-09-21 12:11:56 +02:00
Luis Ángel San Martín
674fa21717 Pass a more specific instance of our main window 2019-09-21 12:11:39 +02:00
Luis Ángel San Martín
ef8216b338 Make closeApp work with no event
And exit using QApplication.exit so we don't mess with window events to exit the app
2019-09-21 12:11:03 +02:00
Luis Ángel San Martín
7ac331ed41 Do not force macos sdk for now
This was commited by mistake
2019-09-21 11:06:51 +02:00
Luis Ángel San Martín
8e99d9e59f Extract the system tray functionality to its own class
LibraryWindow is already a monster, so we'll try to not make it bigger.
2019-09-21 10:47:01 +02:00
Luis Ángel San Martín
3c07e7269a Update the UI string about system tray support 2019-09-21 10:45:34 +02:00
Luis Ángel San Martín
5b78ef2dae Use new property name and set false as default 2019-09-21 10:44:28 +02:00
Luis Ángel San Martín
b5f3799753 Restore the code to start the app into the system tray 2019-09-21 10:44:03 +02:00
Luis Ángel San Martín
63e16e44b7 Better macos tray icon 2019-09-20 16:38:11 +02:00
Luis Ángel San Martín
403e657062 A new trayicon is needed for macos 2019-09-20 13:41:26 +02:00
Luis Ángel San Martín
6031c81d81 Add better icons for the system tray in macos and windows
I would like to design specific icons for the system tray at some point, but for now this is what we have.
2019-09-20 10:07:20 +02:00
Luis Ángel San Martín
4377ad935c Fixed more merge problems 2019-09-19 22:54:08 +02:00
Luis Ángel San Martín
8f845727ae Fixed more merge problems 2019-09-19 22:49:00 +02:00
Luis Ángel San Martín
a0f682be7b Merge went bad
Hopefully this is all that got messed up
2019-09-19 22:32:07 +02:00
Luis Ángel San Martín
a632480422 Format 2019-09-19 21:16:56 +02:00
Felix Kauselmann
e587f59ddb Add support for minimize and start to tray. 2019-09-19 20:22:14 +02:00
Luis Ángel San Martín
a6bfd44aec Remove clear from sql query
It was committed by mistake
2019-09-16 23:44:30 +02:00
Luis Ángel San Martín
ffbe32734e Use the right info.plist file 2019-08-31 10:12:20 +02:00
Luis Ángel San Martín
24fce96220 Disable darkmode for now 2019-08-31 09:35:32 +02:00
Luis Ángel San Martín
9056fffb66 Use db transactions when updating the progress from iOS
Timeouts were a problem before.
2019-08-24 13:31:52 +02:00
Luis Ángel San Martín
1fd0837163 Revert change 2019-08-24 11:11:52 +02:00
Luis Ángel San Martín
ff8c1bcf3f Make a change to break the code format and check that CI is able to detect the problem 2019-08-24 11:11:52 +02:00
Luis Ángel San Martín
f875e7d304 Disable sort includes in the folders where clang format is disabled
For me this is a bug, DisableFormat should stop any kind of changes.
2019-08-24 11:11:52 +02:00
Luis Ángel San Martín
607b7b4d6f Remove QMAKE_MAC_SDK from all projects 2019-08-24 11:11:50 +02:00
Luis Ángel San Martín
fafcfdd2dc Give the OK to the connection asap 2019-08-24 11:07:36 +02:00
Luis Ángel San Martín
4f4c562a33 Add setting to disable the continue reading banner in the grid view 2019-08-11 11:47:14 +02:00
Luis Ángel San Martín
901d0ab03a Fix Potential fix for GridComicsView in Qt 13 2019-08-11 10:15:44 +02:00
Luis Ángel San Martín
4126fc71c3 Remove unused variables 2019-06-01 16:04:48 +02:00
Luis Ángel San Martín
f29724e404 Annotate overridden methods 2019-06-01 16:04:48 +02:00
Luis Ángel San Martín
e2276cbc1c More auto 2019-06-01 16:04:48 +02:00
Luis Ángel San Martín
268bebbddd Use nullptr instead of 0 2019-06-01 16:04:48 +02:00
Luis Ángel San Martín
bb334cfd50 Use auto to avoid duplicating the type name 2019-06-01 16:04:48 +02:00
Luis Ángel San Martín
e3ec56aa43 Format code using clang-format 2019-05-30 19:46:37 +02:00
Luis Ángel San Martín
8b54744723 Add .clang-format files
Third party code should be excluded from automatic formating: QsLog and QtWebApp
2019-05-30 18:58:54 +02:00
Luis Ángel San Martín
ca34e99ec4
Merge pull request #57 from vedgy/misc-code-fixes
Miscellaneous code fixes
2019-05-30 18:24:53 +02:00
Luis Ángel San Martín
6c628318fe
Merge pull request #54 from vedgy/fix-crash-at-exit
Library: fix a crash at exit when server is disabled
2019-05-30 18:22:06 +02:00
Luis Ángel San Martín
7b712e144a
Merge pull request #53 from selmf/light_gl_flow_refactoring
Light gl flow refactoring
2019-05-30 18:21:05 +02:00
Jeremy Douglass
6f2a4bf243 Add Up Down navigation to FlowView
Adds vertical navigation (up down) to FlowView. This corresponds visually to the File Name list display -- especially when the flow pane is hidden, pressing up-down is the intuitive way to navigate up-down in the list.
2019-05-30 18:15:33 +02:00
Igor Kushnir
c1810b9e54 Library: do not needlessly retrieve all comics from the DB
The siblings variable is unused. So the ComicModel::getAllComics() call
is redundant unless there is some unobvious side effect (I hope not).
2019-05-24 14:53:52 +03:00
Igor Kushnir
92cf54980c Library: eliminate QPainter warnings
There were many run-time warnings in YACReaderLibrary built in Debug
mode with hardware acceleration disabled and with ClassicComicsView
as the active comics view:
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1

The ComicFlowWidgetSW::paintEvent() implementation now corresponds to
ComicFlowWidgetGL::paintEvent(), which has been fixed earlier.

QWidget::repaint() calls paintEvent() immediately.
PictureFlow::paintEvent() calls d->renderer->paint(). So the
d->renderer->paint() call in PictureFlow::updateMarks() was redundant.
2019-05-22 17:37:04 +03:00
Igor Kushnir
8522b11e37 Library: fix a crash at exit when server is disabled
Startup::stop() called from LibraryWindow::closeEvent() crashes if
listener is not initialized.
2019-05-19 13:50:53 +03:00
Felix Kauselmann
caca3191f9 Flow: Remove glu dependency 2019-05-06 07:38:33 +02:00
Luis Ángel San Martín
eeb303a5c1 Avoid parsing non supported dates from comic vine 2019-04-28 09:30:15 +02:00
Luis Ángel San Martín
44db4397e8 Avoid parsing null values from comic vine 2019-04-28 09:28:50 +02:00
Luis Ángel San Martín
54a0610a06 Fix out of bounds crash 2019-04-28 09:28:15 +02:00
François Gannaz
8c8521a8dc Library: reorder initialization of ResponseParser 2019-04-01 11:25:16 +02:00
François Gannaz
ebcb52bf16 Library: bugfix a 'switch case' that had no 'break' 2019-04-01 11:25:16 +02:00
François Gannaz
0453bf126a Library: unused method parameter, so comment out the name 2019-04-01 11:25:16 +02:00
François Gannaz
9aff260f06 Library: unused method parameter, so comment out the name 2019-04-01 11:25:16 +02:00
François Gannaz
6467e2a510 Library: unused method parameter, so comment out the name 2019-04-01 11:25:16 +02:00
François Gannaz
3657745f8b Library: reorder initialization of YACReaderHttpSession 2019-04-01 11:25:16 +02:00
François Gannaz
8fa62c3a20 Library: unused method parameter, so comment out the name 2019-04-01 11:25:16 +02:00
François Gannaz
7cb57d886a Library: fix misleading indentation 2019-04-01 11:25:16 +02:00
François Gannaz
f351e41fa0 Library: add missing 'case' to a 'switch' 2019-04-01 11:25:16 +02:00
François Gannaz
11c99efa30 Library: explicit braces to avoid ambiguous 'else' (hidden in macro) 2019-04-01 11:25:16 +02:00
François Gannaz
62db328ab5 Library: explicit braces to avoid ambiguous 'else' 2019-04-01 11:25:16 +02:00
François Gannaz
20bcd2235a Library: explicit braces to avoid ambiguous 'else' 2019-04-01 11:25:16 +02:00
François Gannaz
6f9d03847a Library: typecast in comparison of int and long u int 2019-04-01 11:25:16 +02:00
François Gannaz
5927b1be45 Library: remove unused variables (shadowed by object attributes) 2019-04-01 11:25:16 +02:00