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 @@
2009-09-26 Robby Stephenson <robby@periapsis.org>

* Updated Amazon fetcher to use authentication.
* Released Tellico 1.3.6

2009-02-14 Robby Stephenson <robby@periapsis.org>

* Released Tellico 1.3.5.

2009-02-04 Robby Stephenson <robby@periapsis.org>

* Reverted change from 2007 that merged entries by combining all values in multiple-value fields.

2009-02-02 Robby Stephenson <robby@periapsis.org>

* Fixed the CueCat decoder to work for ISBN searches, as well as UPC.

2009-01-30 Robby Stephenson <robby@periapsis.org>

* Updated Deliciour Library 1 importer to handle movies and games.
* Fixed Ubuntu bug#317822, don't mark collection modified when image is found in local data directory.
* Fixed query bug with z39.50 ISBN search.

2008-12-07 Robby Stephenson <robby@periapsis.org>

* Updated it.po, thanks to Valerio Ricci.

2008-10-23 Robby Stephenson <robby@periapsis.org>

* Added date, time, and username as available params for the XSLT export.

2008-09-13 Robby Stephenson <robby@periapsis.org>

* Released Tellico 1.3.4.

2008-09-04 Robby Stephenson <robby@periapsis.org>

* Fixed error with consecutive tabs in CSV import.

2008-08-26 Robby Stephenson <robby@periapsis.org>

* Fixed bug with image links in reports not being linked correctly.

2008-08-20 Robby Stephenson <robby@periapsis.org>

* Added minimal searching for board games from Amazon.

2008-08-07 Robby Stephenson <robby@periapsis.org>

* Changed Choice fields to sort by position in list.

2008-07-25 Robby Stephenson <robby@periapsis.org>

* Added ESC key for clearing quick filter.
* Improved drag/drop to match on file extension after checking mimetype.

2008-07-22 Robby Stephenson <robby@periapsis.org>

* Updated IMDb plot regexp.

2008-07-09 Robby Stephenson <robby@periapsis.org>

* Fixed EntryView to honor copy() command properly, for clipboard.
* Released Tellico 1.3.3.

2008-06-24 Robby Stephenson <robby@periapsis.org>

* Updated Porbase URL in z39.50 server list.

2008-06-13 Robby Stephenson <robby@periapsis.org>

* Updated drag-and-drop to allow HTTP urls.

2008-06-12 Robby Stephenson <robby@periapsis.org>

* Changed Arxiv fetcher to remove ID version number for results.

2008-06-07 Robby Stephenson <robby@periapsis.org>

* Fixed bug with merging file catalogs, to properly match on URL.

2008-05-24 Robby Stephenson <robby@periapsis.org>

* Released Tellico 1.3.2.1.

+ 6
- 0
config.h.in View File

@@ -66,6 +66,9 @@
/* Define if you have libz */
#undef HAVE_LIBZ

/* Define to 1 if you have the <linux/videodev.h> header file. */
#undef HAVE_LINUX_VIDEODEV_H

/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H

@@ -174,6 +177,9 @@
/* Define to the version of this package. */
#undef PACKAGE_VERSION

/* Define to 1 if the XML loader should use SAX */
#undef SAX_SUPPORT

/* The size of `char', as computed by sizeof. */
#undef SIZEOF_CHAR


+ 33
- 5
configure.in View File

@@ -40,7 +40,7 @@ dnl Perform program name transformation
AC_ARG_PROGRAM

dnl Automake doc recommends to do this only here. (Janos)
AM_INIT_AUTOMAKE(tellico, 1.3.2.1) dnl searches for some needed programs
AM_INIT_AUTOMAKE(tellico, 1.3.6) dnl searches for some needed programs

KDE_SET_PREFIX

