~ubuntu-branches/ubuntu/vivid/qpdfview/vivid

« back to all changes in this revision

Viewing changes to sources/database.cpp

  • Committer: Package Import Robot
  • Author(s): Benjamin Eltzner
  • Date: 2014-10-22 21:49:15 UTC
  • mfrom: (1.2.15)
  • Revision ID: package-import@ubuntu.com-20141022214915-agqeoe318lzs2s4d
Tags: 0.4.12-1
* New upstream release.
* Fixed option to zoom to selection and implemented tiled rendering
  (Closes: #739554)
* Enable support for qt5 and poppler-qt5.
* Explicit dependence on hicolor-icon-theme.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
 
 
3
Copyright 2014 S. Razi Alavizadeh
3
4
Copyright 2012-2014 Adam Reichold
4
5
Copyright 2012 Michał Trybus
5
6
 
47
48
 
48
49
#include "settings.h"
49
50
#include "documentview.h"
50
 
#include "bookmarkmenu.h"
 
51
#include "bookmarkmodel.h"
 
52
 
 
53
#ifdef WITH_SQL
51
54
 
52
55
namespace
53
56
{
81
84
 
82
85
} // anonymous
83
86
 
 
87
#endif // WITH_SQL
 
88
 
84
89
namespace qpdfview
85
90
{
86
91
 
145
150
        Transaction transaction(m_database);
146
151
 
147
152
        QSqlQuery query(m_database);
148
 
        query.prepare("SELECT filePath,currentPage,continuousMode,layoutMode,scaleMode,scaleFactor,rotation FROM tabs_v2 WHERE instanceName==?");
 
153
        query.prepare("SELECT filePath,currentPage,continuousMode,layoutMode,rightToLeftMode,scaleMode,scaleFactor,rotation FROM tabs_v3 WHERE instanceName==?");
149
154
 
150
155
        query.bindValue(0, instanceName());
151
156
 
162
167
            emit tabRestored(query.value(0).toString(),
163
168
                             static_cast< bool >(query.value(2).toUInt()),
164
169
                             static_cast< LayoutMode >(query.value(3).toUInt()),
165
 
                             static_cast< ScaleMode >(query.value(4).toUInt()),
166
 
                             query.value(5).toReal(),
167
 
                             static_cast< Rotation >(query.value(6).toUInt()),
 
170
                             query.value(4).toBool(),
 
171
                             static_cast< ScaleMode >(query.value(5).toUInt()),
 
172
                             query.value(6).toReal(),
 
173
                             static_cast< Rotation >(query.value(7).toUInt()),
168
174
                             query.value(1).toInt());
169
175
        }
170
176
 
174
180
#endif // WITH_SQL
175
181
}
176
182
 
177
 
void Database::saveTabs(const QList< const DocumentView* >& tabs)
 
