Browse Source

Update to upstream version 1.3.6

tags/r14.0.0
Slávek Banko 5 years ago
parent
commit
2e02da046d
100 changed files with 6621 additions and 3343 deletions
  1. 81
    0
      ChangeLog
  2. 6
    0
      config.h.in
  3. 33
    5
      configure.in
  4. 40
    5
      configure.in.in
  5. 19
    1
      po/README
  6. 7
    10
      po/de.po
  7. 581
    1270
      po/it.po
  8. 1248
    1700
      po/pt_BR.po
  9. 105
    102
      po/ru.po
  10. 1
    1
      src/borrower.h
  11. 1
    1
      src/borroweritem.cpp
  12. 1
    1
      src/borroweritem.h
  13. 4
    0
      src/collection.cpp
  14. 4
    2
      src/collectionfieldsdialog.cpp
  15. 17
    0
      src/collections/filecatalog.cpp
  16. 2
    1
      src/collections/filecatalog.h
  17. 2
    0
      src/controller.cpp
  18. 2
    0
      src/core/Makefile.am
  19. 24
    24
      src/core/dcopinterface_skel.cpp
  20. 30
    7
      src/core/drophandler.cpp
  21. 8
    0
      src/document.cpp
  22. 5
    0
      src/document.h
  23. 16
    1
      src/entry.cpp
  24. 6
    5
      src/entry.h
  25. 1
    1
      src/entrygroupitem.cpp
  26. 1
    1
      src/entrygroupitem.h
  27. 14
    1
      src/entryview.cpp
  28. 11
    0
      src/entryview.h
  29. 3
    1
      src/fetch/Makefile.am
  30. 77
    40
      src/fetch/amazonfetcher.cpp
  31. 3
    0
      src/fetch/amazonfetcher.h
  32. 72
    0
      src/fetch/amazonrequest.cpp
  33. 52
    0
      src/fetch/amazonrequest.h
  34. 7
    0
      src/fetch/arxivfetcher.cpp
  35. 9
    1
      src/fetch/citebasefetcher.cpp
  36. 1
    1
      src/fetch/entrezfetcher.cpp
  37. 2
    2
      src/fetch/entrezfetcher.h
  38. 2
    2
      src/fetch/googlescholarfetcher.cpp
  39. 3
    3
      src/fetch/googlescholarfetcher.h
  40. 544
    0
      src/fetch/hmac_sha2.c
  41. 140
    0
      src/fetch/hmac_sha2.h
  42. 2
    1
      src/fetch/ibsfetcher.cpp
  43. 3
    1
      src/fetch/imdbfetcher.cpp
  44. 950
    0
      src/fetch/sha2.c
  45. 108
    0
      src/fetch/sha2.h
  46. 2
    2
      src/fetch/z3950-servers.cfg
  47. 3
    3
      src/fetch/z3950fetcher.cpp
  48. 4
    0
      src/fetchdialog.cpp
  49. 11
    13
      src/field.cpp
  50. 1
    0
      src/field.h
  51. 2
    2
      src/gui/counteditem.h
  52. 1
    1
      src/gui/listview.h
  53. 3
    0
      src/gui/tabcontrol.cpp
  54. 2
    1
      src/image.cpp
  55. 45
    35
      src/imagefactory.cpp
  56. 8
    0
      src/isbnvalidator.cpp
  57. 1
    1
      src/lccnvalidator.cpp
  58. 10
    0
      src/listviewcomparison.cpp
  59. 11
    0
      src/listviewcomparison.h
  60. 24
    8
      src/mainwindow.cpp
  61. 2
    0
      src/mainwindow.h
  62. 1
    1
      src/reportdialog.cpp
  63. 1
    1
      src/tellico_debug.h
  64. 1
    1
      src/tests/Makefile.am
  65. 8
    4
      src/translators/Makefile.am
  66. 1
    1
      src/translators/alexandriaexporter.cpp
  67. 42
    0
      src/translators/bibteximporter.cpp
  68. 2
    0
      src/translators/bibteximporter.h
  69. 27
    1
      src/translators/csvimporter.cpp
  70. 15
    2
      src/translators/deliciousimporter.cpp
  71. 1
    1
      src/translators/freedb_util.cpp
  72. 4
    0
      src/translators/htmlexporter.cpp
  73. 22
    1
      src/translators/risimporter.cpp
  74. 2
    0
      src/translators/risimporter.h
  75. 6
    0
      src/translators/tellico_xml.cpp
  76. 2
    0
      src/translators/tellico_xml.h
  77. 5
    9
      src/translators/tellicoimporter.cpp
  78. 0
    2
      src/translators/tellicoimporter.h
  79. 293
    0
      src/translators/tellicosaximporter.cpp
  80. 87
    0
      src/translators/tellicosaximporter.h
  81. 74
    0
      src/translators/tellicoxmlhandler.cpp
  82. 49
    0
      src/translators/tellicoxmlhandler.h
  83. 772
    0
      src/translators/xmlstatehandler.cpp
  84. 345
    0
      src/translators/xmlstatehandler.h
  85. 24
    0
      src/translators/xsltexporter.cpp
  86. 4
    0
      src/translators/xsltexporter.h
  87. 8
    7
      src/upcvalidator.cpp
  88. 5
    2
      src/upcvalidator.h
  89. 40
    3
      xslt/amazon2tellico.xsl
  90. 4
    0
      xslt/crossref2tellico.xsl
  91. 277
    6
      xslt/delicious2tellico.xsl
  92. 47
    0
      xslt/gcstar2tellico.xsl
  93. 4
    1
      xslt/report-templates/Column_View.xsl
  94. 39
    35
      xslt/report-templates/Group_Summary.xsl
  95. 4
    1
      xslt/report-templates/Group_View.xsl
  96. 8
    4
      xslt/report-templates/Image_List.xsl
  97. 4
    1
      xslt/report-templates/Tri-Column.xsl
  98. 4
    1
      xslt/tellico-printing.xsl
  99. 11
    1
      xslt/tellico2gcstar.xsl
  100. 0
    0
      xslt/tellico2html.js

+ 81
- 0
ChangeLog View File

@@ -1,3 +1,84 @@
1
+2009-09-26  Robby Stephenson  <robby@periapsis.org>
2
+
3
+	* Updated Amazon fetcher to use authentication.
4
+	* Released Tellico 1.3.6
5
+
6
+2009-02-14  Robby Stephenson  <robby@periapsis.org>
7
+
8
+	* Released Tellico 1.3.5.
9
+
10
+2009-02-04  Robby Stephenson  <robby@periapsis.org>
11
+
12
+	* Reverted change from 2007 that merged entries by combining all values in multiple-value fields.
13
+
14
+2009-02-02  Robby Stephenson  <robby@periapsis.org>
15
+
16
+	* Fixed the CueCat decoder to work for ISBN searches, as well as UPC.
17
+
18
+2009-01-30  Robby Stephenson  <robby@periapsis.org>
19
+
20
+	* Updated Deliciour Library 1 importer to handle movies and games.
21
+	* Fixed Ubuntu bug#317822, don't mark collection modified when image is found in local data directory.
22
+	* Fixed query bug with z39.50 ISBN search.
23
+
24
+2008-12-07  Robby Stephenson  <robby@periapsis.org>
25
+
26
+	* Updated it.po, thanks to Valerio Ricci.
27
+
28
+2008-10-23  Robby Stephenson  <robby@periapsis.org>
29
+
30
+	* Added date, time, and username as available params for the XSLT export.
31
+
32
+2008-09-13  Robby Stephenson  <robby@periapsis.org>
33
+
34
+	* Released Tellico 1.3.4.
35
+
36
+2008-09-04  Robby Stephenson  <robby@periapsis.org>
37
+
38
+	* Fixed error with consecutive tabs in CSV import.
39
+
40
+2008-08-26  Robby Stephenson  <robby@periapsis.org>
41
+
42
+	* Fixed bug with image links in reports not being linked correctly.
43
+
44
+2008-08-20  Robby Stephenson  <robby@periapsis.org>
45
+
46
+	* Added minimal searching for board games from Amazon.
47
+
48
+2008-08-07  Robby Stephenson  <robby@periapsis.org>
49
+
50
+	* Changed Choice fields to sort by position in list.
51
+
52
+2008-07-25  Robby Stephenson  <robby@periapsis.org>
53
+
54
+	* Added ESC key for clearing quick filter.
55
+	* Improved drag/drop to match on file extension after checking mimetype.
56
+
57
+2008-07-22  Robby Stephenson  <robby@periapsis.org>
58
+
59
+	* Updated IMDb plot regexp.
60
+
61
+2008-07-09  Robby Stephenson  <robby@periapsis.org>
62
+
63
+	* Fixed EntryView to honor copy() command properly, for clipboard.
64
+	* Released Tellico 1.3.3.
65
+
66
+2008-06-24  Robby Stephenson  <robby@periapsis.org>
67
+
68
+	* Updated Porbase URL in z39.50 server list.
69
+
70
+2008-06-13  Robby Stephenson  <robby@periapsis.org>
71
+
72
+	* Updated drag-and-drop to allow HTTP urls.
73
+
74
+2008-06-12  Robby Stephenson  <robby@periapsis.org>
75
+
76
+	* Changed Arxiv fetcher to remove ID version number for results.
77
+
78
+2008-06-07  Robby Stephenson  <robby@periapsis.org>
79
+
80
+	* Fixed bug with merging file catalogs, to properly match on URL.
81
+
1 82
 2008-05-24  Robby Stephenson  <robby@periapsis.org>
2 83
 
3 84
 	* Released Tellico 1.3.2.1.

+ 6
- 0
config.h.in View File

@@ -66,6 +66,9 @@
66 66
 /* Define if you have libz */
67 67
 #undef HAVE_LIBZ
68 68
 
69
+/* Define to 1 if you have the <linux/videodev.h> header file. */
70
+#undef HAVE_LINUX_VIDEODEV_H
71
+
69 72
 /* Define to 1 if you have the <memory.h> header file. */
70 73
 #undef HAVE_MEMORY_H
71 74
 
@@ -174,6 +177,9 @@
174 177
 /* Define to the version of this package. */
175 178
 #undef PACKAGE_VERSION
176 179
 
180
+/* Define to 1 if the XML loader should use SAX */
181
+#undef SAX_SUPPORT
182
+
177 183
 /* The size of `char', as computed by sizeof. */
178 184
 #undef SIZEOF_CHAR
179 185
 

+ 33
- 5
configure.in View File

@@ -40,7 +40,7 @@ dnl Perform program name transformation
40 40
 AC_ARG_PROGRAM
41 41
 
42 42
 dnl Automake doc recommends to do this only here. (Janos)
43
-AM_INIT_AUTOMAKE(tellico, 1.3.2.1) dnl searches for some needed programs
43
+AM_INIT_AUTOMAKE(tellico, 1.3.6) dnl searches for some needed programs
44 44
 
45 45
 KDE_SET_PREFIX
46 46
 