@@ -491,7 +491,8 @@ AC_ARG_WITH([ooo-dir],
AC_HELP_STRING([--with-ooo-dir=DIR],
[where the OpenOffice.org program files are installed]),
[ac_ooo_libdir="${withval}/program"
ac_ooo_datadir="${withval}/program"])
ac_ooo_datadir="${withval}/program"
ac_ooo_basisdir="${withval}/basis3.0"])
AC_ARG_WITH([ooo-libdir],
AC_HELP_STRING([--with-ooo-libdir=DIR],
[where the OpenOffice.org program libraries are installed (<ooo-dir>/program)]),
@@ -542,6 +543,13 @@ AC_CHECK_FILE([$ac_ooo_datadir/types.rdb],
[OFFICE_registry="$ac_ooo_datadir"/types.rdb],
AC_MSG_ERROR([[types.rdb not found, try '--with-ooo-dir=OpenOffice.org_installation_path']]))

AC_FIND_FILE([offapi.rdb],
[$ac_ooo_basisdir/program $ac_ooo_libdir $ac_ooo_datadir],
offapi_dir)
if test "$offapi_dir" != "NO"; then
OFFICE_registry="$OFFICE_registry $offapi_dir/offapi.rdb"
fi

dnl Substitute the values
AC_SUBST(OFFICE_SDK_includes)
AC_SUBST(OFFICE_libadd)
@@ -562,7 +570,7 @@ AC_ARG_ENABLE(exempi,
)

if test x$enable_libexempi = xyes; then
KDE_PKG_CHECK_MODULES(EXEMPI,
KDE_PKG_CHECK_MODULES(EXEMPI,
[exempi-2.0 >= 1.99.0],
[have_exempi=yes],
[have_exempi=no])
@@ -586,8 +594,8 @@ AC_ARG_ENABLE(poppler,
)

if test x$enable_libpoppler = xyes; then
KDE_PKG_CHECK_MODULES(POPPLER,
[poppler-qt >= 0.5],
KDE_PKG_CHECK_MODULES(POPPLER,
[poppler-tqt >= 0.5],
[have_poppler=yes],
[have_poppler=no])
AC_SUBST(POPPLER_LIBS)
@@ -609,12 +617,32 @@ AC_ARG_ENABLE(webcam,
[enable_webcam=no]
)

if test x$enable_webcam = xyes; then
KDE_CHECK_HEADERS([linux/videodev.h],
[],
[enable_webcam="no"])
fi

AM_CONDITIONAL(ENABLE_WEBCAM, test $enable_webcam = yes)
if test x$enable_webcam = xyes; then
AC_DEFINE(ENABLE_WEBCAM, 1, [Define to 1 if webcam support is enabled])
fi

dnl ---------- END WEBCAM CHECK ----------

dnl ---------- SAX CHECK ----------

AC_ARG_ENABLE(sax,
AC_HELP_STRING([--enable-sax], [enable SAX document loading (experimental), default=disable]),
[enable_sax=$enableval],
[enable_sax=no]
)

if test x$enable_sax = xyes; then
AC_DEFINE(SAX_SUPPORT, 1, [Define to 1 if the XML loader should use SAX])
fi

dnl ---------- END SAX CHECK ----------
KDE_CREATE_SUBDIRSLIST
AC_CONFIG_FILES([ Makefile ])
AC_CONFIG_FILES([ doc/Makefile ])

+ 40
- 5
configure.in.in View File

@@ -2,7 +2,7 @@

KDE_ENABLE_HIDDEN_VISIBILITY

AM_INIT_AUTOMAKE(tellico,1.3.2.1)
AM_INIT_AUTOMAKE(tellico,1.3.6)

dnl AM_KDE_MIN_VERSION(MIN-VERSION-MAJOR, MIN-VERSION-MINOR, MIN-VERSION-MICRO)
dnl (taken from KMyMoney2)
@@ -428,7 +428,8 @@ AC_ARG_WITH([ooo-dir],
AC_HELP_STRING([--with-ooo-dir=DIR],
[where the OpenOffice.org program files are installed]),
[ac_ooo_libdir="${withval}/program"
ac_ooo_datadir="${withval}/program"])
ac_ooo_datadir="${withval}/program"
ac_ooo_basisdir="${withval}/basis3.0"])
AC_ARG_WITH([ooo-libdir],
AC_HELP_STRING([--with-ooo-libdir=DIR],
[where the OpenOffice.org program libraries are installed (<ooo-dir>/program)]),
@@ -479,6 +480,13 @@ AC_CHECK_FILE([$ac_ooo_datadir/types.rdb],
[OFFICE_registry="$ac_ooo_datadir"/types.rdb],
AC_MSG_ERROR([[types.rdb not found, try '--with-ooo-dir=OpenOffice.org_installation_path']]))

AC_FIND_FILE([offapi.rdb],
[$ac_ooo_basisdir/program $ac_ooo_libdir $ac_ooo_datadir],
offapi_dir)
if test "$offapi_dir" != "NO"; then
OFFICE_registry="$OFFICE_registry $offapi_dir/offapi.rdb"
fi

dnl Substitute the values
AC_SUBST(OFFICE_SDK_includes)
AC_SUBST(OFFICE_libadd)
@@ -499,7 +507,7 @@ AC_ARG_ENABLE(exempi,
)

if test x$enable_libexempi = xyes; then
KDE_PKG_CHECK_MODULES(EXEMPI,
KDE_PKG_CHECK_MODULES(EXEMPI,
[exempi-2.0 >= 1.99.0],
[have_exempi=yes],
[have_exempi=no])
@@ -523,8 +531,8 @@ AC_ARG_ENABLE(poppler,
)

if test x$enable_libpoppler = xyes; then
KDE_PKG_CHECK_MODULES(POPPLER,
[poppler-qt >= 0.5],
KDE_PKG_CHECK_MODULES(POPPLER,
[poppler-tqt >= 0.5],
[have_poppler=yes],
[have_poppler=no])
AC_SUBST(POPPLER_LIBS)
@@ -546,9 +554,36 @@ AC_ARG_ENABLE(webcam,
[enable_webcam=no]
)

if test x$enable_webcam = xyes; then
KDE_CHECK_HEADERS([linux/videodev.h],
[],
[enable_webcam="no"])
fi

AM_CONDITIONAL(ENABLE_WEBCAM, test $enable_webcam = yes)
if test x$enable_webcam = xyes; then
AC_DEFINE(ENABLE_WEBCAM, 1, [Define to 1 if webcam support is enabled])
fi

dnl ---------- END WEBCAM CHECK ----------

dnl ---------- SAX CHECK ----------

AC_ARG_ENABLE(sax,
AC_HELP_STRING([--enable-sax], [enable SAX document loading (experimental), default=disable]),
[enable_sax=$enableval],
[enable_sax=no]
)

if test x$enable_sax = xyes; then
AC_DEFINE(SAX_SUPPORT, 1, [Define to 1 if the XML loader should use SAX])
fi

dnl ---------- END SAX CHECK ----------

dnl -------- fix TQTDCOPIDLNG ---------
if test "$kde_cv_tqt" = "no"; then
if test -z "$TQTDCOPIDLNG"; then
KDE_FIND_PATH(dcopidlng, TQTDCOPIDLNG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidlng)])
fi
fi

+ 19
- 1
po/README View File

@@ -2,4 +2,22 @@ To regenerate the message strings, type

make package-messages

from the top-level directory
from the top-level directory.

Please note that you need a special for KDE patched version of xgettext. You
can obtain it from http://packages.ubuntu.com/de/edgy/gettext-kde. Don't forget
to make this binary available as xgettext (instead of kde-xgettext) by e.g.
creating a link in your search path.

If you don't do this, code such as i18n("Comic Book Illustrator", "Artist")
would correspond to two separate strings "Comic Book Illustrator" and
"Artist" instead of a combined entry from which only the second one has to be
translated:

msgid ""
"_: Comic Book Illustrator\n"
"Artist"
msgstr "Künstler"

You also need the tool extractrc. In Debian it is available in the package
tdesdk-scripts.

+ 7
- 10
po/de.po View File

@@ -16,7 +16,7 @@ msgid ""
msgstr ""
"Project-Id-Version: de\n"
"POT-Creation-Date: 2008-01-26 10:52-0800\n"
"PO-Revision-Date: 2008-01-25 10:34+0100\n"
"PO-Revision-Date: 2008-05-24 22:47+0200\n"
"Last-Translator: Jens Seidel <jensseidel@users.sf.net>\n"
"Language-Team: german <de@li.org>\n"
"MIME-Version: 1.0\n"
@@ -1094,7 +1094,7 @@ msgstr "Mechanismus"

#: collections/boardgamecollection.cpp:66
msgid "Designer"
msgstr ""
msgstr "Designer"

#: collections/boardgamecollection.cpp:72
msgid "Number of Players"
@@ -1792,7 +1792,7 @@ msgstr ""

#: fetch/discogsfetcher.cpp:718
msgid "Discogs Link"
msgstr ""
msgstr "Discogs-Link"

#: newstuff/dialog.cpp:94
msgid "Get Hot New Stuff"
@@ -1986,9 +1986,8 @@ msgid "Scanning audio files..."
msgstr "Taste Audio-Dateien ab ..."

#: translators/audiofileimporter.cpp:129
#, fuzzy
msgid "Bitrate"
msgstr "Bibtex"
msgstr "Bitrate"

#: translators/audiofileimporter.cpp:160 translators/audiofileimporter.cpp:170
msgid "Tracks (Disc %1)"
@@ -2023,14 +2022,12 @@ msgstr ""

#: translators/audiofileimporter.cpp:352
msgid "Include &bitrate"
msgstr ""
msgstr "&Bitrate inkludieren"

#: translators/audiofileimporter.cpp:353
#, fuzzy
msgid "If checked, the bitrate for each track is added to the entries."
msgstr ""
"Wenn markiert, werden die Datei-Namen für jede Spur zu den Einträgen "
"hinzugefügt."
"Wenn markiert, wird die Bitrate für jede Spur zu den Einträgen hinzugefügt."

#: translators/csvexporter.cpp:40
msgid "CSV"
@@ -5369,7 +5366,7 @@ msgstr "Copac (Großbritannien und Irland)"

#: scripts.cpp:2
msgid "BoardGameGeek"
msgstr ""
msgstr "BoardGameGeek"

#: scripts.cpp:4
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 @@
# translation of ru.po to Russian
# Copyright (C) 2007 Robby Stephenson <robby@periapsis.org>.
# Калимуллин Артур <kalimullin@gmail.com>, 2006.
# Kalimullin Artur <kalimullin@gmail.com>, 2006.
# Pesotsky Denis <St.MPA3b@gmail.com>, 2008.
# Copyright (C) 2007 Robby Stephenson <robby@periapsis.org>.
# Denis Pesotsky <St.MPA3b@gmail.com>, 2008.
# Denis Pesotsky <denis@kde.ru>, 2008.
msgid ""
msgstr ""
"Project-Id-Version: ru\n"
"POT-Creation-Date: 2008-01-26 10:52-0800\n"
"PO-Revision-Date: 2008-03-21 00:44+0300\n"
"Last-Translator: Pesotsky Denis <St.MPA3b@gmail.com>\n"
"PO-Revision-Date: 2008-10-22 21:27+0400\n"
"Last-Translator: Denis Pesotsky <denis@kde.ru>\n"
"Language-Team: Russian <kde-russian@lists.kde.ru>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
"X-Generator: Lokalize 0.2\n"
"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"

#: cite/lyxpipe.cpp:50
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>.<

#: cite/openoffice.cpp:82
msgid "Connecting to OpenOffice.org..."
msgstr "Подсоединение к OpenOffice.org..."
msgstr "Подсоединение к OpenOffice.org"

#: cite/openoffice.cpp:165 cite/openoffice.cpp:186
msgid "OpenOffice.org Connection"
@@ -115,7 +118,7 @@ msgstr "Очистить"

#: gui/imagewidget.cpp:57
msgid "Select Image..."
msgstr "Выбрать изображение..."
msgstr "Выбрать изображение"

#: gui/imagewidget.cpp:63
msgid "Save link only"
@@ -652,7 +655,7 @@ msgstr "Создан"

#: collections/filecatalog.cpp:89
msgid "Modified"
msgstr "Модифицирован"
msgstr "Изменён"

#: collections/filecatalog.cpp:93
msgid "Meta Info"
@@ -1780,7 +1783,7 @@ msgstr "Описание выделенного отображается зде

#: newstuff/dialog.cpp:224
msgid "Downloading information..."
msgstr "Загрузка информации..."
msgstr "Загрузка информации"

#: controller.cpp:135 fetchdialog.cpp:226 fetchdialog.cpp:333
#: fetchdialog.cpp:451 fetchdialog.cpp:506 newstuff/dialog.cpp:297
@@ -1796,7 +1799,7 @@ msgstr "Обновить"

#: newstuff/dialog.cpp:413
msgid "Installing item..."
msgstr "Установка...."
msgstr "Установка"

#: translators/bibteximporter.cpp:79
msgid "No valid bibtex entries were found"
@@ -1913,7 +1916,7 @@ msgstr "Избранное"

#: translators/audiofileimporter.cpp:69
msgid "Scanning audio files..."
msgstr "Сканируются аудио-файлы..."
msgstr "Сканируются аудио-файлы"

#: translators/audiofileimporter.cpp:129
msgid "Bitrate"
@@ -2025,7 +2028,7 @@ msgstr "Может быть использован любой другой ра

#: translators/filelistingimporter.cpp:63
msgid "Scanning files..."
msgstr "Сканируются файлы..."
msgstr "Сканируются файлы"

#: translators/filelistingimporter.cpp:191
msgid "File Listing Options"
@@ -2192,11 +2195,11 @@ msgstr ""

#: translators/importer.h:100
msgid "Loading data..."
msgstr "Загружаются данные..."
msgstr "Загружаются данные"

#: translators/importer.h:100
msgid "Loading %1..."
msgstr "Загружается %1..."
msgstr "Загружается %1"

#: translators/bibtexexporter.cpp:48
msgid "Bibtex"
@@ -2484,7 +2487,7 @@ msgstr "не соответствует выражению"

#: filterdialog.cpp:90
msgid "Edit..."
msgstr "Редактировать..."
msgstr "Редактировать"

#: filterdialog.cpp:282
msgid "Advanced Filter"
@@ -2540,11 +2543,11 @@ msgstr "Дата"

#: entryupdater.cpp:81
msgid "Updating %1..."
msgstr "Обновление %1..."
msgstr "Обновление %1"

#: entryupdater.cpp:83
msgid "Updating entries..."
msgstr "Обновление записей..."
msgstr "Обновление записей"

#: entryupdater.cpp:85
msgid "Update Entries"
@@ -2552,7 +2555,7 @@ msgstr "Обновить записи"

#: entryupdater.cpp:99
msgid "Updating <b>%1</b>..."
msgstr "Обновление <b>%1</b>..."
msgstr "Обновление <b>%1</b>"

#: entryupdater.cpp:209
msgid "Select Match"
@@ -2875,11 +2878,11 @@ msgstr "Сохранить документ"

#: mainwindow.cpp:305
msgid "Save the document as a different file..."
msgstr "Сохранить документ в другой файл..."
msgstr "Сохранить документ в другой файл"

#: mainwindow.cpp:307
msgid "Print the contents of the document..."
msgstr "Напечатать содержимое этого документа..."
msgstr "Напечатать содержимое этого документа"

#: mainwindow.cpp:309
msgid "Quit the application"
@@ -2891,7 +2894,7 @@ msgstr "Импортировать коллекцию из других форм

#: mainwindow.cpp:324
msgid "Import Tellico Data..."
msgstr "Импорт из файла Tellico..."
msgstr "Импорт из файла Tellico"

#: mainwindow.cpp:325
msgid "Import another Tellico data file"
@@ -2899,7 +2902,7 @@ msgstr "Импортировать из другой коллекции Tellico"

#: mainwindow.cpp:331
msgid "Import CSV Data..."
msgstr "Импорт из CSV..."
msgstr "Импорт из CSV"

#: mainwindow.cpp:332
msgid "Import a CSV file"
@@ -2907,7 +2910,7 @@ msgstr "Импорт из файла CSV"

#: mainwindow.cpp:338
msgid "Import MODS Data..."
msgstr "Импорт из MODS..."
msgstr "Импорт из MODS"

#: mainwindow.cpp:339
msgid "Import a MODS data file"
@@ -2915,7 +2918,7 @@ msgstr "Импорт из файла MODS"

#: mainwindow.cpp:345
msgid "Import Alexandria Data..."
msgstr "Импорт из файла Alexandria..."
msgstr "Импорт из файла Alexandria"

#: mainwindow.cpp:346
msgid "Import data from the Alexandria book collection manager"
@@ -2923,7 +2926,7 @@ msgstr "Импорт из менеджера коллекций книг Alexand

#: mainwindow.cpp:352
msgid "Import Delicious Library Data..."
msgstr "Импорт из файла Delicious..."
msgstr "Импорт из файла Delicious"

#: mainwindow.cpp:353
msgid "Import data from Delicious Library"
@@ -2931,7 +2934,7 @@ msgstr "Импорт данных из файла Delicious"

#: mainwindow.cpp:359
msgid "Import Referencer Data..."
msgstr "Импорт из файла Referencer..."
msgstr "Импорт из файла Referencer"

#: mainwindow.cpp:360
msgid "Import data from Referencer"
@@ -2939,7 +2942,7 @@ msgstr "Импортировать данные из Referencer"

#: mainwindow.cpp:366
msgid "Import Bibtex Data..."
msgstr "Импорт из Bibtex..."
msgstr "Импорт из Bibtex"

#: mainwindow.cpp:367
msgid "Import a bibtex bibliography file"
@@ -2947,7 +2950,7 @@ msgstr "Импортировать из файла библиографии bibt

#: mainwindow.cpp:373
msgid "Import Bibtexml Data..."
msgstr "Импорт из Bibtexml..."
msgstr "Импорт из Bibtexml"

#: mainwindow.cpp:374
msgid "Import a Bibtexml bibliography file"
@@ -2955,7 +2958,7 @@ msgstr "Импортировать из файла библиографии Bibt

#: mainwindow.cpp:380
msgid "Import RIS Data..."
msgstr "Импорт из RIS..."
msgstr "Импорт из RIS"

#: mainwindow.cpp:381
msgid "Import an RIS reference file"
@@ -2963,7 +2966,7 @@ msgstr "Импортировать из файла RIS"

#: mainwindow.cpp:387
msgid "Import PDF File..."
msgstr "Импорт из PDF..."
msgstr "Импорт из PDF"

#: mainwindow.cpp:388
msgid "Import a PDF file"
@@ -2971,7 +2974,7 @@ msgstr "Импортировать из файла PDF"

#: mainwindow.cpp:394
msgid "Import Audio File Metadata..."
msgstr "Импорт из данных аудио файла..."
msgstr "Импорт из данных аудио файла"

#: mainwindow.cpp:395
msgid "Import meta-data from audio files"
@@ -2979,7 +2982,7 @@ msgstr "Импорт из данных тегов аудио файлов"

#: mainwindow.cpp:404
msgid "Import Audio CD Data..."
msgstr "Импорт из Audio CD..."
msgstr "Импорт из Audio CD"

#: mainwindow.cpp:405
msgid "Import audio CD information"
@@ -2987,7 +2990,7 @@ msgstr "Импорт информации об Audio CD"

#: mainwindow.cpp:414
msgid "Import GCstar Data..."
msgstr "Импорт из файла GCstar..."
msgstr "Импорт из файла GCstar"

#: mainwindow.cpp:415
msgid "Import a GCstar data file"
@@ -2995,7 +2998,7 @@ msgstr "Импорт данных из файла GCstar"

#: mainwindow.cpp:421
msgid "Import Griffith Data..."
msgstr "Импорт из файла Griffith..."
msgstr "Импорт из файла Griffith"

#: mainwindow.cpp:422
msgid "Import a Griffith database"
@@ -3003,7 +3006,7 @@ msgstr "Импортировать из файла Griffith"

#: mainwindow.cpp:428
msgid "Import Ant Movie Catalog Data..."
msgstr "Импорт из файла Ant..."
msgstr "Импорт из файла Ant"

#: mainwindow.cpp:429
msgid "Import an Ant Movie Catalog data file"
@@ -3011,7 +3014,7 @@ msgstr "Импортировать из файла менеджера колле

#: mainwindow.cpp:435
msgid "Import File Listing..."
msgstr "Импорт списка фалов..."
msgstr "Импорт списка фалов"

#: mainwindow.cpp:436
msgid "Import information about files in a folder"
@@ -3019,7 +3022,7 @@ msgstr "Импортировать информацию о файлах в па

#: mainwindow.cpp:442
msgid "Import XSL Transform..."
msgstr "Импорт из XSLT..."
msgstr "Импорт из XSLT"

#: mainwindow.cpp:443
msgid "Import using an XSL Transform"
@@ -3036,7 +3039,7 @@ msgstr "Экспортировать данные коллекции в друг

#: mainwindow.cpp:461
msgid "Export to XML..."
msgstr "Экспорт в XML..."
msgstr "Экспорт в XML"

#: mainwindow.cpp:462
msgid "Export to a Tellico XML file"
@@ -3044,7 +3047,7 @@ msgstr "Экспорт в XML-файл Tellico"

#: mainwindow.cpp:468
msgid "Export to Zip..."
msgstr "Экспорт в ZIP..."
msgstr "Экспорт в ZIP"

#: mainwindow.cpp:469
msgid "Export to a Tellico Zip file"
@@ -3052,7 +3055,7 @@ msgstr "Экспорт в сжатый ZIP файл Tellico"

#: mainwindow.cpp:475
msgid "Export to HTML..."
msgstr "Экспорт в HTML..."
msgstr "Экспорт в HTML"

#: mainwindow.cpp:476
msgid "Export to an HTML file"
@@ -3060,7 +3063,7 @@ msgstr "Экспорт в файл HTML"

#: mainwindow.cpp:482
msgid "Export to CSV..."
msgstr "Экспорт в CSV..."
msgstr "Экспорт в CSV"

#: mainwindow.cpp:483
msgid "Export to a comma-separated values file"
@@ -3068,7 +3071,7 @@ msgstr "Экспорт в текстовый файл с разделённым

#: mainwindow.cpp:489
msgid "Export to PilotDB..."
msgstr "Экспорт в PilotDB..."
msgstr "Экспорт в PilotDB"

#: mainwindow.cpp:490
msgid "Export to a PilotDB database"
@@ -3076,7 +3079,7 @@ msgstr "Экспортировать в базу данных PilotDB"

#: mainwindow.cpp:496
msgid "Export to Alexandria..."
msgstr "Экспорт в Alexandria..."
msgstr "Экспорт в Alexandria"

#: mainwindow.cpp:497
msgid "Export to an Alexandria library"
@@ -3084,7 +3087,7 @@ msgstr "Экспорт в библиотеку Alexandria"

#: mainwindow.cpp:503
msgid "Export to Bibtex..."
msgstr "Экспорт в Bibtex..."
msgstr "Экспорт в Bibtex"

#: mainwindow.cpp:504
msgid "Export to a bibtex file"
@@ -3092,7 +3095,7 @@ msgstr "Экспорт в файл Bibtex"

#: mainwindow.cpp:510
msgid "Export to Bibtexml..."
msgstr "Экспорт в Bibtexml..."
msgstr "Экспорт в Bibtexml"

#: mainwindow.cpp:511
msgid "Export to a Bibtexml file"
@@ -3100,7 +3103,7 @@ msgstr "Экспорт в файл Bibtexml"

#: mainwindow.cpp:517
msgid "Export to ONIX..."
msgstr "Экспорт в ONIX..."
msgstr "Экспорт в ONIX"

#: mainwindow.cpp:518
msgid "Export to an ONIX file"
@@ -3108,7 +3111,7 @@ msgstr "Экспорт в файл ONIX"

#: mainwindow.cpp:524
msgid "Export to GCfilms..."
msgstr "Экспорт в GCfilms..."
msgstr "Экспорт в GCfilms"

#: mainwindow.cpp:525
msgid "Export to a GCfilms data file"
@@ -3116,7 +3119,7 @@ msgstr "Экспорт в файл GCfilms"

#: mainwindow.cpp:531
msgid "Export to GCstar..."
msgstr "Экспорт в GCStar..."
msgstr "Экспорт в GCStar"

#: mainwindow.cpp:532
msgid "Export to a GCstar data file"
@@ -3124,7 +3127,7 @@ msgstr "Экспорт в файл GCfilms"

#: mainwindow.cpp:536
msgid "Export XSL Transform..."
msgstr "Экспорт в XSLT..."
msgstr "Экспорт в XSLT"

#: mainwindow.cpp:537
msgid "Export using an XSL Transform"
@@ -3152,15 +3155,15 @@ msgstr "Отменить выделение записей в коллекции

#: mainwindow.cpp:556
msgid "Internet Search..."
msgstr "Поиск в интернете..."
msgstr "Поиск в интернете"

#: mainwindow.cpp:559
msgid "Search the internet..."
msgstr "Повести поиск в интернете для создания новой записи в коллекции..."
msgstr "Повести поиск в интернете для создания новой записи в коллекции"

#: mainwindow.cpp:561
msgid "Advanced &Filter..."
msgstr "Продвинутый &фильтр..."
msgstr "Продвинутый &фильтр"

#: mainwindow.cpp:564 mainwindow.cpp:719
msgid "Filter the collection"
@@ -3168,7 +3171,7 @@ msgstr "Фильтр коллекции"

#: mainwindow.cpp:569
msgid "&New Entry..."
msgstr "&Новая запись..."
msgstr "&Новая запись"

#: mainwindow.cpp:572
msgid "Create a new entry"
@@ -3176,7 +3179,7 @@ msgstr "Создать новую запись"

#: controller.cpp:620 mainwindow.cpp:573
msgid "&Edit Entry..."
msgstr "&Редактировать запись..."
msgstr "&Редактировать запись"

#: mainwindow.cpp:576
msgid "Edit the selected entries"
@@ -3208,7 +3211,7 @@ msgstr "Объединить выделенные записи"

#: mainwindow.cpp:591
msgid "&Generate Reports..."
msgstr "Создать от&чет..."
msgstr "Создать от&чет"

#: mainwindow.cpp:594
msgid "Generate collection reports"
@@ -3216,7 +3219,7 @@ msgstr "Создать отчет о коллекции"

#: mainwindow.cpp:595
msgid "Check-&out..."
msgstr "&Отдать в долг..."
msgstr "&Отдать в долг"

#: mainwindow.cpp:598
msgid "Check-out the selected items"
@@ -3232,7 +3235,7 @@ msgstr "Вернуть из долга выделенные записи"

#: mainwindow.cpp:604
msgid "&Rename Collection..."
msgstr "&Переименовать коллекцию..."
msgstr "&Переименовать коллекцию"

#: mainwindow.cpp:607
msgid "Rename the collection"
@@ -3256,7 +3259,7 @@ msgstr "Конвертировать коллекцию книг в библио

#: mainwindow.cpp:616
msgid "String &Macros..."
msgstr "Строчный &макрос..."
msgstr "Строчный &макрос"

#: mainwindow.cpp:619
msgid "Edit the bibtex string macros"
@@ -3357,7 +3360,7 @@ msgstr "Очистить фильтр"

#: mainwindow.cpp:710
msgid "Filter here..."
msgstr "Фильтр..."
msgstr "Фильтр"

#: mainwindow.cpp:768
msgid "Groups"
@@ -3399,11 +3402,11 @@ msgstr ""

#: mainwindow.cpp:1066
msgid "Creating new document..."
msgstr "Создание нового документа..."
msgstr "Создание нового документа"

#: mainwindow.cpp:1098 mainwindow.cpp:1117 mainwindow.cpp:1135
msgid "Opening file..."
msgstr "Открытие файла..."
msgstr "Открытие файла"

#: mainwindow.cpp:1108
msgid "Open File"
@@ -3411,7 +3414,7 @@ msgstr "Открыть файл"

#: document.cpp:192 mainwindow.cpp:1215
msgid "Saving file..."
msgstr "Сохранение файла...."
msgstr "Сохранение файла."

#: mainwindow.cpp:1226
msgid ""
@@ -3435,11 +3438,11 @@ msgstr "Сохранять изображения вместе с файлом"

#: mainwindow.cpp:1265
msgid "Saving file with a new filename..."
msgstr "Сохранение файла под другим именем..."
msgstr "Сохранение файла под другим именем"

#: mainwindow.cpp:1303 mainwindow.cpp:1353
msgid "Printing..."
msgstr "Идёт печать..."
msgstr "Идёт печать"

#: mainwindow.cpp:1312
msgid ""
@@ -3451,11 +3454,11 @@ msgstr ""

#: mainwindow.cpp:1337
msgid "Processing document..."
msgstr "Подождите..."
msgstr "Подождите"

#: mainwindow.cpp:1360
msgid "Exiting..."
msgstr "Выход..."
msgstr "Выход"

#: mainwindow.cpp:1498
#, c-format
@@ -3490,7 +3493,7 @@ msgstr "Пожалуйста, проверьте свою инсталляцию

#: mainwindow.cpp:1849
msgid "Importing data..."
msgstr "Импорт данных..."
msgstr "Импорт данных"

#: mainwindow.cpp:1858
msgid "Import File"
@@ -3502,7 +3505,7 @@ msgstr "Импорт каталога"

#: mainwindow.cpp:1885
msgid "Exporting data..."
msgstr "Экспортирование данных..."
msgstr "Экспортирование данных"

#: mainwindow.cpp:1907
msgid "Export As"
@@ -3522,7 +3525,7 @@ msgstr "Строка"

#: mainwindow.cpp:1999
msgid "Creating citations..."
msgstr "Идет создание цитат..."
msgstr "Идет создание цитат"

#: mainwindow.cpp:2104
msgid "Filters"
@@ -3598,7 +3601,7 @@ msgstr "Удалить несколько записей"

#: controller.cpp:626
msgid "&Edit Entries..."
msgstr "&Редактировать записи..."
msgstr "&Редактировать записи"

#: controller.cpp:627
msgid "D&uplicate Entries"
@@ -3862,7 +3865,7 @@ msgstr "Дополнительные &параметры:"

#: collectionfieldsdialog.cpp:217
msgid "&Set..."
msgstr "&Установить..."
msgstr "&Установить"

#: collectionfieldsdialog.cpp:221
msgid ""
@@ -4242,11 +4245,11 @@ msgstr ""

#: configdialog.cpp:380
msgid "&Preview..."
msgstr "&Пред-просмотр..."
msgstr "&Предпросмотр…"

#: configdialog.cpp:381
msgid "Show a preview of the template"
msgstr "Показать пред-просмотр шаблона"
msgstr "Показать предпросмотр шаблона"

#: configdialog.cpp:398
msgid "Font Options"
@@ -4294,7 +4297,7 @@ msgstr "Управление шаблонами"

#: configdialog.cpp:475
msgid "Install..."
msgstr "Установить..."
msgstr "Установить"

#: configdialog.cpp:478
msgid "Click to install a new template directly."
@@ -4302,7 +4305,7 @@ msgstr "Нажмите для установки шаблона."

#: configdialog.cpp:481 configdialog.cpp:537
msgid "Download..."
msgstr "Загрузить..."
msgstr "Загрузить"

#: configdialog.cpp:484
msgid "Click to download additional templates via the Internet."
@@ -4310,7 +4313,7 @@ msgstr "Нажмите для загрузки дополнительных ша

#: configdialog.cpp:487
msgid "Delete..."
msgstr "Удалить..."
msgstr "Удалить"

#: configdialog.cpp:490
msgid "Click to select and remove installed templates."
@@ -4346,7 +4349,7 @@ msgstr "&Ниже"

#: configdialog.cpp:528
msgid "&New..."
msgstr "&Новый..."
msgstr "&Новый"

#: configdialog.cpp:530
msgid "Click to add a new data source."
@@ -4354,7 +4357,7 @@ msgstr "Нажмите для создания нового источника

#: configdialog.cpp:531
msgid "&Modify..."
msgstr "&Редактировать..."
msgstr "&Редактировать"

#: configdialog.cpp:533
msgid "Click to modify the selected data source."
@@ -4390,7 +4393,7 @@ msgstr "Вернуть из долга"

#: loanview.cpp:76
msgid "Modify Loan..."
msgstr "Редактировать долг..."
msgstr "Редактировать долг"

#: loanview.cpp:93
msgid "Borrower (Sort by Count)"
@@ -4556,7 +4559,7 @@ msgstr "Если отмечено, будет проведен многокра

#: fetchdialog.cpp:138
msgid "Edit List..."
msgstr "Редактировать список..."
msgstr "Редактировать список"

#: fetchdialog.cpp:140
msgid "Click to open a text edit box for entering or editing multiple ISBN values."
@@ -4606,11 +4609,11 @@ msgstr "Очистить все поля поиска и результаты"

#: fetchdialog.cpp:298
msgid "Cancelling the search..."
msgstr "Отмена поиска..."
msgstr "Отмена поиска"

#: fetchdialog.cpp:313 fetchdialog.cpp:472
msgid "Searching..."
msgstr "Поиск..."
msgstr "Поиск"

#: fetchdialog.cpp:368
msgid "The search returned no items."
@@ -4631,7 +4634,7 @@ msgstr "Никаких записей не было найдено по след

#: fetchdialog.cpp:443 fetchdialog.cpp:495
msgid "Fetching %1..."
msgstr "Загрузка %1..."
msgstr "Загрузка %1"

#: fetchdialog.cpp:528 fetchdialog.cpp:708
msgid "No Internet sources are available for your current collection type."
@@ -4647,7 +4650,7 @@ msgstr "<qt>Введите значения ISBN/UPC, по одному в ст

#: fetchdialog.cpp:604
msgid "&Load From File..."
msgstr "&Загрузить из файла..."
msgstr "&Загрузить из файла"

#: fetchdialog.cpp:605
msgid "<qt>Load the list from a text file.</qt>"
@@ -4805,15 +4808,15 @@ msgstr "Калимуллин Артур, Песоцкий Денис"
msgid ""
"_: EMAIL OF TRANSLATORS\n"
"Your emails"
msgstr "kalimullin@gmail.com, St.MPA3b@gmail.com"
msgstr "kalimullin@gmail.com, denis@kde.ru"

#: entrymerger.cpp:35
msgid "Merging entries..."
msgstr "Объединение записей..."
msgstr "Объединение записей"

#: entrymerger.cpp:49
msgid "Total merged/scanned entries: %1/%2"
msgstr "Всего записей объединено/просканировано: %1"
msgstr "Всего записей объединено/просканировано: %1/%2"

#: tips.cpp:3
msgid ""
@@ -4823,7 +4826,7 @@ msgid ""
"<p>Any other field which allows multiple values should be entered the\n"
"same way, with a semi-colon (;) separating each value.</p>\n"
msgstr ""
"<p>...что если книга имеет больше, чем одного автора, то вам следует "
"<p>что если книга имеет больше, чем одного автора, то вам следует "
"разделять\n"
"точкой с запятой (;). Таким образом, Tellico будет разделять их имена.</p>\n"
"<p>Любое другое поле также поддерживает эту функцию. Для этого вам следует\n"
@@ -4835,7 +4838,7 @@ msgid ""
"<p>...that you can change which fields are shown in the list view by\n"
"right-clicking on the column header.\n"
msgstr ""
"<p>...что вы можете выбрать какие поля следует показывать в списке записей,\n"
"<p>что вы можете выбрать какие поля следует показывать в списке записей,\n"
"кликнув правой кнопкой мыши на заголовке \"таблицы\".\n"

#: tips.cpp:16
@@ -4846,7 +4849,7 @@ msgid ""
"position of the field in the list, which affects the placement in the entry\n"
"editor.</p>\n"
msgstr ""
"<p>...что вы можете добавлять, редактировать или удалять поля в коллекции,\n"
"<p>что вы можете добавлять, редактировать или удалять поля в коллекции,\n"
"используя Редактор полей. Кнопки стрелок позволяют вам менять позицию полей "
"в списке,\n"
"которая влияет на расстановку в Редакторе записей.</p>\n"
@@ -4861,7 +4864,7 @@ msgid ""
"\"contains\" \"Science Fiction\" (no quotes) and the second rule to\n"
"have \"Read\" \"does not contain\" \"true\" (no quotes).</p>\n"
msgstr ""
"<p>...что если вы хотите отфильтровать записи по полю \"Выбор да/нет\",\n"
"<p>что если вы хотите отфильтровать записи по полю \"Выбор да/нет\",\n"
"то должно использоваться значение \"да\". Например, если вы хотите "
"посмотреть, какие детективы вы ещё не читали,\n"
"нажмите кнопку \"Соответствует всему следующему\",\n"
@@ -4876,7 +4879,7 @@ msgid ""
"<p>To show only books which are by Weber or Bujold, for example, then\n"
"type \"weber|bujold\" (no quotes) in the filter box.</p>\n"
msgstr ""
"<p>...что если в быстром фильтре используется символ, не входящий в слова "
"<p>что если в быстром фильтре используется символ, не входящий в слова "
"(напр., ^)\n"
"текст интерпретируется как регулярное выражение.</p>\n"
"<p>Например, чтобы посмотреть только книги, которые написали Пушкин и "
@@ -4888,7 +4891,7 @@ msgid ""
"<p>...that you can edit more than one entry at a time, by holding down\n"
"the Shift or Ctrl key and selecting multiple entries.</p>\n"
msgstr ""
"<p>...что за один раз вы можете отредактировать больше, чем одно поле.\n"
"<p>что за один раз вы можете отредактировать больше, чем одно поле.\n"
"Для этого выделите несколько полей, зажимая клавиши Shift или Ctrl.</p>\n"

#: tips.cpp:45
@@ -4896,7 +4899,7 @@ msgid ""
"<p>...that you can convert an existing book collection to a bibliography,\n"
"which can then be exported to bibtex or Bibtexml format.</p>\n"
msgstr ""
"<p>...что вы можете конвертировать текущую коллекцию книг в библиографию,\n"
"<p>что вы можете конвертировать текущую коллекцию книг в библиографию,\n"
"которая может быть экспортирована в формат Bibtex или Bibtexml.</p>\n"

#: tips.cpp:50
@@ -4904,7 +4907,7 @@ msgid ""
"<p>...that you can add, edit, and delete string macros for bibliographies.</"
"p>\n"
msgstr ""
"<p>...что вы можете добавлять, редактировать и удалять строковые макросы для "
"<p>что вы можете добавлять, редактировать и удалять строковые макросы для "
"библиографий.</p>\n"

#: tips.cpp:54
@@ -4915,7 +4918,7 @@ msgid ""
"editors\n"
"to be sorted or printed together, for example.</p>\n"
msgstr ""
"<p>...что если более чем одно поле форматируется как \"имя\", то в "
"<p>что если более чем одно поле форматируется как \"имя\", то в "
"коллекцию\n"
"добавляется дополнительная группа \"Люди\", например, для сортировки и "
"печати вместе.</p>\n"
@@ -4927,7 +4930,7 @@ msgid ""
"CSS\n"
"within the stylesheet governs things like the font, the margins, etc.</p>\n"
msgstr ""
"<p>...что вы можете менять внешний вид, печатаемых отчетов, редактируя\n"
"<p>что вы можете менять внешний вид, печатаемых отчетов, редактируя\n"
"файл <tt>tellico-printing.xsl</tt>. Этот файл создает HTML и CSS\n"
"с такими элементами как шрифт, размер и т.д. </p>\n"

@@ -4936,12 +4939,12 @@ msgid ""
"<p>...that you can import using any generic XSL stylesheet which\n"
"outputs a valid Tellico XML file.</p>\n"
msgstr ""
"<p>...что вы можете импортировать, используя стандартный\n"
"<p>что вы можете импортировать, используя стандартный\n"
"лист стилей XSL, на выходе получая правильный файл Tellico XML.</p>\n"

#: tips.cpp:71
msgid "<p>...that double-clicking an entry item opens the Entry Editor.</p>\n"
msgstr "<p>...что двойной щелчок на записи открывает редактор записей.</p>\n"
msgstr "<p>что двойной щелчок на записи открывает редактор записей.</p>\n"

#: tips.cpp:75
msgid ""
@@ -4949,7 +4952,7 @@ msgid ""
"as\n"
"&lt;b&gt;bold&lt;/b&gt; or &lt;i&gt;italic&lt;/i&gt;.</p>\n"
msgstr ""
"<p>...что в любое поле типа \"Большой текст\" вы можете добавлять теги HTML, "
"<p>что в любое поле типа \"Большой текст\" вы можете добавлять теги HTML, "
"такие как \n"
"&lt;b&gt;жирный шрифт&lt;/b&gt; или &lt;i&gt;курсивный&lt;/i&gt;.</p>\n"

@@ -4958,7 +4961,7 @@ msgid ""
"<p>...that in the Detailed View, you can press a letter on the\n"
"keyboard to skip to the next entry that starts with that letter.</p>\n"
msgstr ""
"<p>...что в подробном виде вы можете нажать кнопку буквы на клавиатуре для\n"
"<p>что в подробном виде вы можете нажать кнопку буквы на клавиатуре для\n"
"перехода к записи, начинающейся с этой буквы.</p>\n"

#: tips.cpp:85
@@ -4973,9 +4976,9 @@ msgid ""
"types by respecting proper sorting at the same time. Consider for example\n"
"a number field followed by a text subfield with entries 3b, 14a.</p>\n"
msgstr ""
"<p>...что вы можете использовать \"зависимые\" поля для комбинации\n"
"<p>что вы можете использовать \"зависимые\" поля для комбинации\n"
"нескольких раздельных полей в одно. Просто выберите тип \"зависимый\" \n"
"и используйте описание вроде \"Значение: %{поле1}%{поле2}\", где %{...}\n"
"и используйте описание вроде \"Значение: %{поле1}%{поле2}\", где %{}\n"
"заменяется на значение поля. Это полезно для использование различных\n"
"полей в одном поле, т.е. для лучшей группировки и для комбинации полей\n"
"различных типов с приоритетом правильной сортировки. Пример -\n"

+ 1
- 1
src/borrower.h View File

@@ -78,7 +78,7 @@ public:
const TQString& name() const { return m_name; }
const LoanVec& loans() const { return m_loans; }
bool isEmpty() const { return m_loans.isEmpty(); }
int count() const { return m_loans.count(); }
size_t count() const { return m_loans.count(); }

Data::LoanPtr loan(Data::ConstEntryPtr entry);
void addLoan(Data::LoanPtr loan);

+ 1
- 1
src/borroweritem.cpp View File

@@ -25,7 +25,7 @@ BorrowerItem::BorrowerItem(GUI::ListView* parent_, Data::BorrowerPtr borrower_)
setPixmap(0, SmallIcon(TQString::fromLatin1("kaddressbook")));
}

int BorrowerItem::count() const {
size_t BorrowerItem::count() const {
return m_borrower ? m_borrower->count() : GUI::CountedItem::count();
}


+ 1
- 1
src/borroweritem.h View File

@@ -29,7 +29,7 @@ public:
virtual bool isBorrowerItem() const { return true; }
Data::BorrowerPtr borrower() { return m_borrower; }

virtual int count() const;
virtual size_t count() const;
virtual Data::EntryVec entries() const;

private:

+ 4
- 0
src/collection.cpp View File

@@ -878,6 +878,9 @@ bool Collection::mergeEntry(EntryPtr e1, EntryPtr e2, bool overwrite_, bool askU
if(ret) {
e1->setField(field, vals1.join(TQString::fromLatin1("; ")));
}
// remove the merging due to use comments
// maybe in the future have a more intelligent way
#if 0
} else if(field->flags() & Data::Field::AllowMultiple) {
// if field F allows multiple values and not a Table (see above case),
// 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
// items1.sort();
e1->setField(field, items1.join(TQString::fromLatin1("; ")));
ret = true;
#endif
} else if(askUser_ && e1->field(field) != e2->field(field)) {
int ret = Kernel::self()->askAndMerge(e1, e2, field);
if(ret == 0) {

+ 4
- 2
src/collectionfieldsdialog.cpp View File

@@ -254,7 +254,6 @@ CollectionFieldsDialog::CollectionFieldsDialog(Data::CollPtr coll_, TQWidget* pa

// need to stretch at bottom
vbox->setStretchFactor(new TQWidget(vbox), 1);
TDEAcceleratorManager::manage(vbox);

// keep a default collection
m_defaultCollection = CollectionFactory::collection(m_coll->type(), true);
@@ -279,6 +278,9 @@ CollectionFieldsDialog::~CollectionFieldsDialog() {
}

void CollectionFieldsDialog::slotSelectInitial() {
// the accel management is here so that it doesn't cause conflicts with the
// ones explicitly set in the constructor
TDEAcceleratorManager::manage(mainWidget());
m_fieldsBox->setSelected(0, true);
}

@@ -405,7 +407,7 @@ void CollectionFieldsDialog::slotNew() {
}

TQString name = TQString::fromLatin1("custom") + TQString::number(m_newFields.count()+1);
int count = m_newFields.count() + 1;
size_t count = m_newFields.count() + 1;
TQString title = i18n("New Field") + TQString::fromLatin1(" %1").arg(count);
while(m_fieldsBox->findItem(title)) {
++count;

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

@@ -102,4 +102,21 @@ Tellico::Data::FieldVec FileCatalog::defaultFields() {
return list;
}

int FileCatalog::sameEntry(Data::EntryPtr entry1_, Data::EntryPtr entry2_) const {
// equal urls are always equal, even if modification time or something is different
if(Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("url"), this) > 0) {
return 100; // good match
}
// if volume or created time is different, it can't be same entry
if(Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("volume"), this) == 0 ||
Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("created"), this) == 0 ||
Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("size"), this) == 0) {
return 0;
}
int res = Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("title"), this);
res += Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("description"), this);
res += Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("mimetype"), this);
return res;
}