183
void Database::saveTabs(const QList< DocumentView* >& tabs)
178
184
{
179
185
#ifdef WITH_SQL
180
186
 
184
190
 
185
191
        QSqlQuery query(m_database);
186
192
 
187
 
        if(Settings::instance()->mainWindow().restoreTabs())
188
 
        {
189
 
            query.prepare("DELETE FROM tabs_v2 WHERE instanceName==?");
190
 
 
191
 
            query.bindValue(0, instanceName());
 
193
        query.prepare("DELETE FROM tabs_v3 WHERE instanceName==?");
 
194
 
 
195
        query.bindValue(0, instanceName());
 
196
 
 
197
        query.exec();
 
198
 
 
199
        if(!query.isActive())
 
200
        {
 
201
            qDebug() << query.lastError();
 
202
            return;
 
203
        }
 
204
 
 
205
        query.prepare("INSERT INTO tabs_v3 "
 
206
                      "(filePath,instanceName,currentPage,continuousMode,layoutMode,rightToLeftMode,scaleMode,scaleFactor,rotation)"
 
207
                      " VALUES (?,?,?,?,?,?,?,?,?)");
 
208
 
 
209
        foreach(const DocumentView* tab, tabs)
 
210
        {
 
211
            query.bindValue(0, tab->fileInfo().absoluteFilePath());
 
212
            query.bindValue(1, instanceName());
 
213
            query.bindValue(2, tab->currentPage());
 
214
 
 
215
            query.bindValue(3, static_cast< uint >(tab->continuousMode()));
 
216
            query.bindValue(4, static_cast< uint >(tab->layoutMode()));
 
217
            query.bindValue(5, static_cast< uint >(tab->rightToLeftMode()));
 
218
 
 
219
            query.bindValue(6, static_cast< uint >(tab->scaleMode()));
 
220
            query.bindValue(7, tab->scaleFactor());
 
221
 
 
222
            query.bindValue(8, static_cast< uint >(tab->rotation()));
192
223
 
193
224
            query.exec();
194
225
 
197
228
                qDebug() << query.lastError();
198
229
                return;
199
230
            }
200
 
 
201
 
            query.prepare("INSERT INTO tabs_v2 "
202
 
                          "(filePath,instanceName,currentPage,continuousMode,layoutMode,scaleMode,scaleFactor,rotation)"
203
 
                          " VALUES (?,?,?,?,?,?,?,?)");
204
 
 
205
 
            foreach(const DocumentView* tab, tabs)
206
 
            {
207
 
                query.bindValue(0, tab->fileInfo().absoluteFilePath());
208
 
                query.bindValue(1, instanceName());
209
 
                query.bindValue(2, tab->currentPage());
210
 
 
211
 
                query.bindValue(3, static_cast< uint >(tab->continuousMode()));
212
 
                query.bindValue(4, static_cast< uint >(tab->layoutMode()));
213
 
 
214
 
                query.bindValue(5, static_cast< uint >(tab->scaleMode()));
215
 
                query.bindValue(6, tab->scaleFactor());
216
 
 
217
 
                query.bindValue(7, static_cast< uint >(tab->rotation()));
218
 
 
219
 
                query.exec();
220
 
 
221
 
                if(!query.isActive())
222
 
                {
223
 
                    qDebug() << query.lastError();
224
 
                    return;
225
 
                }
226
 
            }
227
 
        }
228
 
        else
229
 
        {
230
 
            query.exec("DELETE FROM tabs_v2");
231
 
 
232
 
            if(!query.isActive())
233
 
            {
234
 
                qDebug() << query.lastError();
235
 
                return;
236
 
            }
237
231
        }
238
232
 
239
233
        transaction.commit();
246
240
#endif // WITH_SQL
247
241
}
248
242
 
 
243
void Database::clearTabs()
 
244
{
 
245
#ifdef WITH_SQL
 
246
 
 
247
    if(m_database.isOpen())
 
248
    {
 
249
        Transaction transaction(m_database);
 
250
 
 
251
        QSqlQuery query(m_database);
 
252
        query.exec("DELETE FROM tabs_v3");
 
253
 
 
254
        if(!query.isActive())
 
255
        {
 
256
            qDebug() << query.lastError();
 
257
            return;
 
258
        }
 
259
 
 
260
        transaction.commit();
 
261
    }
 
262
 
 
263
#endif // WITH_SQL
 
264
}
 
265
 