@@ -491,7 +491,8 @@ AC_ARG_WITH([ooo-dir],
491 491
 	    AC_HELP_STRING([--with-ooo-dir=DIR],
492 492
 			   [where the OpenOffice.org program files are installed]),
493 493
 	    [ac_ooo_libdir="${withval}/program"
494
-	     ac_ooo_datadir="${withval}/program"])
494
+	     ac_ooo_datadir="${withval}/program"
495
+             ac_ooo_basisdir="${withval}/basis3.0"])
495 496
 AC_ARG_WITH([ooo-libdir],
496 497
 	    AC_HELP_STRING([--with-ooo-libdir=DIR],
497 498
 			   [where the OpenOffice.org program libraries are installed (<ooo-dir>/program)]),
@@ -542,6 +543,13 @@ AC_CHECK_FILE([$ac_ooo_datadir/types.rdb],
542 543
 	      [OFFICE_registry="$ac_ooo_datadir"/types.rdb],
543 544
 	      AC_MSG_ERROR([[types.rdb not found, try '--with-ooo-dir=OpenOffice.org_installation_path']]))
544 545
 
546
+AC_FIND_FILE([offapi.rdb],
547
+             [$ac_ooo_basisdir/program $ac_ooo_libdir $ac_ooo_datadir],
548
+             offapi_dir)
549
+if test "$offapi_dir" != "NO"; then
550
+  OFFICE_registry="$OFFICE_registry $offapi_dir/offapi.rdb"
551
+fi
552
+
545 553
 dnl Substitute the values
546 554
 AC_SUBST(OFFICE_SDK_includes)
547 555
 AC_SUBST(OFFICE_libadd)
@@ -562,7 +570,7 @@ AC_ARG_ENABLE(exempi,
562 570
 )
563 571
 
564 572
 if test x$enable_libexempi = xyes; then
565
-   KDE_PKG_CHECK_MODULES(EXEMPI, 
573
+   KDE_PKG_CHECK_MODULES(EXEMPI,
566 574
                                  [exempi-2.0 >= 1.99.0],
567 575
                                  [have_exempi=yes],
568 576
                                  [have_exempi=no])
@@ -586,8 +594,8 @@ AC_ARG_ENABLE(poppler,
586 594
 )
587 595
 
588 596
 if test x$enable_libpoppler = xyes; then
589
-   KDE_PKG_CHECK_MODULES(POPPLER, 
590
-                                 [poppler-qt >= 0.5],
597
+   KDE_PKG_CHECK_MODULES(POPPLER,
598
+                                 [poppler-tqt >= 0.5],
591 599
                                  [have_poppler=yes],
592 600
                                  [have_poppler=no])
593 601
    AC_SUBST(POPPLER_LIBS)
@@ -609,12 +617,32 @@ AC_ARG_ENABLE(webcam,
609 617
     [enable_webcam=no]
610 618
 )
611 619
 
620
+if test x$enable_webcam = xyes; then
621
+    KDE_CHECK_HEADERS([linux/videodev.h],
622
+		     [],
623
+		     [enable_webcam="no"])
624
+fi
625
+
612 626
 AM_CONDITIONAL(ENABLE_WEBCAM, test $enable_webcam = yes)
613 627
 if test x$enable_webcam = xyes; then
614 628
     AC_DEFINE(ENABLE_WEBCAM, 1, [Define to 1 if webcam support is enabled])
615 629
 fi
616 630
 
617 631
 dnl ---------- END WEBCAM CHECK ----------
632
+
633
+dnl ---------- SAX CHECK ----------
634
+
635
+AC_ARG_ENABLE(sax,
636
+    AC_HELP_STRING([--enable-sax], [enable SAX document loading (experimental), default=disable]),
637
+    [enable_sax=$enableval],
638
+    [enable_sax=no]
639
+)
640
+
641
+if test x$enable_sax = xyes; then
642
+    AC_DEFINE(SAX_SUPPORT, 1, [Define to 1 if the XML loader should use SAX])
643
+fi
644
+
645
+dnl ---------- END SAX CHECK ----------
618 646
 KDE_CREATE_SUBDIRSLIST
619 647
 AC_CONFIG_FILES([ Makefile ])
620 648
 AC_CONFIG_FILES([ doc/Makefile ])

+ 40
- 5
configure.in.in View File

@@ -2,7 +2,7 @@
2 2
 
3 3
 KDE_ENABLE_HIDDEN_VISIBILITY
4 4
 
5
-AM_INIT_AUTOMAKE(tellico,1.3.2.1)
5
+AM_INIT_AUTOMAKE(tellico,1.3.6)
6 6
 
7 7
 dnl AM_KDE_MIN_VERSION(MIN-VERSION-MAJOR, MIN-VERSION-MINOR, MIN-VERSION-MICRO)
8 8
 dnl (taken from KMyMoney2)
@@ -428,7 +428,8 @@ AC_ARG_WITH([ooo-dir],
428 428
 	    AC_HELP_STRING([--with-ooo-dir=DIR],
429 429
 			   [where the OpenOffice.org program files are installed]),
430 430
 	    [ac_ooo_libdir="${withval}/program"
431
-	     ac_ooo_datadir="${withval}/program"])
431
+	     ac_ooo_datadir="${withval}/program"
432
+             ac_ooo_basisdir="${withval}/basis3.0"])
432 433
 AC_ARG_WITH([ooo-libdir],
433 434
 	    AC_HELP_STRING([--with-ooo-libdir=DIR],
434 435
 			   [where the OpenOffice.org program libraries are installed (<ooo-dir>/program)]),
@@ -479,6 +480,13 @@ AC_CHECK_FILE([$ac_ooo_datadir/types.rdb],
479 480
 	      [OFFICE_registry="$ac_ooo_datadir"/types.rdb],
480 481
 	      AC_MSG_ERROR([[types.rdb not found, try '--with-ooo-dir=OpenOffice.org_installation_path']]))
481 482
 
483
+AC_FIND_FILE([offapi.rdb],
484
+             [$ac_ooo_basisdir/program $ac_ooo_libdir $ac_ooo_datadir],
485
+             offapi_dir)
486
+if test "$offapi_dir" != "NO"; then
487
+  OFFICE_registry="$OFFICE_registry $offapi_dir/offapi.rdb"
488
+fi
489
+
482 490
 dnl Substitute the values
483 491
 AC_SUBST(OFFICE_SDK_includes)
484 492
 AC_SUBST(OFFICE_libadd)
@@ -499,7 +507,7 @@ AC_ARG_ENABLE(exempi,
499 507
 )
500 508
 
501 509
 if test x$enable_libexempi = xyes; then
502
-   KDE_PKG_CHECK_MODULES(EXEMPI, 
510
+   KDE_PKG_CHECK_MODULES(EXEMPI,
503 511
                                  [exempi-2.0 >= 1.99.0],
504 512
                                  [have_exempi=yes],
505 513
                                  [have_exempi=no])
@@ -523,8 +531,8 @@ AC_ARG_ENABLE(poppler,
523 531
 )
524 532
 
525 533
 if test x$enable_libpoppler = xyes; then
526
-   KDE_PKG_CHECK_MODULES(POPPLER, 
527
-                                 [poppler-qt >= 0.5],
534
+   KDE_PKG_CHECK_MODULES(POPPLER,
535
+                                 [poppler-tqt >= 0.5],
528 536
                                  [have_poppler=yes],
529 537
                                  [have_poppler=no])
530 538
    AC_SUBST(POPPLER_LIBS)
@@ -546,9 +554,36 @@ AC_ARG_ENABLE(webcam,
546 554
     [enable_webcam=no]
547 555
 )
548 556
 
557
+if test x$enable_webcam = xyes; then
558
+    KDE_CHECK_HEADERS([linux/videodev.h],
559
+		     [],
560
+		     [enable_webcam="no"])
561
+fi
562
+
549 563
 AM_CONDITIONAL(ENABLE_WEBCAM, test $enable_webcam = yes)
550 564
 if test x$enable_webcam = xyes; then
551 565
     AC_DEFINE(ENABLE_WEBCAM, 1, [Define to 1 if webcam support is enabled])
552 566
 fi
553 567
 
554 568
 dnl ---------- END WEBCAM CHECK ----------
569
+
570
+dnl ---------- SAX CHECK ----------
571
+
572
+AC_ARG_ENABLE(sax,
573
+    AC_HELP_STRING([--enable-sax], [enable SAX document loading (experimental), default=disable]),
574
+    [enable_sax=$enableval],
575
+    [enable_sax=no]
576
+)
577
+
578
+if test x$enable_sax = xyes; then
579
+    AC_DEFINE(SAX_SUPPORT, 1, [Define to 1 if the XML loader should use SAX])
580
+fi
581
+
582
+dnl ---------- END SAX CHECK ----------
583
+
584
+dnl -------- fix TQTDCOPIDLNG ---------
585
+if test "$kde_cv_tqt" = "no"; then
586
+    if test -z "$TQTDCOPIDLNG"; then
587
+        KDE_FIND_PATH(dcopidlng, TQTDCOPIDLNG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidlng)])
588
+    fi
589
+fi

+ 19
- 1
po/README View File

@@ -2,4 +2,22 @@ To regenerate the message strings, type
2 2
 
3 3
 make package-messages
4 4
 
5
-from the top-level directory
5
+from the top-level directory.
6
+
7
+Please note that you need a special for KDE patched version of xgettext. You
8
+can obtain it from http://packages.ubuntu.com/de/edgy/gettext-kde. Don't forget
9
+to make this binary available as xgettext (instead of kde-xgettext) by e.g.
10
+creating a link in your search path.
11
+
12
+If you don't do this, code such as i18n("Comic Book Illustrator", "Artist")
13
+would correspond to two separate strings "Comic Book Illustrator" and
14
+"Artist" instead of a combined entry from which only the second one has to be
15
+translated:
16
+
17
+msgid ""
18
+"_: Comic Book Illustrator\n"
19
+"Artist"
20
+msgstr "Künstler"
21
+
22
+You also need the tool extractrc. In Debian it is available in the package
23
+tdesdk-scripts.

+ 7
- 10
po/de.po View File

@@ -16,7 +16,7 @@ msgid ""
16 16
 msgstr ""
17 17
 "Project-Id-Version: de\n"
18 18
 "POT-Creation-Date: 2008-01-26 10:52-0800\n"
19
-"PO-Revision-Date: 2008-01-25 10:34+0100\n"
19
+"PO-Revision-Date: 2008-05-24 22:47+0200\n"
20 20
 "Last-Translator: Jens Seidel <jensseidel@users.sf.net>\n"
21 21
 "Language-Team: german <de@li.org>\n"
22 22
 "MIME-Version: 1.0\n"
@@ -1094,7 +1094,7 @@ msgstr "Mechanismus"
1094 1094
 
1095 1095
 #: collections/boardgamecollection.cpp:66
1096 1096
 msgid "Designer"
1097
-msgstr ""
1097
+msgstr "Designer"
1098 1098
 
1099 1099
 #: collections/boardgamecollection.cpp:72
1100 1100
 msgid "Number of Players"
@@ -1792,7 +1792,7 @@ msgstr ""
1792 1792
 
1793 1793
 #: fetch/discogsfetcher.cpp:718
1794 1794
 msgid "Discogs Link"
1795
-msgstr ""
1795
+msgstr "Discogs-Link"
1796 1796
 
1797 1797
 #: newstuff/dialog.cpp:94
1798 1798
 msgid "Get Hot New Stuff"
@@ -1986,9 +1986,8 @@ msgid "Scanning audio files..."
1986 1986
 msgstr "Taste Audio-Dateien ab ..."
1987 1987
 
1988 1988
 #: translators/audiofileimporter.cpp:129
1989
-#, fuzzy
1990 1989
 msgid "Bitrate"
1991
-msgstr "Bibtex"
1990
+msgstr "Bitrate"
1992 1991
 
1993 1992
 #: translators/audiofileimporter.cpp:160 translators/audiofileimporter.cpp:170
1994 1993
 msgid "Tracks (Disc %1)"
@@ -2023,14 +2022,12 @@ msgstr ""
2023 2022
 
2024 2023
 #: translators/audiofileimporter.cpp:352
2025 2024
 msgid "Include &bitrate"
2026
-msgstr ""
2025
+msgstr "&Bitrate inkludieren"
2027 2026
 
2028 2027
 #: translators/audiofileimporter.cpp:353
2029
-#, fuzzy
2030 2028
 msgid "If checked, the bitrate for each track is added to the entries."
2031 2029
 msgstr ""
2032
-"Wenn markiert, werden die Datei-Namen für jede Spur zu den Einträgen "
2033
-"hinzugefügt."
2030
+"Wenn markiert, wird die Bitrate für jede Spur zu den Einträgen hinzugefügt."
2034 2031
 
2035 2032
 #: translators/csvexporter.cpp:40
2036 2033
 msgid "CSV"
@@ -5369,7 +5366,7 @@ msgstr "Copac (Großbritannien und Irland)"
5369 5366
 
5370 5367
 #: scripts.cpp:2
5371 5368
 msgid "BoardGameGeek"
5372
-msgstr ""
5369
+msgstr "BoardGameGeek"
5373 5370
 
5374 5371
 #: scripts.cpp:4
5375 5372
 msgid "Dark Horse Comics"

+ 581
- 1270
po/it.po
File diff suppressed because it is too large
View File


+ 1248
- 1700
po/pt_BR.po
File diff suppressed because it is too large
View File


+ 105
- 102
po/ru.po View File

@@ -1,19 +1,22 @@
1 1
 # translation of ru.po to Russian
2
+# Copyright (C) 2007 Robby Stephenson <robby@periapsis.org>.
2 3
 # Калимуллин Артур <kalimullin@gmail.com>, 2006.
3 4
 # Kalimullin Artur <kalimullin@gmail.com>, 2006.
4 5
 # Pesotsky Denis <St.MPA3b@gmail.com>, 2008.
5
-# Copyright (C) 2007 Robby Stephenson <robby@periapsis.org>.
6
+# Denis Pesotsky <St.MPA3b@gmail.com>, 2008.
7
+# Denis Pesotsky <denis@kde.ru>, 2008.
6 8
 msgid ""
7 9
 msgstr ""
8 10
 "Project-Id-Version: ru\n"
9 11
 "POT-Creation-Date: 2008-01-26 10:52-0800\n"
10
-"PO-Revision-Date: 2008-03-21 00:44+0300\n"
11
-"Last-Translator: Pesotsky Denis <St.MPA3b@gmail.com>\n"
12
+"PO-Revision-Date: 2008-10-22 21:27+0400\n"
13
+"Last-Translator: Denis Pesotsky <denis@kde.ru>\n"
12 14
 "Language-Team: Russian <kde-russian@lists.kde.ru>\n"
13 15
 "MIME-Version: 1.0\n"
14 16
 "Content-Type: text/plain; charset=UTF-8\n"
15 17
 "Content-Transfer-Encoding: 8bit\n"
16
-"X-Generator: KBabel 1.11.4\n"
18
+"X-Generator: Lokalize 0.2\n"
19
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
17 20
 
18 21
 #: cite/lyxpipe.cpp:50
19 22
 msgid "<qt>Tellico is unable to write to the server pipe at <b>%1</b>.</qt>"
@@ -21,7 +24,7 @@ msgstr "<qt>Ошибка записи на канал сервера <b>%1</b>.<
21 24
 
22 25
 #: cite/openoffice.cpp:82
23 26
 msgid "Connecting to OpenOffice.org..."
24
-msgstr "Подсоединение к OpenOffice.org..."
27
+msgstr "Подсоединение к OpenOffice.org"
25 28
 
26 29
 #: cite/openoffice.cpp:165 cite/openoffice.cpp:186
27 30
 msgid "OpenOffice.org Connection"
@@ -115,7 +118,7 @@ msgstr "Очистить"
115 118
 
116 119
 #: gui/imagewidget.cpp:57
117 120
 msgid "Select Image..."
118
-msgstr "Выбрать изображение..."
121
+msgstr "Выбрать изображение"
119 122
 
120 123
 #: gui/imagewidget.cpp:63
121 124
 msgid "Save link only"
@@ -652,7 +655,7 @@ msgstr "Создан"
652 655
 
653 656
 #: collections/filecatalog.cpp:89
654 657
 msgid "Modified"
655
-msgstr "Модифицирован"
658
+msgstr "Изменён"
656 659
 
657 660
 #: collections/filecatalog.cpp:93
658 661
 msgid "Meta Info"
@@ -1780,7 +1783,7 @@ msgstr "Описание выделенного отображается зде
1780 1783
 
1781 1784
 #: newstuff/dialog.cpp:224
1782 1785
 msgid "Downloading information..."
1783
-msgstr "Загрузка информации..."
1786
+msgstr "Загрузка информации"
1784 1787
 
1785 1788
 #: controller.cpp:135 fetchdialog.cpp:226 fetchdialog.cpp:333
1786 1789
 #: fetchdialog.cpp:451 fetchdialog.cpp:506 newstuff/dialog.cpp:297
@@ -1796,7 +1799,7 @@ msgstr "Обновить"
1796 1799
 
1797 1800
 #: newstuff/dialog.cpp:413
1798 1801
 msgid "Installing item..."
1799
-msgstr "Установка...."
1802
+msgstr "Установка"
1800 1803
 
1801 1804
 #: translators/bibteximporter.cpp:79
1802 1805
 msgid "No valid bibtex entries were found"
@@ -1913,7 +1916,7 @@ msgstr "Избранное"
1913 1916
 
1914 1917
 #: translators/audiofileimporter.cpp:69
1915 1918
 msgid "Scanning audio files..."
1916
-msgstr "Сканируются аудио-файлы..."
1919
+msgstr "Сканируются аудио-файлы"
1917 1920
 
1918 1921
 #: translators/audiofileimporter.cpp:129
1919 1922
 msgid "Bitrate"
@@ -2025,7 +2028,7 @@ msgstr "Может быть использован любой другой ра
2025 2028
 
2026 2029
 #: translators/filelistingimporter.cpp:63
2027 2030
 msgid "Scanning files..."
2028
-msgstr "Сканируются файлы..."
2031
+msgstr "Сканируются файлы"
2029 2032
 
2030 2033
 #: translators/filelistingimporter.cpp:191
2031 2034
 msgid "File Listing Options"
@@ -2192,11 +2195,11 @@ msgstr ""
2192 2195
 
2193 2196
 #: translators/importer.h:100
2194 2197
 msgid "Loading data..."
2195
-msgstr "Загружаются данные..."
2198
+msgstr "Загружаются данные"
2196 2199
 
2197 2200
 #: translators/importer.h:100
2198 2201
 msgid "Loading %1..."
2199
-msgstr "Загружается %1..."
2202
+msgstr "Загружается %1"
2200 2203
 
2201 2204
 #: translators/bibtexexporter.cpp:48
2202 2205
 msgid "Bibtex"
@@ -2484,7 +2487,7 @@ msgstr "не соответствует выражению"
2484 2487
 
2485 2488
 #: filterdialog.cpp:90
2486 2489
 msgid "Edit..."
2487
-msgstr "Редактировать..."
2490
+msgstr "Редактировать"
2488 2491
 
2489 2492
 #: filterdialog.cpp:282
2490 2493
 msgid "Advanced Filter"
@@ -2540,11 +2543,11 @@ msgstr "Дата"
2540 2543
 
2541 2544
 #: entryupdater.cpp:81
2542 2545
 msgid "Updating %1..."
2543
-msgstr "Обновление %1..."
2546
+msgstr "Обновление %1"
2544 2547
 
2545 2548
 #: entryupdater.cpp:83
2546 2549
 msgid "Updating entries..."
2547
-msgstr "Обновление записей..."
2550
+msgstr "Обновление записей"
2548 2551
 
2549 2552
 #: entryupdater.cpp:85
2550 2553
 msgid "Update Entries"
@@ -2552,7 +2555,7 @@ msgstr "Обновить записи"
2552 2555
 
2553 2556
 #: entryupdater.cpp:99
2554 2557
 msgid "Updating <b>%1</b>..."
2555
-msgstr "Обновление <b>%1</b>..."
2558
+msgstr "Обновление <b>%1</b>"
2556 2559
 
2557 2560
 #: entryupdater.cpp:209
2558 2561
 msgid "Select Match"
@@ -2875,11 +2878,11 @@ msgstr "Сохранить документ"
2875 2878
 
2876 2879
 #: mainwindow.cpp:305
2877 2880
 msgid "Save the document as a different file..."
2878
-msgstr "Сохранить документ в другой файл..."
2881
+msgstr "Сохранить документ в другой файл"
2879 2882
 
2880 2883
 #: mainwindow.cpp:307
2881 2884
 msgid "Print the contents of the document..."
2882
-msgstr "Напечатать содержимое этого документа..."
2885
+msgstr "Напечатать содержимое этого документа"
2883 2886
 
2884 2887
 #: mainwindow.cpp:309
2885 2888
 msgid "Quit the application"
@@ -2891,7 +2894,7 @@ msgstr "Импортировать коллекцию из других форм
2891 2894
 
2892 2895
 #: mainwindow.cpp:324
2893 2896
 msgid "Import Tellico Data..."
2894
-msgstr "Импорт из файла Tellico..."
2897
+msgstr "Импорт из файла Tellico"
2895 2898
 
2896 2899
 #: mainwindow.cpp:325
2897 2900
 msgid "Import another Tellico data file"
@@ -2899,7 +2902,7 @@ msgstr "Импортировать из другой коллекции Tellico"
2899 2902
 
2900 2903
 #: mainwindow.cpp:331
2901 2904
 msgid "Import CSV Data..."
2902
-msgstr "Импорт из CSV..."
2905
+msgstr "Импорт из CSV"
2903 2906
 
2904 2907
 #: mainwindow.cpp:332
2905 2908
 msgid "Import a CSV file"
@@ -2907,7 +2910,7 @@ msgstr "Импорт из файла CSV"
2907 2910
 
2908 2911
 #: mainwindow.cpp:338
2909 2912
 msgid "Import MODS Data..."
2910
-msgstr "Импорт из MODS..."
2913
+msgstr "Импорт из MODS"
2911 2914
 
2912 2915
 #: mainwindow.cpp:339
2913 2916
 msgid "Import a MODS data file"
@@ -2915,7 +2918,7 @@ msgstr "Импорт из файла MODS"
2915 2918
 
2916 2919
 #: mainwindow.cpp:345
2917 2920
 msgid "Import Alexandria Data..."
2918
-msgstr "Импорт из файла Alexandria..."
2921
+msgstr "Импорт из файла Alexandria"
2919 2922
 
2920 2923
 #: mainwindow.cpp:346
2921 2924
 msgid "Import data from the Alexandria book collection manager"
@@ -2923,7 +2926,7 @@ msgstr "Импорт из менеджера коллекций книг Alexand
2923 2926
 
2924 2927
 #: mainwindow.cpp:352
2925 2928
 msgid "Import Delicious Library Data..."
2926
-msgstr "Импорт из файла Delicious..."
2929
+msgstr "Импорт из файла Delicious"
2927 2930
 
2928 2931
 #: mainwindow.cpp:353
2929 2932
 msgid "Import data from Delicious Library"
@@ -2931,7 +2934,7 @@ msgstr "Импорт данных из файла Delicious"
2931 2934
 
2932 2935
 #: mainwindow.cpp:359
2933 2936
 msgid "Import Referencer Data..."
2934
-msgstr "Импорт из файла Referencer..."
2937
+msgstr "Импорт из файла Referencer"
2935 2938
 
2936 2939
 #: mainwindow.cpp:360
2937 2940
 msgid "Import data from Referencer"
@@ -2939,7 +2942,7 @@ msgstr "Импортировать данные из Referencer"
2939 2942
 
2940 2943
 #: mainwindow.cpp:366
2941 2944
 msgid "Import Bibtex Data..."
2942
-msgstr "Импорт из Bibtex..."
2945
+msgstr "Импорт из Bibtex"
2943 2946
 
2944 2947
 #: mainwindow.cpp:367
2945 2948
 msgid "Import a bibtex bibliography file"
@@ -2947,7 +2950,7 @@ msgstr "Импортировать из файла библиографии bibt
2947 2950
 
2948 2951
 #: mainwindow.cpp:373
2949 2952
 msgid "Import Bibtexml Data..."
2950
-msgstr "Импорт из Bibtexml..."
2953
+msgstr "Импорт из Bibtexml"
2951 2954
 
2952 2955
 #: mainwindow.cpp:374
2953 2956
 msgid "Import a Bibtexml bibliography file"
@@ -2955,7 +2958,7 @@ msgstr "Импортировать из файла библиографии Bibt
2955 2958
 
2956 2959
 #: mainwindow.cpp:380
2957 2960
 msgid "Import RIS Data..."
2958
-msgstr "Импорт из RIS..."
2961
+msgstr "Импорт из RIS"
2959 2962
 
2960 2963
 #: mainwindow.cpp:381
2961 2964
 msgid "Import an RIS reference file"
@@ -2963,7 +2966,7 @@ msgstr "Импортировать из файла RIS"
2963 2966
 
2964 2967
 #: mainwindow.cpp:387
2965 2968
 msgid "Import PDF File..."
2966
-msgstr "Импорт из PDF..."
2969
+msgstr "Импорт из PDF"
2967 2970
 
2968 2971
 #: mainwindow.cpp:388
2969 2972
 msgid "Import a PDF file"
@@ -2971,7 +2974,7 @@ msgstr "Импортировать из файла PDF"
2971 2974
 
2972 2975
 #: mainwindow.cpp:394
2973 2976
 msgid "Import Audio File Metadata..."
2974
-msgstr "Импорт из данных аудио файла..."
2977
+msgstr "Импорт из данных аудио файла"
2975 2978
 
2976 2979
 #: mainwindow.cpp:395
2977 2980
 msgid "Import meta-data from audio files"
@@ -2979,7 +2982,7 @@ msgstr "Импорт из данных тегов аудио файлов"
2979 2982
 
2980 2983
 #: mainwindow.cpp:404
2981 2984
 msgid "Import Audio CD Data..."
2982
-msgstr "Импорт из Audio CD..."
2985
+msgstr "Импорт из Audio CD"
2983 2986
 
2984 2987
 #: mainwindow.cpp:405
2985 2988
 msgid "Import audio CD information"
@@ -2987,7 +2990,7 @@ msgstr "Импорт информации об Audio CD"
2987 2990
 
2988 2991
 #: mainwindow.cpp:414
2989 2992
 msgid "Import GCstar Data..."
2990
-msgstr "Импорт из файла GCstar..."
2993
+msgstr "Импорт из файла GCstar"
2991 2994
 
2992 2995
 #: mainwindow.cpp:415
2993 2996
 msgid "Import a GCstar data file"
@@ -2995,7 +2998,7 @@ msgstr "Импорт данных из файла GCstar"
2995 2998
 
2996 2999
 #: mainwindow.cpp:421
2997 3000
 msgid "Import Griffith Data..."
2998
-msgstr "Импорт из файла Griffith..."
3001
+msgstr "Импорт из файла Griffith"
2999 3002
 
3000 3003
 #: mainwindow.cpp:422
3001 3004
 msgid "Import a Griffith database"
@@ -3003,7 +3006,7 @@ msgstr "Импортировать из файла Griffith"
3003 3006
 
3004 3007
 #: mainwindow.cpp:428
3005 3008
 msgid "Import Ant Movie Catalog Data..."
3006
-msgstr "Импорт из файла Ant..."
3009
+msgstr "Импорт из файла Ant"
3007 3010
 
3008 3011
 #: mainwindow.cpp:429
3009 3012
 msgid "Import an Ant Movie Catalog data file"
@@ -3011,7 +3014,7 @@ msgstr "Импортировать из файла менеджера колле
3011 3014
 
3012 3015
 #: mainwindow.cpp:435
3013 3016
 msgid "Import File Listing..."
3014
-msgstr "Импорт списка фалов..."
3017
+msgstr "Импорт списка фалов"
3015 3018
 
3016 3019
 #: mainwindow.cpp:436
3017 3020
 msgid "Import information about files in a folder"
@@ -3019,7 +3022,7 @@ msgstr "Импортировать информацию о файлах в па
3019 3022
 
3020 3023
 #: mainwindow.cpp:442
3021 3024
 msgid "Import XSL Transform..."
3022
-msgstr "Импорт из XSLT..."
3025
+msgstr "Импорт из XSLT"
3023 3026
 
3024 3027
 #: mainwindow.cpp:443
3025 3028
 msgid "Import using an XSL Transform"
@@ -3036,7 +3039,7 @@ msgstr "Экспортировать данные коллекции в друг
3036 3039
 
3037 3040
 #: mainwindow.cpp:461
3038 3041
 msgid "Export to XML..."
3039
-msgstr "Экспорт в XML..."
3042
+msgstr "Экспорт в XML"
3040 3043
 
3041 3044
 #: mainwindow.cpp:462
3042 3045
 msgid "Export to a Tellico XML file"
@@ -3044,7 +3047,7 @@ msgstr "Экспорт в XML-файл Tellico"
3044 3047
 
3045 3048
 #: mainwindow.cpp:468
3046 3049
 msgid "Export to Zip..."
3047
-msgstr "Экспорт в ZIP..."
3050
+msgstr "Экспорт в ZIP"
3048 3051
 
3049 3052
 #: mainwindow.cpp:469
3050 3053
 msgid "Export to a Tellico Zip file"
@@ -3052,7 +3055,7 @@ msgstr "Экспорт в сжатый ZIP файл Tellico"
3052 3055
 
3053 3056
 #: mainwindow.cpp:475
3054 3057
 msgid "Export to HTML..."
3055
-msgstr "Экспорт в HTML..."
3058
+msgstr "Экспорт в HTML"
3056 3059
 
3057 3060
 #: mainwindow.cpp:476
3058 3061
 msgid "Export to an HTML file"
@@ -3060,7 +3063,7 @@ msgstr "Экспорт в файл HTML"
3060 3063
 
3061 3064
 #: mainwindow.cpp:482
3062 3065
 msgid "Export to CSV..."
3063
-msgstr "Экспорт в CSV..."
3066
+msgstr "Экспорт в CSV"
3064 3067
 
3065 3068
 #: mainwindow.cpp:483
3066 3069
 msgid "Export to a comma-separated values file"
@@ -3068,7 +3071,7 @@ msgstr "Экспорт в текстовый файл с разделённым
3068 3071
 
3069 3072
 #: mainwindow.cpp:489
3070 3073
 msgid "Export to PilotDB..."
3071
-msgstr "Экспорт в PilotDB..."
3074
+msgstr "Экспорт в PilotDB"
3072 3075
 
3073 3076
 #: mainwindow.cpp:490
3074 3077
 msgid "Export to a PilotDB database"
@@ -3076,7 +3079,7 @@ msgstr "Экспортировать в базу данных PilotDB"
3076 3079
 
3077 3080
 #: mainwindow.cpp:496
3078 3081
 msgid "Export to Alexandria..."
3079
-msgstr "Экспорт в Alexandria..."
3082
+msgstr "Экспорт в Alexandria"
3080 3083
 
3081 3084
 #: mainwindow.cpp:497
3082 3085
 msgid "Export to an Alexandria library"
@@ -3084,7 +3087,7 @@ msgstr "Экспорт в библиотеку Alexandria"
3084 3087
 
3085 3088
 #: mainwindow.cpp:503
3086 3089
 msgid "Export to Bibtex..."
3087
-msgstr "Экспорт в Bibtex..."
3090
+msgstr "Экспорт в Bibtex"
3088 3091
 
3089 3092
 #: mainwindow.cpp:504
3090 3093
 msgid "Export to a bibtex file"
@@ -3092,7 +3095,7 @@ msgstr "Экспорт в файл Bibtex"
3092 3095
 
3093 3096
 #: mainwindow.cpp:510
3094 3097
 msgid "Export to Bibtexml..."
3095
-msgstr "Экспорт в Bibtexml..."
3098
+msgstr "Экспорт в Bibtexml"
3096 3099
 
3097 3100
 #: mainwindow.cpp:511
3098 3101
 msgid "Export to a Bibtexml file"
@@ -3100,7 +3103,7 @@ msgstr "Экспорт в файл Bibtexml"
3100 3103
 
3101 3104
 #: mainwindow.cpp:517
3102 3105
 msgid "Export to ONIX..."
3103
-msgstr "Экспорт в ONIX..."
3106
+msgstr "Экспорт в ONIX"
3104 3107
 
3105 3108
 #: mainwindow.cpp:518
3106 3109
 msgid "Export to an ONIX file"
@@ -3108,7 +3111,7 @@ msgstr "Экспорт в файл ONIX"
3108 3111
 
3109 3112
 #: mainwindow.cpp:524
3110 3113
 msgid "Export to GCfilms..."
3111
-msgstr "Экспорт в GCfilms..."
3114
+msgstr "Экспорт в GCfilms"
3112 3115
 
3113 3116
 #: mainwindow.cpp:525
3114 3117
 msgid "Export to a GCfilms data file"
@@ -3116,7 +3119,7 @@ msgstr "Экспорт в файл GCfilms"
3116 3119
 
3117 3120
 #: mainwindow.cpp:531
3118 3121
 msgid "Export to GCstar..."
3119
-msgstr "Экспорт в GCStar..."
3122
+msgstr "Экспорт в GCStar"
3120 3123
 
3121 3124
 #: mainwindow.cpp:532
3122 3125
 msgid "Export to a GCstar data file"
@@ -3124,7 +3127,7 @@ msgstr "Экспорт в файл GCfilms"
3124 3127
 
3125 3128
 #: mainwindow.cpp:536
3126 3129
 msgid "Export XSL Transform..."
3127
-msgstr "Экспорт в XSLT..."
3130
+msgstr "Экспорт в XSLT"
3128 3131
 
3129 3132
 #: mainwindow.cpp:537
3130 3133
 msgid "Export using an XSL Transform"
@@ -3152,15 +3155,15 @@ msgstr "Отменить выделение записей в коллекции
3152 3155
 
3153 3156
 #: mainwindow.cpp:556
3154 3157
 msgid "Internet Search..."
3155
-msgstr "Поиск в интернете..."
3158
+msgstr "Поиск в интернете"
3156 3159
 
3157 3160
 #: mainwindow.cpp:559
3158 3161
 msgid "Search the internet..."
3159
-msgstr "Повести поиск в интернете для создания новой записи в коллекции..."
3162
+msgstr "Повести поиск в интернете для создания новой записи в коллекции"
3160 3163
 
3161 3164
 #: mainwindow.cpp:561
3162 3165
 msgid "Advanced &Filter..."
3163
-msgstr "Продвинутый &фильтр..."
3166
+msgstr "Продвинутый &фильтр"
3164 3167
 
3165 3168
 #: mainwindow.cpp:564 mainwindow.cpp:719
3166 3169
 msgid "Filter the collection"
@@ -3168,7 +3171,7 @@ msgstr "Фильтр коллекции"
3168 3171
 
3169 3172
 #: mainwindow.cpp:569
3170 3173
 msgid "&New Entry..."
3171
-msgstr "&Новая запись..."
3174
+msgstr "&Новая запись"
3172 3175
 
3173 3176
 #: mainwindow.cpp:572
3174 3177
 msgid "Create a new entry"
@@ -3176,7 +3179,7 @@ msgstr "Создать новую запись"
3176 3179
 
3177 3180
 #: controller.cpp:620 mainwindow.cpp:573
3178 3181
 msgid "&Edit Entry..."
3179
-msgstr "&Редактировать запись..."
3182
+msgstr "&Редактировать запись"
3180 3183
 
3181 3184
 #: mainwindow.cpp:576
3182 3185
 msgid "Edit the selected entries"
@@ -3208,7 +3211,7 @@ msgstr "Объединить выделенные записи"
3208 3211
 
3209 3212
 #: mainwindow.cpp:591
3210 3213
 msgid "&Generate Reports..."
3211
-msgstr "Создать от&чет..."
3214
+msgstr "Создать от&чет"
3212 3215
 
3213 3216
 #: mainwindow.cpp:594
3214 3217
 msgid "Generate collection reports"
@@ -3216,7 +3219,7 @@ msgstr "Создать отчет о коллекции"
3216 3219
 
3217 3220
 #: mainwindow.cpp:595
3218 3221
 msgid "Check-&out..."
3219
-msgstr "&Отдать в долг..."
3222
+msgstr "&Отдать в долг"
3220 3223
 
3221 3224
 #: mainwindow.cpp:598
3222 3225
 msgid "Check-out the selected items"
@@ -3232,7 +3235,7 @@ msgstr "Вернуть из долга выделенные записи"
3232 3235
 
3233 3236
 #: mainwindow.cpp:604
3234 3237
 msgid "&Rename Collection..."
3235
-msgstr "&Переименовать коллекцию..."
3238
+msgstr "&Переименовать коллекцию"
3236 3239
 
3237 3240
 #: mainwindow.cpp:607
3238 3241
 msgid "Rename the collection"
@@ -3256,7 +3259,7 @@ msgstr "Конвертировать коллекцию книг в библио
3256 3259
 
3257 3260
 #: mainwindow.cpp:616
3258 3261
 msgid "String &Macros..."
3259
-msgstr "Строчный &макрос..."
3262
+msgstr "Строчный &макрос"
3260 3263
 
3261 3264
 #: mainwindow.cpp:619
3262 3265
 msgid "Edit the bibtex string macros"
@@ -3357,7 +3360,7 @@ msgstr "Очистить фильтр"
3357 3360
 
3358 3361
 #: mainwindow.cpp:710
3359 3362
 msgid "Filter here..."
3360
-msgstr "Фильтр..."
3363
+msgstr "Фильтр"
3361 3364
 
3362 3365
 #: mainwindow.cpp:768
3363 3366
 msgid "Groups"
@@ -3399,11 +3402,11 @@ msgstr ""
3399 3402
 
3400 3403
 #: mainwindow.cpp:1066
3401 3404
 msgid "Creating new document..."
3402
-msgstr "Создание нового документа..."
3405
+msgstr "Создание нового документа"
3403 3406
 
3404 3407
 #: mainwindow.cpp:1098 mainwindow.cpp:1117 mainwindow.cpp:1135
3405 3408
 msgid "Opening file..."
3406
-msgstr "Открытие файла..."
3409
+msgstr "Открытие файла"
3407 3410
 
3408 3411
 #: mainwindow.cpp:1108
3409 3412
 msgid "Open File"
@@ -3411,7 +3414,7 @@ msgstr "Открыть файл"
3411 3414
 
3412 3415
 #: document.cpp:192 mainwindow.cpp:1215
3413 3416
 msgid "Saving file..."
3414
-msgstr "Сохранение файла...."
3417
+msgstr "Сохранение файла."
3415 3418
 
3416 3419
 #: mainwindow.cpp:1226
3417 3420
 msgid ""
@@ -3435,11 +3438,11 @@ msgstr "Сохранять изображения вместе с файлом"
3435 3438
 
3436 3439
 #: mainwindow.cpp:1265
3437 3440
 msgid "Saving file with a new filename..."
3438
-msgstr "Сохранение файла под другим именем..."
3441
+msgstr "Сохранение файла под другим именем"
3439 3442
 
3440 3443
 #: mainwindow.cpp:1303 mainwindow.cpp:1353
3441 3444
 msgid "Printing..."
3442
-msgstr "Идёт печать..."
3445
+msgstr "Идёт печать"
3443 3446
 
3444 3447
 #: mainwindow.cpp:1312
3445 3448
 msgid ""
@@ -3451,11 +3454,11 @@ msgstr ""
3451 3454
 
3452 3455
 #: mainwindow.cpp:1337
3453 3456
 msgid "Processing document..."
3454
-msgstr "Подождите..."
3457
+msgstr "Подождите"
3455 3458
 
3456 3459
 #: mainwindow.cpp:1360
3457 3460
 msgid "Exiting..."
3458
-msgstr "Выход..."
3461
+msgstr "Выход"
3459 3462
 
3460 3463
 #: mainwindow.cpp:1498
3461 3464
 #, c-format
@@ -3490,7 +3493,7 @@ msgstr "Пожалуйста, проверьте свою инсталляцию
3490 3493
 
3491 3494
 #: mainwindow.cpp:1849
3492 3495
 msgid "Importing data..."
3493
-msgstr "Импорт данных..."
3496
+msgstr "Импорт данных"
3494 3497
 
3495 3498
 #: mainwindow.cpp:1858
3496 3499
 msgid "Import File"
@@ -3502,7 +3505,7 @@ msgstr "Импорт каталога"
3502 3505
 
3503 3506
 #: mainwindow.cpp:1885
3504 3507
 msgid "Exporting data..."
3505
-msgstr "Экспортирование данных..."
3508
+msgstr "Экспортирование данных"
3506 3509
 
3507 3510
 #: mainwindow.cpp:1907
3508 3511
 msgid "Export As"
@@ -3522,7 +3525,7 @@ msgstr "Строка"
3522 3525
 
3523 3526
 #: mainwindow.cpp:1999
3524 3527
 msgid "Creating citations..."
3525
-msgstr "Идет создание цитат..."
3528
+msgstr "Идет создание цитат"
3526 3529
 
3527 3530
 #: mainwindow.cpp:2104
3528 3531
 msgid "Filters"
@@ -3598,7 +3601,7 @@ msgstr "Удалить несколько записей"
3598 3601
 
3599 3602
 #: controller.cpp:626
3600 3603
 msgid "&Edit Entries..."
3601
-msgstr "&Редактировать записи..."
3604
+msgstr "&Редактировать записи"
3602 3605
 
3603 3606
 #: controller.cpp:627
3604 3607
 msgid "D&uplicate Entries"
@@ -3862,7 +3865,7 @@ msgstr "Дополнительные &параметры:"
3862 3865
 
3863 3866
 #: collectionfieldsdialog.cpp:217
3864 3867
 msgid "&Set..."
3865
-msgstr "&Установить..."
3868
+msgstr "&Установить"
3866 3869
 
3867 3870
 #: collectionfieldsdialog.cpp:221
3868 3871
 msgid ""
@@ -4242,11 +4245,11 @@ msgstr ""
4242 4245
 
4243 4246
 #: configdialog.cpp:380
4244 4247
 msgid "&Preview..."
4245
-msgstr "&Пред-просмотр..."
4248
+msgstr "&Предпросмотр…"
4246 4249
 
4247 4250
 #: configdialog.cpp:381
4248 4251
 msgid "Show a preview of the template"
4249
-msgstr "Показать пред-просмотр шаблона"
4252
+msgstr "Показать предпросмотр шаблона"
4250 4253
 
4251 4254
 #: configdialog.cpp:398
4252 4255
 msgid "Font Options"
@@ -4294,7 +4297,7 @@ msgstr "Управление шаблонами"
4294 4297
 
4295 4298
 #: configdialog.cpp:475
4296 4299
 msgid "Install..."
4297
-msgstr "Установить..."
4300
+msgstr "Установить"
4298 4301
 
4299 4302
 #: configdialog.cpp:478
4300 4303
 msgid "Click to install a new template directly."
@@ -4302,7 +4305,7 @@ msgstr "Нажмите для установки шаблона."
4302 4305
 
4303 4306
 #: configdialog.cpp:481 configdialog.cpp:537
4304 4307
 msgid "Download..."
4305
-msgstr "Загрузить..."
4308
+msgstr "Загрузить"
4306 4309
 
4307 4310
 #: configdialog.cpp:484
4308 4311
 msgid "Click to download additional templates via the Internet."
@@ -4310,7 +4313,7 @@ msgstr "Нажмите для загрузки дополнительных ша
4310 4313
 
4311 4314
 #: configdialog.cpp:487
4312 4315
 msgid "Delete..."
4313
-msgstr "Удалить..."
4316
+msgstr "Удалить"
4314 4317
 
4315 4318
 #: configdialog.cpp:490
4316 4319
 msgid "Click to select and remove installed templates."
@@ -4346,7 +4349,7 @@ msgstr "&Ниже"
4346 4349
 
4347 4350
 #: configdialog.cpp:528
4348 4351
 msgid "&New..."
4349
-msgstr "&Новый..."
4352
+msgstr "&Новый"
4350 4353
 
4351 4354
 #: configdialog.cpp:530
4352 4355
 msgid "Click to add a new data source."
@@ -4354,7 +4357,7 @@ msgstr "Нажмите для создания нового источника 
4354 4357
 
4355 4358
 #: configdialog.cpp:531
4356 4359
 msgid "&Modify..."
4357
-msgstr "&Редактировать..."
4360
+msgstr "&Редактировать"
4358 4361
 
4359 4362
 #: configdialog.cpp:533
4360 4363
 msgid "Click to modify the selected data source."
@@ -4390,7 +4393,7 @@ msgstr "Вернуть из долга"
4390 4393
 
4391 4394
 #: loanview.cpp:76
4392 4395
 msgid "Modify Loan..."
4393
-msgstr "Редактировать долг..."
4396
+msgstr "Редактировать долг"
4394 4397
 
4395 4398
 #: loanview.cpp:93
4396 4399
 msgid "Borrower (Sort by Count)"
@@ -4556,7 +4559,7 @@ msgstr "Если отмечено, будет проведен многокра
4556 4559
 
4557 4560
 #: fetchdialog.cpp:138
4558 4561
 msgid "Edit List..."
4559
-msgstr "Редактировать список..."
4562
+msgstr "Редактировать список"
4560 4563
 
4561 4564
 #: fetchdialog.cpp:140
4562 4565
 msgid "Click to open a text edit box for entering or editing multiple ISBN values."
@@ -4606,11 +4609,11 @@ msgstr "Очистить все поля поиска и результаты"
4606 4609
 
4607 4610
 #: fetchdialog.cpp:298
4608 4611
 msgid "Cancelling the search..."
4609
-msgstr "Отмена поиска..."
4612
+msgstr "Отмена поиска"
4610 4613
 
4611 4614
 #: fetchdialog.cpp:313 fetchdialog.cpp:472
4612 4615
 msgid "Searching..."
4613
-msgstr "Поиск..."
4616
+msgstr "Поиск"
4614 4617
 
4615 4618
 #: fetchdialog.cpp:368
4616 4619
 msgid "The search returned no items."
@@ -4631,7 +4634,7 @@ msgstr "Никаких записей не было найдено по след
4631 4634
 
4632 4635
 #: fetchdialog.cpp:443 fetchdialog.cpp:495
4633 4636
 msgid "Fetching %1..."
4634
-msgstr "Загрузка %1..."
4637
+msgstr "Загрузка %1"
4635 4638
 
4636 4639
 #: fetchdialog.cpp:528 fetchdialog.cpp:708
4637 4640
 msgid "No Internet sources are available for your current collection type."
@@ -4647,7 +4650,7 @@ msgstr "<qt>Введите значения ISBN/UPC, по одному в ст
4647 4650
 
4648 4651
 #: fetchdialog.cpp:604
4649 4652
 msgid "&Load From File..."
4650
-msgstr "&Загрузить из файла..."
4653
+msgstr "&Загрузить из файла"
4651 4654
 
4652 4655
 #: fetchdialog.cpp:605
4653 4656
 msgid "<qt>Load the list from a text file.</qt>"
@@ -4805,15 +4808,15 @@ msgstr "Калимуллин Артур, Песоцкий Денис"
4805 4808
 msgid ""
4806 4809
 "_: EMAIL OF TRANSLATORS\n"
4807 4810
 "Your emails"
4808
-msgstr "kalimullin@gmail.com, St.MPA3b@gmail.com"
4811
+msgstr "kalimullin@gmail.com, denis@kde.ru"
4809 4812
 
4810 4813
 #: entrymerger.cpp:35
4811 4814
 msgid "Merging entries..."
4812
-msgstr "Объединение записей..."
4815
+msgstr "Объединение записей"
4813 4816
 
4814 4817
 #: entrymerger.cpp:49
4815 4818
 msgid "Total merged/scanned entries: %1/%2"
4816
-msgstr "Всего записей объединено/просканировано: %1"
4819
+msgstr "Всего записей объединено/просканировано: %1/%2"
4817 4820
 
4818 4821
 #: tips.cpp:3
4819 4822
 msgid ""
@@ -4823,7 +4826,7 @@ msgid ""
4823 4826
 "<p>Any other field which allows multiple values should be entered the\n"
4824 4827
 "same way, with a semi-colon (;) separating each value.</p>\n"
4825 4828
 msgstr ""
4826
-"<p>...что если книга имеет больше, чем одного автора, то вам следует "
4829
+"<p>что если книга имеет больше, чем одного автора, то вам следует "
4827 4830
 "разделять\n"
4828 4831
 "точкой с запятой (;). Таким образом, Tellico будет разделять их имена.</p>\n"
4829 4832
 "<p>Любое другое поле также поддерживает эту функцию. Для этого вам следует\n"
@@ -4835,7 +4838,7 @@ msgid ""
4835 4838
 "<p>...that you can change which fields are shown in the list view by\n"
4836 4839
 "right-clicking on the column header.\n"
4837 4840
 msgstr ""
4838
-"<p>...что вы можете выбрать какие поля следует показывать в списке записей,\n"
4841
+"<p>что вы можете выбрать какие поля следует показывать в списке записей,\n"
4839 4842
 "кликнув правой кнопкой мыши на заголовке \"таблицы\".\n"
4840 4843
 
4841 4844
 #: tips.cpp:16
@@ -4846,7 +4849,7 @@ msgid ""
4846 4849
 "position of the field in the list, which affects the placement in the entry\n"
4847 4850
 "editor.</p>\n"
4848 4851
 msgstr ""
4849
-"<p>...что вы можете добавлять, редактировать или удалять поля в коллекции,\n"
4852
+"<p>что вы можете добавлять, редактировать или удалять поля в коллекции,\n"
4850 4853
 "используя Редактор полей. Кнопки стрелок позволяют вам менять позицию полей "
4851 4854
 "в списке,\n"
4852 4855
 "которая влияет на расстановку в Редакторе записей.</p>\n"
@@ -4861,7 +4864,7 @@ msgid ""
4861 4864
 "\"contains\" \"Science Fiction\" (no quotes) and the second rule to\n"
4862 4865
 "have \"Read\" \"does not contain\" \"true\" (no quotes).</p>\n"
4863 4866
 msgstr ""
4864
-"<p>...что если вы хотите отфильтровать записи по полю \"Выбор да/нет\",\n"
4867
+"<p>что если вы хотите отфильтровать записи по полю \"Выбор да/нет\",\n"
4865 4868
 "то должно использоваться значение \"да\". Например, если вы хотите "
4866 4869
 "посмотреть, какие детективы вы ещё не читали,\n"
4867 4870
 "нажмите кнопку \"Соответствует всему следующему\",\n"
@@ -4876,7 +4879,7 @@ msgid ""
4876 4879
 "<p>To show only books which are by Weber or Bujold, for example, then\n"
4877 4880
 "type \"weber|bujold\" (no quotes) in the filter box.</p>\n"
4878 4881
 msgstr ""
4879
-"<p>...что если в быстром фильтре используется символ, не входящий в слова "
4882
+"<p>что если в быстром фильтре используется символ, не входящий в слова "
4880 4883
 "(напр., ^)\n"
4881 4884
 "текст интерпретируется как регулярное выражение.</p>\n"
4882 4885
 "<p>Например, чтобы посмотреть только книги, которые написали Пушкин и "
@@ -4888,7 +4891,7 @@ msgid ""
4888 4891
 "<p>...that you can edit more than one entry at a time, by holding down\n"
4889 4892
 "the Shift or Ctrl key and selecting multiple entries.</p>\n"
4890 4893
 msgstr ""
4891
-"<p>...что за один раз вы можете отредактировать больше, чем одно поле.\n"
4894
+"<p>что за один раз вы можете отредактировать больше, чем одно поле.\n"
4892 4895
 "Для этого выделите несколько полей, зажимая клавиши Shift или Ctrl.</p>\n"
4893 4896
 
4894 4897
 #: tips.cpp:45
@@ -4896,7 +4899,7 @@ msgid ""
4896 4899
 "<p>...that you can convert an existing book collection to a bibliography,\n"
4897 4900
 "which can then be exported to bibtex or Bibtexml format.</p>\n"
4898 4901
 msgstr ""
4899
-"<p>...что вы можете конвертировать текущую коллекцию книг в библиографию,\n"
4902
+"<p>что вы можете конвертировать текущую коллекцию книг в библиографию,\n"
4900 4903
 "которая может быть экспортирована в формат Bibtex или Bibtexml.</p>\n"
4901 4904
 
4902 4905
 #: tips.cpp:50
@@ -4904,7 +4907,7 @@ msgid ""
4904 4907
 "<p>...that you can add, edit, and delete string macros for bibliographies.</"
4905 4908
 "p>\n"
4906 4909
 msgstr ""
4907
-"<p>...что вы можете добавлять, редактировать и удалять строковые макросы для "
4910
+"<p>что вы можете добавлять, редактировать и удалять строковые макросы для "
4908 4911
 "библиографий.</p>\n"
4909 4912
 
4910 4913
 #: tips.cpp:54
@@ -4915,7 +4918,7 @@ msgid ""
4915 4918
 "editors\n"
4916 4919
 "to be sorted or printed together, for example.</p>\n"
4917 4920
 msgstr ""
4918
-"<p>...что если более чем одно поле форматируется как \"имя\", то в "
4921
+"<p>что если более чем одно поле форматируется как \"имя\", то в "
4919 4922
 "коллекцию\n"
4920 4923
 "добавляется дополнительная группа \"Люди\", например, для сортировки и "
4921 4924
 "печати вместе.</p>\n"
@@ -4927,7 +4930,7 @@ msgid ""
4927 4930
 "CSS\n"
4928 4931
 "within the stylesheet governs things like the font, the margins, etc.</p>\n"
4929 4932
 msgstr ""
4930
-"<p>...что вы можете менять внешний вид, печатаемых отчетов, редактируя\n"
4933
+"<p>что вы можете менять внешний вид, печатаемых отчетов, редактируя\n"
4931 4934
 "файл <tt>tellico-printing.xsl</tt>. Этот файл создает HTML и CSS\n"
4932 4935
 "с такими элементами как шрифт, размер и т.д. </p>\n"
4933 4936
 
@@ -4936,12 +4939,12 @@ msgid ""
4936 4939
 "<p>...that you can import using any generic XSL stylesheet which\n"
4937 4940
 "outputs a valid Tellico XML file.</p>\n"
4938 4941
 msgstr ""
4939
-"<p>...что вы можете импортировать, используя стандартный\n"
4942
+"<p>что вы можете импортировать, используя стандартный\n"
4940 4943
 "лист стилей XSL, на выходе получая правильный файл Tellico XML.</p>\n"
4941 4944
 
4942 4945
 #: tips.cpp:71
4943 4946
 msgid "<p>...that double-clicking an entry item opens the Entry Editor.</p>\n"
4944
-msgstr "<p>...что двойной щелчок на записи открывает редактор записей.</p>\n"
4947
+msgstr "<p>что двойной щелчок на записи открывает редактор записей.</p>\n"
4945 4948
 
4946 4949
 #: tips.cpp:75
4947 4950
 msgid ""
@@ -4949,7 +4952,7 @@ msgid ""
4949 4952
 "as\n"
4950 4953
 "&lt;b&gt;bold&lt;/b&gt; or &lt;i&gt;italic&lt;/i&gt;.</p>\n"
4951 4954
 msgstr ""
4952
-"<p>...что в любое поле типа \"Большой текст\" вы можете добавлять теги HTML, "
4955
+"<p>что в любое поле типа \"Большой текст\" вы можете добавлять теги HTML, "
4953 4956
 "такие как \n"
4954 4957
 "&lt;b&gt;жирный шрифт&lt;/b&gt; или &lt;i&gt;курсивный&lt;/i&gt;.</p>\n"
4955 4958
 
@@ -4958,7 +4961,7 @@ msgid ""
4958 4961
 "<p>...that in the Detailed View, you can press a letter on the\n"
4959 4962
 "keyboard to skip to the next entry that starts with that letter.</p>\n"
4960 4963
 msgstr ""
4961
-"<p>...что в подробном виде вы можете нажать кнопку буквы на клавиатуре для\n"
4964
+"<p>что в подробном виде вы можете нажать кнопку буквы на клавиатуре для\n"
4962 4965
 "перехода к записи, начинающейся с этой буквы.</p>\n"
4963 4966
 
4964 4967
 #: tips.cpp:85
@@ -4973,9 +4976,9 @@ msgid ""
4973 4976
 "types by respecting proper sorting at the same time. Consider for example\n"
4974 4977
 "a number field followed by a text subfield with entries 3b, 14a.</p>\n"
4975 4978
 msgstr ""
4976
-"<p>...что вы можете использовать \"зависимые\" поля для комбинации\n"
4979
+"<p>что вы можете использовать \"зависимые\" поля для комбинации\n"
4977 4980
 "нескольких раздельных полей в одно. Просто выберите тип \"зависимый\" \n"
4978
-"и используйте описание вроде \"Значение: %{поле1}%{поле2}\", где %{...}\n"
4981
+"и используйте описание вроде \"Значение: %{поле1}%{поле2}\", где %{}\n"
4979 4982
 "заменяется на значение поля. Это полезно для использование различных\n"
4980 4983
 "полей в одном поле, т.е. для лучшей группировки и для комбинации полей\n"
4981 4984
 "различных типов с приоритетом правильной сортировки. Пример -\n"

+ 1
- 1
src/borrower.h View File

@@ -78,7 +78,7 @@ public:
78 78
   const TQString& name() const { return m_name; }
79 79
   const LoanVec& loans() const { return m_loans; }
80 80
   bool isEmpty() const { return m_loans.isEmpty(); }
81
-  int count() const { return m_loans.count(); }
81
+  size_t count() const { return m_loans.count(); }
82 82
 
83 83
   Data::LoanPtr loan(Data::ConstEntryPtr entry);
84 84
   void addLoan(Data::LoanPtr loan);

+ 1
- 1
src/borroweritem.cpp View File

@@ -25,7 +25,7 @@ BorrowerItem::BorrowerItem(GUI::ListView* parent_, Data::BorrowerPtr borrower_)
25 25
   setPixmap(0, SmallIcon(TQString::fromLatin1("kaddressbook")));
26 26
 }
27 27
 
28
-int BorrowerItem::count() const {
28
+size_t BorrowerItem::count() const {
29 29
   return m_borrower ? m_borrower->count() : GUI::CountedItem::count();
30 30
 }
31 31
 

+ 1
- 1
src/borroweritem.h View File

@@ -29,7 +29,7 @@ public:
29 29
   virtual bool isBorrowerItem() const { return true; }
30 30
   Data::BorrowerPtr borrower() { return m_borrower; }
31 31
 
32
-  virtual int count() const;
32
+  virtual size_t count() const;
33 33
   virtual Data::EntryVec entries() const;
34 34
 
35 35
 private:

+ 4
- 0
src/collection.cpp View File

@@ -878,6 +878,9 @@ bool Collection::mergeEntry(EntryPtr e1, EntryPtr e2, bool overwrite_, bool askU
878 878
       if(ret) {
879 879
         e1->setField(field, vals1.join(TQString::fromLatin1("; ")));
880 880
       }
881
+// remove the merging due to use comments
882
+// maybe in the future have a more intelligent way
883
+#if 0
881 884
     } else if(field->flags() & Data::Field::AllowMultiple) {
882 885
       // if field F allows multiple values and not a Table (see above case),
883 886
       // e1's F values = (e1's F values) U (e2's F values) (union)
@@ -894,6 +897,7 @@ bool Collection::mergeEntry(EntryPtr e1, EntryPtr e2, bool overwrite_, bool askU
894 897
 //      items1.sort();
895 898
       e1->setField(field, items1.join(TQString::fromLatin1("; ")));
896 899
       ret = true;
900
+#endif
897 901
     } else if(askUser_ && e1->field(field) != e2->field(field)) {
898 902
       int ret = Kernel::self()->askAndMerge(e1, e2, field);
899 903
       if(ret == 0) {

+ 4
- 2
src/collectionfieldsdialog.cpp View File

@@ -254,7 +254,6 @@ CollectionFieldsDialog::CollectionFieldsDialog(Data::CollPtr coll_, TQWidget* pa
254 254
 
255 255
   // need to stretch at bottom
256 256
   vbox->setStretchFactor(new TQWidget(vbox), 1);
257
-  TDEAcceleratorManager::manage(vbox);
258 257
 
259 258
   // keep a default collection
260 259
   m_defaultCollection = CollectionFactory::collection(m_coll->type(), true);
@@ -279,6 +278,9 @@ CollectionFieldsDialog::~CollectionFieldsDialog() {
279 278
 }
280 279
 
281 280
 void CollectionFieldsDialog::slotSelectInitial() {
281
+  // the accel management is here so that it doesn't cause conflicts with the
282
+  // ones explicitly set in the constructor
283
+  TDEAcceleratorManager::manage(mainWidget());
282 284
   m_fieldsBox->setSelected(0, true);
283 285
 }
284 286
 
@@ -405,7 +407,7 @@ void CollectionFieldsDialog::slotNew() {
405 407
   }
406 408
 
407 409
   TQString name = TQString::fromLatin1("custom") + TQString::number(m_newFields.count()+1);
408
-  int count = m_newFields.count() + 1;
410
+  size_t count = m_newFields.count() + 1;
409 411
   TQString title = i18n("New Field") + TQString::fromLatin1(" %1").arg(count);
410 412
   while(m_fieldsBox->findItem(title)) {
411 413
     ++count;

+ 17
- 0
src/collections/filecatalog.cpp View File

@@ -102,4 +102,21 @@ Tellico::Data::FieldVec FileCatalog::defaultFields() {
102 102
   return list;
103 103
 }
104 104
 
105
+int FileCatalog::sameEntry(Data::EntryPtr entry1_, Data::EntryPtr entry2_) const {
106
+  // equal urls are always equal, even if modification time or something is different
107
+  if(Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("url"), this) > 0) {
108
+    return 100; // good match
109
+  }
110
+  // if volume or created time is different, it can't be same entry
111
+  if(Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("volume"), this) == 0 ||
112
+     Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("created"), this) == 0 ||
113
+     Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("size"), this) == 0) {
114
+    return 0;
115
+  }
116
+  int res = Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("title"), this);
117
+  res += Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("description"), this);
118
+  res += Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("mimetype"), this);
119
+  return res;
120
+}
121
+
105 122
 #include "filecatalog.moc"