#include "filecatalog.moc"

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

@@ -1,5 +1,5 @@
/***************************************************************************
copyright : (C) 2005-2006 by Robby Stephenson
copyright : (C) 2005-2008 by Robby Stephenson
email : robby@periapsis.org
***************************************************************************/

@@ -30,6 +30,7 @@ public:
FileCatalog(bool addFields, const TQString& title = TQString());

virtual Type type() const { return File; }
virtual int sameEntry(Data::EntryPtr entry1, Data::EntryPtr entry2) const;

static FieldVec defaultFields();
};

+ 2
- 0
src/controller.cpp View File

@@ -434,6 +434,7 @@ void Controller::slotDeleteSelectedEntries() {
int ret = KMessageBox::warningContinueCancel(Kernel::self()->widget(), str, i18n("Delete Entry"),
KGuiItem(i18n("&Delete"), TQString::fromLatin1("editdelete")), dontAsk);
if(ret != KMessageBox::Continue) {
m_working = false;
return;
}
} else {
@@ -448,6 +449,7 @@ void Controller::slotDeleteSelectedEntries() {
i18n("Delete Multiple Entries"),
KGuiItem(i18n("&Delete"), TQString::fromLatin1("editdelete")), dontAsk);
if(ret != KMessageBox::Continue) {
m_working = false;
return;
}
}

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