249
266
void Database::restoreBookmarks()
250
267
{
251
268
#ifdef WITH_SQL
255
272
        Transaction transaction(m_database);
256
273
 
257
274
        QSqlQuery outerQuery(m_database);
258
 
        outerQuery.exec("SELECT DISTINCT(filePath) FROM bookmarks_v2");
 
275
        outerQuery.exec("SELECT DISTINCT(filePath) FROM bookmarks_v3");
259
276
 
260
277
        while(outerQuery.next())
261
278
        {
265
282
                return;
266
283
            }
267
284
 
268
 
            const QString filePath = outerQuery.value(0).toString();
269
 
            QList< QPair< int, QString > > jumps;
 
285
            const QString absoluteFilePath = outerQuery.value(0).toString();
 
286
 
 
287
            BookmarkModel* model = BookmarkModel::fromPath(absoluteFilePath, true);
270
288
 
271
289
            QSqlQuery innerQuery(m_database);
272
 
            innerQuery.prepare("SELECT page,label FROM bookmarks_v2 WHERE filePath==?");
 
290
            innerQuery.prepare("SELECT page,label,comment,modified FROM bookmarks_v3 WHERE filePath==?");
273
291
 
274
 
            innerQuery.bindValue(0, filePath);
 
292
            innerQuery.bindValue(0, absoluteFilePath);
275
293
 
276
294
            innerQuery.exec();
277
295
 
285
303
 
286
304
                const int page = innerQuery.value(0).toInt();
287
305
                const QString label = innerQuery.value(1).toString();
 
306
                const QString comment = innerQuery.value(2).toString();
 
307
                const QDateTime modified = innerQuery.value(3).toDateTime();
288
308
 
289
 
                jumps.append(qMakePair(page, label));
 
309
                model->addBookmark(BookmarkItem(page, label, comment, modified));
290
310
            }
291
 
 
292
 
            emit bookmarkRestored(filePath, jumps);
293
311
        }
294
312
 
295
313
        transaction.commit();
298
316
#endif // WITH_SQL
299
317
}
300
318
 
301
 
void Database::saveBookmarks(const QList< const BookmarkMenu* >& bookmarks)
 