+ 2
- 1
src/collections/filecatalog.h View File

@@ -1,5 +1,5 @@
1 1
 /***************************************************************************
2
-    copyright            : (C) 2005-2006 by Robby Stephenson
2
+    copyright            : (C) 2005-2008 by Robby Stephenson
3 3
     email                : robby@periapsis.org
4 4
  ***************************************************************************/
5 5
 
@@ -30,6 +30,7 @@ public:
30 30
   FileCatalog(bool addFields, const TQString& title = TQString());
31 31
 
32 32
   virtual Type type() const { return File; }
33
+  virtual int sameEntry(Data::EntryPtr entry1, Data::EntryPtr entry2) const;
33 34
 
34 35
   static FieldVec defaultFields();
35 36
 };

+ 2
- 0
src/controller.cpp View File

@@ -434,6 +434,7 @@ void Controller::slotDeleteSelectedEntries() {
434 434
     int ret = KMessageBox::warningContinueCancel(Kernel::self()->widget(), str, i18n("Delete Entry"),
435 435
                                                  KGuiItem(i18n("&Delete"), TQString::fromLatin1("editdelete")), dontAsk);
436 436
     if(ret != KMessageBox::Continue) {
437
+      m_working = false;
437 438
       return;
438 439
     }
439 440
   } else {
@@ -448,6 +449,7 @@ void Controller::slotDeleteSelectedEntries() {
448 449
                                                      i18n("Delete Multiple Entries"),
449 450
                                                      KGuiItem(i18n("&Delete"), TQString::fromLatin1("editdelete")), dontAsk);
450 451
     if(ret != KMessageBox::Continue) {
452
+      m_working = false;
451 453
       return;
452 454
     }
453 455
   }