@@ -17,6 +17,8 @@ drophandler.h drophandler.cpp \
tellico-rename.upd tellico.upd \
tellico-1-3-update.pl

dcopinterface_DCOPIDLNG = ALL

kde_kcfg_DATA = tellico_config.kcfg

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] = {
{ "bool", "exportHTML(TQString)", "exportHTML(TQString file)" },
{ "bool", "exportCSV(TQString)", "exportCSV(TQString file)" },
{ "bool", "exportPilotDB(TQString)", "exportPilotDB(TQString file)" },
{ "TQValueList<long int>", "selectedEntries()", "selectedEntries()" },
{ "TQValueList<long int>", "filteredEntries()", "filteredEntries()" },
{ "TQValueList<long>", "selectedEntries()", "selectedEntries()" },
{ "TQValueList<long>", "filteredEntries()", "filteredEntries()" },
{ "void", "openFile(TQString)", "openFile(TQString file)" },
{ "void", "setFilter(TQString)", "setFilter(TQString text)" },
{ "bool", "showEntry(long int)", "showEntry(long int id)" },
{ "bool", "showEntry(long)", "showEntry(long id)" },
{ 0, 0, 0 }
};
static const int ApplicationInterface_ftable_hiddens[15] = {
@@ -162,12 +162,12 @@ bool ApplicationInterface::process(const TQCString &fun, const TQByteArray &data
TQDataStream _replyStream( replyData, IO_WriteOnly );
_replyStream << exportPilotDB(arg0 );
} break;
case 10: { // TQValueList<long int> selectedEntries()
case 10: { // TQValueList<long> selectedEntries()
replyType = ApplicationInterface_ftable[10][0];
TQDataStream _replyStream( replyData, IO_WriteOnly );
_replyStream << selectedEntries( );
} break;
case 11: { // TQValueList<long int> filteredEntries()
case 11: { // TQValueList<long> filteredEntries()
replyType = ApplicationInterface_ftable[11][0];
TQDataStream _replyStream( replyData, IO_WriteOnly );
_replyStream << filteredEntries( );
@@ -188,8 +188,8 @@ bool ApplicationInterface::process(const TQCString &fun, const TQByteArray &data
replyType = ApplicationInterface_ftable[13][0];
setFilter(arg0 );
} break;
case 14: { // bool showEntry(long int)
long int arg0;
case 14: { // bool showEntry(long)
long arg0;
TQDataStream arg( data, IO_ReadOnly );
if (arg.atEnd()) return false;
arg >> arg0;
@@ -233,14 +233,14 @@ namespace Tellico {

static const int CollectionInterface_fhash = 11;
static const char* const CollectionInterface_ftable[9][3] = {
{ "long int", "addEntry()", "addEntry()" },
{ "bool", "removeEntry(long int)", "removeEntry(long int entryID)" },
{ "long", "addEntry()", "addEntry()" },
{ "bool", "removeEntry(long)", "removeEntry(long entryID)" },
{ TQSTRINGLIST_OBJECT_NAME_STRING, "values(TQString)", "values(TQString fieldName)" },
{ TQSTRINGLIST_OBJECT_NAME_STRING, "values(long int,TQString)", "values(long int entryID,TQString fieldName)" },
{ TQSTRINGLIST_OBJECT_NAME_STRING, "values(long,TQString)", "values(long entryID,TQString fieldName)" },
{ TQSTRINGLIST_OBJECT_NAME_STRING, "bibtexKeys()", "bibtexKeys()" },
{ TQSTRING_OBJECT_NAME_STRING, "bibtexKey(long int)", "bibtexKey(long int entryID)" },
{ "bool", "setFieldValue(long int,TQString,TQString)", "setFieldValue(long int entryID,TQString fieldName,TQString value)" },
{ "bool", "addFieldValue(long int,TQString,TQString)", "addFieldValue(long int entryID,TQString fieldName,TQString value)" },
{ TQSTRING_OBJECT_NAME_STRING, "bibtexKey(long)", "bibtexKey(long entryID)" },
{ "bool", "setFieldValue(long,TQString,TQString)", "setFieldValue(long entryID,TQString fieldName,TQString value)" },
{ "bool", "addFieldValue(long,TQString,TQString)", "addFieldValue(long entryID,TQString fieldName,TQString value)" },
{ 0, 0, 0 }
};
static const int CollectionInterface_ftable_hiddens[8] = {
@@ -264,13 +264,13 @@ bool CollectionInterface::process(const TQCString &fun, const TQByteArray &data,
}
int* fp = fdict->find( fun );
switch ( fp?*fp:-1) {
case 0: { // long int addEntry()
case 0: { // long addEntry()
replyType = CollectionInterface_ftable[0][0];
TQDataStream _replyStream( replyData, IO_WriteOnly );
_replyStream << addEntry( );
} break;
case 1: { // bool removeEntry(long int)
long int arg0;
case 1: { // bool removeEntry(long)
long arg0;
TQDataStream arg( data, IO_ReadOnly );
if (arg.atEnd()) return false;
arg >> arg0;
@@ -287,8 +287,8 @@ bool CollectionInterface::process(const TQCString &fun, const TQByteArray &data,
TQDataStream _replyStream( replyData, IO_WriteOnly );
_replyStream << values(arg0 );
} break;
case 3: { // TQStringList values(long int,TQString)
long int arg0;
case 3: { // TQStringList values(long,TQString)
long arg0;
TQString arg1;
TQDataStream arg( data, IO_ReadOnly );
if (arg.atEnd()) return false;
@@ -304,8 +304,8 @@ bool CollectionInterface::process(const TQCString &fun, const TQByteArray &data,
TQDataStream _replyStream( replyData, IO_WriteOnly );
_replyStream << bibtexKeys( );
} break;
case 5: { // TQString bibtexKey(long int)
long int arg0;
case 5: { // TQString bibtexKey(long)
long arg0;
TQDataStream arg( data, IO_ReadOnly );
if (arg.atEnd()) return false;
arg >> arg0;
@@ -313,8 +313,8 @@ bool CollectionInterface::process(const TQCString &fun, const TQByteArray &data,
TQDataStream _replyStream( replyData, IO_WriteOnly );
_replyStream << bibtexKey(arg0 );
} break;
case 6: { // bool setFieldValue(long int,TQString,TQString)
long int arg0;
case 6: { // bool setFieldValue(long,TQString,TQString)
long arg0;
TQString arg1;
TQString arg2;
TQDataStream arg( data, IO_ReadOnly );
@@ -328,8 +328,8 @@ bool CollectionInterface::process(const TQCString &fun, const TQByteArray &data,
TQDataStream _replyStream( replyData, IO_WriteOnly );
_replyStream << setFieldValue(arg0, arg1, arg2 );
} break;
case 7: { // bool addFieldValue(long int,TQString,TQString)
long int arg0;
case 7: { // bool addFieldValue(long,TQString,TQString)
long arg0;
TQString arg1;
TQString arg2;
TQDataStream arg( data, IO_ReadOnly );

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

@@ -15,9 +15,13 @@
#include "../mainwindow.h"
#include "../tellico_kernel.h"
#include "../tellico_debug.h"
#include "../translators/bibteximporter.h"
#include "../translators/risimporter.h"

#include <kurldrag.h>
#include <kmimetype.h>
#include <tdeio/netaccess.h>
#include <tdeio/job.h>

using Tellico::DropHandler;

@@ -62,18 +66,37 @@ bool DropHandler::handleURL(const KURL::List& urls_) {
bool hasUnknown = false;
KURL::List tc, pdf, bib, ris;
for(KURL::List::ConstIterator it = urls_.begin(); it != urls_.end(); ++it) {
KMimeType::Ptr ptr = KMimeType::findByURL(*it);
const KURL& url = *it;
KMimeType::Ptr ptr;
// findByURL doesn't work for http, so actually query
// the url itself
if(url.protocol() != TQString::fromLatin1("http")) {
ptr = KMimeType::findByURL(url);
} else {
TDEIO::MimetypeJob* job = TDEIO::mimetype(url, false /*progress*/);
TDEIO::NetAccess::synchronousRun(job, Kernel::self()->widget());
ptr = KMimeType::mimeType(job->mimetype());
}
if(ptr->is(TQString::fromLatin1("application/x-tellico"))) {
tc << *it;
tc << url;
} else if(ptr->is(TQString::fromLatin1("application/pdf"))) {
pdf << *it;
pdf << url;
} else if(ptr->is(TQString::fromLatin1("text/x-bibtex")) ||
ptr->is(TQString::fromLatin1("application/x-bibtex"))) {
bib << *it;
ptr->is(TQString::fromLatin1("application/x-bibtex")) ||
ptr->is(TQString::fromLatin1("application/bibtex"))) {
bib << url;
} else if(ptr->is(TQString::fromLatin1("application/x-research-info-systems"))) {
ris << *it;
ris << url;
} else if(url.fileName().endsWith(TQString::fromLatin1(".bib"))) {
bib << url;
} else if(url.fileName().endsWith(TQString::fromLatin1(".ris"))) {
ris << url;
} else if(ptr->is(TQString::fromLatin1("text/plain")) && Import::BibtexImporter::maybeBibtex(url)) {
bib << url;
} else if(ptr->is(TQString::fromLatin1("text/plain")) && Import::RISImporter::maybeRIS(url)) {
ris << url;
} else {
myDebug() << "DropHandler::handleURL() - unrecognized type: " << ptr->name() << " (" << *it << ")" << endl;
myDebug() << "DropHandler::handleURL() - unrecognized type: " << ptr->name() << " (" << url << ")" << endl;
hasUnknown = true;
}
}

+ 8
- 0
src/document.cpp View File

@@ -15,6 +15,7 @@
#include "mainwindow.h" // needed for calling fileSave()
#include "collectionfactory.h"
#include "translators/tellicoimporter.h"
#include "translators/tellicosaximporter.h"
#include "translators/tellicozipexporter.h"
#include "translators/tellicoxmlexporter.h"
#include "collection.h"
@@ -109,7 +110,12 @@ bool Document::openDocument(const KURL& url_) {
}

delete m_importer;
#ifdef SAX_SUPPORT
myLog() << "Document::openDocument() - using SAX loader" << endl;
m_importer = new Import::TellicoSaxImporter(url_, m_loadAllImages);
#else
m_importer = new Import::TellicoImporter(url_, m_loadAllImages);
#endif

CollPtr coll = m_importer->collection();
// delayed image loading only works for zip files
@@ -146,6 +152,8 @@ bool Document::openDocument(const KURL& url_) {
TQTimer::singleShot(500, this, TQT_SLOT(slotLoadAllImages()));
} else {
emit signalCollectionImagesLoaded(m_coll);
m_importer->deleteLater();
m_importer = 0;
}
return true;
}

+ 5
- 0
src/document.h View File

@@ -27,6 +27,7 @@
namespace Tellico {
namespace Import {
class TellicoImporter;
class TellicoSaxImporter;
}
namespace Data {

@@ -227,7 +228,11 @@ private:
bool m_loadAllImages : 1;
KURL m_url;
bool m_validFile : 1;
#ifdef SAX_SUPPORT
TQGuardedPtr<Import::TellicoSaxImporter> m_importer;
#else
TQGuardedPtr<Import::TellicoImporter> m_importer;
#endif
bool m_cancelImageWriting : 1;
int m_fileFormat;
bool m_allImagesOnDisk : 1;

+ 16
- 1
src/entry.cpp View File

@@ -252,8 +252,13 @@ bool Entry::setField(const TQString& name_, const TQString& value_) {
}

// the string store is probable only useful for fields with auto-completion or choice/number/bool
bool shareType = f->type() == Field::Choice ||
f->type() == Field::Bool ||
f->type() == Field::Image ||
f->type() == Field::Rating ||
f->type() == Field::Number;
if(!(f->flags() & Field::AllowMultiple) &&
((f->type() == Field::Choice || f->type() == Field::Bool || f->type() == Field::Number) ||
(shareType ||
(f->type() == Field::Line && (f->flags() & Field::AllowCompletion)))) {
m_fields.insert(Tellico::shareString(name_), Tellico::shareString(value_));
} else {
@@ -415,6 +420,16 @@ int Entry::compareValues(EntryPtr e1, EntryPtr e2, FieldPtr f) {
if(f->name() == Latin1Literal("lccn") && LCCNValidator::formalize(s1) == LCCNValidator::formalize(s2)) {
return 5;
}
if(f->name() == Latin1Literal("arxiv")) {
// normalize and unVersion arxiv ID
s1.remove(TQRegExp(TQString::fromLatin1("^arxiv:"), false));
s1.remove(TQRegExp(TQString::fromLatin1("v\\d+$")));
s2.remove(TQRegExp(TQString::fromLatin1("^arxiv:"), false));
s2.remove(TQRegExp(TQString::fromLatin1("v\\d+$")));
if(s1 == s2) {
return 5;
}
}
if(f->formatFlag() == Field::FormatName) {
s1 = e1->field(f, true).lower();
s2 = e2->field(f, true).lower();

+ 6
- 5
src/entry.h View File

@@ -84,11 +84,6 @@ public:
* The assignment operator is overloaded, since the id must be different.
*/
Entry& operator=(const Entry& other);
/**
* two entries are equal if all their field values are equal, except for
* file catalogs which match on the url only
*/
bool operator==(const Entry& other);

~Entry();

@@ -231,6 +226,12 @@ public:
static TQString dependentValue(ConstEntryPtr e, const TQString& formatString, bool formatted);

private:
/**
* two entries are equal if all their field values are equal, except for
* file catalogs which match on the url only
*/
bool operator==(const Entry& other);

CollPtr m_coll;
long m_id;
StringMap m_fields;

+ 1
- 1
src/entrygroupitem.cpp View File

@@ -131,7 +131,7 @@ TQString EntryGroupItem::key(int col_, bool) const {
return m_key;
}

int EntryGroupItem::count() const {
size_t EntryGroupItem::count() const {
return m_group ? m_group->count() : GUI::CountedItem::count();
}


+ 1
- 1
src/entrygroupitem.h View File

@@ -51,7 +51,7 @@ public:
*/
virtual TQString key(int col, bool) const;

virtual int count() const;
virtual size_t count() const;
virtual Data::EntryVec entries() const;

private:

+ 14
- 1
src/entryview.cpp View File

@@ -26,6 +26,7 @@
#include "document.h"
#include "latin1literal.h"
#include "../core/drophandler.h"
#include "../tellico_debug.h"

#include <kstandarddirs.h>
#include <krun.h>
@@ -37,10 +38,22 @@
#include <tdelocale.h>

#include <tqfile.h>
#include <tqclipboard.h>

using Tellico::EntryView;
using Tellico::EntryViewWidget;

EntryView::EntryView(TQWidget* parent_, const char* name_) : TDEHTMLPart(parent_, name_),
EntryViewWidget::EntryViewWidget(TDEHTMLPart* part, TQWidget* parent)
: TDEHTMLView(part, parent) {}

// for the life of me, I could not figure out how to call the actual
// TDEHTMLPartBrowserExtension::copy() slot, so this will have to do
void EntryViewWidget::copy() {
TQString text = part()->selectedText();
TQApplication::clipboard()->setText(text, TQClipboard::Clipboard);
}

EntryView::EntryView(TQWidget* parent_, const char* name_) : TDEHTMLPart(new EntryViewWidget(this, parent_), parent_, name_),
m_entry(0), m_handler(0), m_run(0), m_tempFile(0), m_useGradientImages(true), m_checkCommonFile(true) {
setJScriptEnabled(false);
setJavaEnabled(false);

+ 11
- 0
src/entryview.h View File

@@ -20,6 +20,7 @@ class KTempFile;
#include "datavectors.h"

#include <tdehtml_part.h>
#include <tdehtmlview.h>

#include <tqguardedptr.h>

@@ -103,5 +104,15 @@ private:
bool m_checkCommonFile : 1;
};

// stupid naming on my part, I need to subclass the view to
// add a slot. EntryView is really a part though
class EntryViewWidget : public TDEHTMLView {
Q_OBJECT
public:
EntryViewWidget(TDEHTMLPart* part, TQWidget* parent);
public slots:
void copy();
};

} //end namespace
#endif

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

@@ -10,7 +10,7 @@ libfetch_a_SOURCES = amazonfetcher.cpp animenfofetcher.cpp arxivfetcher.cpp \
discogsfetcher.cpp entrezfetcher.cpp execexternalfetcher.cpp fetcher.cpp fetchmanager.cpp \
gcstarpluginfetcher.cpp googlescholarfetcher.cpp ibsfetcher.cpp imdbfetcher.cpp \
isbndbfetcher.cpp messagehandler.cpp srufetcher.cpp yahoofetcher.cpp z3950connection.cpp \
z3950fetcher.cpp
z3950fetcher.cpp amazonrequest.cpp hmac_sha2.c sha2.c

####### tdevelop will overwrite this part!!! (end)############

@@ -40,6 +40,8 @@ citebasefetcher.h citebasefetcher.cpp \
bibsonomyfetcher.h bibsonomyfetcher.cpp \
googlescholarfetcher.h googlescholarfetcher.cpp \
discogsfetcher.h discogsfetcher.cpp \
amazonrequest.h amazonrequest.cpp \
hmac_sha2.h hmac_sha2.c sha2.h sha2.c \
z3950-servers.cfg

appdir = $(kde_datadir)/tellico

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

@@ -12,6 +12,7 @@
***************************************************************************/

#include "amazonfetcher.h"
#include "amazonrequest.h"
#include "messagehandler.h"
#include "../translators/xslthandler.h"
#include "../translators/tellicoimporter.h"
@@ -47,7 +48,6 @@
namespace {
static const int AMAZON_RETURNS_PER_REQUEST = 10;
static const int AMAZON_MAX_RETURNS_TOTAL = 20;
static const char* AMAZON_ACCESS_KEY = "0834VQ4S71KYPVSYQD02";
static const char* AMAZON_ASSOC_TOKEN = "tellico-20";
// need to have these in the translation file
static const char* linkText = I18N_NOOP("Amazon Link");
@@ -84,7 +84,6 @@ const AmazonFetcher::SiteData& AmazonFetcher::siteData(int site_) {

AmazonFetcher::AmazonFetcher(Site site_, TQObject* parent_, const char* name_)
: Fetcher(parent_, name_), m_xsltHandler(0), m_site(site_), m_imageSize(MediumImage),
m_access(TQString::fromLatin1(AMAZON_ACCESS_KEY)),
m_assoc(TQString::fromLatin1(AMAZON_ASSOC_TOKEN)), m_addLinkField(true), m_limit(AMAZON_MAX_RETURNS_TOTAL),
m_countOffset(0), m_page(1), m_total(-1), m_numResults(0), m_job(0), m_started(false) {
m_name = siteData(site_).title;
@@ -109,7 +108,8 @@ bool AmazonFetcher::canFetch(int type) const {
|| type == Data::Collection::Bibtex
|| type == Data::Collection::Album
|| type == Data::Collection::Video
|| type == Data::Collection::Game;
|| type == Data::Collection::Game
|| type == Data::Collection::BoardGame;
}

void AmazonFetcher::readConfigHook(const TDEConfigGroup& config_) {
@@ -117,6 +117,10 @@ void AmazonFetcher::readConfigHook(const TDEConfigGroup& config_) {
if(!s.isEmpty()) {
m_access = s;
}
s = config_.readEntry("SecretKey");
if(!s.isEmpty()) {
m_amazonKey = s;
}
s = config_.readEntry("AssocToken");
if(!s.isEmpty()) {
m_assoc = s;
@@ -152,35 +156,41 @@ void AmazonFetcher::doSearch() {
// myDebug() << "AmazonFetcher::doSearch() - getting page " << m_page << endl;

const SiteData& data = siteData(m_site);
KURL u = data.url;
u.addQueryItem(TQString::fromLatin1("Service"), TQString::fromLatin1("AWSECommerceService"));
u.addQueryItem(TQString::fromLatin1("AssociateTag"), m_assoc);
u.addQueryItem(TQString::fromLatin1("AWSAccessKeyId"), m_access);
u.addQueryItem(TQString::fromLatin1("Operation"), TQString::fromLatin1("ItemSearch"));
u.addQueryItem(TQString::fromLatin1("ResponseGroup"), TQString::fromLatin1("Large"));
u.addQueryItem(TQString::fromLatin1("ItemPage"), TQString::number(m_page));
u.addQueryItem(TQString::fromLatin1("Version"), TQString::fromLatin1("2007-10-29"));

TQMap<TQString, TQString> params;
params.insert(TQString::fromLatin1("Service"), TQString::fromLatin1("AWSECommerceService"));
params.insert(TQString::fromLatin1("AssociateTag"), m_assoc);
params.insert(TQString::fromLatin1("AWSAccessKeyId"), m_access);
params.insert(TQString::fromLatin1("Operation"), TQString::fromLatin1("ItemSearch"));
params.insert(TQString::fromLatin1("ResponseGroup"), TQString::fromLatin1("Large"));
params.insert(TQString::fromLatin1("ItemPage"), TQString::number(m_page));
params.insert(TQString::fromLatin1("Version"), TQString::fromLatin1("2007-10-29"));

const int type = Kernel::self()->collectionType();
switch(type) {
case Data::Collection::Book:
case Data::Collection::ComicBook:
case Data::Collection::Bibtex:
u.addQueryItem(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Books"));
u.addQueryItem(TQString::fromLatin1("SortIndex"), TQString::fromLatin1("relevancerank"));
params.insert(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Books"));
params.insert(TQString::fromLatin1("SortIndex"), TQString::fromLatin1("relevancerank"));
break;

case Data::Collection::Album:
u.addQueryItem(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Music"));
params.insert(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Music"));
break;

case Data::Collection::Video:
u.addQueryItem(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Video"));
u.addQueryItem(TQString::fromLatin1("SortIndex"), TQString::fromLatin1("relevancerank"));
params.insert(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Video"));
params.insert(TQString::fromLatin1("SortIndex"), TQString::fromLatin1("relevancerank"));
break;

case Data::Collection::Game:
u.addQueryItem(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("VideoGames"));
params.insert(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("VideoGames"));
break;

case Data::Collection::BoardGame:
params.insert(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Toys"));
params.insert(TQString::fromLatin1("SortIndex"), TQString::fromLatin1("relevancerank"));
break;

case Data::Collection::Coin:
@@ -188,7 +198,6 @@ void AmazonFetcher::doSearch() {
case Data::Collection::Wine:
case Data::Collection::Base:
case Data::Collection::Card:
default:
message(i18n("%1 does not allow searching for this collection type.").arg(source()), MessageHandler::Warning);
stop();
return;
@@ -207,29 +216,28 @@ void AmazonFetcher::doSearch() {

switch(m_key) {
case Title:
u.addQueryItem(TQString::fromLatin1("Title"), value, mib);
params.insert(TQString::fromLatin1("Title"), value);
break;

case Person:
if(type == Data::Collection::Video) {
u.addQueryItem(TQString::fromLatin1("Actor"), value, mib);
u.addQueryItem(TQString::fromLatin1("Director"), value, mib);
params.insert(TQString::fromLatin1("Actor"), value);
params.insert(TQString::fromLatin1("Director"), value);
} else if(type == Data::Collection::Album) {
u.addQueryItem(TQString::fromLatin1("Artist"), value, mib);
params.insert(TQString::fromLatin1("Artist"), value);
} else if(type == Data::Collection::Game) {
u.addQueryItem(TQString::fromLatin1("Manufacturer"), value, mib);
params.insert(TQString::fromLatin1("Manufacturer"), value);
} else { // books and bibtex
TQString s = TQString::fromLatin1("author:%1 or publisher:%2").arg(value, value);
// u.addQueryItem(TQString::fromLatin1("Author"), value, mib);
// u.addQueryItem(TQString::fromLatin1("Publisher"), value, mib);
u.addQueryItem(TQString::fromLatin1("Power"), s, mib);
// params.insert(TQString::fromLatin1("Author"), value, mib);
// params.insert(TQString::fromLatin1("Publisher"), value, mib);
params.insert(TQString::fromLatin1("Power"), s);
}
break;

case ISBN:
{
u.removeQueryItem(TQString::fromLatin1("Operation"));
u.addQueryItem(TQString::fromLatin1("Operation"), TQString::fromLatin1("ItemLookup"));
params.insert(TQString::fromLatin1("Operation"), TQString::fromLatin1("ItemLookup"));

TQString s = m_value; // not encValue!!!
s.remove('-');
@@ -260,47 +268,46 @@ void AmazonFetcher::doSearch() {
}
}
// the default search is by ASIN, which prohibits SearchIndex
u.removeQueryItem(TQString::fromLatin1("SearchIndex"));
params.remove(TQString::fromLatin1("SearchIndex"));
}
// limit to first 10
while(isbns.size() > 10) {
isbns.pop_back();
}
u.addQueryItem(TQString::fromLatin1("ItemId"), isbns.join(TQString::fromLatin1(",")));
params.insert(TQString::fromLatin1("ItemId"), isbns.join(TQString::fromLatin1(",")));
if(isbn13) {
u.addQueryItem(TQString::fromLatin1("IdType"), TQString::fromLatin1("EAN"));
params.insert(TQString::fromLatin1("IdType"), TQString::fromLatin1("EAN"));
}
}
break;

case UPC:
{
u.removeQueryItem(TQString::fromLatin1("Operation"));
u.addQueryItem(TQString::fromLatin1("Operation"), TQString::fromLatin1("ItemLookup"));