319
void Database::saveBookmarks()
302
320
{
303
321
#ifdef WITH_SQL
304
322
 
307
325
        Transaction transaction(m_database);
308
326
 
309
327
        QSqlQuery query(m_database);
310
 
        query.exec("DELETE FROM bookmarks_v2");
 
328
        query.exec("DELETE FROM bookmarks_v3");
311
329
 
312
330
        if(!query.isActive())
313
331
        {
317
335
 
318
336
        if(Settings::instance()->mainWindow().restoreBookmarks())
319
337
        {
320
 
            query.prepare("INSERT INTO bookmarks_v2 "
321
 
                          "(filePath,page,label)"
322
 
                          " VALUES (?,?,?)");
 
338
            query.prepare("INSERT INTO bookmarks_v3 "
 
339
                          "(filePath,page,label,comment,modified)"
 
340
                          " VALUES (?,?,?,?,?)");
323
341
 
324
 
            foreach(const BookmarkMenu* bookmark, bookmarks)
 
342
            foreach(const QString& absoluteFilePath, BookmarkModel::knownPaths())
325
343
            {
326
 
                foreach(const Jump jump, bookmark->jumps())
 
344
                const BookmarkModel* model = BookmarkModel::fromPath(absoluteFilePath);
 
345
 
 
346
                for(int row = 0, rowCount = model->rowCount(); row < rowCount; ++row)
327
347
                {
328
 
                    query.bindValue(0, bookmark->absoluteFilePath());
329
 
                    query.bindValue(1, jump.first);
330
 
                    query.bindValue(2, jump.second);
 
348
                    const QModelIndex index = model->index(row);
 
349
 
 
350
                    query.bindValue(0, absoluteFilePath);
 
351
                    query.bindValue(1, index.data(BookmarkModel::PageRole));
 
352
                    query.bindValue(2, index.data(BookmarkModel::LabelRole));
 
353
                    query.bindValue(3, index.data(BookmarkModel::CommentRole));
 
354
                    query.bindValue(4, index.data(BookmarkModel::ModifiedRole));
331
355
 
332
356
                    query.exec();
333
357
 
350
374
#endif // WITH_SQL
351
375
}
352
376
 
 
377
void Database::clearBookmarks()
 
378
{
 
379
#ifdef WITH_SQL
 
380
 
 
381
    if(m_database.isOpen())
 
382
    {
 
383
        Transaction transaction(m_database);
 
384
 
 
385
        QSqlQuery query(m_database);
 
386
        query.exec("DELETE FROM bookmarks_v3");
 
387
 
 
388
        if(!query.isActive())
 
389
        {
 
390
            qDebug() << query.lastError();
 
391
            return;
 
392
        }
 
393
 
 
394
        transaction.commit();
 
395
    }
 
396
 
 
397
#endif // WITH_SQL
 
398
}
 
399
 
353
400
void Database::restorePerFileSettings(DocumentView* tab)
354
401
{
355
402
#ifdef WITH_SQL
359
406
        Transaction transaction(m_database);
360
407
 
361
408
        QSqlQuery query(m_database);
362
 
        query.prepare("SELECT currentPage,continuousMode,layoutMode,rightToLeftMode,scaleMode,scaleFactor,rotation FROM perfilesettings_v2 WHERE filePath==?");
 
409
        query.prepare("SELECT currentPage,continuousMode,layoutMode,rightToLeftMode,scaleMode,scaleFactor,rotation,firstPage FROM perfilesettings_v3 WHERE filePath==?");
363
410
 
364
411
        query.bindValue(0, QCryptographicHash::hash(tab->fileInfo().absoluteFilePath().toUtf8(), QCryptographicHash::Sha1).toBase64());
365
412
 
376
423
 
377
424
            tab->setRotation(static_cast< Rotation >(query.value(6).toUInt()));
378
425
 
 
426
            tab->setFirstPage(query.value(7).toInt());
 
427
 
379
428
            tab->jumpToPage(query.value(0).toInt(), false);
380
429
        }
381
430
 
404
453
        Transaction transaction(m_database);
405
454
 
406
455
        QSqlQuery query(m_database);
407
 
        query.prepare("INSERT OR REPLACE INTO perfilesettings_v2 "
408
 
                      "(lastUsed,filePath,currentPage,continuousMode,layoutMode,rightToLeftMode,scaleMode,scaleFactor,rotation)"
409
 
                      " VALUES (?,?,?,?,?,?,?,?,?)");
 
456
        query.prepare("INSERT OR REPLACE INTO perfilesettings_v3 "
 
457
                      "(lastUsed,filePath,currentPage,continuousMode,layoutMode,rightToLeftMode,scaleMode,scaleFactor,rotation,firstPage)"
 
458
                      " VALUES (?,?,?,?,?,?,?,?,?,?)");
410
459
 
411
460
        query.bindValue(0, QDateTime::currentDateTime().toTime_t());
412
461
 
422
471
 
423
472
        query.bindValue(8, static_cast< uint >(tab->rotation()));
424
473
 
 
474
        query.bindValue(9, tab->firstPage());
 
475
 
425
476
        query.exec();
426
477
 
427
478
        if(!query.isActive())
462
513
 
463
514
    if(m_database.isOpen())
464
515
    {
 
516
        {
 
517
            QSqlQuery query(m_database);
 
518
            query.exec("PRAGMA synchronous = OFF");
 
519
            query.exec("PRAGMA journal_mode = MEMORY");
 
520
        }
 
521
 
465
522
        const QStringList tables = m_database.tables();
466
523
 
467
524
        // tabs
468
525
 
469
 
        if(!tables.contains("tabs_v2"))
 
526
        if(!tables.contains("tabs_v3"))
470
527
        {
471
 
            if(prepareTabs_v2() && tables.contains("tabs_v1"))
 
528
            if(prepareTabs_v3())
472
529
            {
473
 
                migrateTabs_v1_v2();
 
530
                if(tables.contains("tabs_v2"))
 
531
                {
 
532
                    migrateTabs_v2_v3();
 
533
                }
 
534
                else if(tables.contains("tabs_v1"))
 
535
                {
 
536
                    migrateTabs_v1_v3();
 
537
                }
474
538
            }
475
539
        }
476
540
 
477
541
        // bookmarks
478
542
 
479
 
        if(!tables.contains("bookmarks_v2"))
 
543
        if(!tables.contains("bookmarks_v3"))
480
544
        {
481
 
            if(prepareBookmarks_v2() && tables.contains("bookmarks_v1"))
 
545
            if(prepareBookmarks_v3())
482
546
            {
483
 
                migrateBookmarks_v1_v2();
 
547
                if(tables.contains("bookmarks_v2"))
 
548
                {
 
549
                    migrateBookmarks_v2_v3();
 
550
                }
 
551
                else if(tables.contains("bookmarks_v1"))
 
552
                {
 
553
                    migrateBookmarks_v1_v3();
 
554
                }
484
555
            }
485
556
        }
486
557
 
487
558
        // per-file settings
488
559
 
489
 
        if(!tables.contains("perfilesettings_v2"))
 
560
        if(!tables.contains("perfilesettings_v3"))
490
561
        {
491
 
            if(preparePerFileSettings_v2() && tables.contains("perfilesettings_v1"))
 
562
            if(preparePerFileSettings_v3())
492
563
            {
493
 
                migratePerFileSettings_v1_v2();
 
564
                if(tables.contains("perfilesettings_v2"))
 
565
                {
 
566
                    migratePerFileSettings_v2_v3();
 
567
                }
 
568
                else if(tables.contains("perfilesettings_v1"))
 
569
                {
 
570
                    migratePerFileSettings_v1_v3();
 
571
                }
494
572
            }
495
573
        }
 
574
 
 
575
        limitPerFileSettings();
496
576
    }
497
577
    else
498
578
    {
509
589
 
510
590
#ifdef WITH_SQL
511
591
 
512
 
bool Database::prepareTabs_v2()
 
592
bool Database::prepareTabs_v3()
513
593
{
514
594
    Transaction transaction(m_database);
515
595
 
516
596
    QSqlQuery query(m_database);
517
 
    query.exec("CREATE TABLE tabs_v2 "
 
597
    query.exec("CREATE TABLE tabs_v3 "
518
598
               "(filePath TEXT"
519
599
               ",instanceName TEXT"
520
600
               ",currentPage INTEGER"
521
601
               ",continuousMode INTEGER"
522
602
               ",layoutMode INTEGER"
 
603
               ",rightToLeftMode INTEGER"
523
604
               ",scaleMode INTEGER"
524
605
               ",scaleFactor REAL"
525
606
               ",rotation INTEGER)");
534
615
    return true;
535
616
}
536
617
 
537
 
bool Database::prepareBookmarks_v2()
 
618
bool Database::prepareBookmarks_v3()
538
619
{
539
620
    Transaction transaction(m_database);
540
621
 
541
622
    QSqlQuery query(m_database);
542
 
    query.exec("CREATE TABLE bookmarks_v2 "
 
623
    query.exec("CREATE TABLE bookmarks_v3 "
543
624
               "(filePath TEXT"
544
625
               ",page INTEGER"
545
 
               ",label TEXT)");
 
626
               ",label TEXT"
 
627
               ",comment TEXT"
 
628
               ",modified DATETIME)");
546
629
 
547
630
    if(!query.isActive())
548
631
    {
554
637
    return true;
555
638
}
556
639
 
557
 
bool Database::preparePerFileSettings_v2()
 
640
bool Database::preparePerFileSettings_v3()
558
641
{
559
642
    Transaction transaction(m_database);
560
643
 
561
644
    QSqlQuery query(m_database);
562
645
 
563
 
    query.exec("CREATE TABLE perfilesettings_v2 "
 
646
    query.exec("CREATE TABLE perfilesettings_v3 "
564
647
               "(lastUsed INTEGER"
565
648
               ",filePath TEXT PRIMARY KEY"
566
649
               ",currentPage INTEGER"
569
652
               ",rightToLeftMode INTEGER"
570
653
               ",scaleMode INTEGER"
571
654
               ",scaleFactor REAL"
572
 
               ",rotation INTEGER)");
573
 
 
574
 
    if(!query.isActive())
575
 
    {
576
 
        qDebug() << query.lastError();
577
 
        return false;
578
 
    }
579
 
 
580
 
    if(Settings::instance()->mainWindow().restorePerFileSettings())
581
 
    {
582
 
        query.exec("DELETE FROM perfilesettings_v2 WHERE filePath IN (SELECT filePath FROM perfilesettings_v2 ORDER BY lastUsed DESC LIMIT -1 OFFSET 1000)");
583
 
    }
584
 
    else
585
 
    {
586
 
        query.exec("DELETE FROM perfilesettings_v2");
587
 
    }
 
655
               ",rotation INTEGER"
 
656
               ",firstPage INTEGER)");
588
657
 
589
658
    if(!query.isActive())
590
659
    {
596
665
    return true;
597
666
}
598
667
 
599
 
void Database::migrateTabs_v1_v2()
600
 
{
601
 
    Transaction transaction(m_database);
602
 
 
603
 
    QSqlQuery query(m_database);
604
 
    query.prepare("INSERT INTO tabs_v2 "
605
 
                  "SELECT filePath,?,currentPage,continuousMode,layoutMode,scaleMode,scaleFactor,rotation "
 
668
void Database::migrateTabs_v2_v3()
 
669
{
 
670
    Transaction transaction(m_database);
 
671
 
 
672
    QSqlQuery query(m_database);
 
673
    query.prepare("INSERT INTO tabs_v3 "
 
674
                  "SELECT filePath,instanceName,currentPage,continuousMode,layoutMode,0,scaleMode,scaleFactor,rotation "
 
675
                  "FROM tabs_v2");
 
676
 
 
677
    query.exec();
 
678
 
 
679
    if(!query.isActive())
 
680
    {
 
681
        qDebug() << query.lastError();
 
682
        return;
 
683
    }
 
684
 
 
685
    qWarning() << "Migrated tabs from v2 to v3, dropping v2.";
 
686
    query.exec("DROP TABLE tabs_v2");
 
687
 
 
688
    transaction.commit();
 
689
}
 
690
 
 
691
void Database::migrateTabs_v1_v3()
 
692
{
 
693
    Transaction transaction(m_database);
 
694
 
 
695
    QSqlQuery query(m_database);
 
696
    query.prepare("INSERT INTO tabs_v3 "
 
697
                  "SELECT filePath,?,currentPage,continuousMode,layoutMode,0,scaleMode,scaleFactor,rotation "
606
698
                  "FROM tabs_v1");
607
699
 
608
700
    query.bindValue(0, instanceName());
615
707
        return;
616
708
    }
617
709
 
618
 
    qWarning() << "Migrated tabs from v1 to v2, dropping v1.";
 
710
    qWarning() << "Migrated tabs from v1 to v3, dropping v1.";
619
711
    query.exec("DROP TABLE tabs_v1");
620
712
 
621
713
    transaction.commit();
622
714
}
623
715
 
624
 
void Database::migrateBookmarks_v1_v2()
 
716
void Database::migrateBookmarks_v2_v3()
 
717
{
 
718
    Transaction transaction(m_database);
 
719
 
 
720
    QSqlQuery query(m_database);
 
721
    query.prepare("INSERT INTO bookmarks_v3 "
 
722
                  "SELECT filePath,page,label,'',datetime('now') "
 
723
                  "FROM bookmarks_v2");
 
724
 
 
725
    query.exec();
 
726
 
 
727
    if(!query.isActive())
 
728
    {
 
729
        qDebug() << query.lastError();
 
730
        return;
 
731
    }
 
732
 
 
733
    qWarning() << "Migrated bookmarks from v2 to v3, dropping v2.";
 
734
    query.exec("DROP TABLE bookmarks_v2");
 
735
 
 
736
    transaction.commit();
 
737
}
 
738
 
 
739
void Database::migrateBookmarks_v1_v3()
625
740
{
626
741
    Transaction transaction(m_database);
627
742
 
637
752
        }
638
753
 
639
754
        QSqlQuery innerQuery(m_database);
640
 
        innerQuery.prepare("INSERT INTO bookmarks_v2 "
641
 
                           "(filePath,page,label)"
642
 
                           " VALUES (?,?,?)");
 
755
        innerQuery.prepare("INSERT INTO bookmarks_v3 "
 
756
                           "(filePath,page,label,comment,modified)"
 
757
                           " VALUES (?,?,?,'',datetime('now'))");
643
758
 
644
759
        innerQuery.bindValue(0, outerQuery.value(0));
645
760
 
664
779
        return;
665
780
    }
666
781
 
667
 
    qWarning() << "Migrated bookmarks from v1 to v2, dropping v1.";
 
782
    qWarning() << "Migrated bookmarks from v1 to v3, dropping v1.";
668
783
    outerQuery.exec("DROP TABLE bookmarks_v1");
669
784
 
670
785
    transaction.commit();
671
786
}
672
787
 
673
 
void Database::migratePerFileSettings_v1_v2()
674
 
{
675
 
    Transaction transaction(m_database);
676
 
 
677
 
    QSqlQuery query(m_database);
678
 
    query.prepare("INSERT INTO perfilesettings_v2 "
679
 
                  "SELECT lastUsed,filePath,currentPage,continuousMode,layoutMode,0,scaleMode,scaleFactor,rotation "
 
788
void Database::migratePerFileSettings_v2_v3()
 
789
{
 
790
    Transaction transaction(m_database);
 
791
 
 
792
    QSqlQuery query(m_database);
 
793
    query.prepare("INSERT INTO perfilesettings_v3 "
 
794
                  "SELECT lastUsed,filePath,currentPage,continuousMode,layoutMode,rightToLeftMode,scaleMode,scaleFactor,rotation,-1 "
 
795
                  "FROM perfilesettings_v2");
 
796
 
 
797
    query.exec();
 
798
 
 
799
    if(!query.isActive())
 
800
    {
 
801
        qDebug() << query.lastError();
 
802
        return;
 
803
    }
 
804
 
 
805
    qWarning() << "Migrated per-file settings from v2 to v3, dropping v2.";
 
806
    query.exec("DROP TABLE perfilesettings_v2");
 
807
 
 
808
    transaction.commit();
 
809
}
 
810
 
 
811
void Database::migratePerFileSettings_v1_v3()
 
812
{
 
813
    Transaction transaction(m_database);
 
814
 
 
815
    QSqlQuery query(m_database);
 
816
    query.prepare("INSERT INTO perfilesettings_v3 "
 
817
                  "SELECT lastUsed,filePath,currentPage,continuousMode,layoutMode,0,scaleMode,scaleFactor,rotation,-1 "
680
818
                  "FROM perfilesettings_v1");
681
819
 
682
820
    query.exec();
687
825
        return;
688
826
    }
689
827
 
690
 
    qWarning() << "Migrated per-file settings from v1 to v2, dropping v1.";
 
828
    qWarning() << "Migrated per-file settings from v1 to v3, dropping v1.";
691
829
    query.exec("DROP TABLE perfilesettings_v1");
692
830
 
693
831
    transaction.commit();
694
832
}
695
833
 
 
834
void Database::limitPerFileSettings()
 
835
{
 
836
    Transaction transaction(m_database);
 
837
 
 
838
    QSqlQuery query(m_database);
 
839
 
 
840
    if(Settings::instance()->mainWindow().restorePerFileSettings())
 
841
    {
 
842
        query.exec("DELETE FROM perfilesettings_v3 WHERE filePath NOT IN (SELECT filePath FROM perfilesettings_v3 ORDER BY lastUsed DESC LIMIT 1000)");
 
843
    }
 
844
    else
 
845
    {
 
846
        query.exec("DELETE FROM perfilesettings_v3");
 
847
    }
 
848
 
 
849
    if(!query.isActive())
 
850
    {
 
851
        qDebug() << query.lastError();
 
852
        return;
 
853
    }
 
854
 
 
855
    transaction.commit();
 
856
}
 
857
 
696
858
#endif // WITH_SQL
697
859
 
698
860
} // qpdfview