+ 2
- 0
src/core/Makefile.am View File

@@ -17,6 +17,8 @@ drophandler.h drophandler.cpp \
17 17
 tellico-rename.upd tellico.upd \
18 18
 tellico-1-3-update.pl
19 19
 
20
+dcopinterface_DCOPIDLNG = ALL
21
+
20 22
 kde_kcfg_DATA = tellico_config.kcfg
21 23
 
22 24
 updatedir = $(kde_datadir)/tdeconf_update

+ 24
- 24
src/core/dcopinterface_skel.cpp View File

@@ -25,11 +25,11 @@ static const char* const ApplicationInterface_ftable[16][3] = {
25 25
     { "bool", "exportHTML(TQString)", "exportHTML(TQString file)" },
26 26
     { "bool", "exportCSV(TQString)", "exportCSV(TQString file)" },
27 27
     { "bool", "exportPilotDB(TQString)", "exportPilotDB(TQString file)" },
28
-    { "TQValueList<long int>", "selectedEntries()", "selectedEntries()" },
29
-    { "TQValueList<long int>", "filteredEntries()", "filteredEntries()" },
28
+    { "TQValueList<long>", "selectedEntries()", "selectedEntries()" },
29
+    { "TQValueList<long>", "filteredEntries()", "filteredEntries()" },
30 30
     { "void", "openFile(TQString)", "openFile(TQString file)" },
31 31
     { "void", "setFilter(TQString)", "setFilter(TQString text)" },
32
-    { "bool", "showEntry(long int)", "showEntry(long int id)" },
32
+    { "bool", "showEntry(long)", "showEntry(long id)" },
33 33
     { 0, 0, 0 }
34 34
 };
35 35
 static const int ApplicationInterface_ftable_hiddens[15] = {
@@ -162,12 +162,12 @@ bool ApplicationInterface::process(const TQCString &fun, const TQByteArray &data
162 162
 	TQDataStream _replyStream( replyData, IO_WriteOnly );
163 163
 	_replyStream << exportPilotDB(arg0 );
164 164
     } break;
165
-    case 10: { // TQValueList<long int> selectedEntries()
165
+    case 10: { // TQValueList<long> selectedEntries()
166 166
 	replyType = ApplicationInterface_ftable[10][0]; 
167 167
 	TQDataStream _replyStream( replyData, IO_WriteOnly );
168 168
 	_replyStream << selectedEntries( );
169 169
     } break;
170
-    case 11: { // TQValueList<long int> filteredEntries()
170
+    case 11: { // TQValueList<long> filteredEntries()
171 171
 	replyType = ApplicationInterface_ftable[11][0]; 
172 172
 	TQDataStream _replyStream( replyData, IO_WriteOnly );
173 173
 	_replyStream << filteredEntries( );
@@ -188,8 +188,8 @@ bool ApplicationInterface::process(const TQCString &fun, const TQByteArray &data
188 188
 	replyType = ApplicationInterface_ftable[13][0]; 
189 189
 	setFilter(arg0 );
190 190
     } break;
191
-    case 14: { // bool showEntry(long int)
192
-	long int arg0;
191
+    case 14: { // bool showEntry(long)
192
+	long arg0;
193 193
 	TQDataStream arg( data, IO_ReadOnly );
194 194
 	if (arg.atEnd()) return false;
195 195
 	arg >> arg0;
@@ -233,14 +233,14 @@ namespace Tellico {
233 233
 
234 234
 static const int CollectionInterface_fhash = 11;
235 235
 static const char* const CollectionInterface_ftable[9][3] = {
236
-    { "long int", "addEntry()", "addEntry()" },
237
-    { "bool", "removeEntry(long int)", "removeEntry(long int entryID)" },
236
+    { "long", "addEntry()", "addEntry()" },
237
+    { "bool", "removeEntry(long)", "removeEntry(long entryID)" },
238 238
     { TQSTRINGLIST_OBJECT_NAME_STRING, "values(TQString)", "values(TQString fieldName)" },
239
-    { TQSTRINGLIST_OBJECT_NAME_STRING, "values(long int,TQString)", "values(long int entryID,TQString fieldName)" },
239
+    { TQSTRINGLIST_OBJECT_NAME_STRING, "values(long,TQString)", "values(long entryID,TQString fieldName)" },
240 240
     { TQSTRINGLIST_OBJECT_NAME_STRING, "bibtexKeys()", "bibtexKeys()" },
241
-    { TQSTRING_OBJECT_NAME_STRING, "bibtexKey(long int)", "bibtexKey(long int entryID)" },
242
-    { "bool", "setFieldValue(long int,TQString,TQString)", "setFieldValue(long int entryID,TQString fieldName,TQString value)" },
243
-    { "bool", "addFieldValue(long int,TQString,TQString)", "addFieldValue(long int entryID,TQString fieldName,TQString value)" },
241
+    { TQSTRING_OBJECT_NAME_STRING, "bibtexKey(long)", "bibtexKey(long entryID)" },
242
+    { "bool", "setFieldValue(long,TQString,TQString)", "setFieldValue(long entryID,TQString fieldName,TQString value)" },
243
+    { "bool", "addFieldValue(long,TQString,TQString)", "addFieldValue(long entryID,TQString fieldName,TQString value)" },
244 244
     { 0, 0, 0 }
245 245
 };
246 246
 static const int CollectionInterface_ftable_hiddens[8] = {
@@ -264,13 +264,13 @@ bool CollectionInterface::process(const TQCString &fun, const TQByteArray &data,
264 264
     }
265 265
     int* fp = fdict->find( fun );
266 266
     switch ( fp?*fp:-1) {
267
-    case 0: { // long int addEntry()
267
+    case 0: { // long addEntry()
268 268
 	replyType = CollectionInterface_ftable[0][0]; 
269 269
 	TQDataStream _replyStream( replyData, IO_WriteOnly );
270 270
 	_replyStream << addEntry( );
271 271
     } break;
272
-    case 1: { // bool removeEntry(long int)
273
-	long int arg0;
272
+    case 1: { // bool removeEntry(long)
273
+	long arg0;
274 274
 	TQDataStream arg( data, IO_ReadOnly );
275 275
 	if (arg.atEnd()) return false;
276 276
 	arg >> arg0;
@@ -287,8 +287,8 @@ bool CollectionInterface::process(const TQCString &fun, const TQByteArray &data,
287 287
 	TQDataStream _replyStream( replyData, IO_WriteOnly );
288 288
 	_replyStream << values(arg0 );
289 289
     } break;
290
-    case 3: { // TQStringList values(long int,TQString)
291
-	long int arg0;
290
+    case 3: { // TQStringList values(long,TQString)
291
+	long arg0;
292 292
 	TQString arg1;
293 293
 	TQDataStream arg( data, IO_ReadOnly );
294 294
 	if (arg.atEnd()) return false;
@@ -304,8 +304,8 @@ bool CollectionInterface::process(const TQCString &fun, const TQByteArray &data,
304 304
 	TQDataStream _replyStream( replyData, IO_WriteOnly );
305 305
 	_replyStream << bibtexKeys( );
306 306
     } break;
307
-    case 5: { // TQString bibtexKey(long int)
308
-	long int arg0;
307
+    case 5: { // TQString bibtexKey(long)
308
+	long arg0;
309 309
 	TQDataStream arg( data, IO_ReadOnly );
310 310
 	if (arg.atEnd()) return false;
311 311
 	arg >> arg0;
@@ -313,8 +313,8 @@ bool CollectionInterface::process(const TQCString &fun, const TQByteArray &data,
313 313
 	TQDataStream _replyStream( replyData, IO_WriteOnly );
314 314
 	_replyStream << bibtexKey(arg0 );
315 315
     } break;
316
-    case 6: { // bool setFieldValue(long int,TQString,TQString)
317
-	long int arg0;
316
+    case 6: { // bool setFieldValue(long,TQString,TQString)
317
+	long arg0;
318 318
 	TQString arg1;
319 319
 	TQString arg2;
320 320
 	TQDataStream arg( data, IO_ReadOnly );
@@ -328,8 +328,8 @@ bool CollectionInterface::process(const TQCString &fun, const TQByteArray &data,
328 328
 	TQDataStream _replyStream( replyData, IO_WriteOnly );
329 329
 	_replyStream << setFieldValue(arg0, arg1, arg2 );
330 330
     } break;
331
-    case 7: { // bool addFieldValue(long int,TQString,TQString)
332
-	long int arg0;
331
+    case 7: { // bool addFieldValue(long,TQString,TQString)
332
+	long arg0;
333 333
 	TQString arg1;
334 334
 	TQString arg2;
335 335
 	TQDataStream arg( data, IO_ReadOnly );

+ 30
- 7
src/core/drophandler.cpp View File

@@ -15,9 +15,13 @@
15 15
 #include "../mainwindow.h"
16 16
 #include "../tellico_kernel.h"
17 17
 #include "../tellico_debug.h"
18
+#include "../translators/bibteximporter.h"
19
+#include "../translators/risimporter.h"
18 20
 
19 21
 #include <kurldrag.h>
20 22
 #include <kmimetype.h>
23
+#include <tdeio/netaccess.h>
24
+#include <tdeio/job.h>
21 25
 
22 26
 using Tellico::DropHandler;
23 27
 
@@ -62,18 +66,37 @@ bool DropHandler::handleURL(const KURL::List& urls_) {
62 66
   bool hasUnknown = false;
63 67
   KURL::List tc, pdf, bib, ris;
64 68
   for(KURL::List::ConstIterator it = urls_.begin(); it != urls_.end(); ++it) {
65
-    KMimeType::Ptr ptr = KMimeType::findByURL(*it);
69
+    const KURL& url = *it;
70
+    KMimeType::Ptr ptr;
71
+    // findByURL doesn't work for http, so actually query
72
+    // the url itself
73
+    if(url.protocol() != TQString::fromLatin1("http")) {
74
+      ptr = KMimeType::findByURL(url);
75
+    } else {
76
+      TDEIO::MimetypeJob* job = TDEIO::mimetype(url, false /*progress*/);
77
+      TDEIO::NetAccess::synchronousRun(job, Kernel::self()->widget());
78
+      ptr = KMimeType::mimeType(job->mimetype());
79
+    }
66 80
     if(ptr->is(TQString::fromLatin1("application/x-tellico"))) {
67
-      tc << *it;
81
+      tc << url;
68 82
     } else if(ptr->is(TQString::fromLatin1("application/pdf"))) {
69
-      pdf << *it;
83
+      pdf << url;
70 84
     } else if(ptr->is(TQString::fromLatin1("text/x-bibtex")) ||
71
-              ptr->is(TQString::fromLatin1("application/x-bibtex"))) {
72
-      bib << *it;
85
+              ptr->is(TQString::fromLatin1("application/x-bibtex")) ||
86
+              ptr->is(TQString::fromLatin1("application/bibtex"))) {
87
+      bib << url;
73 88
     } else if(ptr->is(TQString::fromLatin1("application/x-research-info-systems"))) {
74
-      ris << *it;
89
+      ris << url;
90
+    } else if(url.fileName().endsWith(TQString::fromLatin1(".bib"))) {
91
+      bib << url;
92
+    } else if(url.fileName().endsWith(TQString::fromLatin1(".ris"))) {
93
+      ris << url;
94
+    } else if(ptr->is(TQString::fromLatin1("text/plain")) && Import::BibtexImporter::maybeBibtex(url)) {
95
+      bib << url;
96
+    } else if(ptr->is(TQString::fromLatin1("text/plain")) && Import::RISImporter::maybeRIS(url)) {
97
+      ris << url;
75 98
     } else {
76
-      myDebug() << "DropHandler::handleURL() - unrecognized type: " << ptr->name() << " (" << *it << ")" << endl;
99
+      myDebug() << "DropHandler::handleURL() - unrecognized type: " << ptr->name() << " (" << url << ")" << endl;
77 100
       hasUnknown = true;
78 101
     }
79 102
   }

+ 8
- 0
src/document.cpp View File

@@ -15,6 +15,7 @@
15 15
 #include "mainwindow.h" // needed for calling fileSave()
16 16
 #include "collectionfactory.h"
17 17
 #include "translators/tellicoimporter.h"
18
+#include "translators/tellicosaximporter.h"
18 19
 #include "translators/tellicozipexporter.h"
19 20
 #include "translators/tellicoxmlexporter.h"
20 21
 #include "collection.h"
@@ -109,7 +110,12 @@ bool Document::openDocument(const KURL& url_) {
109 110
   }
110 111
 
111 112
   delete m_importer;
113
+#ifdef SAX_SUPPORT
114
+  myLog() << "Document::openDocument() - using SAX loader" << endl;
115
+  m_importer = new Import::TellicoSaxImporter(url_, m_loadAllImages);
116
+#else
112 117
   m_importer = new Import::TellicoImporter(url_, m_loadAllImages);
118
+#endif
113 119
 
114 120
   CollPtr coll = m_importer->collection();
115 121
   // delayed image loading only works for zip files
@@ -146,6 +152,8 @@ bool Document::openDocument(const KURL& url_) {
146 152
     TQTimer::singleShot(500, this, TQT_SLOT(slotLoadAllImages()));
147 153
   } else {
148 154
     emit signalCollectionImagesLoaded(m_coll);
155
+    m_importer->deleteLater();
156
+    m_importer = 0;
149 157
   }
150 158
   return true;
151 159
 }

+ 5
- 0
src/document.h View File

@@ -27,6 +27,7 @@
27 27
 namespace Tellico {
28 28
   namespace Import {
29 29
     class TellicoImporter;
30
+    class TellicoSaxImporter;
30 31
   }
31 32
   namespace Data {
32 33
 
@@ -227,7 +228,11 @@ private:
227 228
   bool m_loadAllImages : 1;
228 229
   KURL m_url;
229 230
   bool m_validFile : 1;
231
+#ifdef SAX_SUPPORT
232
+  TQGuardedPtr<Import::TellicoSaxImporter> m_importer;
233
+#else
230 234
   TQGuardedPtr<Import::TellicoImporter> m_importer;
235
+#endif
231 236
   bool m_cancelImageWriting : 1;
232 237
   int m_fileFormat;
233 238
   bool m_allImagesOnDisk : 1;

+ 16
- 1
src/entry.cpp View File

@@ -252,8 +252,13 @@ bool Entry::setField(const TQString& name_, const TQString& value_) {
252 252
   }
253 253
 
254 254
   // the string store is probable only useful for fields with auto-completion or choice/number/bool
255
+  bool shareType = f->type() == Field::Choice ||
256
+                   f->type() == Field::Bool ||
257
+                   f->type() == Field::Image ||
258
+                   f->type() == Field::Rating ||
259
+                   f->type() == Field::Number;
255 260
   if(!(f->flags() & Field::AllowMultiple) &&
256
-     ((f->type() == Field::Choice || f->type() == Field::Bool || f->type() == Field::Number) ||
261
+     (shareType ||
257 262
       (f->type() == Field::Line && (f->flags() & Field::AllowCompletion)))) {
258 263
     m_fields.insert(Tellico::shareString(name_), Tellico::shareString(value_));
259 264
   } else {
@@ -415,6 +420,16 @@ int Entry::compareValues(EntryPtr e1, EntryPtr e2, FieldPtr f) {
415 420
   if(f->name() == Latin1Literal("lccn") && LCCNValidator::formalize(s1) == LCCNValidator::formalize(s2)) {
416 421
     return 5;
417 422
   }
423
+  if(f->name() == Latin1Literal("arxiv")) {
424
+    // normalize and unVersion arxiv ID
425
+    s1.remove(TQRegExp(TQString::fromLatin1("^arxiv:"), false));
426
+    s1.remove(TQRegExp(TQString::fromLatin1("v\\d+$")));
427
+    s2.remove(TQRegExp(TQString::fromLatin1("^arxiv:"), false));
428
+    s2.remove(TQRegExp(TQString::fromLatin1("v\\d+$")));
429
+    if(s1 == s2) {
430
+      return 5;
431
+    }
432
+  }
418 433
   if(f->formatFlag() == Field::FormatName) {
419 434
     s1 = e1->field(f, true).lower();
420 435
     s2 = e2->field(f, true).lower();

+ 6
- 5
src/entry.h View File

@@ -84,11 +84,6 @@ public:
84 84
    * The assignment operator is overloaded, since the id must be different.
85 85
    */
86 86
   Entry& operator=(const Entry& other);
87
-  /**
88
-   * two entries are equal if all their field values are equal, except for
89
-   * file catalogs which match on the url only
90
-   */
91
-  bool operator==(const Entry& other);
92 87
 
93 88
   ~Entry();
94 89
 
@@ -231,6 +226,12 @@ public:
231 226
   static TQString dependentValue(ConstEntryPtr e, const TQString& formatString, bool formatted);
232 227
 
233 228
 private:
229
+  /**
230
+   * two entries are equal if all their field values are equal, except for
231
+   * file catalogs which match on the url only
232
+   */
233
+  bool operator==(const Entry& other);
234
+
234 235
   CollPtr m_coll;
235 236
   long m_id;
236 237
   StringMap m_fields;

+ 1
- 1
src/entrygroupitem.cpp View File

@@ -131,7 +131,7 @@ TQString EntryGroupItem::key(int col_, bool) const {
131 131
   return m_key;
132 132
 }
133 133
 
134
-int EntryGroupItem::count() const {
134
+size_t EntryGroupItem::count() const {
135 135
   return m_group ? m_group->count() : GUI::CountedItem::count();
136 136
 }
137 137
 

+ 1
- 1
src/entrygroupitem.h View File

@@ -51,7 +51,7 @@ public:
51 51
    */
52 52
   virtual TQString key(int col, bool) const;
53 53
 
54
-  virtual int count() const;
54
+  virtual size_t count() const;
55 55
   virtual Data::EntryVec entries() const;
56 56
 
57 57
 private:

+ 14
- 1
src/entryview.cpp View File

@@ -26,6 +26,7 @@
26 26
 #include "document.h"
27 27
 #include "latin1literal.h"
28 28
 #include "../core/drophandler.h"
29
+#include "../tellico_debug.h"
29 30
 
30 31
 #include <kstandarddirs.h>
31 32
 #include <krun.h>
@@ -37,10 +38,22 @@
37 38
 #include <tdelocale.h>
38 39
 
39 40
 #include <tqfile.h>
41
+#include <tqclipboard.h>
40 42
 
41 43
 using Tellico::EntryView;
44
+using Tellico::EntryViewWidget;
42 45
 
43
-EntryView::EntryView(TQWidget* parent_, const char* name_) : TDEHTMLPart(parent_, name_),
46
+EntryViewWidget::EntryViewWidget(TDEHTMLPart* part, TQWidget* parent)
47
+    : TDEHTMLView(part, parent) {}
48
+
49
+// for the life of me, I could not figure out how to call the actual
50
+// TDEHTMLPartBrowserExtension::copy() slot, so this will have to do
51
+void EntryViewWidget::copy() {
52
+  TQString text = part()->selectedText();
53
+  TQApplication::clipboard()->setText(text, TQClipboard::Clipboard);
54
+}
55
+
56
+EntryView::EntryView(TQWidget* parent_, const char* name_) : TDEHTMLPart(new EntryViewWidget(this, parent_), parent_, name_),
44 57
     m_entry(0), m_handler(0), m_run(0), m_tempFile(0), m_useGradientImages(true), m_checkCommonFile(true) {
45 58
   setJScriptEnabled(false);
46 59
   setJavaEnabled(false);

+ 11
- 0
src/entryview.h View File

@@ -20,6 +20,7 @@ class KTempFile;
20 20
 #include "datavectors.h"
21 21
 
22 22
 #include <tdehtml_part.h>
23
+#include <tdehtmlview.h>
23 24
 
24 25
 #include <tqguardedptr.h>
25 26
 
@@ -103,5 +104,15 @@ private:
103 104
   bool m_checkCommonFile : 1;
104 105
 };
105 106
 
107
+// stupid naming on my part, I need to subclass the view to
108
+// add a slot. EntryView is really a part though
109
+class EntryViewWidget : public TDEHTMLView {
110
+Q_OBJECT
111
+public:
112
+  EntryViewWidget(TDEHTMLPart* part, TQWidget* parent);
113
+public slots:
114
+  void copy();
115
+};
116
+
106 117
 } //end namespace
107 118
 #endif

+ 3
- 1
src/fetch/Makefile.am View File

@@ -10,7 +10,7 @@ libfetch_a_SOURCES = amazonfetcher.cpp animenfofetcher.cpp arxivfetcher.cpp \
10 10
 	discogsfetcher.cpp entrezfetcher.cpp execexternalfetcher.cpp fetcher.cpp fetchmanager.cpp \
11 11
 	gcstarpluginfetcher.cpp googlescholarfetcher.cpp ibsfetcher.cpp imdbfetcher.cpp \
12 12
 	isbndbfetcher.cpp messagehandler.cpp srufetcher.cpp yahoofetcher.cpp z3950connection.cpp \
13
-	z3950fetcher.cpp
13
+	z3950fetcher.cpp amazonrequest.cpp hmac_sha2.c sha2.c
14 14
 
15 15
 ####### tdevelop will overwrite this part!!! (end)############
16 16
 
@@ -40,6 +40,8 @@ citebasefetcher.h citebasefetcher.cpp \
40 40
 bibsonomyfetcher.h bibsonomyfetcher.cpp \
41 41
 googlescholarfetcher.h googlescholarfetcher.cpp \
42 42
 discogsfetcher.h discogsfetcher.cpp \
43
+amazonrequest.h amazonrequest.cpp \
44
+hmac_sha2.h hmac_sha2.c sha2.h sha2.c \
43 45
 z3950-servers.cfg
44 46
 
45 47
 appdir = $(kde_datadir)/tellico

+ 77
- 40
src/fetch/amazonfetcher.cpp View File

@@ -12,6 +12,7 @@
12 12
  ***************************************************************************/
13 13
 
14 14
 #include "amazonfetcher.h"
15
+#include "amazonrequest.h"
15 16
 #include "messagehandler.h"
16 17
 #include "../translators/xslthandler.h"
17 18
 #include "../translators/tellicoimporter.h"
@@ -47,7 +48,6 @@
47 48
 namespace {
48 49
   static const int AMAZON_RETURNS_PER_REQUEST = 10;
49 50
   static const int AMAZON_MAX_RETURNS_TOTAL = 20;
50
-  static const char* AMAZON_ACCESS_KEY = "0834VQ4S71KYPVSYQD02";
51 51
   static const char* AMAZON_ASSOC_TOKEN = "tellico-20";
52 52
   // need to have these in the translation file
53 53
   static const char* linkText = I18N_NOOP("Amazon Link");
@@ -84,7 +84,6 @@ const AmazonFetcher::SiteData& AmazonFetcher::siteData(int site_) {
84 84
 
85 85
 AmazonFetcher::AmazonFetcher(Site site_, TQObject* parent_, const char* name_)
86 86
     : Fetcher(parent_, name_), m_xsltHandler(0), m_site(site_), m_imageSize(MediumImage),
87
-      m_access(TQString::fromLatin1(AMAZON_ACCESS_KEY)),
88 87
       m_assoc(TQString::fromLatin1(AMAZON_ASSOC_TOKEN)), m_addLinkField(true), m_limit(AMAZON_MAX_RETURNS_TOTAL),
89 88
       m_countOffset(0), m_page(1), m_total(-1), m_numResults(0), m_job(0), m_started(false) {
90 89
   m_name = siteData(site_).title;
@@ -109,7 +108,8 @@ bool AmazonFetcher::canFetch(int type) const {
109 108
          || type == Data::Collection::Bibtex
110 109
          || type == Data::Collection::Album
111 110
          || type == Data::Collection::Video
112
-         || type == Data::Collection::Game;
111
+         || type == Data::Collection::Game
112
+         || type == Data::Collection::BoardGame;
113 113
 }
114 114
 
115 115
 void AmazonFetcher::readConfigHook(const TDEConfigGroup& config_) {
@@ -117,6 +117,10 @@ void AmazonFetcher::readConfigHook(const TDEConfigGroup& config_) {
117 117
   if(!s.isEmpty()) {
118 118
     m_access = s;
119 119
   }
120
+  s = config_.readEntry("SecretKey");
121
+  if(!s.isEmpty()) {
122
+    m_amazonKey = s;
123
+  }
120 124
   s = config_.readEntry("AssocToken");
121 125
   if(!s.isEmpty()) {
122 126
     m_assoc = s;
@@ -152,35 +156,41 @@ void AmazonFetcher::doSearch() {
152 156
 //  myDebug() << "AmazonFetcher::doSearch() - getting page " << m_page << endl;
153 157
 
154 158
   const SiteData& data = siteData(m_site);
155
-  KURL u = data.url;
156
-  u.addQueryItem(TQString::fromLatin1("Service"),        TQString::fromLatin1("AWSECommerceService"));
157
-  u.addQueryItem(TQString::fromLatin1("AssociateTag"),   m_assoc);
158
-  u.addQueryItem(TQString::fromLatin1("AWSAccessKeyId"), m_access);
159
-  u.addQueryItem(TQString::fromLatin1("Operation"),      TQString::fromLatin1("ItemSearch"));
160
-  u.addQueryItem(TQString::fromLatin1("ResponseGroup"),  TQString::fromLatin1("Large"));
161
-  u.addQueryItem(TQString::fromLatin1("ItemPage"),       TQString::number(m_page));
162
-  u.addQueryItem(TQString::fromLatin1("Version"),        TQString::fromLatin1("2007-10-29"));
159
+
160
+  TQMap<TQString, TQString> params;
161
+  params.insert(TQString::fromLatin1("Service"),        TQString::fromLatin1("AWSECommerceService"));
162
+  params.insert(TQString::fromLatin1("AssociateTag"),   m_assoc);
163
+  params.insert(TQString::fromLatin1("AWSAccessKeyId"), m_access);
164
+  params.insert(TQString::fromLatin1("Operation"),      TQString::fromLatin1("ItemSearch"));
165
+  params.insert(TQString::fromLatin1("ResponseGroup"),  TQString::fromLatin1("Large"));
166
+  params.insert(TQString::fromLatin1("ItemPage"),       TQString::number(m_page));
167
+  params.insert(TQString::fromLatin1("Version"),        TQString::fromLatin1("2007-10-29"));
163 168
 
164 169
   const int type = Kernel::self()->collectionType();
165 170
   switch(type) {
166 171
     case Data::Collection::Book:
167 172
     case Data::Collection::ComicBook:
168 173
     case Data::Collection::Bibtex:
169
-      u.addQueryItem(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Books"));
170
-      u.addQueryItem(TQString::fromLatin1("SortIndex"), TQString::fromLatin1("relevancerank"));
174
+      params.insert(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Books"));
175
+      params.insert(TQString::fromLatin1("SortIndex"), TQString::fromLatin1("relevancerank"));
171 176
       break;
172 177
 
173 178
     case Data::Collection::Album:
174
-      u.addQueryItem(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Music"));
179
+      params.insert(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Music"));
175 180
       break;
176 181
 
177 182
     case Data::Collection::Video:
178
-      u.addQueryItem(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Video"));
179
-      u.addQueryItem(TQString::fromLatin1("SortIndex"), TQString::fromLatin1("relevancerank"));
183
+      params.insert(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Video"));
184
+      params.insert(TQString::fromLatin1("SortIndex"), TQString::fromLatin1("relevancerank"));
180 185
       break;
181 186
 
182 187
     case Data::Collection::Game:
183
-      u.addQueryItem(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("VideoGames"));
188
+      params.insert(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("VideoGames"));
189
+      break;
190
+
191
+    case Data::Collection::BoardGame:
192
+      params.insert(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Toys"));
193
+      params.insert(TQString::fromLatin1("SortIndex"), TQString::fromLatin1("relevancerank"));
184 194
       break;
185 195
 
186 196
     case Data::Collection::Coin:
@@ -188,7 +198,6 @@ void AmazonFetcher::doSearch() {
188 198
     case Data::Collection::Wine:
189 199
     case Data::Collection::Base:
190 200
     case Data::Collection::Card:
191
-    default:
192 201
       message(i18n("%1 does not allow searching for this collection type.").arg(source()), MessageHandler::Warning);
193 202
       stop();
194 203
       return;
@@ -207,29 +216,28 @@ void AmazonFetcher::doSearch() {
207 216
 
208 217
   switch(m_key) {
209 218
     case Title:
210
-      u.addQueryItem(TQString::fromLatin1("Title"), value, mib);
219
+      params.insert(TQString::fromLatin1("Title"), value);
211 220
       break;
212 221
 
213 222
     case Person:
214 223
       if(type == Data::Collection::Video) {
215
-        u.addQueryItem(TQString::fromLatin1("Actor"),        value, mib);
216
-        u.addQueryItem(TQString::fromLatin1("Director"),     value, mib);
224
+        params.insert(TQString::fromLatin1("Actor"),        value);
225
+        params.insert(TQString::fromLatin1("Director"),     value);
217 226
       } else if(type == Data::Collection::Album) {
218
-        u.addQueryItem(TQString::fromLatin1("Artist"),       value, mib);
227
+        params.insert(TQString::fromLatin1("Artist"),       value);
219 228
       } else if(type == Data::Collection::Game) {
220
-        u.addQueryItem(TQString::fromLatin1("Manufacturer"), value, mib);
229
+        params.insert(TQString::fromLatin1("Manufacturer"), value);
221 230
       } else { // books and bibtex
222 231
         TQString s = TQString::fromLatin1("author:%1 or publisher:%2").arg(value, value);
223
-//        u.addQueryItem(TQString::fromLatin1("Author"),       value, mib);
224
-//        u.addQueryItem(TQString::fromLatin1("Publisher"),    value, mib);
225
-        u.addQueryItem(TQString::fromLatin1("Power"),    s, mib);
232
+//        params.insert(TQString::fromLatin1("Author"),       value, mib);
233
+//        params.insert(TQString::fromLatin1("Publisher"),    value, mib);
234
+        params.insert(TQString::fromLatin1("Power"),    s);
226 235
       }
227 236
       break;
228 237
 
229 238
     case ISBN:
230 239
       {
231
-        u.removeQueryItem(TQString::fromLatin1("Operation"));
232
-        u.addQueryItem(TQString::fromLatin1("Operation"), TQString::fromLatin1("ItemLookup"));
240
+        params.insert(TQString::fromLatin1("Operation"), TQString::fromLatin1("ItemLookup"));
233 241
 
234 242
         TQString s = m_value; // not encValue!!!
235 243
         s.remove('-');
@@ -260,47 +268,46 @@ void AmazonFetcher::doSearch() {
260 268
             }
261 269
           }
262 270
           // the default search is by ASIN, which prohibits SearchIndex
263
-          u.removeQueryItem(TQString::fromLatin1("SearchIndex"));
271
+          params.remove(TQString::fromLatin1("SearchIndex"));
264 272
         }
265 273
         // limit to first 10
266 274
         while(isbns.size() > 10) {
267 275
           isbns.pop_back();
268 276
         }
269
-        u.addQueryItem(TQString::fromLatin1("ItemId"), isbns.join(TQString::fromLatin1(",")));
277
+        params.insert(TQString::fromLatin1("ItemId"), isbns.join(TQString::fromLatin1(",")));
270 278
         if(isbn13) {
271
-          u.addQueryItem(TQString::fromLatin1("IdType"), TQString::fromLatin1("EAN"));
279
+          params.insert(TQString::fromLatin1("IdType"), TQString::fromLatin1("EAN"));
272 280
         }
273 281
       }
274 282
       break;
275 283
 
276 284
     case UPC:
277 285
       {
278
-        u.removeQueryItem(TQString::fromLatin1("Operation"));
279
-        u.addQueryItem(TQString::fromLatin1("Operation"), TQString::fromLatin1("ItemLookup"));
286
+        params.insert(TQString::fromLatin1("Operation"), TQString::fromLatin1("ItemLookup"));
280 287
         // US allows UPC, all others are EAN
281 288
         if(m_site == US) {
282
-          u.addQueryItem(TQString::fromLatin1("IdType"), TQString::fromLatin1("UPC"));
289
+          params.insert(TQString::fromLatin1("IdType"), TQString::fromLatin1("UPC"));
283 290
         } else {
284
-          u.addQueryItem(TQString::fromLatin1("IdType"), TQString::fromLatin1("EAN"));
291
+          params.insert(TQString::fromLatin1("IdType"), TQString::fromLatin1("EAN"));
285 292
         }
286 293
         TQString s = m_value; // not encValue!!!
287 294
         s.remove('-');
288 295
         // limit to first 10
289 296
         s.replace(TQString::fromLatin1("; "), TQString::fromLatin1(","));
290 297
         s = s.section(',', 0, 9);
291
-        u.addQueryItem(TQString::fromLatin1("ItemId"), s);
298
+        params.insert(TQString::fromLatin1("ItemId"), s);
292 299
       }
293 300
       break;
294 301
 
295 302
     case Keyword:
296
-      u.addQueryItem(TQString::fromLatin1("Keywords"), m_value, mib);
303
+      params.insert(TQString::fromLatin1("Keywords"), value);
297 304
       break;
298 305
 
299 306
     case Raw:
300 307
       {
301 308
         TQString key = value.section('=', 0, 0).stripWhiteSpace();
302 309
         TQString str = value.section('=', 1).stripWhiteSpace();
303
-        u.addQueryItem(key, str, mib);
310
+        params.insert(key, str);
304 311
       }
305 312
       break;
306 313
 
@@ -309,9 +316,11 @@ void AmazonFetcher::doSearch() {
309 316
       stop();
310 317
       return;
311 318
   }
312
-//  myDebug() << "AmazonFetcher::search() - url: " << u.url() << endl;
319
+  AmazonRequest request(siteData(m_site).url, m_amazonKey);
320
+  KURL newUrl = request.signedRequest(params);
321
+//  myDebug() << "AmazonFetcher::search() - url: " << newUrl.url() << endl;
313 322
 
314
-  m_job = TDEIO::get(u, false, false);
323
+  m_job = TDEIO::get(newUrl, false, false);
315 324
   connect(m_job, TQT_SIGNAL(data(TDEIO::Job*, const TQByteArray&)),
316 325
           TQT_SLOT(slotData(TDEIO::Job*, const TQByteArray&)));
317 326
   connect(m_job, TQT_SIGNAL(result(TDEIO::Job*)),
@@ -520,6 +529,12 @@ void AmazonFetcher::slotComplete(TDEIO::Job* job_) {
520 529
                + entry->field(TQString::fromLatin1("year"));
521 530
         break;
522 531
 
532
+      case Data::Collection::BoardGame:
533
+        desc = entry->field(TQString::fromLatin1("publisher"))
534
+               + TQChar('/')
535
+               + entry->field(TQString::fromLatin1("year"));
536
+        break;
537
+
523 538
       default:
524 539
         break;
525 540
     }
@@ -889,11 +904,25 @@ AmazonFetcher::ConfigWidget::ConfigWidget(TQWidget* parent_, const AmazonFetcher
889 904
   TQWhatsThis::add(m_assocEdit, w);
890 905
   label->setBuddy(m_assocEdit);
891 906
 
907
+  label = new TQLabel(i18n("Access key: "), optionsWidget());
908
+  l->addWidget(label, ++row, 0);
909
+  m_accessEdit = new KLineEdit(optionsWidget());
910
+  connect(m_accessEdit, SIGNAL(textChanged(const TQString&)), SLOT(slotSetModified()));
911
+  l->addWidget(m_accessEdit, row, 1);
912
+
913
+  label = new TQLabel(i18n("Secret Key: "), optionsWidget());
914
+  l->addWidget(label, ++row, 0);
915
+  m_secretKeyEdit = new KLineEdit(optionsWidget());
916
+  connect(m_secretKeyEdit, SIGNAL(textChanged(const TQString&)), SLOT(slotSetModified()));
917
+  l->addWidget(m_secretKeyEdit, row, 1);
918
+
892 919
   l->setRowStretch(++row, 10);
893 920
 
894 921
   if(fetcher_) {
895 922
     m_siteCombo->setCurrentData(fetcher_->m_site);
896 923
     m_assocEdit->setText(fetcher_->m_assoc);
924
+    m_accessEdit->setText(fetcher_->m_access);
925
+    m_secretKeyEdit->setText(fetcher_->m_amazonKey);
897 926
     m_imageCombo->setCurrentData(fetcher_->m_imageSize);
898 927
   } else { // defaults
899 928
     m_assocEdit->setText(TQString::fromLatin1(AMAZON_ASSOC_TOKEN));
@@ -912,6 +941,14 @@ void AmazonFetcher::ConfigWidget::saveConfig(TDEConfigGroup& config_) {
912 941
   if(!s.isEmpty()) {
913 942
     config_.writeEntry("AssocToken", s);
914 943
   }
944
+  s = m_accessEdit->text().stripWhiteSpace();
945
+  if(!s.isEmpty()) {
946
+    config_.writeEntry("AccessKey", s);
947
+  }
948
+  s = m_secretKeyEdit->text().stripWhiteSpace();
949
+  if(!s.isEmpty()) {
950
+    config_.writeEntry("SecretKey", s);
951
+  }
915 952
   n = m_imageCombo->currentData().toInt();
916 953
   config_.writeEntry("Image Size", n);
917 954
 

+ 3
- 0
src/fetch/amazonfetcher.h View File

@@ -118,6 +118,7 @@ private:
118 118
   ImageSize m_imageSize;
119 119
 
120 120
   TQString m_access;
121
+  TQString m_amazonKey;
121 122
   TQString m_assoc;
122 123
   bool m_addLinkField;
123 124
   int m_limit;
@@ -151,6 +152,8 @@ private slots:
151 152
 
152 153
 private:
153 154
   KLineEdit* m_assocEdit;
155
+  KLineEdit* m_accessEdit;
156
+  KLineEdit* m_secretKeyEdit;
154 157
   GUI::ComboBox* m_siteCombo;
155 158
   GUI::ComboBox* m_imageCombo;
156 159
 };

+ 72
- 0
src/fetch/amazonrequest.cpp View File

@@ -0,0 +1,72 @@
1
+/***************************************************************************
2
+    Copyright (C) 2007-2009 Robby Stephenson <robby@periapsis.org>
3
+ ***************************************************************************/
4
+
5
+/***************************************************************************
6
+ *                                                                         *
7
+ *   This program is free software; you can redistribute it and/or         *
8
+ *   modify it under the terms of the GNU General Public License as        *
9
+ *   published by the Free Software Foundation; either version 2 of        *
10
+ *   the License or (at your option) version 3 or any later version        *
11
+ *   accepted by the membership of KDE e.V. (or its successor approved     *
12
+ *   by the membership of KDE e.V.), which shall act as a proxy            *
13
+ *   defined in Section 14 of version 3 of the license.                    *
14
+ *                                                                         *
15
+ *   This program is distributed in the hope that it will be useful,       *
16
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
17
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
18
+ *   GNU General Public License for more details.                          *
19
+ *                                                                         *
20
+ *   You should have received a copy of the GNU General Public License     *
21
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
22
+ *                                                                         *
23
+ ***************************************************************************/
24
+
25
+#include "amazonrequest.h"
26
+#include "hmac_sha2.h"
27
+#include "../tellico_debug.h"
28
+
29
+#include <kmdcodec.h>
30
+
31
+#include <tqdatetime.h>
32
+
33
+using Tellico::Fetch::AmazonRequest;
34
+
35
+AmazonRequest::AmazonRequest(const KURL& site_, const TQString& key_) : m_siteUrl(site_), m_key(key_) {
36
+}
37
+
38
+KURL AmazonRequest::signedRequest(const TQMap<TQString, TQString>& params_) const {
39
+  TQMap<TQString, TQString> allParams = params_;
40
+  allParams.insert(TQString::fromLatin1("Timestamp"),
41
+                   TQDateTime::currentDateTime(TQt::UTC).toString(TQt::ISODate));
42
+
43
+  TQString query;
44
+  // has to be a map so that the query elements are sorted
45
+  TQMap<TQString, TQString>::Iterator it;
46
+  for ( it = allParams.begin(); it != allParams.end(); ++it ) {
47
+    query += KURL::encode_string(it.key());
48
+    query += '=';
49
+    query += KURL::encode_string(it.data());
50
+    query += '&';
51
+  }
52
+  // remove last '&'
53
+  query.truncate(query.length()-1);
54
+
55
+  const TQCString toSign = "GET\n"
56
+                          + m_siteUrl.host().utf8() + '\n'
57
+                          + m_siteUrl.path().utf8() + '\n'
58
+                          + query.latin1();
59
+
60
+  TQByteArray hmac_buffer;
61
+  hmac_buffer.fill('\0', SHA256_DIGEST_SIZE);
62
+  // subtract one from string size for toSign, not exactly sure why
63
+  hmac_sha256(reinterpret_cast<unsigned char*>(const_cast<char*>(m_key.latin1())), m_key.length(),
64
+              reinterpret_cast<unsigned char*>(toSign.data()), toSign.size()-1,
65
+              reinterpret_cast<unsigned char*>(hmac_buffer.data()), hmac_buffer.size());
66
+  const TQString sig = KURL::encode_string(KCodecs::base64Encode(hmac_buffer));
67
+//  myDebug() << sig << endl;
68
+
69
+  KURL url = m_siteUrl;
70
+  url.setQuery(query + "&Signature=" + sig);
71
+  return url;
72
+}

+ 52
- 0
src/fetch/amazonrequest.h View File

@@ -0,0 +1,52 @@
1
+/***************************************************************************
2
+    Copyright (C) 2007-2009 Robby Stephenson <robby@periapsis.org>
3
+ ***************************************************************************/
4
+
5
+/***************************************************************************
6
+ *                                                                         *
7
+ *   This program is free software; you can redistribute it and/or         *
8
+ *   modify it under the terms of the GNU General Public License as        *
9
+ *   published by the Free Software Foundation; either version 2 of        *
10
+ *   the License or (at your option) version 3 or any later version        *
11
+ *   accepted by the membership of KDE e.V. (or its successor approved     *
12
+ *   by the membership of KDE e.V.), which shall act as a proxy            *
13
+ *   defined in Section 14 of version 3 of the license.                    *
14
+ *                                                                         *
15
+ *   This program is distributed in the hope that it will be useful,       *
16
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
17
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
18
+ *   GNU General Public License for more details.                          *
19
+ *                                                                         *
20
+ *   You should have received a copy of the GNU General Public License     *
21
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
22
+ *                                                                         *
23
+ ***************************************************************************/
24
+
25
+#ifndef TELLICO_FETCH_AMAZONREQUEST_H
26
+#define TELLICO_FETCH_AMAZONREQUEST_H
27
+
28
+#include <kurl.h>
29
+
30
+#include <tqmap.h>
31
+
32
+namespace Tellico {
33
+  namespace Fetch {
34
+
35
+/**
36
+ * @author Robby Stephenson
37
+ */
38
+class AmazonRequest {
39
+public:
40
+  AmazonRequest(const KURL& site, const TQString& key);
41
+
42
+  KURL signedRequest(const TQMap<TQString, TQString>& params) const;
43
+
44
+private:
45
+  KURL m_siteUrl;
46
+  TQString m_key;
47
+};
48
+
49
+  } // end Fetch namespace
50
+} // end Tellico namespace
51
+
52
+#endif

+ 7
- 0
src/fetch/arxivfetcher.cpp View File

@@ -226,6 +226,13 @@ Tellico::Data::EntryPtr ArxivFetcher::fetchEntry(uint uid_) {
226 226
       }
227 227
     }
228 228
   }
229
+  TQRegExp versionRx(TQString::fromLatin1("v\\d+$"));
230
+  // if the original search was not for a versioned ID, remove it
231
+  if(m_key != ArxivID || !m_value.contains(versionRx)) {
232
+    TQString arxiv = entry->field(TQString::fromLatin1("arxiv"));
233
+    arxiv.remove(versionRx);
234
+    entry->setField(TQString::fromLatin1("arxiv"), arxiv);
235
+  }
229 236
   return entry;
230 237
 }
231 238
 

+ 9
- 1
src/fetch/citebasefetcher.cpp View File

@@ -163,7 +163,15 @@ void CitebaseFetcher::slotComplete(TDEIO::Job* job_) {
163 163
 }
164 164
 
165 165
 Tellico::Data::EntryPtr CitebaseFetcher::fetchEntry(uint uid_) {
166
-  return m_entries[uid_];
166
+  Data::EntryPtr entry = m_entries[uid_];
167
+  TQRegExp versionRx(TQString::fromLatin1("v\\d+$"));
168
+  // if the original search was not for a versioned ID, remove it
169
+  if(m_key != ArxivID || !m_value.contains(versionRx)) {
170
+    TQString arxiv = entry->field(TQString::fromLatin1("arxiv"));
171
+    arxiv.remove(versionRx);
172
+    entry->setField(TQString::fromLatin1("arxiv"), arxiv);
173
+  }
174
+  return entry;
167 175
 }
168 176
 
169 177
 KURL CitebaseFetcher::searchURL(FetchKey key_, const TQString& value_) const {

+ 1
- 1
src/fetch/entrezfetcher.cpp View File

@@ -34,7 +34,7 @@
34 34
 //#define ENTREZ_TEST
35 35
 
36 36
 namespace {
37
-  static const int ENTREZ_MAX_RETURNS_TOTAL = 25;
37
+  static const size_t ENTREZ_MAX_RETURNS_TOTAL = 25;
38 38
   static const char* ENTREZ_BASE_URL = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/";
39 39
   static const char* ENTREZ_SEARCH_CGI = "esearch.fcgi";
40 40
   static const char* ENTREZ_SUMMARY_CGI = "esummary.fcgi";

+ 2
- 2
src/fetch/entrezfetcher.h View File

@@ -92,8 +92,8 @@ private:
92 92
   XSLTHandler* m_xsltHandler;
93 93
   TQString m_dbname;
94 94
 
95
-  int m_start;
96
-  int m_total;
95
+  size_t m_start;
96
+  size_t m_total;
97 97
 
98 98
   TQByteArray m_data;
99 99
   TQMap<int, Data::EntryPtr> m_entries; // map from search result id to entry

+ 2
- 2
src/fetch/googlescholarfetcher.cpp View File

@@ -28,7 +28,7 @@
28 28
 #include <tqlayout.h>
29 29
 
30 30
 namespace {
31
-  static const int GOOGLE_MAX_RETURNS_TOTAL = 20;
31
+  static const size_t GOOGLE_MAX_RETURNS_TOTAL = 20;
32 32
   static const char* SCHOLAR_BASE_URL = "http://scholar.google.com/scholar";
33 33
 }
34 34
 
@@ -157,7 +157,7 @@ void GoogleScholarFetcher::slotComplete(TDEIO::Job* job_) {
157 157
 
158 158
   TQString text = TQString::fromUtf8(m_data, m_data.size());
159 159
   TQString bibtex;
160
-  int count = 0;
160
+  size_t count = 0;
161 161
   for(int pos = text.find(m_bibtexRx); count < m_limit && pos > -1; pos = text.find(m_bibtexRx, pos+m_bibtexRx.matchedLength()), ++count) {
162 162
     KURL bibtexUrl(TQString::fromLatin1(SCHOLAR_BASE_URL), m_bibtexRx.cap(1));
163 163
 //    myDebug() << bibtexUrl << endl;

+ 3
- 3
src/fetch/googlescholarfetcher.h View File

@@ -83,9 +83,9 @@ private slots:
83 83
 private:
84 84
   void doSearch();
85 85
 
86
-  int m_limit;
87
-  int m_start;
88
-  int m_total;
86
+  size_t m_limit;
87
+  size_t m_start;
88
+  size_t m_total;
89 89
 
90 90
   TQByteArray m_data;
91 91
   TQMap<int, Data::EntryPtr> m_entries;

+ 544
- 0
src/fetch/hmac_sha2.c View File

@@ -0,0 +1,544 @@
1
+/*-
2
+ * HMAC-SHA-224/256/384/512 implementation
3
+ * Last update: 06/15/2005
4
+ * Issue date:  06/15/2005
5
+ *
6
+ * Copyright (C) 2005 Olivier Gay <olivier.gay@a3.epfl.ch>
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ * 1. Redistributions of source code must retain the above copyright
13
+ *    notice, this list of conditions and the following disclaimer.
14
+ * 2. Redistributions in binary form must reproduce the above copyright
15
+ *    notice, this list of conditions and the following disclaimer in the
16
+ *    documentation and/or other materials provided with the distribution.
17
+ * 3. Neither the name of the project nor the names of its contributors
18
+ *    may be used to endorse or promote products derived from this software
19
+ *    without specific prior written permission.
20
+ *
21
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
22
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
25
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31
+ * SUCH DAMAGE.
32
+ */