summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Valroff <julien@kirya.net>2013-02-15 18:54:39 +0100
committerJulien Valroff <julien@kirya.net>2013-02-15 18:54:39 +0100
commit12f73b3fc8d8d36fbee892305bdf772854b90bfe (patch)
tree670a0fbfd0b5835d25c17baa4dbccbb7e5b1ace5
parent1e318005d23d0091cd22191f25881b4ac9ff78a7 (diff)
parent063aca3a12dbf69d5ecdd2e949a788e01c91659d (diff)
Merge tag 'upstream/0.4.6'
Upstream version 0.4.6
-rw-r--r--PKG-INFO2
-rw-r--r--po/ar.po1876
-rw-r--r--po/cs.po1177
-rw-r--r--po/da.po1209
-rw-r--r--po/de.po63
-rw-r--r--po/es.po204
-rw-r--r--po/fr.po197
-rw-r--r--po/it.po35
-rw-r--r--po/nb.po38
-rw-r--r--po/nl.po159
-rw-r--r--po/rapid-photo-downloader.pot144
-rw-r--r--po/ru.po200
-rw-r--r--po/sr.po1314
-rw-r--r--po/sv.po1212
-rw-r--r--rapid/ChangeLog37
-rw-r--r--rapid/backupfile.py111
-rw-r--r--rapid/config.py6
-rw-r--r--rapid/generatename.py156
-rw-r--r--rapid/glade3/about.ui3
-rw-r--r--rapid/glade3/xmp.ui1376
-rwxr-xr-xrapid/rapid.py1771
-rw-r--r--rapid/rpdfile.py3
-rw-r--r--rapid/subfolderfile.py408
23 files changed, 7591 insertions, 4110 deletions
diff --git a/PKG-INFO b/PKG-INFO
index c77e051..3800df0 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: rapid-photo-downloader
-Version: 0.4.5
+Version: 0.4.6
Summary: Rapid Photo Downloader for Linux
Home-page: http://www.damonlynch.net/rapid
Author: Damon Lynch
diff --git a/po/ar.po b/po/ar.po
new file mode 100644
index 0000000..ebc483f
--- /dev/null
+++ b/po/ar.po
@@ -0,0 +1,1876 @@
+# Arabic translation for rapid
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the rapid package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: rapid\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-06-23 04:00-0500\n"
+"PO-Revision-Date: 2012-09-09 08:00+0000\n"
+"Last-Translator: Ahmed Shubbar <Unknown>\n"
+"Language-Team: Arabic <ar@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-09-11 00:24+0000\n"
+"X-Generator: Launchpad (build 15924)\n"
+
+#. Translators: if neccessary, for guidance in how to translate this program, you may see http://damonlynch.net/translate.html
+#: rapid/rapid.py:112 rapid/rapid.py:1784 rapid/glade3/rapid.ui.h:1
+msgid "Rapid Photo Downloader"
+msgstr ""
+
+#: rapid/rapid.py:117
+#, python-format
+msgid ""
+"%(date)s\n"
+"%(time)s"
+msgstr ""
+
+#: rapid/rapid.py:119
+#, python-format
+msgid "%(date)s %(time)s"
+msgstr ""
+
+#: rapid/rapid.py:122
+#, python-format
+msgid "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
+msgstr ""
+
+#. Device refers to a thing like a camera, memory card in its reader,
+#. external hard drive, Portable Storage Device, etc.
+#: rapid/rapid.py:157
+msgid "Device"
+msgstr "جهاز"
+
+#. Size refers to the total size of images on the device, typically in
+#. MB or GB
+#: rapid/rapid.py:175
+msgid "Size"
+msgstr "الحجم"
+
+#: rapid/rapid.py:178
+msgid "Download Progress"
+msgstr "اكتمال التنزيل"
+
+#: rapid/rapid.py:336
+#, python-format
+msgid "%(device)s did not unmount"
+msgstr ""
+
+#. This refers to when a device like a hard drive is having its contents scanned,
+#. looking for photos or videos. It is visible initially in the progress bar for each device
+#. (which normally holds "x photos and videos").
+#. It maybe displayed only briefly if the contents of the device being scanned is small.
+#: rapid/rapid.py:1216
+msgid "scanning..."
+msgstr "جاري المسح ..."
+
+#. this location is a human readable explanation for /, and is inserted into Downloading from %(location)s
+#: rapid/rapid.py:1782
+msgid "the root of the file system"
+msgstr ""
+
+#. message in dialog box which asks the user if they really want to be downloading from this location
+#: rapid/rapid.py:1786
+#, python-format
+msgid "Downloading from %(location)s."
+msgstr "تنزيل من %(location)s"
+
+#: rapid/rapid.py:1787
+msgid ""
+"Do you really want to download from here? On some systems, scanning this "
+"location can take a very long time."
+msgstr ""
+"هل فعلا تريد التنزيل من هنا؟ في بعض الانظمة, مسح هذا المكان يستغرق وقتا "
+"طويلا جدا."
+
+#: rapid/rapid.py:2209
+msgid "Download"
+msgstr "تنزيل"
+
+#: rapid/rapid.py:2212
+msgid "Pause"
+msgstr "إيقاف"
+
+#: rapid/rapid.py:2317
+#, python-format
+msgid ""
+"These download folders are invalid:\n"
+"%(folder1)s\n"
+"%(folder2)s"
+msgstr ""
+"مجلدات التنزيل هذا غير صحيحة: \n"
+"%(folder1)s\n"
+"%(folder2)s"
+
+#: rapid/rapid.py:2320
+#, python-format
+msgid ""
+"This download folder is invalid:\n"
+"%s"
+msgstr ""
+"مجلد التنزيل هذا غير صحيح: \n"
+"%s"
+
+#: rapid/rapid.py:2321
+msgid "Download cannot proceed"
+msgstr "لا يمكن بدء التنزيل"
+
+#: rapid/rapid.py:2700
+msgid "About 1 second remaining"
+msgstr "تبقى حوالي ثانية واحدة"
+
+#: rapid/rapid.py:2702
+#, python-format
+msgid "About %i seconds remaining"
+msgstr "تبقى حوالي %i ثانية"
+
+#: rapid/rapid.py:2704
+msgid "About 1 minute remaining"
+msgstr "تبقى حوالي دقيقة واحدة"
+
+#. Translators: in the text '%(minutes)i:%(seconds)02i', only the : should be translated, if needed.
+#. '%(minutes)i' and '%(seconds)02i' should not be modified or left out. They are used to format and display the amount
+#. of time the download has remainging, e.g. 'About 5:36 minutes remaining'
+#: rapid/rapid.py:2709
+#, python-format
+msgid "About %(minutes)i:%(seconds)02i minutes remaining"
+msgstr "تبقى حوالي %(minutes)i:%(seconds)02i دقيقة"
+
+#: rapid/rapid.py:2731 rapid/rpdfile.py:123
+msgid "photos and videos"
+msgstr "صور وفيديو"
+
+#: rapid/rapid.py:2733 rapid/rpdfile.py:125
+msgid "photos or videos"
+msgstr "صور وفيديو"
+
+#: rapid/rapid.py:2736 rapid/rapid.py:3558 rapid/rpdfile.py:128
+msgid "videos"
+msgstr "فيديو"
+
+#: rapid/rapid.py:2738 rapid/preferencesdialog.py:1620 rapid/rpdfile.py:130
+#: rapid/rpdfile.py:291
+msgid "video"
+msgstr "فيديو"
+
+#: rapid/rapid.py:2741 rapid/rapid.py:3556 rapid/rpdfile.py:133
+msgid "photos"
+msgstr "صور"
+
+#. check subfolder preferences for bad values
+#: rapid/rapid.py:2743 rapid/preferencesdialog.py:1619 rapid/rpdfile.py:135
+#: rapid/rpdfile.py:272
+msgid "photo"
+msgstr "صورة"
+
+#: rapid/rapid.py:2770
+#, python-format
+msgid "%(noFiles)s %(filetypes)s downloaded"
+msgstr "%(noFiles)s %(filetypes)s تم تنزيلها"
+
+#: rapid/rapid.py:2774
+#, python-format
+msgid "%(noFiles)s %(filetypes)s failed to download"
+msgstr "%(noFiles)s %(filetypes)s فشل تنزيلها"
+
+#: rapid/rapid.py:2777 rapid/rapid.py:2829
+msgid "warnings"
+msgstr "تحذير"
+
+#: rapid/rapid.py:2786
+msgid "All downloads complete"
+msgstr "كل التنزيلات أكتملت"
+
+#: rapid/rapid.py:2792 rapid/rapid.py:2801 rapid/rapid.py:2810
+#: rapid/rapid.py:2819 rapid/rapid.py:2827
+#, python-format
+msgid "%(number)s %(numberdownloaded)s"
+msgstr "%(number)s %(numberdownloaded)s"
+
+#: rapid/rapid.py:2794 rapid/rapid.py:2812
+#, python-format
+msgid "%(filetype)s downloaded"
+msgstr "%(filetype)s نوع تم تنزيلها"
+
+#: rapid/rapid.py:2803 rapid/rapid.py:2821
+#, python-format
+msgid "%(filetype)s failed to download"
+msgstr "%(filetype)s نوع فشل تنزيلها"
+
+#. e.g.: 3 of 205 photos and videos (202 remaining)
+#: rapid/rapid.py:2860
+#, python-format
+msgid "%(number)s of %(total)s %(filetypes)s (%(remaining)s remaining)"
+msgstr ""
+"اكتمل %(number)s من %(total)s من نوع %(filetypes)s (تبقى %(remaining)s)"
+
+#. e.g.: 205 of 205 photos and videos
+#: rapid/rapid.py:2867
+#, python-format
+msgid "%(number)s of %(total)s %(filetypes)s"
+msgstr "%(number)s من %(total)s من الـ %(filetypes)s"
+
+#: rapid/rapid.py:3222
+msgid "From"
+msgstr "مِن"
+
+#: rapid/rapid.py:3230
+msgid "Auto Detect"
+msgstr "اكتشاف تلقائي"
+
+#: rapid/rapid.py:3234 rapid/preferencesdialog.py:1327
+#, python-format
+msgid "Select a folder containing %(file_types)s"
+msgstr "اختر مجلد يحتوى %(file_types)s"
+
+#: rapid/rapid.py:3275
+msgid "Copy"
+msgstr "نسخ"
+
+#: rapid/rapid.py:3288
+msgid "Move"
+msgstr "انقل"
+
+#: rapid/rapid.py:3310
+msgid "To"
+msgstr "إلى"
+
+#: rapid/rapid.py:3317 rapid/rapid.py:3986
+msgid "Photos:"
+msgstr "صور:"
+
+#: rapid/rapid.py:3320 rapid/preferencesdialog.py:1164
+msgid "Select a folder to download photos to"
+msgstr "اختر مجلد لتنزيل الصور اليه"
+
+#: rapid/rapid.py:3332 rapid/rapid.py:3986
+msgid "Videos:"
+msgstr "مقاطع فيديو:"
+
+#: rapid/rapid.py:3334 rapid/preferencesdialog.py:1182
+msgid "Select a folder to download videos to"
+msgstr "اختر مجلد لتنزيل مقاطع الفيديو إليه:"
+
+#: rapid/rapid.py:3526
+msgid "and"
+msgstr "و"
+
+#: rapid/rapid.py:3531
+msgid "Using backup devices"
+msgstr "جاري استخدام اجهزة الارشفة"
+
+#: rapid/rapid.py:3533
+msgid "Using backup device"
+msgstr "جاري استخدام جهاز الارشفة"
+
+#: rapid/rapid.py:3535
+msgid "No backup devices detected"
+msgstr "لم نعثر على جهاز أرشفة"
+
+#: rapid/rapid.py:3562
+msgid "Free space:"
+msgstr "المساحة الخالية:"
+
+#. (videos) or (photos) will be appended to the free space message displayed to the
+#. user in the status bar.
+#. you should only translate this if your language does not use parantheses
+#: rapid/rapid.py:3574
+#, python-format
+msgid "(%(file_type)s)"
+msgstr "(%(file_type)s)"
+
+#. Freespace available on the filesystem for downloading to
+#. Displayed in status bar message on main window
+#: rapid/rapid.py:3578
+#, python-format
+msgid "%(free)s %(file_type)s"
+msgstr "%(free)s %(file_type)s"
+
+#. Inserted in the middle of the statusbar message concerning the amount of freespace
+#. Used to differentiate between two different file systems
+#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
+#: rapid/rapid.py:3583
+msgid "; "
+msgstr "; "
+
+#. Inserted at the end of the statusbar message concerning the amount of freespace
+#. Used to differentiate between two different file systems
+#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
+#: rapid/rapid.py:3588
+msgid "."
+msgstr "."
+
+#. Freespace available on the filesystem for downloading to
+#. Displayed in status bar message on main window
+#. e.g. 14.7GB available
+#: rapid/rapid.py:3594
+#, python-format
+msgid "%(free)s free"
+msgstr "%(free)s خالية"
+
+#. user manually specified the same location for photos and video backups
+#: rapid/rapid.py:3602
+#, python-format
+msgid "Backing up photos and videos to %(path)s"
+msgstr "جاري ارشفة الصور ومقاطع الفيديو الى المسار %(path)s"
+
+#. user manually specified backup location
+#: rapid/rapid.py:3605
+#, python-format
+msgid "Backing up to %(path)s"
+msgstr "جاري الارشفة الى المسار %(path)s"
+
+#. user manually specified different locations for photo and video backups
+#: rapid/rapid.py:3608
+#, python-format
+msgid "Backing up photos to %(path)s and videos to %(path2)s"
+msgstr ""
+"جاري أرشفة الصور الى المسار %(path)s ومقاطع الفيديو الى المسار %(path2)s"
+
+#: rapid/rapid.py:3615
+#, python-format
+msgid "%(freespace)s. %(backuppaths)s."
+msgstr "%(freespace)s. %(backuppaths)s."
+
+#: rapid/rapid.py:3644
+msgid "Program preferences are invalid"
+msgstr "خيارات البرنامج غير صحيحة"
+
+#: rapid/rapid.py:3770 rapid/rpdfile.py:273
+msgid "Photo"
+msgstr "صورة"
+
+#: rapid/rapid.py:3772 rapid/rpdfile.py:292
+msgid "Video"
+msgstr "مقطع فيديو"
+
+#: rapid/rapid.py:3781
+#, python-format
+msgid "%(file_type)s download folder does not exist"
+msgstr "مجلد التنزيل لـ %(file_type)s غير موجود"
+
+#: rapid/rapid.py:3783 rapid/rapid.py:3797 rapid/rapid.py:3810
+#, python-format
+msgid "Folder: %s"
+msgstr "مجلد: %s"
+
+#: rapid/rapid.py:3795
+#, python-format
+msgid "%(file_type)s download folder is invalid"
+msgstr "مجلد التنزيل لـ %(file_type)s غير صحيح"
+
+#: rapid/rapid.py:3808
+#, python-format
+msgid "%(file_type)s download folder is not writable"
+msgstr "مجلد التنزيل لـ %(file_type)s لا يمكن الكتابة فيه"
+
+#: rapid/rapid.py:3894
+msgid "Thumbnails"
+msgstr "صويرات"
+
+#. Translators: this text is displayed to the user when they request information on the command line options.
+#. The text %default should not be modified or left out.
+#: rapid/rapid.py:3949
+#, python-format
+msgid ""
+"display program information on the command line as the program runs "
+"(default: %default)"
+msgstr ""
+"اعرض معلومات البرنامج على سطر الأوامر خلال عمل البرنامج (الافتراضي: %default)"
+
+#: rapid/rapid.py:3950
+msgid "display debugging information when run from the command line"
+msgstr "اعرض معلومات التدقيق (ديبوق) عند العمل من سطر الأوامر"
+
+#: rapid/rapid.py:3951
+msgid "only output errors to the command line"
+msgstr "فقط اخرج الأخطاء الى سطر الأوامر"
+
+#. image file extensions are recognized RAW files plus TIFF and JPG
+#: rapid/rapid.py:3953
+msgid "list photo and video file extensions the program recognizes and exit"
+msgstr "اعرض امتدادات الصور ومقاطع الفيديوات التي يتعرف عليها البرنامج واغلق"
+
+#: rapid/rapid.py:3955
+msgid ""
+"automatically detect devices from which to download, overwriting existing "
+"program preferences"
+msgstr ""
+"كشف تلقائي للاجهزة التي يمكن التنزيل منها, وتخطى بذلك الاعدادات الحالية "
+"للبرنامج."
+
+#: rapid/rapid.py:3956
+msgid ""
+"manually specify the PATH of the device from which to download, overwriting "
+"existing program preferences"
+msgstr "حدد مسار جهاز التنزيل يدويا, وتخطى بذلك الاعدادات الحالية للبرنامج"
+
+#: rapid/rapid.py:3957
+msgid "reset all program settings and preferences and exit"
+msgstr "استعد كل اعدادات البرنامج الافتراضية واغلق"
+
+#: rapid/rapid.py:3970
+msgid ""
+"Error: specify device auto-detection or manually specify a device's path "
+"from which to download, but do not do both."
+msgstr ""
+"خطأ: اختر كشف جهاز التنزيل تلقائيا أو حدد مسار جهاز التنزيل يدويا, ولا تختار "
+"الاثنين معا."
+
+#: rapid/rapid.py:3991
+#, python-format
+msgid "and %s"
+msgstr "و %s"
+
+#: rapid/rapid.py:3999
+msgid "All settings and preferences have been reset"
+msgstr "كل الاعدادات والخيارات تم استعادتها للافتراضي"
+
+#: rapid/backupfile.py:157 rapid/backupfile.py:180
+msgid "Backing up error"
+msgstr "خطأ اثناء الأرشفة"
+
+#: rapid/backupfile.py:159
+#, python-format
+msgid "Destination directory could not be created: %(directory)s\n"
+msgstr "لم نستطع إنشاء المجلد الهدف: %(directory)s\n"
+
+#: rapid/backupfile.py:161 rapid/backupfile.py:182 rapid/subfolderfile.py:199
+#, python-format
+msgid ""
+"Source: %(source)s\n"
+"Destination: %(destination)s"
+msgstr ""
+"المصدر: %(source)s\n"
+"الهدف: %(destination)s"
+
+#: rapid/backupfile.py:164 rapid/backupfile.py:184
+#, python-format
+msgid "Error: %(inst)s"
+msgstr "خطأ: %(inst)s"
+
+#: rapid/copyfiles.py:163 rapid/subfolderfile.py:214
+#: rapid/subfolderfile.py:347 rapid/subfolderfile.py:365
+#, python-format
+msgid ""
+"%(problem)s\n"
+"File: %(file)s"
+msgstr ""
+"%(problem)s\n"
+"الملف: %(file)s"
+
+#: rapid/device.py:80
+msgid "Device Detected"
+msgstr "تم كشف جهاز"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#usedeviceprompt
+#: rapid/device.py:89
+msgid ""
+"Should this device or partition be used to download photos or videos from?"
+msgstr ""
+"هل تريد استخدام هذا الجهاز أو جزء القرص الصلب لإستيراد صور ومقاطع فيديو؟"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#usedeviceprompt
+#: rapid/device.py:108
+msgid "_Remember this choice"
+msgstr "تذكر هذا الخيار"
+
+#: rapid/downloadtracker.py:299
+msgid "MB/s"
+msgstr "م.بايت/ث"
+
+#: rapid/generatenameconfig.py:151
+msgid "Date time"
+msgstr "التاريخ الوقت"
+
+#: rapid/generatenameconfig.py:152
+msgid "Text"
+msgstr "نص"
+
+#: rapid/generatenameconfig.py:153
+msgid "Filename"
+msgstr "اسم الملف"
+
+#: rapid/generatenameconfig.py:154
+msgid "Metadata"
+msgstr "البيانات الوصفية"
+
+#: rapid/generatenameconfig.py:155
+msgid "Sequences"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
+#: rapid/generatenameconfig.py:157 rapid/preferencesdialog.py:577
+msgid "Job code"
+msgstr "رمز المهمة"
+
+#: rapid/generatenameconfig.py:158
+msgid "Image date"
+msgstr "تاريخ الصورة"
+
+#: rapid/generatenameconfig.py:159
+msgid "Video date"
+msgstr "تاريخ مقطع الفيديو"
+
+#: rapid/generatenameconfig.py:160
+msgid "Today"
+msgstr "اليوم"
+
+#: rapid/generatenameconfig.py:161
+msgid "Yesterday"
+msgstr "الأمس"
+
+#. Translators: Download time is the time and date that the download started (when the user clicked the Download button)
+#: rapid/generatenameconfig.py:163
+msgid "Download time"
+msgstr "وقت التنزيل"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
+#: rapid/generatenameconfig.py:165
+msgid "Name + extension"
+msgstr "الاسم + الامتداد"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
+#: rapid/generatenameconfig.py:167
+msgid "Name"
+msgstr "الاسم"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
+#: rapid/generatenameconfig.py:169
+msgid "Extension"
+msgstr "امتداد"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
+#: rapid/generatenameconfig.py:171
+msgid "Image number"
+msgstr "رقم الصورة"
+
+#: rapid/generatenameconfig.py:172
+msgid "Video number"
+msgstr "رقم مقطع الفيديو"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
+#: rapid/generatenameconfig.py:174
+msgid "Aperture"
+msgstr "فتحة"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
+#: rapid/generatenameconfig.py:176
+msgid "ISO"
+msgstr "الحساسية (ايزو)"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
+#: rapid/generatenameconfig.py:178
+msgid "Exposure time"
+msgstr "التعريض"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
+#: rapid/generatenameconfig.py:180
+msgid "Focal length"
+msgstr "الطول البؤري"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
+#: rapid/generatenameconfig.py:182
+msgid "Camera make"
+msgstr "مصنع الكاميرا"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
+#: rapid/generatenameconfig.py:184
+msgid "Camera model"
+msgstr "موديل الكاميرا"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
+#: rapid/generatenameconfig.py:186
+msgid "Short camera model"
+msgstr "موديل الكاميرا المختصر"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
+#: rapid/generatenameconfig.py:188
+msgid "Hyphenated short camera model"
+msgstr "موديل الكاميرا المختصر بوصلة"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
+#: rapid/generatenameconfig.py:190
+msgid "Serial number"
+msgstr "الرقم التسلسلي"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
+#: rapid/generatenameconfig.py:192
+msgid "Shutter count"
+msgstr "تعداد شغل المصراع"
+
+#. File number currently refers to the Exif value Exif.Canon.FileNumber
+#: rapid/generatenameconfig.py:194
+msgid "File number"
+msgstr "رقم الملف"
+
+#. Only the folder component of the Exif.Canon.FileNumber value
+#: rapid/generatenameconfig.py:196
+msgid "Folder only"
+msgstr "مجلد فقط"
+
+#. The folder and file component of the Exif.Canon.FileNumber value
+#: rapid/generatenameconfig.py:198
+msgid "Folder and file"
+msgstr "مجلد وملف"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
+#: rapid/generatenameconfig.py:200
+msgid "Owner name"
+msgstr "اسم المالك"
+
+#: rapid/generatenameconfig.py:201
+msgid "Codec"
+msgstr "نمط الترميز"
+
+#: rapid/generatenameconfig.py:202
+msgid "Width"
+msgstr "العرض"
+
+#: rapid/generatenameconfig.py:203
+msgid "Height"
+msgstr "الطول"
+
+#: rapid/generatenameconfig.py:204
+msgid "Length"
+msgstr "طول المقطع"
+
+#: rapid/generatenameconfig.py:205
+msgid "Frames Per Second"
+msgstr "لقطات لكل ثانية"
+
+#: rapid/generatenameconfig.py:206
+msgid "Artist"
+msgstr "الفنان"
+
+#: rapid/generatenameconfig.py:207
+msgid "Copyright"
+msgstr "حقوق المؤلف"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
+#: rapid/generatenameconfig.py:209
+msgid "Downloads today"
+msgstr "عدد الملفات المستوردة اليوم"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
+#: rapid/generatenameconfig.py:211
+msgid "Session number"
+msgstr "رقم الجلسة"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
+#: rapid/generatenameconfig.py:213
+msgid "Subfolder number"
+msgstr "عدد المجلد الفرعي"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
+#: rapid/generatenameconfig.py:215
+msgid "Stored number"
+msgstr "الرقم المخزن"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequenceletters
+#: rapid/generatenameconfig.py:217
+msgid "Sequence letter"
+msgstr "احرف التسلسل"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
+#: rapid/generatenameconfig.py:219
+msgid "All digits"
+msgstr "كل خانات الارقام"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
+#: rapid/generatenameconfig.py:221
+msgid "Last digit"
+msgstr "الخانة الاخيرة"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
+#: rapid/generatenameconfig.py:223
+msgid "Last 2 digits"
+msgstr "الخانتان الاخيرتان"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
+#: rapid/generatenameconfig.py:225
+msgid "Last 3 digits"
+msgstr "الخانات الثلاث الاخيرة"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
+#: rapid/generatenameconfig.py:227
+msgid "Last 4 digits"
+msgstr "الخانات الاربع الاخيرة"
+
+#. Translators: please not the capitalization of this text, and keep it the same if your language features capitalization
+#: rapid/generatenameconfig.py:229
+msgid "Original Case"
+msgstr ""
+
+#. Translators: please not the capitalization of this text, and keep it the same if your language features capitalization
+#: rapid/generatenameconfig.py:231
+msgid "UPPERCASE"
+msgstr "أحرف كبيرة"
+
+#. Translators: please not the capitalization of this text, and keep it the same if your language features capitalization
+#: rapid/generatenameconfig.py:233
+msgid "lowercase"
+msgstr "أحرف صغيرة"
+
+#: rapid/generatenameconfig.py:234
+msgid "One digit"
+msgstr "خانة واحدة"
+
+#: rapid/generatenameconfig.py:235
+msgid "Two digits"
+msgstr "خانتان"
+
+#: rapid/generatenameconfig.py:236
+msgid "Three digits"
+msgstr "ثلاث خانات"
+
+#: rapid/generatenameconfig.py:237
+msgid "Four digits"
+msgstr "اربع خانات"
+
+#: rapid/generatenameconfig.py:238
+msgid "Five digits"
+msgstr "خمس خانات"
+
+#: rapid/generatenameconfig.py:239
+msgid "Six digits"
+msgstr "ست خانات"
+
+#: rapid/generatenameconfig.py:240
+msgid "Seven digits"
+msgstr "سبع خانات"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:242
+msgid "Subseconds"
+msgstr "جزء من الثانية"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:244
+msgid "YYYYMMDD"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:246
+msgid "YYYY-MM-DD"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:248
+msgid "YYMMDD"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:250
+msgid "YY-MM-DD"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:252
+msgid "MMDDYYYY"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:254
+msgid "MMDDYY"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:256
+msgid "MMDD"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:258
+msgid "DDMMYYYY"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:260
+msgid "DDMMYY"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:262
+msgid "YYYY"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:264
+msgid "YY"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:266
+msgid "MM"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:268
+msgid "DD"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:270
+msgid "Month (full)"
+msgstr "الشهر (كاملا)"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:272
+msgid "Month (abbreviated)"
+msgstr "الشهر (مختصر)"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:274
+msgid "HHMMSS"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:276
+msgid "HHMM"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:278
+msgid "HH-MM-SS"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:280
+msgid "HH-MM"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:282
+msgid "HH"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:284
+msgid "MM (minutes)"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:286
+msgid "SS"
+msgstr ""
+
+#: rapid/preferencesdialog.py:374
+#, python-format
+msgid "Subfolder preferences should not start with a %s"
+msgstr "خيارات المجلد الفرعي يجب أن لا تبدأ بـ %s"
+
+#: rapid/preferencesdialog.py:376
+#, python-format
+msgid "Subfolder preferences should not end with a %s"
+msgstr "خيارات المجلد الفرعي يجب أن لا تبتهي بـ %s"
+
+#: rapid/preferencesdialog.py:380
+#, python-format
+msgid "Subfolder preferences should not contain two %s one after the other"
+msgstr "خيارات المجلد الفرعي يبجب أن لا تحتوى %s اثنتان الواحد تلوى الاخرى"
+
+#: rapid/preferencesdialog.py:439 rapid/preferencesdialog.py:700
+msgid "Remove all Job Codes?"
+msgstr "أزل كل برمجات المهمة؟"
+
+#: rapid/preferencesdialog.py:440 rapid/preferencesdialog.py:717
+msgid "Should all Job Codes be removed?"
+msgstr "هل تريد إزالة كل برمجات المهمة؟"
+
+#: rapid/preferencesdialog.py:446
+msgid "Remove all Remembered Paths?"
+msgstr "أزل كل المسارات المحفوظة؟"
+
+#: rapid/preferencesdialog.py:447
+msgid "Should all remembered paths be removed?"
+msgstr "هل تريد إزالة كلم المسارات المحفوظة؟"
+
+#: rapid/preferencesdialog.py:453
+msgid "Remove all Ignored Paths?"
+msgstr "أزل كل المسارات المتجاهلة؟"
+
+#: rapid/preferencesdialog.py:454
+msgid "Should all ignored paths be removed?"
+msgstr "هل تريد إزالة كل المسارات المتجاهلة؟"
+
+#: rapid/preferencesdialog.py:465
+msgid "Error in Photo Rename preferences"
+msgstr "خطأ في خيارات تغيير أسماء الصور"
+
+#: rapid/preferencesdialog.py:645
+msgid "Error in Video Rename preferences"
+msgstr "خطأ في إعدادات تغيير أسماء مقاطع الفيديو"
+
+#: rapid/preferencesdialog.py:666
+msgid "Error in Photo Download Subfolders preferences"
+msgstr "خطأ في إعدادات المجلدات الفرعية لتنزيل الصور"
+
+#: rapid/preferencesdialog.py:683
+msgid "Error in Video Download Subfolders preferences"
+msgstr "خطأ في إعدادات المجلدات الفرعية لتنزيل مقاطع الفيديو"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
+#: rapid/preferencesdialog.py:742
+msgid "Enter a Job Code"
+msgstr "ادخل برمجة مهمة"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
+#: rapid/preferencesdialog.py:758
+msgid "Enter a new Job Code, or select a previous one"
+msgstr "أدخل برمجة مهمة جديدة, او استخدم برمجة سابقة"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
+#: rapid/preferencesdialog.py:761
+msgid "Enter a new Job Code"
+msgstr "ادخل برمجة مهمة جديدة"
+
+#: rapid/preferencesdialog.py:766
+msgid "Job Code:"
+msgstr "برمجة مهمة:"
+
+#: rapid/preferencesdialog.py:822
+msgid "Enter a Path to Ignore"
+msgstr "ادخل مسار لتجاهله"
+
+#: rapid/preferencesdialog.py:834
+msgid "Specify a path that will never be scanned for photos or videos"
+msgstr "حدد مسار لن يتم أبدا مسح ما فيه من صور أو مقاطع فيديو"
+
+#: rapid/preferencesdialog.py:839
+msgid "Path:"
+msgstr "مسار:"
+
+#: rapid/preferencesdialog.py:1082
+msgid "Job Code"
+msgstr ""
+
+#: rapid/preferencesdialog.py:1353
+msgid "Select a folder in which to backup photos"
+msgstr ""
+
+#: rapid/preferencesdialog.py:1366
+msgid "Select a folder in which to backup videos"
+msgstr ""
+
+#. Translators: please do not modify or leave out html formatting tags like <i> and <b>. These are used to format the text the users sees
+#: rapid/preferencesdialog.py:1461
+msgid ""
+"<i><b>Warning:</b> There is insufficient metadata to fully generate the "
+"name. Please use other renaming options.</i>"
+msgstr ""
+
+#: rapid/preferencesdialog.py:1512
+msgid ""
+"<i><b>Warning:</b> There is insufficient metadata to fully generate "
+"subfolders. Please use other subfolder naming options.</i>"
+msgstr ""
+
+#. Translators: you should not modify or leave out the %s. This is a code used by the programming language python to insert a value that thes user will see
+#: rapid/preferencesdialog.py:1515
+#, python-format
+msgid "<i>Example: %s</i>"
+msgstr ""
+
+#. Preferences list is now empty
+#: rapid/preferencesdialog.py:1605
+#, python-format
+msgid ""
+"The %(filetype)s subfolder preferences entered are invalid and cannot be "
+"used.\n"
+"They will be reset to their default values."
+msgstr ""
+
+#: rapid/preferencesdialog.py:1750
+#, python-format
+msgid ""
+"The following regular expressions are invalid, and will be removed unless "
+"you correct them:\n"
+" %s"
+msgstr ""
+
+#: rapid/preferencesdialog.py:1752
+#, python-format
+msgid ""
+"This regular expression is invalid, and will be removed unless you correct "
+"it:\n"
+" %s"
+msgstr ""
+
+#: rapid/preferencesdialog.py:1753
+msgid "Invalid regular expression"
+msgstr ""
+
+#. Translators: this value is used as an example device when automatic backup device detection is enabled. You should translate this.
+#: rapid/preferencesdialog.py:1934
+msgid "externaldrive1"
+msgstr ""
+
+#. Translators: this value is used as an example device when automatic backup device detection is enabled. You should translate this.
+#: rapid/preferencesdialog.py:1936
+msgid "externaldrive2"
+msgstr ""
+
+#: rapid/prefsrapid.py:127
+msgid "New York"
+msgstr ""
+
+#: rapid/prefsrapid.py:128
+msgid "Manila"
+msgstr ""
+
+#: rapid/prefsrapid.py:128
+msgid "Prague"
+msgstr ""
+
+#: rapid/prefsrapid.py:128
+msgid "Helsinki"
+msgstr ""
+
+#: rapid/prefsrapid.py:128
+msgid "Wellington"
+msgstr ""
+
+#: rapid/prefsrapid.py:129
+msgid "Tehran"
+msgstr ""
+
+#: rapid/prefsrapid.py:129
+msgid "Kampala"
+msgstr ""
+
+#: rapid/prefsrapid.py:129
+msgid "Paris"
+msgstr ""
+
+#: rapid/prefsrapid.py:129
+msgid "Berlin"
+msgstr ""
+
+#: rapid/prefsrapid.py:129
+msgid "Sydney"
+msgstr ""
+
+#: rapid/prefsrapid.py:130
+msgid "Budapest"
+msgstr ""
+
+#: rapid/prefsrapid.py:130
+msgid "Rome"
+msgstr ""
+
+#: rapid/prefsrapid.py:130
+msgid "Moscow"
+msgstr ""
+
+#: rapid/prefsrapid.py:130
+msgid "Delhi"
+msgstr ""
+
+#: rapid/prefsrapid.py:130
+msgid "Warsaw"
+msgstr ""
+
+#: rapid/prefsrapid.py:131
+msgid "Jakarta"
+msgstr ""
+
+#: rapid/prefsrapid.py:131
+msgid "Madrid"
+msgstr ""
+
+#: rapid/prefsrapid.py:131
+msgid "Stockholm"
+msgstr ""
+
+#. components
+#: rapid/problemnotification.py:27 rapid/subfolderfile.py:358
+msgid "subfolder"
+msgstr ""
+
+#: rapid/problemnotification.py:28 rapid/subfolderfile.py:356
+msgid "filename"
+msgstr ""
+
+#: rapid/problemnotification.py:81
+#, python-format
+msgid "Date time value %s appears invalid."
+msgstr ""
+
+#: rapid/problemnotification.py:82
+msgid "Filename does not have an extension."
+msgstr ""
+
+#. a number component is something like the 8346 in IMG_8346.JPG
+#: rapid/problemnotification.py:84
+msgid "Filename does not have a number component."
+msgstr ""
+
+#: rapid/problemnotification.py:85
+#, python-format
+msgid "Error generating component %s."
+msgstr ""
+
+#. a generic problem
+#: rapid/problemnotification.py:87
+#, python-format
+msgid "%(filetype)s metadata cannot be read"
+msgstr ""
+
+#: rapid/problemnotification.py:89
+#, python-format
+msgid "%(filetype)s %(area)s could not be generated"
+msgstr ""
+
+#: rapid/problemnotification.py:91 rapid/problemnotification.py:92
+#, python-format
+msgid "An error occurred when copying the %(filetype)s"
+msgstr ""
+
+#: rapid/problemnotification.py:94 rapid/problemnotification.py:95
+#, python-format
+msgid "%(filetype)s already exists"
+msgstr ""
+
+#: rapid/problemnotification.py:98
+#, python-format
+msgid ""
+"%(filetype)s could not be backed up because no suitable backup locations "
+"were found."
+msgstr ""
+
+#: rapid/problemnotification.py:103
+#, python-format
+msgid ""
+"%(image1)s was taken on %(image1_date)s at %(image1_time)s, and %(image2)s "
+"on %(image2_date)s at %(image2_time)s."
+msgstr ""
+
+#: rapid/problemnotification.py:104
+#, python-format
+msgid "%(filetype)s was already downloaded"
+msgstr ""
+
+#: rapid/problemnotification.py:108
+#, python-format
+msgid ""
+"The existing %(filetype)s was last modified on %(date)s at %(time)s. Unique "
+"identifier '%(identifier)s' added."
+msgstr ""
+
+#: rapid/problemnotification.py:109
+#, python-format
+msgid "The existing %(filetype)s was last modified on %(date)s at %(time)s."
+msgstr ""
+
+#: rapid/problemnotification.py:110
+#, python-format
+msgid "There is no data with which to name the %(filetype)s."
+msgstr ""
+
+#: rapid/problemnotification.py:112
+#, python-format
+msgid "Error: %(errorno)s %(strerror)s"
+msgstr ""
+
+#: rapid/problemnotification.py:202
+msgid "The metadata might be corrupt."
+msgstr ""
+
+#: rapid/problemnotification.py:205
+msgid ""
+"The filename, extension and Exif information indicate it has already been "
+"downloaded."
+msgstr ""
+
+#: rapid/problemnotification.py:224
+#, python-format
+msgid " It was backed up to %(volume)s"
+msgstr ""
+
+#: rapid/problemnotification.py:226
+msgid " It was backed up to these devices: "
+msgstr ""
+
+#: rapid/problemnotification.py:228 rapid/problemnotification.py:289
+#: rapid/problemnotification.py:301
+#, python-format
+msgid "%s, "
+msgstr ""
+
+#: rapid/problemnotification.py:229 rapid/problemnotification.py:290
+#: rapid/problemnotification.py:302
+#, python-format
+msgid "%(volumes)s and %(final_volume)s."
+msgstr ""
+
+#: rapid/problemnotification.py:241
+#, python-format
+msgid ""
+"Photos detected with the same filenames, but taken at different times: "
+"%(details)s"
+msgstr ""
+
+#: rapid/problemnotification.py:258
+#, python-format
+msgid "An error occurred when backing up on %(volume)s: %(inst)s."
+msgstr ""
+
+#: rapid/problemnotification.py:260
+#, python-format
+msgid "An error occurred when backing up on %(volume)s."
+msgstr ""
+
+#: rapid/problemnotification.py:262
+msgid "Errors occurred when backing up on the following backup devices: "
+msgstr ""
+
+#: rapid/problemnotification.py:266 rapid/problemnotification.py:314
+#, python-format
+msgid "%(volume)s (%(inst)s), "
+msgstr ""
+
+#: rapid/problemnotification.py:268
+#, python-format
+msgid "%(volume)s, "
+msgstr ""
+
+#: rapid/problemnotification.py:272 rapid/problemnotification.py:316
+#, python-format
+msgid "%(volumes)s and %(volume)s (%(inst)s)."
+msgstr ""
+
+#: rapid/problemnotification.py:277
+#, python-format
+msgid "%(volumes)s and %(volume)s."
+msgstr ""
+
+#: rapid/problemnotification.py:285
+#, python-format
+msgid "Backup already exists on %(volume)s."
+msgstr ""
+
+#: rapid/problemnotification.py:287
+msgid "Backups already exist in these locations: "
+msgstr ""
+
+#: rapid/problemnotification.py:297
+#, python-format
+msgid "Backup overwritten on %(volume)s."
+msgstr ""
+
+#: rapid/problemnotification.py:299
+msgid "Backups overwritten on these devices: "
+msgstr ""
+
+#: rapid/problemnotification.py:310
+#, python-format
+msgid "An error occurred when creating directories on %(volume)s: %(inst)s."
+msgstr ""
+
+#: rapid/problemnotification.py:312
+msgid ""
+"Errors occurred when creating directories on the following backup devices: "
+msgstr ""
+
+#: rapid/problemnotification.py:323
+#, python-format
+msgid "%(previousproblem)s Additionally, %(newproblem)s"
+msgstr ""
+
+#: rapid/problemnotification.py:331
+#, python-format
+msgid " Furthermore, there were %(problems)s."
+msgstr ""
+
+#: rapid/problemnotification.py:333
+#, python-format
+msgid " Furthermore, there was a %(problem)s."
+msgstr ""
+
+#: rapid/problemnotification.py:342
+#, python-format
+msgid "The %(type)s metadata is missing."
+msgstr ""
+
+#: rapid/problemnotification.py:344
+msgid "The following metadata is missing: "
+msgstr ""
+
+#: rapid/problemnotification.py:347
+#, python-format
+msgid "%(missing_metadata_elements)s and %(final_missing_metadata_element)s."
+msgstr ""
+
+#: rapid/problemnotification.py:364
+msgid "Problems in subfolder and filename generation"
+msgstr ""
+
+#: rapid/problemnotification.py:366
+msgid "Problem in subfolder and filename generation"
+msgstr ""
+
+#: rapid/problemnotification.py:369
+#, python-format
+msgid "Problems in %s generation"
+msgstr ""
+
+#: rapid/problemnotification.py:371
+#, python-format
+msgid "Problem in %s generation"
+msgstr ""
+
+#: rapid/problemnotification.py:380
+#, python-format
+msgid "%(filetype)s already exists, but it was backed up"
+msgstr ""
+
+#: rapid/problemnotification.py:382
+#, python-format
+msgid "An error occurred when copying the %(filetype)s, but it was backed up"
+msgstr ""
+
+#: rapid/problemnotification.py:402
+msgid "Multiple problems were encountered"
+msgstr ""
+
+#: rapid/problemnotification.py:404 rapid/subfolderfile.py:233
+msgid "Photos detected with the same filenames, but taken at different times"
+msgstr ""
+
+#: rapid/problemnotification.py:410
+msgid "there were errors backing up"
+msgstr ""
+
+#: rapid/problemnotification.py:411
+msgid "There were errors backing up"
+msgstr ""
+
+#: rapid/problemnotification.py:413
+msgid "there was an error backing up"
+msgstr ""
+
+#: rapid/problemnotification.py:414
+msgid "There was an error backing up"
+msgstr ""
+
+#. e.g.
+#: rapid/problemnotification.py:417
+#, python-format
+msgid "%(previousproblem)s, and %(backinguperror)s"
+msgstr ""
+
+#: rapid/rpdfile.py:153
+#, python-format
+msgid "%(number)s %(filetypes)s"
+msgstr ""
+
+#: rapid/rpdfile.py:163
+#, python-format
+msgid "scanning (found %(photos)s photos and %(videos)s videos)..."
+msgstr ""
+
+#: rapid/subfolderfile.py:80
+#, python-format
+msgid "%(hour)s:%(minute)s:%(second)s:%(subsecond)s"
+msgstr ""
+
+#: rapid/subfolderfile.py:301
+msgid "Photo has already been downloaded"
+msgstr ""
+
+#: rapid/subfolderfile.py:302
+#, python-format
+msgid "Source: %(source)s"
+msgstr ""
+
+#: rapid/subfolderfile.py:354
+msgid "subfolder and filename"
+msgstr ""
+
+#: rapid/subfolderfile.py:393
+msgid "Failed to create download subfolder"
+msgstr ""
+
+#: rapid/subfolderfile.py:394
+#, python-format
+msgid "Path: %s"
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:2
+msgid "_File"
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:3
+msgid "Download / Pause"
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:4
+msgid "_Select"
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:5
+msgid "Select All Without _Job Code"
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:6
+msgid "Select All Wit_h Job Code"
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:7
+msgid "_View"
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:8
+msgid "_Error Log"
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:9
+msgid "_Clear Completed Downloads"
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:10
+msgid "Previous File"
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:11
+msgid "Next File"
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:12
+msgid "_Help"
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:13
+msgid "_Make a Donation..."
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:14
+msgid "_Translate this Application..."
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:15
+msgid "_Check All"
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:16
+msgid "_Uncheck All"
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:17
+msgid "_Include in download"
+msgstr ""
+
+#: rapid/glade3/rapid.ui.h:18
+msgid "_Download"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:1
+msgid "Preferences: Rapid Photo Downloader"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:2
+msgid "<span weight=\"bold\" size=\"x-large\">Photo Download Folders</span>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:3
+msgid "<i>Example: /home/user/Pictures</i>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:4
+msgid "<b>Download Subfolders</b>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:5
+msgid "Download folder:"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:6
+msgid ""
+"Choose the download folder. Subfolders for the downloaded photos will be "
+"automatically created in this folder using the structure specified below."
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:7
+msgid "<b>Download Folder</b>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:8
+msgid "Photo Folders"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:9
+msgid "<span weight=\"bold\" size=\"x-large\">Photo Rename</span>\t"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:10
+msgid "<b>Photo Rename</b>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:11
+msgid " "
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:12
+msgid "<i>New:</i>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:13
+msgid "<i>Original:</i>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:14
+msgid "<b>Example</b>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:15
+msgid "Photo Rename"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:16
+msgid "<span weight=\"bold\" size=\"x-large\">Video Download Folders</span>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:17
+msgid ""
+"Sorry, video downloading functionality disabled. To download videos, please "
+"install either the <i>hachoir metadata</i> and <i>kaa metadata</i> packages "
+"for python, or <i>exiftool</i>."
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:18
+msgid ""
+"Choose the download folder. Subfolders for the downloaded videos will be "
+"automatically created in this folder using the structure specified below."
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:19
+msgid "Video Folders"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:20
+msgid "<span weight=\"bold\" size=\"x-large\">Video Rename</span>\t"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:21
+msgid "Video Rename"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:22
+msgid "<span weight=\"bold\" size=\"x-large\">Rename Options</span>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:23
+msgid "<b>Sequence Numbers</b>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:24
+msgid ""
+"Specify the time in 24 hour format at which the <i>Downloads today</i> "
+"sequence number should be reset."
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:25
+msgid "Day start:"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:26
+msgid "Downloads today:"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:27
+msgid "Stored number:"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:28
+msgid ":"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:29
+msgid " hh:mm"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:30
+msgid "Synchronize RAW + JPEG sequence numbers"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:31
+msgid "<b>Compatibility with Other Operating Systems</b>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:32
+msgid ""
+"Specify whether photo, video and folder names should have any characters "
+"removed that are not allowed by other operating systems."
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:33
+msgid "Strip incompatible characters"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:34
+msgid "Rename Options"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:35
+msgid "<span weight=\"bold\" size=\"x-large\">Job Codes</span>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:36
+msgid "<b>Job Codes</b>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:37
+msgid "_Add..."
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:39
+msgid "R_emove All"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:40
+msgid "Job Codes"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:41
+msgid "<span weight=\"bold\" size=\"x-large\">Devices</span>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:42
+msgid "Devices"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:43
+msgid ""
+"Devices are from where to download photos and videos, such as cameras, "
+"memory cards or Portable Storage Devices.\n"
+"\n"
+"You can download from multiple devices simultaneously, or you can specify a "
+"location on your hard drive.\n"
+"\n"
+"<i>Downloading directly from cameras is currently an experimental feature. "
+"If downloading directly from your camera works poorly or not at all, try "
+"setting it to PTP mode. If that is not possible, a card reader must be "
+"used.</i>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:48
+msgid "Automatically detect Portable Storage Devices"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:49
+msgid "Automatically detect devices"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:50
+msgid ""
+"If you enable automatic detection of Portable Storage Devices, the entire "
+"device will be scanned. On large devices, this could take some time.\n"
+"\n"
+"When this option is enabled, and a potential device is detected, you will be "
+"prompted to determine if it should be scanned or not."
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:53
+msgid "Location:"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:54
+msgid ""
+"If you disable automatic detection, choose the exact location of the photos "
+"and videos."
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:55
+msgid "<span weight=\"bold\" size=\"x-large\">Device Options</span>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:56
+msgid "Remembered Paths"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:57
+msgid ""
+"Remembered paths are those associated with devices that you have chosen to "
+"always scan or ignore when automatic detection of Portable Storage Devices "
+"is enabled."
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:58
+msgid "Ignored Paths"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:59
+msgid ""
+"Specify the ending portion of any paths you want ignored when scanning "
+"devices for photos or videos. Any path ending with the values below will not "
+"be scanned."
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:61
+msgid "Re_move All"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:62
+msgid "Use _python-style regular expressions"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:63
+msgid "Device Options"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:64
+msgid "<span weight=\"bold\" size=\"x-large\">Backup</span>\t"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:65
+msgid "<b>Backup</b>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:66
+msgid ""
+"If you disable automatic detection, choose the exact backup locations."
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:67
+msgid "Automatically detect backup devices"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:68
+msgid ""
+"You can have your photos and videos backed up to multiple locations as they "
+"are downloaded, e.g. external hard drives."
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:69
+msgid "Backup photos and videos when downloading"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:70
+msgid ""
+"Specify the folder in which backups are stored on the device. \n"
+"\n"
+"<i>Note: this will also be used to determine whether or not the device is "
+"used for backups. For each device you wish to use for backing up to, create "
+"a folder in it with one of these names.</i>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:73
+msgid "Photo backup location:"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:74
+msgid "Photo backup folder name:"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:75
+msgid "<i>Example:</i>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:76
+msgid "<i>/media/externaldrive/Photos</i>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:77
+msgid "Video backup folder name:"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:78
+msgid "Video backup location:"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:79
+msgid "Backup"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:80
+msgid "<span weight=\"bold\" size=\"x-large\">Miscellaneous</span>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:81
+msgid "<b>Program Automation</b>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:82
+msgid "Unmount (\"eject\") device upon download completion"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:83
+msgid "Start downloading at program startup"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:84
+msgid "Start downloading upon device insertion"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:85
+msgid "Exit program when download completes"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:86
+msgid "Exit program even if download had warnings or errors"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:87
+msgid "Automatically rotate JPEG images"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:88
+msgid "Performance"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:89
+msgid "Generate thumbnails (slower)"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:90
+msgid "Miscellaneous"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:91
+msgid "<span weight=\"bold\" size=\"x-large\">Error Handling</span>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:92
+msgid "<b>Photo and Video Name Conflicts</b>"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:93
+msgid "Add unique identifier"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:94
+msgid "Skip download"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:95
+msgid ""
+"When a photo or video of the same name has already been downloaded, choose "
+"whether to skip downloading the file, or to add a unique indentifier."
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:96
+msgid ""
+"When backing up, choose whether to overwrite a file on the backup device "
+"that has the same name, or skip backing it up."
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:97
+msgid "Overwrite"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:98
+msgid "Skip"
+msgstr ""
+
+#: rapid/glade3/prefs.ui.h:99
+msgid "Error Handling"
+msgstr ""
+
+#: rapid/glade3/about.ui.h:1
+msgid "Import your photos and videos efficiently and reliably"
+msgstr ""
diff --git a/po/cs.po b/po/cs.po
index 487dd1f..efefdb5 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -7,22 +7,22 @@ msgid ""
msgstr ""
"Project-Id-Version: rapid\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
-"POT-Creation-Date: 2011-11-20 13:25-0600\n"
-"PO-Revision-Date: 2011-11-21 17:16+0000\n"
-"Last-Translator: Kuvaly [LCT] <kuvaly@seznam.cz>\n"
+"POT-Creation-Date: 2012-06-23 04:00-0500\n"
+"PO-Revision-Date: 2012-08-16 13:42+0000\n"
+"Last-Translator: Radek Stastny <Unknown>\n"
"Language-Team: Czech <cs@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-12-28 07:56+0000\n"
-"X-Generator: Launchpad (build 14560)\n"
+"X-Launchpad-Export-Date: 2012-09-11 00:24+0000\n"
+"X-Generator: Launchpad (build 15924)\n"
#. Translators: if neccessary, for guidance in how to translate this program, you may see http://damonlynch.net/translate.html
-#: rapid/rapid.py:107 rapid/rapid.py:1699 rapid/glade3/rapid.ui.h:14
+#: rapid/rapid.py:112 rapid/rapid.py:1784 rapid/glade3/rapid.ui.h:1
msgid "Rapid Photo Downloader"
msgstr "Rapid Photo Downloader"
-#: rapid/rapid.py:112
+#: rapid/rapid.py:117
#, python-format
msgid ""
"%(date)s\n"
@@ -31,33 +31,33 @@ msgstr ""
"%(date)s\n"
"%(time)s"
-#: rapid/rapid.py:114
+#: rapid/rapid.py:119
#, python-format
msgid "%(date)s %(time)s"
msgstr "%(date)s %(time)s"
-#: rapid/rapid.py:117
+#: rapid/rapid.py:122
#, python-format
msgid "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
msgstr "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
#. Device refers to a thing like a camera, memory card in its reader,
#. external hard drive, Portable Storage Device, etc.
-#: rapid/rapid.py:152
+#: rapid/rapid.py:157
msgid "Device"
msgstr "Zařízení"
#. Size refers to the total size of images on the device, typically in
#. MB or GB
-#: rapid/rapid.py:170
+#: rapid/rapid.py:175
msgid "Size"
msgstr "Velikost"
-#: rapid/rapid.py:173
+#: rapid/rapid.py:178
msgid "Download Progress"
msgstr "Průběh stahování"
-#: rapid/rapid.py:319
+#: rapid/rapid.py:336
#, python-format
msgid "%(device)s did not unmount"
msgstr "%(device)s se neodpojilo"
@@ -66,36 +66,36 @@ msgstr "%(device)s se neodpojilo"
#. looking for photos or videos. It is visible initially in the progress bar for each device
#. (which normally holds "x photos and videos").
#. It maybe displayed only briefly if the contents of the device being scanned is small.
-#: rapid/rapid.py:1186
+#: rapid/rapid.py:1216
msgid "scanning..."
msgstr "skenování..."
#. this location is a human readable explanation for /, and is inserted into Downloading from %(location)s
-#: rapid/rapid.py:1697
+#: rapid/rapid.py:1782
msgid "the root of the file system"
msgstr "kořen souborového systému"
#. message in dialog box which asks the user if they really want to be downloading from this location
-#: rapid/rapid.py:1701
+#: rapid/rapid.py:1786
#, python-format
msgid "Downloading from %(location)s."
msgstr "Stahování z %(location)s."
-#: rapid/rapid.py:1702
+#: rapid/rapid.py:1787
msgid ""
"Do you really want to download from here? On some systems, scanning this "
"location can take a very long time."
msgstr ""
-#: rapid/rapid.py:2124 rapid/glade3/rapid.ui.h:5
+#: rapid/rapid.py:2209
msgid "Download"
msgstr "Stáhnout"
-#: rapid/rapid.py:2127
+#: rapid/rapid.py:2212
msgid "Pause"
msgstr "Pozastavit"
-#: rapid/rapid.py:2228
+#: rapid/rapid.py:2317
#, python-format
msgid ""
"These download folders are invalid:\n"
@@ -106,7 +106,7 @@ msgstr ""
"%(folder1)s\n"
"%(folder2)s"
-#: rapid/rapid.py:2231
+#: rapid/rapid.py:2320
#, python-format
msgid ""
"This download folder is invalid:\n"
@@ -115,176 +115,176 @@ msgstr ""
"Následující složka je neplatná:\n"
"%s"
-#: rapid/rapid.py:2232
+#: rapid/rapid.py:2321
msgid "Download cannot proceed"
msgstr "Stahování nemůže pokračovat"
-#: rapid/rapid.py:2559
+#: rapid/rapid.py:2700
msgid "About 1 second remaining"
msgstr "Zbývá 1 sekunda"
-#: rapid/rapid.py:2561
+#: rapid/rapid.py:2702
#, python-format
msgid "About %i seconds remaining"
msgstr "Zbývá %i sekund"
-#: rapid/rapid.py:2563
+#: rapid/rapid.py:2704
msgid "About 1 minute remaining"
msgstr "Zbývá 1 minuta"
#. Translators: in the text '%(minutes)i:%(seconds)02i', only the : should be translated, if needed.
#. '%(minutes)i' and '%(seconds)02i' should not be modified or left out. They are used to format and display the amount
#. of time the download has remainging, e.g. 'About 5:36 minutes remaining'
-#: rapid/rapid.py:2568
+#: rapid/rapid.py:2709
#, python-format
msgid "About %(minutes)i:%(seconds)02i minutes remaining"
msgstr "Zbývá %(minutes)i:%(seconds)02i minut"
-#: rapid/rapid.py:2590 rapid/rpdfile.py:113
+#: rapid/rapid.py:2731 rapid/rpdfile.py:123
msgid "photos and videos"
msgstr "fotografie a videa"
-#: rapid/rapid.py:2592 rapid/rpdfile.py:115
+#: rapid/rapid.py:2733 rapid/rpdfile.py:125
msgid "photos or videos"
msgstr "fotografie či videa"
-#: rapid/rapid.py:2595 rapid/rapid.py:3408 rapid/rpdfile.py:118
+#: rapid/rapid.py:2736 rapid/rapid.py:3558 rapid/rpdfile.py:128
msgid "videos"
msgstr "videa"
-#: rapid/rapid.py:2597 rapid/preferencesdialog.py:1617 rapid/rpdfile.py:120
-#: rapid/rpdfile.py:254
+#: rapid/rapid.py:2738 rapid/preferencesdialog.py:1620 rapid/rpdfile.py:130
+#: rapid/rpdfile.py:291
msgid "video"
msgstr "video"
-#: rapid/rapid.py:2600 rapid/rapid.py:3406 rapid/rpdfile.py:123
+#: rapid/rapid.py:2741 rapid/rapid.py:3556 rapid/rpdfile.py:133
msgid "photos"
msgstr "fotografie"
#. check subfolder preferences for bad values
-#: rapid/rapid.py:2602 rapid/preferencesdialog.py:1616 rapid/rpdfile.py:125
-#: rapid/rpdfile.py:234
+#: rapid/rapid.py:2743 rapid/preferencesdialog.py:1619 rapid/rpdfile.py:135
+#: rapid/rpdfile.py:272
msgid "photo"
msgstr "fotografie"
-#: rapid/rapid.py:2629
+#: rapid/rapid.py:2770
#, python-format
msgid "%(noFiles)s %(filetypes)s downloaded"
msgstr "%(noFiles)s %(filetypes)s staženo"
-#: rapid/rapid.py:2633
+#: rapid/rapid.py:2774
#, python-format
msgid "%(noFiles)s %(filetypes)s failed to download"
msgstr "%(noFiles)s %(filetypes)s nebyly staženy"
-#: rapid/rapid.py:2636 rapid/rapid.py:2688
+#: rapid/rapid.py:2777 rapid/rapid.py:2829
msgid "warnings"
msgstr "varování"
-#: rapid/rapid.py:2645
+#: rapid/rapid.py:2786
msgid "All downloads complete"
msgstr "Všechna stahování kompletní"
-#: rapid/rapid.py:2651 rapid/rapid.py:2660 rapid/rapid.py:2669
-#: rapid/rapid.py:2678 rapid/rapid.py:2686
+#: rapid/rapid.py:2792 rapid/rapid.py:2801 rapid/rapid.py:2810
+#: rapid/rapid.py:2819 rapid/rapid.py:2827
#, python-format
msgid "%(number)s %(numberdownloaded)s"
msgstr "%(number)s %(numberdownloaded)s"
-#: rapid/rapid.py:2653 rapid/rapid.py:2671
+#: rapid/rapid.py:2794 rapid/rapid.py:2812
#, python-format
msgid "%(filetype)s downloaded"
msgstr "%(filetype)s staženo"
-#: rapid/rapid.py:2662 rapid/rapid.py:2680
+#: rapid/rapid.py:2803 rapid/rapid.py:2821
#, python-format
msgid "%(filetype)s failed to download"
msgstr "%(filetype)s nelze stáhnout"
#. e.g.: 3 of 205 photos and videos (202 remaining)
-#: rapid/rapid.py:2719
+#: rapid/rapid.py:2860
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s (%(remaining)s remaining)"
msgstr "%(number)s z %(total)s %(filetypes)s (%(remaining)s remaining)"
#. e.g.: 205 of 205 photos and videos
-#: rapid/rapid.py:2726
+#: rapid/rapid.py:2867
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s"
msgstr "%(number)s z celkem %(total)s %(filetypes)s"
-#: rapid/rapid.py:3072
+#: rapid/rapid.py:3222
msgid "From"
msgstr "Z"
-#: rapid/rapid.py:3080
+#: rapid/rapid.py:3230
msgid "Auto Detect"
msgstr "Automatická detekce"
-#: rapid/rapid.py:3084 rapid/preferencesdialog.py:1324
+#: rapid/rapid.py:3234 rapid/preferencesdialog.py:1327
#, python-format
msgid "Select a folder containing %(file_types)s"
msgstr "Vyberte složku, která obsahuje %(file_types)s"
-#: rapid/rapid.py:3125
+#: rapid/rapid.py:3275
msgid "Copy"
msgstr "Kopírovat"
-#: rapid/rapid.py:3138
+#: rapid/rapid.py:3288
msgid "Move"
msgstr "Přesun"
-#: rapid/rapid.py:3160
+#: rapid/rapid.py:3310
msgid "To"
msgstr "Do"
-#: rapid/rapid.py:3167 rapid/rapid.py:3796
+#: rapid/rapid.py:3317 rapid/rapid.py:3986
msgid "Photos:"
msgstr "Fotografie:"
-#: rapid/rapid.py:3170 rapid/preferencesdialog.py:1161
+#: rapid/rapid.py:3320 rapid/preferencesdialog.py:1164
msgid "Select a folder to download photos to"
msgstr "Vyberte složku do které mají být obrázky staženy"
-#: rapid/rapid.py:3182 rapid/rapid.py:3796
+#: rapid/rapid.py:3332 rapid/rapid.py:3986
msgid "Videos:"
msgstr "Videa:"
-#: rapid/rapid.py:3184 rapid/preferencesdialog.py:1179
+#: rapid/rapid.py:3334 rapid/preferencesdialog.py:1182
msgid "Select a folder to download videos to"
msgstr "Zvolte adresář do kterého se bude stahovat video"
-#: rapid/rapid.py:3376
+#: rapid/rapid.py:3526
msgid "and"
msgstr "a"
-#: rapid/rapid.py:3381
+#: rapid/rapid.py:3531
msgid "Using backup devices"
msgstr "Používání zálohovacích zařízení"
-#: rapid/rapid.py:3383
+#: rapid/rapid.py:3533
msgid "Using backup device"
msgstr "Používání zálohovacího zařízení"
-#: rapid/rapid.py:3385
+#: rapid/rapid.py:3535
msgid "No backup devices detected"
msgstr "Zálohovací zařízení nebylo detekováno"
-#: rapid/rapid.py:3412
+#: rapid/rapid.py:3562
msgid "Free space:"
msgstr "Volné místo:"
#. (videos) or (photos) will be appended to the free space message displayed to the
#. user in the status bar.
#. you should only translate this if your language does not use parantheses
-#: rapid/rapid.py:3424
+#: rapid/rapid.py:3574
#, python-format
msgid "(%(file_type)s)"
msgstr "(%(file_type)s)"
#. Freespace available on the filesystem for downloading to
#. Displayed in status bar message on main window
-#: rapid/rapid.py:3428
+#: rapid/rapid.py:3578
#, python-format
msgid "%(free)s %(file_type)s"
msgstr "%(free)s %(file_type)s"
@@ -292,129 +292,147 @@ msgstr "%(free)s %(file_type)s"
#. Inserted in the middle of the statusbar message concerning the amount of freespace
#. Used to differentiate between two different file systems
#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
-#: rapid/rapid.py:3433
+#: rapid/rapid.py:3583
msgid "; "
msgstr "; "
#. Inserted at the end of the statusbar message concerning the amount of freespace
#. Used to differentiate between two different file systems
#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
-#: rapid/rapid.py:3438
+#: rapid/rapid.py:3588
msgid "."
msgstr "."
#. Freespace available on the filesystem for downloading to
#. Displayed in status bar message on main window
#. e.g. 14.7GB available
-#: rapid/rapid.py:3444
+#: rapid/rapid.py:3594
#, python-format
msgid "%(free)s free"
msgstr "%(free)s volné"
#. user manually specified the same location for photos and video backups
-#: rapid/rapid.py:3452
+#: rapid/rapid.py:3602
#, python-format
msgid "Backing up photos and videos to %(path)s"
msgstr "Zálohování fotografií a videí do %(path)s"
#. user manually specified backup location
-#: rapid/rapid.py:3455
+#: rapid/rapid.py:3605
#, python-format
msgid "Backing up to %(path)s"
msgstr "Zálohování %(path)s"
#. user manually specified different locations for photo and video backups
-#: rapid/rapid.py:3458
+#: rapid/rapid.py:3608
#, python-format
msgid "Backing up photos to %(path)s and videos to %(path2)s"
msgstr "Zálohování fotografií do %(path)s a videí do %(path2)s"
-#: rapid/rapid.py:3465
+#: rapid/rapid.py:3615
#, python-format
msgid "%(freespace)s. %(backuppaths)s."
msgstr "%(freespace)s. %(backuppaths)s."
-#: rapid/rapid.py:3494
+#: rapid/rapid.py:3644
msgid "Program preferences are invalid"
msgstr "Nastavení programu je nevalidní"
-#: rapid/rapid.py:3613 rapid/rpdfile.py:235
+#: rapid/rapid.py:3770 rapid/rpdfile.py:273
msgid "Photo"
msgstr "Fotografie"
-#: rapid/rapid.py:3615 rapid/rpdfile.py:255
+#: rapid/rapid.py:3772 rapid/rpdfile.py:292
msgid "Video"
msgstr "Video"
-#: rapid/rapid.py:3624
+#: rapid/rapid.py:3781
#, python-format
msgid "%(file_type)s download folder does not exist"
msgstr "%(file_type)s složka neexistuje"
-#: rapid/rapid.py:3626 rapid/rapid.py:3640 rapid/rapid.py:3653
+#: rapid/rapid.py:3783 rapid/rapid.py:3797 rapid/rapid.py:3810
#, python-format
msgid "Folder: %s"
msgstr "Složka: %s"
-#: rapid/rapid.py:3638
+#: rapid/rapid.py:3795
#, python-format
msgid "%(file_type)s download folder is invalid"
msgstr "%(file_type)s složka je neplatná"
-#: rapid/rapid.py:3651
+#: rapid/rapid.py:3808
#, python-format
msgid "%(file_type)s download folder is not writable"
msgstr "%(file_type)s do složky nelze zapisovat"
-#: rapid/rapid.py:3729
+#: rapid/rapid.py:3894
msgid "Thumbnails"
msgstr "Náhledy"
#. Translators: this text is displayed to the user when they request information on the command line options.
#. The text %default should not be modified or left out.
-#: rapid/rapid.py:3777
+#: rapid/rapid.py:3949
#, python-format
msgid ""
"display program information on the command line as the program runs "
"(default: %default)"
msgstr "zobrazit informace o programu na příkazové řádce (default: %default)"
-#: rapid/rapid.py:3778
+#: rapid/rapid.py:3950
msgid "display debugging information when run from the command line"
msgstr "Zobrazit ladicí informace při spuštění z příkazové řádky"
-#: rapid/rapid.py:3779
+#: rapid/rapid.py:3951
msgid "only output errors to the command line"
msgstr "pouze výstup chyb do příkazové řádky"
#. image file extensions are recognized RAW files plus TIFF and JPG
-#: rapid/rapid.py:3781
+#: rapid/rapid.py:3953
msgid "list photo and video file extensions the program recognizes and exit"
msgstr "zobrazit přípony souborů, které program rozpozná, a skončit"
-#: rapid/rapid.py:3783
+#: rapid/rapid.py:3955
+msgid ""
+"automatically detect devices from which to download, overwriting existing "
+"program preferences"
+msgstr ""
+
+#: rapid/rapid.py:3956
+msgid ""
+"manually specify the PATH of the device from which to download, overwriting "
+"existing program preferences"
+msgstr ""
+
+#: rapid/rapid.py:3957
msgid "reset all program settings and preferences and exit"
msgstr "resetovat nastavení programu a skončit"
-#: rapid/rapid.py:3801
+#: rapid/rapid.py:3970
+msgid ""
+"Error: specify device auto-detection or manually specify a device's path "
+"from which to download, but do not do both."
+msgstr ""
+
+#: rapid/rapid.py:3991
#, python-format
msgid "and %s"
msgstr "a %s"
-#: rapid/rapid.py:3809
+#: rapid/rapid.py:3999
msgid "All settings and preferences have been reset"
msgstr "Všechna nastavení a předvolby byly nastaveny na výchozí hodnoty"
-#: rapid/backupfile.py:142 rapid/backupfile.py:165
+#: rapid/backupfile.py:157 rapid/backupfile.py:180
msgid "Backing up error"
msgstr "Chyba zálohování"
-#: rapid/backupfile.py:144
+#: rapid/backupfile.py:159
#, python-format
msgid "Destination directory could not be created: %(directory)s\n"
msgstr "Adresář destinace nelze vytvořit: %(directory)s\n"
-#: rapid/backupfile.py:146 rapid/backupfile.py:167 rapid/subfolderfile.py:196
+#: rapid/backupfile.py:161 rapid/backupfile.py:182 rapid/subfolderfile.py:199
#, python-format
msgid ""
"Source: %(source)s\n"
@@ -423,13 +441,13 @@ msgstr ""
"Zdroj: %(source)s\n"
"Destinace: %(destination)s"
-#: rapid/backupfile.py:149 rapid/backupfile.py:169
+#: rapid/backupfile.py:164 rapid/backupfile.py:184
#, python-format
msgid "Error: %(inst)s"
msgstr "Chyba: %(inst)s"
-#: rapid/copyfiles.py:159 rapid/subfolderfile.py:211
-#: rapid/subfolderfile.py:352 rapid/subfolderfile.py:370
+#: rapid/copyfiles.py:163 rapid/subfolderfile.py:214
+#: rapid/subfolderfile.py:347 rapid/subfolderfile.py:365
#, python-format
msgid ""
"%(problem)s\n"
@@ -438,491 +456,501 @@ msgstr ""
"%(problem)s\n"
"Soubor: %(file)s"
-#: rapid/device.py:79
+#: rapid/device.py:80
msgid "Device Detected"
msgstr "Zařízení detekováno"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#usedeviceprompt
-#: rapid/device.py:88
+#: rapid/device.py:89
msgid ""
"Should this device or partition be used to download photos or videos from?"
msgstr "Nacházejí se na tomto zařízení fotografie nebo videa ke stažení?"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#usedeviceprompt
-#: rapid/device.py:107
+#: rapid/device.py:108
msgid "_Remember this choice"
msgstr "_Zapamatovat si tuto volbu"
-#: rapid/downloadtracker.py:298
+#: rapid/downloadtracker.py:299
msgid "MB/s"
msgstr "MB/s"
-#: rapid/generatenameconfig.py:150
+#: rapid/generatenameconfig.py:151
msgid "Date time"
msgstr "Datum a čas"
-#: rapid/generatenameconfig.py:151
+#: rapid/generatenameconfig.py:152
msgid "Text"
msgstr "Text"
-#: rapid/generatenameconfig.py:152
+#: rapid/generatenameconfig.py:153
msgid "Filename"
msgstr "Jméno souboru"
-#: rapid/generatenameconfig.py:153
+#: rapid/generatenameconfig.py:154
msgid "Metadata"
msgstr "Metadata"
-#: rapid/generatenameconfig.py:154
+#: rapid/generatenameconfig.py:155
msgid "Sequences"
msgstr "Sekvence"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
-#: rapid/generatenameconfig.py:156 rapid/preferencesdialog.py:574
+#: rapid/generatenameconfig.py:157 rapid/preferencesdialog.py:577
msgid "Job code"
msgstr "Pracovní kód"
-#: rapid/generatenameconfig.py:157
+#: rapid/generatenameconfig.py:158
msgid "Image date"
msgstr "Datum obrázku"
-#: rapid/generatenameconfig.py:158
+#: rapid/generatenameconfig.py:159
msgid "Video date"
msgstr "Datum videa"
-#: rapid/generatenameconfig.py:159
+#: rapid/generatenameconfig.py:160
msgid "Today"
msgstr "Dnes"
-#: rapid/generatenameconfig.py:160
+#: rapid/generatenameconfig.py:161
msgid "Yesterday"
msgstr "Včerejšek"
#. Translators: Download time is the time and date that the download started (when the user clicked the Download button)
-#: rapid/generatenameconfig.py:162
+#: rapid/generatenameconfig.py:163
msgid "Download time"
msgstr "Čas stahování"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:164
+#: rapid/generatenameconfig.py:165
msgid "Name + extension"
msgstr "Jméno + koncovka"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:166
+#: rapid/generatenameconfig.py:167
msgid "Name"
msgstr "Název"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:168
+#: rapid/generatenameconfig.py:169
msgid "Extension"
msgstr "Koncovka"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:170
+#: rapid/generatenameconfig.py:171
msgid "Image number"
msgstr "Číslo obrázku"
-#: rapid/generatenameconfig.py:171
+#: rapid/generatenameconfig.py:172
msgid "Video number"
msgstr "Číslo videa"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:173
+#: rapid/generatenameconfig.py:174
msgid "Aperture"
msgstr "Clona"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:175
+#: rapid/generatenameconfig.py:176
msgid "ISO"
msgstr "ISO"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:177
+#: rapid/generatenameconfig.py:178
msgid "Exposure time"
msgstr "Čas expozice"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:179
+#: rapid/generatenameconfig.py:180
msgid "Focal length"
msgstr "Vzdálenost ohniska"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:181
+#: rapid/generatenameconfig.py:182
msgid "Camera make"
msgstr "Vytvoření fotoaparátu"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:183
+#: rapid/generatenameconfig.py:184
msgid "Camera model"
msgstr "Druh fotoaparátu"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:185
+#: rapid/generatenameconfig.py:186
msgid "Short camera model"
msgstr "Krátký druh kamery"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:187
+#: rapid/generatenameconfig.py:188
msgid "Hyphenated short camera model"
msgstr "Model kamery v označení odděleném pomlčkou"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:189
+#: rapid/generatenameconfig.py:190
msgid "Serial number"
msgstr "Sériové číslo"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:191
+#: rapid/generatenameconfig.py:192
msgid "Shutter count"
msgstr "Číslo snímku"
#. File number currently refers to the Exif value Exif.Canon.FileNumber
-#: rapid/generatenameconfig.py:193
+#: rapid/generatenameconfig.py:194
msgid "File number"
msgstr "Číslo souboru"
#. Only the folder component of the Exif.Canon.FileNumber value
-#: rapid/generatenameconfig.py:195
+#: rapid/generatenameconfig.py:196
msgid "Folder only"
msgstr "Pouze složka"
#. The folder and file component of the Exif.Canon.FileNumber value
-#: rapid/generatenameconfig.py:197
+#: rapid/generatenameconfig.py:198
msgid "Folder and file"
msgstr "Složka a soubor"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:199
+#: rapid/generatenameconfig.py:200
msgid "Owner name"
msgstr "Vlastníkovo jméno"
-#: rapid/generatenameconfig.py:200
+#: rapid/generatenameconfig.py:201
msgid "Codec"
msgstr "Kodek"
-#: rapid/generatenameconfig.py:201
+#: rapid/generatenameconfig.py:202
msgid "Width"
msgstr "Šířka"
-#: rapid/generatenameconfig.py:202
+#: rapid/generatenameconfig.py:203
msgid "Height"
msgstr "Výška"
-#: rapid/generatenameconfig.py:203
+#: rapid/generatenameconfig.py:204
msgid "Length"
msgstr "Délka"
-#: rapid/generatenameconfig.py:204
+#: rapid/generatenameconfig.py:205
msgid "Frames Per Second"
msgstr "Snímková hodnota"
-#: rapid/generatenameconfig.py:205
+#: rapid/generatenameconfig.py:206
msgid "Artist"
msgstr "Umělec"
-#: rapid/generatenameconfig.py:206
+#: rapid/generatenameconfig.py:207
msgid "Copyright"
msgstr "Copyright"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
-#: rapid/generatenameconfig.py:208
+#: rapid/generatenameconfig.py:209
msgid "Downloads today"
msgstr "Dnešní stahování"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
-#: rapid/generatenameconfig.py:210
+#: rapid/generatenameconfig.py:211
msgid "Session number"
msgstr "Číslo této relace"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
-#: rapid/generatenameconfig.py:212
+#: rapid/generatenameconfig.py:213
msgid "Subfolder number"
msgstr "Číslo podsložky"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
-#: rapid/generatenameconfig.py:214
+#: rapid/generatenameconfig.py:215
msgid "Stored number"
msgstr "Uskladněné číslo"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequenceletters
-#: rapid/generatenameconfig.py:216
+#: rapid/generatenameconfig.py:217
msgid "Sequence letter"
msgstr "Zpráva sekvence"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:218
+#: rapid/generatenameconfig.py:219
msgid "All digits"
msgstr "Všechny číslice"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:220
+#: rapid/generatenameconfig.py:221
msgid "Last digit"
msgstr "Poslední číslice"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:222
+#: rapid/generatenameconfig.py:223
msgid "Last 2 digits"
msgstr "Poslední 2 číslice"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:224
+#: rapid/generatenameconfig.py:225
msgid "Last 3 digits"
msgstr "Poslední 3 číslice"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:226
+#: rapid/generatenameconfig.py:227
msgid "Last 4 digits"
msgstr "Poslední 4 číslice"
#. Translators: please not the capitalization of this text, and keep it the same if your language features capitalization
-#: rapid/generatenameconfig.py:228
+#: rapid/generatenameconfig.py:229
msgid "Original Case"
msgstr "Originální obal"
#. Translators: please not the capitalization of this text, and keep it the same if your language features capitalization
-#: rapid/generatenameconfig.py:230
+#: rapid/generatenameconfig.py:231
msgid "UPPERCASE"
msgstr "Velká písmena (ABCDEFG)"
#. Translators: please not the capitalization of this text, and keep it the same if your language features capitalization
-#: rapid/generatenameconfig.py:232
+#: rapid/generatenameconfig.py:233
msgid "lowercase"
msgstr "Malá písmena (abcdefg)"
-#: rapid/generatenameconfig.py:233
+#: rapid/generatenameconfig.py:234
msgid "One digit"
msgstr "Jedna číslice"
-#: rapid/generatenameconfig.py:234
+#: rapid/generatenameconfig.py:235
msgid "Two digits"
msgstr "Dvě číslice"
-#: rapid/generatenameconfig.py:235
+#: rapid/generatenameconfig.py:236
msgid "Three digits"
msgstr "Tři číslice"
-#: rapid/generatenameconfig.py:236
+#: rapid/generatenameconfig.py:237
msgid "Four digits"
msgstr "Čtyři číslice"
-#: rapid/generatenameconfig.py:237
+#: rapid/generatenameconfig.py:238
msgid "Five digits"
msgstr "Pět číslic"
-#: rapid/generatenameconfig.py:238
+#: rapid/generatenameconfig.py:239
msgid "Six digits"
msgstr "Šest číslic"
-#: rapid/generatenameconfig.py:239
+#: rapid/generatenameconfig.py:240
msgid "Seven digits"
msgstr "Sedm číslic"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:241
+#: rapid/generatenameconfig.py:242
msgid "Subseconds"
msgstr "Milisekundy"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:243
+#: rapid/generatenameconfig.py:244
msgid "YYYYMMDD"
msgstr "RRRRMMDD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:245
+#: rapid/generatenameconfig.py:246
msgid "YYYY-MM-DD"
msgstr "RRRR-MM-DD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:247
+#: rapid/generatenameconfig.py:248
msgid "YYMMDD"
msgstr "RRMMDD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:249
+#: rapid/generatenameconfig.py:250
msgid "YY-MM-DD"
msgstr "RR-MM-DD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:251
+#: rapid/generatenameconfig.py:252
msgid "MMDDYYYY"
msgstr "MMDDRRRR"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:253
+#: rapid/generatenameconfig.py:254
msgid "MMDDYY"
msgstr "MMDDRR"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:255
+#: rapid/generatenameconfig.py:256
msgid "MMDD"
msgstr "MMDD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:257
+#: rapid/generatenameconfig.py:258
msgid "DDMMYYYY"
msgstr "DDMMRRRR"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:259
+#: rapid/generatenameconfig.py:260
msgid "DDMMYY"
msgstr "DDMMRR"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:261
+#: rapid/generatenameconfig.py:262
msgid "YYYY"
msgstr "RRRR"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:263
+#: rapid/generatenameconfig.py:264
msgid "YY"
msgstr "RR"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:265
+#: rapid/generatenameconfig.py:266
msgid "MM"
msgstr "MM"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:267
+#: rapid/generatenameconfig.py:268
msgid "DD"
msgstr "DD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:269
+#: rapid/generatenameconfig.py:270
+msgid "Month (full)"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:272
+msgid "Month (abbreviated)"
+msgstr ""
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:274
msgid "HHMMSS"
msgstr "HHMMSS"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:271
+#: rapid/generatenameconfig.py:276
msgid "HHMM"
msgstr "HHMM"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:273
+#: rapid/generatenameconfig.py:278
msgid "HH-MM-SS"
msgstr "HH-MM-SS"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:275
+#: rapid/generatenameconfig.py:280
msgid "HH-MM"
msgstr "HH-MM"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:277
+#: rapid/generatenameconfig.py:282
msgid "HH"
msgstr "HH"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:279
+#: rapid/generatenameconfig.py:284
msgid "MM (minutes)"
msgstr "MM (minuty)"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:281
+#: rapid/generatenameconfig.py:286
msgid "SS"
msgstr "SS"
-#: rapid/preferencesdialog.py:371
+#: rapid/preferencesdialog.py:374
#, python-format
msgid "Subfolder preferences should not start with a %s"
msgstr "Nastavení podsložky nemělo začít %s"
-#: rapid/preferencesdialog.py:373
+#: rapid/preferencesdialog.py:376
#, python-format
msgid "Subfolder preferences should not end with a %s"
msgstr "Nastavení podsložky nemělo končit %s"
-#: rapid/preferencesdialog.py:377
+#: rapid/preferencesdialog.py:380
#, python-format
msgid "Subfolder preferences should not contain two %s one after the other"
msgstr "Nastavení podsložky by nemělo obsahovat dvě %s za sebou"
-#: rapid/preferencesdialog.py:436 rapid/preferencesdialog.py:697
+#: rapid/preferencesdialog.py:439 rapid/preferencesdialog.py:700
msgid "Remove all Job Codes?"
msgstr "Odstranit všechny pracovní kódy?"
-#: rapid/preferencesdialog.py:437 rapid/preferencesdialog.py:714
+#: rapid/preferencesdialog.py:440 rapid/preferencesdialog.py:717
msgid "Should all Job Codes be removed?"
msgstr "Chcete odstranit všechny pracovní kódy?"
-#: rapid/preferencesdialog.py:443
+#: rapid/preferencesdialog.py:446
msgid "Remove all Remembered Paths?"
msgstr "Odstranit všechny zapamatované cesty?"
-#: rapid/preferencesdialog.py:444
+#: rapid/preferencesdialog.py:447
msgid "Should all remembered paths be removed?"
msgstr "Opravdu chcete smazat všechny zapamatované cesty?"
-#: rapid/preferencesdialog.py:450
+#: rapid/preferencesdialog.py:453
msgid "Remove all Ignored Paths?"
msgstr "Odstranit všechny ignorované cesty?"
-#: rapid/preferencesdialog.py:451
+#: rapid/preferencesdialog.py:454
msgid "Should all ignored paths be removed?"
msgstr "Opravdu chcete smazat všechny ignorované cesty?"
-#: rapid/preferencesdialog.py:462
+#: rapid/preferencesdialog.py:465
msgid "Error in Photo Rename preferences"
msgstr "Chyba v nastavení přejmenování fotografií"
-#: rapid/preferencesdialog.py:642
+#: rapid/preferencesdialog.py:645
msgid "Error in Video Rename preferences"
msgstr "Chyba v nastavení přejmenování videí"
-#: rapid/preferencesdialog.py:663
+#: rapid/preferencesdialog.py:666
msgid "Error in Photo Download Subfolders preferences"
msgstr "Chyba v nastavení složek pro stahování fotek"
-#: rapid/preferencesdialog.py:680
+#: rapid/preferencesdialog.py:683
msgid "Error in Video Download Subfolders preferences"
msgstr "Chyba v nastavení složek pro stahování videí"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
-#: rapid/preferencesdialog.py:739
+#: rapid/preferencesdialog.py:742
msgid "Enter a Job Code"
msgstr "Vložte pracovní kód"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
-#: rapid/preferencesdialog.py:755
+#: rapid/preferencesdialog.py:758
msgid "Enter a new Job Code, or select a previous one"
msgstr "Vložte nový štítek nebo vyberte nějaký existující"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
-#: rapid/preferencesdialog.py:758
+#: rapid/preferencesdialog.py:761
msgid "Enter a new Job Code"
msgstr "Vložte nový pracovní kód"
-#: rapid/preferencesdialog.py:763
+#: rapid/preferencesdialog.py:766
msgid "Job Code:"
msgstr "Pracovní kód:"
-#: rapid/preferencesdialog.py:819
+#: rapid/preferencesdialog.py:822
msgid "Enter a Path to Ignore"
msgstr "Vložte cestu k ignorování"
-#: rapid/preferencesdialog.py:831
+#: rapid/preferencesdialog.py:834
msgid "Specify a path that will never be scanned for photos or videos"
msgstr ""
-#: rapid/preferencesdialog.py:836
+#: rapid/preferencesdialog.py:839
msgid "Path:"
msgstr "Cesta:"
-#: rapid/preferencesdialog.py:1079
+#: rapid/preferencesdialog.py:1082
msgid "Job Code"
msgstr "Pracovní kód"
-#: rapid/preferencesdialog.py:1350
+#: rapid/preferencesdialog.py:1353
msgid "Select a folder in which to backup photos"
msgstr "Zvolte složku, ve které bude uložena záloha fotografií"
-#: rapid/preferencesdialog.py:1363
+#: rapid/preferencesdialog.py:1366
msgid "Select a folder in which to backup videos"
msgstr "Zvolte složku ve které budou zálohována videa"
#. Translators: please do not modify or leave out html formatting tags like <i> and <b>. These are used to format the text the users sees
-#: rapid/preferencesdialog.py:1458
+#: rapid/preferencesdialog.py:1461
msgid ""
"<i><b>Warning:</b> There is insufficient metadata to fully generate the "
"name. Please use other renaming options.</i>"
@@ -931,7 +959,7 @@ msgstr ""
"možné vytvořit celé jméno. Použijte prosím pro vytvoření jména jiné "
"možnosti.</i>"
-#: rapid/preferencesdialog.py:1509
+#: rapid/preferencesdialog.py:1512
msgid ""
"<i><b>Warning:</b> There is insufficient metadata to fully generate "
"subfolders. Please use other subfolder naming options.</i>"
@@ -941,13 +969,13 @@ msgstr ""
"možnosti.</i>"
#. Translators: you should not modify or leave out the %s. This is a code used by the programming language python to insert a value that thes user will see
-#: rapid/preferencesdialog.py:1512
+#: rapid/preferencesdialog.py:1515
#, python-format
msgid "<i>Example: %s</i>"
msgstr "<i>Příklad: %s</i>"
#. Preferences list is now empty
-#: rapid/preferencesdialog.py:1602
+#: rapid/preferencesdialog.py:1605
#, python-format
msgid ""
"The %(filetype)s subfolder preferences entered are invalid and cannot be "
@@ -958,7 +986,7 @@ msgstr ""
"použít.\n"
"Použijí se výchozí hodnoty."
-#: rapid/preferencesdialog.py:1747
+#: rapid/preferencesdialog.py:1750
#, python-format
msgid ""
"The following regular expressions are invalid, and will be removed unless "
@@ -966,7 +994,7 @@ msgid ""
" %s"
msgstr ""
-#: rapid/preferencesdialog.py:1749
+#: rapid/preferencesdialog.py:1752
#, python-format
msgid ""
"This regular expression is invalid, and will be removed unless you correct "
@@ -974,142 +1002,142 @@ msgid ""
" %s"
msgstr ""
-#: rapid/preferencesdialog.py:1750
+#: rapid/preferencesdialog.py:1753
msgid "Invalid regular expression"
msgstr "Neplatný regulární výraz"
#. Translators: this value is used as an example device when automatic backup device detection is enabled. You should translate this.
-#: rapid/preferencesdialog.py:1931
+#: rapid/preferencesdialog.py:1934
msgid "externaldrive1"
msgstr "externídisk1"
#. Translators: this value is used as an example device when automatic backup device detection is enabled. You should translate this.
-#: rapid/preferencesdialog.py:1933
+#: rapid/preferencesdialog.py:1936
msgid "externaldrive2"
msgstr "externídisk2"
-#: rapid/prefsrapid.py:126
+#: rapid/prefsrapid.py:127
msgid "New York"
msgstr "New York"
-#: rapid/prefsrapid.py:127
+#: rapid/prefsrapid.py:128
msgid "Manila"
msgstr "Manila"
-#: rapid/prefsrapid.py:127
+#: rapid/prefsrapid.py:128
msgid "Prague"
msgstr "Praha"
-#: rapid/prefsrapid.py:127
+#: rapid/prefsrapid.py:128
msgid "Helsinki"
msgstr "Helsinki"
-#: rapid/prefsrapid.py:127
+#: rapid/prefsrapid.py:128
msgid "Wellington"
msgstr "Wellington"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Tehran"
msgstr "Teherán"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Kampala"
msgstr "Kampala"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Paris"
msgstr "Paříž"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Berlin"
msgstr "Berlín"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Sydney"
msgstr "Sydney"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Budapest"
msgstr "Budapešť"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Rome"
msgstr "Řím"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Moscow"
msgstr "Moskva"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Delhi"
msgstr "Dílí"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Warsaw"
msgstr "Varšava"
-#: rapid/prefsrapid.py:130
+#: rapid/prefsrapid.py:131
msgid "Jakarta"
msgstr "Jakarta"
-#: rapid/prefsrapid.py:130
+#: rapid/prefsrapid.py:131
msgid "Madrid"
msgstr "Madrid"
-#: rapid/prefsrapid.py:130
+#: rapid/prefsrapid.py:131
msgid "Stockholm"
msgstr "Stockholm"
#. components
-#: rapid/problemnotification.py:26 rapid/subfolderfile.py:363
+#: rapid/problemnotification.py:27 rapid/subfolderfile.py:358
msgid "subfolder"
msgstr "podsložka"
-#: rapid/problemnotification.py:27 rapid/subfolderfile.py:361
+#: rapid/problemnotification.py:28 rapid/subfolderfile.py:356
msgid "filename"
msgstr "název souboru"
-#: rapid/problemnotification.py:80
+#: rapid/problemnotification.py:81
#, python-format
msgid "Date time value %s appears invalid."
msgstr "Hodnota pro datum nebo čas %s je neplatná."
-#: rapid/problemnotification.py:81
+#: rapid/problemnotification.py:82
msgid "Filename does not have an extension."
msgstr "Jméno souboru neobsahuje příponu."
#. a number component is something like the 8346 in IMG_8346.JPG
-#: rapid/problemnotification.py:83
+#: rapid/problemnotification.py:84
msgid "Filename does not have a number component."
msgstr "Jméno souboru neobsahuje číselnou hodnotu."
-#: rapid/problemnotification.py:84
+#: rapid/problemnotification.py:85
#, python-format
msgid "Error generating component %s."
msgstr "Chyba při vytváření části %s."
#. a generic problem
-#: rapid/problemnotification.py:86
+#: rapid/problemnotification.py:87
#, python-format
msgid "%(filetype)s metadata cannot be read"
msgstr "Metadata %(filetype)s nelze načíst."
-#: rapid/problemnotification.py:88
+#: rapid/problemnotification.py:89
#, python-format
msgid "%(filetype)s %(area)s could not be generated"
msgstr "Nelze vytvořit %(filetype)s %(area)s"
-#: rapid/problemnotification.py:90 rapid/problemnotification.py:91
+#: rapid/problemnotification.py:91 rapid/problemnotification.py:92
#, python-format
msgid "An error occurred when copying the %(filetype)s"
msgstr "Při kopírování %(filetype)s došlo k chybě."
-#: rapid/problemnotification.py:93 rapid/problemnotification.py:94
+#: rapid/problemnotification.py:94 rapid/problemnotification.py:95
#, python-format
msgid "%(filetype)s already exists"
msgstr "%(filetype)s a již existuje"
-#: rapid/problemnotification.py:97
+#: rapid/problemnotification.py:98
#, python-format
msgid ""
"%(filetype)s could not be backed up because no suitable backup locations "
@@ -1117,19 +1145,19 @@ msgid ""
msgstr ""
"%(filetype)s nelze zálohovat, protože nebylo nalezeno vhodné umístění."
-#: rapid/problemnotification.py:102
+#: rapid/problemnotification.py:103
#, python-format
msgid ""
"%(image1)s was taken on %(image1_date)s at %(image1_time)s, and %(image2)s "
"on %(image2_date)s at %(image2_time)s."
msgstr ""
-#: rapid/problemnotification.py:103
+#: rapid/problemnotification.py:104
#, python-format
msgid "%(filetype)s was already downloaded"
msgstr "%(filetype)s byl už stažen"
-#: rapid/problemnotification.py:107
+#: rapid/problemnotification.py:108
#, python-format
msgid ""
"The existing %(filetype)s was last modified on %(date)s at %(time)s. Unique "
@@ -1138,53 +1166,53 @@ msgstr ""
"Existující %(filetype)s byl naposledy změněn %(date)s v %(time)s. Byl "
"přidán jedinečný identifikátor '%(identifier)s'."
-#: rapid/problemnotification.py:108
+#: rapid/problemnotification.py:109
#, python-format
msgid "The existing %(filetype)s was last modified on %(date)s at %(time)s."
msgstr "Existující %(filetype)s byl naposledy změněn %(date)s v %(time)s."
-#: rapid/problemnotification.py:109
+#: rapid/problemnotification.py:110
#, python-format
msgid "There is no data with which to name the %(filetype)s."
msgstr "Neexistují žádná data k pojmenování %(filetype)s."
-#: rapid/problemnotification.py:111
+#: rapid/problemnotification.py:112
#, python-format
msgid "Error: %(errorno)s %(strerror)s"
msgstr "Chyba: %(errorno)s %(strerror)s"
-#: rapid/problemnotification.py:201
+#: rapid/problemnotification.py:202
msgid "The metadata might be corrupt."
msgstr "Metadata jsou pravděpodobně poškozená."
-#: rapid/problemnotification.py:204
+#: rapid/problemnotification.py:205
msgid ""
"The filename, extension and Exif information indicate it has already been "
"downloaded."
msgstr "Jméno souboru, přípona a EXIF naznačují, že soubor byl již stažen."
-#: rapid/problemnotification.py:223
+#: rapid/problemnotification.py:224
#, python-format
msgid " It was backed up to %(volume)s"
msgstr " byl zálohován na %(volume)s"
-#: rapid/problemnotification.py:225
+#: rapid/problemnotification.py:226
msgid " It was backed up to these devices: "
msgstr " byl zálohován na následující zařízení: "
-#: rapid/problemnotification.py:227 rapid/problemnotification.py:288
-#: rapid/problemnotification.py:300
+#: rapid/problemnotification.py:228 rapid/problemnotification.py:289
+#: rapid/problemnotification.py:301
#, python-format
msgid "%s, "
msgstr "%s, "
-#: rapid/problemnotification.py:228 rapid/problemnotification.py:289
-#: rapid/problemnotification.py:301
+#: rapid/problemnotification.py:229 rapid/problemnotification.py:290
+#: rapid/problemnotification.py:302
#, python-format
msgid "%(volumes)s and %(final_volume)s."
msgstr "%(volumes)s a %(final_volume)s."
-#: rapid/problemnotification.py:240
+#: rapid/problemnotification.py:241
#, python-format
msgid ""
"Photos detected with the same filenames, but taken at different times: "
@@ -1193,482 +1221,446 @@ msgstr ""
"Byly nalezeny fotky se stejným jménem, ale rozdílným časem vzniku: "
"%(details)s"
-#: rapid/problemnotification.py:257
+#: rapid/problemnotification.py:258
#, python-format
msgid "An error occurred when backing up on %(volume)s: %(inst)s."
msgstr "Došlo k chybě při zálohování na %(volume)s: %(inst)s."
-#: rapid/problemnotification.py:259
+#: rapid/problemnotification.py:260
#, python-format
msgid "An error occurred when backing up on %(volume)s."
msgstr "Došlo k chybě při zálohování na %(volume)s."
-#: rapid/problemnotification.py:261
+#: rapid/problemnotification.py:262
msgid "Errors occurred when backing up on the following backup devices: "
msgstr "Došlo k chybám při zálohování na následující zařízení: "
-#: rapid/problemnotification.py:265 rapid/problemnotification.py:313
+#: rapid/problemnotification.py:266 rapid/problemnotification.py:314
#, python-format
msgid "%(volume)s (%(inst)s), "
msgstr "%(volume)s (%(inst)s), "
-#: rapid/problemnotification.py:267
+#: rapid/problemnotification.py:268
#, python-format
msgid "%(volume)s, "
msgstr "%(volume)s, "
-#: rapid/problemnotification.py:271 rapid/problemnotification.py:315
+#: rapid/problemnotification.py:272 rapid/problemnotification.py:316
#, python-format
msgid "%(volumes)s and %(volume)s (%(inst)s)."
msgstr "%(volumes)s a %(volume)s (%(inst)s)."
-#: rapid/problemnotification.py:276
+#: rapid/problemnotification.py:277
#, python-format
msgid "%(volumes)s and %(volume)s."
msgstr "%(volumes)s a %(volume)s."
-#: rapid/problemnotification.py:284
+#: rapid/problemnotification.py:285
#, python-format
msgid "Backup already exists on %(volume)s."
msgstr "Na zařízení %(volume)s už záloha existuje."
-#: rapid/problemnotification.py:286
+#: rapid/problemnotification.py:287
msgid "Backups already exist in these locations: "
msgstr "Zálohy už existují, a to v těchto umístěních: "
-#: rapid/problemnotification.py:296
+#: rapid/problemnotification.py:297
#, python-format
msgid "Backup overwritten on %(volume)s."
msgstr "Záloha na %(volume)s byla přepsána."
-#: rapid/problemnotification.py:298
+#: rapid/problemnotification.py:299
msgid "Backups overwritten on these devices: "
msgstr "Zálohy na následujících zařízeních byly přepsány: "
-#: rapid/problemnotification.py:309
+#: rapid/problemnotification.py:310
#, python-format
msgid "An error occurred when creating directories on %(volume)s: %(inst)s."
msgstr "Došlo k chybě při vytváření adresářů na %(volume)s: %(inst)s."
-#: rapid/problemnotification.py:311
+#: rapid/problemnotification.py:312
msgid ""
"Errors occurred when creating directories on the following backup devices: "
msgstr "Došlo k chybě při vytváření adresářů na následujících zařízeních: "
-#: rapid/problemnotification.py:322
+#: rapid/problemnotification.py:323
#, python-format
msgid "%(previousproblem)s Additionally, %(newproblem)s"
msgstr "%(previousproblem)s - kromě toho: %(newproblem)s"
-#: rapid/problemnotification.py:330
+#: rapid/problemnotification.py:331
#, python-format
msgid " Furthermore, there were %(problems)s."
msgstr " Kromě toho došlo k dalším %(problems)s problémům."
-#: rapid/problemnotification.py:332
+#: rapid/problemnotification.py:333
#, python-format
msgid " Furthermore, there was a %(problem)s."
msgstr " Kromě toho došlo k %(problem)s."
-#: rapid/problemnotification.py:341
+#: rapid/problemnotification.py:342
#, python-format
msgid "The %(type)s metadata is missing."
msgstr "Metadata %(type)s chybí."
-#: rapid/problemnotification.py:343
+#: rapid/problemnotification.py:344
msgid "The following metadata is missing: "
msgstr "Následující metada chybí: "
-#: rapid/problemnotification.py:346
+#: rapid/problemnotification.py:347
#, python-format
msgid "%(missing_metadata_elements)s and %(final_missing_metadata_element)s."
msgstr "%(missing_metadata_elements)s a %(final_missing_metadata_element)s."
-#: rapid/problemnotification.py:363
+#: rapid/problemnotification.py:364
msgid "Problems in subfolder and filename generation"
msgstr "Problémy při vytváření názvů pro složky a soubory"
-#: rapid/problemnotification.py:365
+#: rapid/problemnotification.py:366
msgid "Problem in subfolder and filename generation"
msgstr "Problém při vytváření názvů pro složky a soubory"
-#: rapid/problemnotification.py:368
+#: rapid/problemnotification.py:369
#, python-format
msgid "Problems in %s generation"
msgstr "Problémy při vytváření %s"
-#: rapid/problemnotification.py:370
+#: rapid/problemnotification.py:371
#, python-format
msgid "Problem in %s generation"
msgstr "Problém při vytváření %s"
-#: rapid/problemnotification.py:379
+#: rapid/problemnotification.py:380
#, python-format
msgid "%(filetype)s already exists, but it was backed up"
msgstr "%(filetype)s už existuje, ale byl zálohován"
-#: rapid/problemnotification.py:381
+#: rapid/problemnotification.py:382
#, python-format
msgid "An error occurred when copying the %(filetype)s, but it was backed up"
msgstr "Při kopírování %(filetype)s došlo k chybě, ale záloha proběhla"
-#: rapid/problemnotification.py:401
+#: rapid/problemnotification.py:402
msgid "Multiple problems were encountered"
msgstr "Došlo k více problémům"
-#: rapid/problemnotification.py:403 rapid/subfolderfile.py:230
+#: rapid/problemnotification.py:404 rapid/subfolderfile.py:233
msgid "Photos detected with the same filenames, but taken at different times"
msgstr "Byly nalezeny fotky se stejným jménem, ale různým datem vzniku"
-#: rapid/problemnotification.py:409
+#: rapid/problemnotification.py:410
msgid "there were errors backing up"
msgstr "chyby při zálohování"
-#: rapid/problemnotification.py:410
+#: rapid/problemnotification.py:411
msgid "There were errors backing up"
msgstr "Chyby při zálohování"
-#: rapid/problemnotification.py:412
+#: rapid/problemnotification.py:413
msgid "there was an error backing up"
msgstr "chyba při zálohování"
-#: rapid/problemnotification.py:413
+#: rapid/problemnotification.py:414
msgid "There was an error backing up"
msgstr "Chyba při zálohování"
#. e.g.
-#: rapid/problemnotification.py:416
+#: rapid/problemnotification.py:417
#, python-format
msgid "%(previousproblem)s, and %(backinguperror)s"
msgstr "%(previousproblem)s a %(backinguperror)s"
-#: rapid/rpdfile.py:139
+#: rapid/rpdfile.py:153
#, python-format
msgid "%(number)s %(filetypes)s"
msgstr "%(number)s %(filetypes)s"
-#: rapid/subfolderfile.py:79
+#: rapid/rpdfile.py:163
+#, python-format
+msgid "scanning (found %(photos)s photos and %(videos)s videos)..."
+msgstr "hledám (nalezeno %(photos)s fotek a %(videos)s videí)..."
+
+#: rapid/subfolderfile.py:80
#, python-format
msgid "%(hour)s:%(minute)s:%(second)s:%(subsecond)s"
msgstr "%(hour)s:%(minute)s:%(second)s:%(subsecond)s"
-#: rapid/subfolderfile.py:300
+#: rapid/subfolderfile.py:301
msgid "Photo has already been downloaded"
msgstr "Fotka už byla stažena"
-#: rapid/subfolderfile.py:301
+#: rapid/subfolderfile.py:302
#, python-format
msgid "Source: %(source)s"
msgstr "Zdroj: %(source)s"
-#: rapid/subfolderfile.py:359
+#: rapid/subfolderfile.py:354
msgid "subfolder and filename"
msgstr "podsložka a název souboru"
-#: rapid/subfolderfile.py:397
+#: rapid/subfolderfile.py:393
msgid "Failed to create download subfolder"
msgstr "Nepodařilo se vytvořit podsložku"
-#: rapid/subfolderfile.py:398
+#: rapid/subfolderfile.py:394
#, python-format
msgid "Path: %s"
msgstr "Cesta: %s"
-#: rapid/glade3/rapid.ui.h:1
-msgid "About..."
-msgstr "O aplikaci..."
-
#: rapid/glade3/rapid.ui.h:2
-msgid "Check All"
-msgstr "Zaškrtnout všechny"
+msgid "_File"
+msgstr "_Soubor"
#: rapid/glade3/rapid.ui.h:3
-msgid "Check All Photos"
-msgstr "Zaškrtnout všechny fotky"
+msgid "Download / Pause"
+msgstr "Stahování / Pauza"
#: rapid/glade3/rapid.ui.h:4
-msgid "Check All Videos"
-msgstr "Zaškrtnout všechna videa"
+msgid "_Select"
+msgstr "_Vybrat"
+
+#: rapid/glade3/rapid.ui.h:5
+msgid "Select All Without _Job Code"
+msgstr "Vybrat všechny _bez štítku"
#: rapid/glade3/rapid.ui.h:6
-msgid "Download / Pause"
-msgstr "Stahování / Pauza"
+msgid "Select All Wit_h Job Code"
+msgstr "Vybrat všechny se ští_tkem"
#: rapid/glade3/rapid.ui.h:7
-msgid "Get Help Online..."
-msgstr "Získat online pomoc..."
+msgid "_View"
+msgstr "_Zobrazení"
#: rapid/glade3/rapid.ui.h:8
-msgid "Help"
-msgstr "Nápověda"
+msgid "_Error Log"
+msgstr "_Záznam chyb"
#: rapid/glade3/rapid.ui.h:9
-msgid "Make a Donation..."
-msgstr "Darovat..."
+msgid "_Clear Completed Downloads"
+msgstr "_Vyčistit kompletní stahování"
#: rapid/glade3/rapid.ui.h:10
-msgid "Next File"
-msgstr "Další soubor"
-
-#: rapid/glade3/rapid.ui.h:11
-msgid "Preferences"
-msgstr "Nastavení"
-
-#: rapid/glade3/rapid.ui.h:12
msgid "Previous File"
msgstr "Předchozí soubor"
-#: rapid/glade3/rapid.ui.h:13
-msgid "Quit"
-msgstr "Konec"
-
-#: rapid/glade3/rapid.ui.h:15
-msgid "Refresh"
-msgstr "Aktualizovat"
-
-#: rapid/glade3/rapid.ui.h:16
-msgid "Report a Problem..."
-msgstr "Nahlásit problém..."
-
-#: rapid/glade3/rapid.ui.h:17
-msgid "Select All Wit_h Job Code"
-msgstr "Vybrat všechny se ští_tkem"
-
-#: rapid/glade3/rapid.ui.h:18
-msgid "Select All Without _Job Code"
-msgstr "Vybrat všechny _bez štítku"
-
-#: rapid/glade3/rapid.ui.h:19
-msgid "Translate this Application..."
-msgstr "Přeložit tuto aplikaci..."
-
-#: rapid/glade3/rapid.ui.h:20
-msgid "Uncheck All"
-msgstr "Odškrtnout všechny"
-
-#: rapid/glade3/rapid.ui.h:21
-msgid "_Check All"
-msgstr "Zaškrtnout _všechny"
-
-#: rapid/glade3/rapid.ui.h:22
-msgid "_Clear Completed Downloads"
-msgstr "_Vyčistit kompletní stahování"
-
-#: rapid/glade3/rapid.ui.h:23
-msgid "_Download"
-msgstr "_Stáhnout"
-
-#: rapid/glade3/rapid.ui.h:24
-msgid "_Error Log"
-msgstr "_Záznam chyb"
-
-#: rapid/glade3/rapid.ui.h:25
-msgid "_File"
-msgstr "_Soubor"
+#: rapid/glade3/rapid.ui.h:11
+msgid "Next File"
+msgstr "Další soubor"
-#: rapid/glade3/rapid.ui.h:26
+#: rapid/glade3/rapid.ui.h:12
msgid "_Help"
msgstr "_Nápověda"
-#: rapid/glade3/rapid.ui.h:27
-msgid "_Include in download"
-msgstr "Vybrat pro stažení"
-
-#: rapid/glade3/rapid.ui.h:28
+#: rapid/glade3/rapid.ui.h:13
msgid "_Make a Donation..."
msgstr "_Dejte příspěvek..."
-#: rapid/glade3/rapid.ui.h:29
-msgid "_Select"
-msgstr "_Vybrat"
-
-#: rapid/glade3/rapid.ui.h:30
+#: rapid/glade3/rapid.ui.h:14
msgid "_Translate this Application..."
msgstr "_Přeložit tuto aplikaci..."
-#: rapid/glade3/rapid.ui.h:31
+#: rapid/glade3/rapid.ui.h:15
+msgid "_Check All"
+msgstr "Zaškrtnout _všechny"
+
+#: rapid/glade3/rapid.ui.h:16
msgid "_Uncheck All"
msgstr "_Odznačit vše"
-#: rapid/glade3/rapid.ui.h:32
-msgid "_View"
-msgstr "_Zobrazení"
+#: rapid/glade3/rapid.ui.h:17
+msgid "_Include in download"
+msgstr "Vybrat pro stažení"
+
+#: rapid/glade3/rapid.ui.h:18
+msgid "_Download"
+msgstr "_Stáhnout"
#: rapid/glade3/prefs.ui.h:1
-msgid " "
-msgstr " "
+msgid "Preferences: Rapid Photo Downloader"
+msgstr "Nastavení: Rapid Photo Downloader"
#: rapid/glade3/prefs.ui.h:2
-msgid " hh:mm"
-msgstr " hh:mm"
+msgid "<span weight=\"bold\" size=\"x-large\">Photo Download Folders</span>"
+msgstr ""
+"<span weight=\"bold\" size=\"x-large\">Složky stahování fotografií</span>"
#: rapid/glade3/prefs.ui.h:3
-msgid ":"
-msgstr ":"
+msgid "<i>Example: /home/user/Pictures</i>"
+msgstr "<i>Příklad: /home/user/Pictures</i>"
#: rapid/glade3/prefs.ui.h:4
-msgid "<b>Backup</b>"
-msgstr "<b>Záloha</b>"
+msgid "<b>Download Subfolders</b>"
+msgstr "<b>Podsložky stahování</b>"
#: rapid/glade3/prefs.ui.h:5
-msgid "<b>Compatibility with Other Operating Systems</b>"
-msgstr "<b>Kompaktibilita s jinými operačními systémy</b>"
+msgid "Download folder:"
+msgstr "Složka stahování:"
#: rapid/glade3/prefs.ui.h:6
-msgid "<b>Download Folder</b>"
-msgstr "<b>Složka stahování</b>"
+msgid ""
+"Choose the download folder. Subfolders for the downloaded photos will be "
+"automatically created in this folder using the structure specified below."
+msgstr ""
+"Vyberte složku stahování. Podsložky pro stahované obrázky budou vytvořeny "
+"automaticky v této složce s použitím struktury specifikované níže."
#: rapid/glade3/prefs.ui.h:7
-msgid "<b>Download Subfolders</b>"
-msgstr "<b>Podsložky stahování</b>"
+msgid "<b>Download Folder</b>"
+msgstr "<b>Složka stahování</b>"
#: rapid/glade3/prefs.ui.h:8
-msgid "<b>Example</b>"
-msgstr "<b>Příklad</b>"
+msgid "Photo Folders"
+msgstr "Složky fotografií"
#: rapid/glade3/prefs.ui.h:9
-msgid "<b>Job Codes</b>"
-msgstr "<b>Pracovní kódy</b>"
+msgid "<span weight=\"bold\" size=\"x-large\">Photo Rename</span>\t"
+msgstr ""
+"<span weight=\"bold\" size=\"x-large\">Přejmenování fotografií</span>\t"
#: rapid/glade3/prefs.ui.h:10
msgid "<b>Photo Rename</b>"
msgstr "<b>Přejmenování fotografie</b>"
#: rapid/glade3/prefs.ui.h:11
-msgid "<b>Photo and Video Name Conflicts</b>"
-msgstr "<b>Konflikty jmen fotografií a videa</b>"
+msgid " "
+msgstr " "
#: rapid/glade3/prefs.ui.h:12
-msgid "<b>Program Automation</b>"
-msgstr "<b>Automatizace programu</b>"
+msgid "<i>New:</i>"
+msgstr "<i>Nový:</i>"
#: rapid/glade3/prefs.ui.h:13
-msgid "<b>Sequence Numbers</b>"
-msgstr "<b>Sekvenční čísla</b>"
+msgid "<i>Original:</i>"
+msgstr "<i>Originál:</i>"
#: rapid/glade3/prefs.ui.h:14
-msgid "<i>/media/externaldrive/Photos</i>"
-msgstr "<i>/media/externaldrive/Photos</i>"
+msgid "<b>Example</b>"
+msgstr "<b>Příklad</b>"
#: rapid/glade3/prefs.ui.h:15
-msgid "<i>Example: /home/user/Pictures</i>"
-msgstr "<i>Příklad: /home/user/Pictures</i>"
+msgid "Photo Rename"
+msgstr "Přejmenování fotografií"
#: rapid/glade3/prefs.ui.h:16
-msgid "<i>Example:</i>"
-msgstr "<i>Příklad:</i>"
+msgid "<span weight=\"bold\" size=\"x-large\">Video Download Folders</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Složky stahování videa</span>"
#: rapid/glade3/prefs.ui.h:17
-msgid "<i>New:</i>"
-msgstr "<i>Nový:</i>"
+msgid ""
+"Sorry, video downloading functionality disabled. To download videos, please "
+"install either the <i>hachoir metadata</i> and <i>kaa metadata</i> packages "
+"for python, or <i>exiftool</i>."
+msgstr ""
#: rapid/glade3/prefs.ui.h:18
-msgid "<i>Original:</i>"
-msgstr "<i>Originál:</i>"
+msgid ""
+"Choose the download folder. Subfolders for the downloaded videos will be "
+"automatically created in this folder using the structure specified below."
+msgstr ""
+"Vyberte složku pro stažení. Podsložky pro stažená videa jsou vytvořena "
+"automaticky podle schématu, které si vytvoříte."
#: rapid/glade3/prefs.ui.h:19
-msgid "<span weight=\"bold\" size=\"x-large\">Backup</span>\t"
-msgstr "<span weight=\"bold\" size=\"x-large\">Záloha</span>\t"
+msgid "Video Folders"
+msgstr "Složky pro videa"
#: rapid/glade3/prefs.ui.h:20
-msgid "<span weight=\"bold\" size=\"x-large\">Device Options</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Možnosti zařízení</span>"
+msgid "<span weight=\"bold\" size=\"x-large\">Video Rename</span>\t"
+msgstr "<span weight=\"bold\" size=\"x-large\">Přejmenování videa</span>\t"
#: rapid/glade3/prefs.ui.h:21
-msgid "<span weight=\"bold\" size=\"x-large\">Devices</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Zařízení</span>"
+msgid "Video Rename"
+msgstr "Přejmenovat videa"
#: rapid/glade3/prefs.ui.h:22
-msgid "<span weight=\"bold\" size=\"x-large\">Error Handling</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Chybová obsluha</span>"
+msgid "<span weight=\"bold\" size=\"x-large\">Rename Options</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Možnosti přejmenování</span>"
#: rapid/glade3/prefs.ui.h:23
-msgid "<span weight=\"bold\" size=\"x-large\">Job Codes</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Pracovní kódy</span>"
+msgid "<b>Sequence Numbers</b>"
+msgstr "<b>Sekvenční čísla</b>"
#: rapid/glade3/prefs.ui.h:24
-msgid "<span weight=\"bold\" size=\"x-large\">Miscellaneous</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Různé</span>"
+msgid ""
+"Specify the time in 24 hour format at which the <i>Downloads today</i> "
+"sequence number should be reset."
+msgstr ""
+"Specifikujte čas ve 24 hodinovém formátu aby mohlo být resetováno sekvenční "
+"číslo v <i>Dnešní stahování</i>."
#: rapid/glade3/prefs.ui.h:25
-msgid "<span weight=\"bold\" size=\"x-large\">Photo Download Folders</span>"
-msgstr ""
-"<span weight=\"bold\" size=\"x-large\">Složky stahování fotografií</span>"
+msgid "Day start:"
+msgstr "Začátek dne:"
#: rapid/glade3/prefs.ui.h:26
-msgid "<span weight=\"bold\" size=\"x-large\">Photo Rename</span>\t"
-msgstr ""
-"<span weight=\"bold\" size=\"x-large\">Přejmenování fotografií</span>\t"
+msgid "Downloads today:"
+msgstr "Dnešní stahování:"
#: rapid/glade3/prefs.ui.h:27
-msgid "<span weight=\"bold\" size=\"x-large\">Rename Options</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Možnosti přejmenování</span>"
+msgid "Stored number:"
+msgstr "Uskladněné číslo:"
#: rapid/glade3/prefs.ui.h:28
-msgid "<span weight=\"bold\" size=\"x-large\">Video Download Folders</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Složky stahování videa</span>"
+msgid ":"
+msgstr ":"
#: rapid/glade3/prefs.ui.h:29
-msgid "<span weight=\"bold\" size=\"x-large\">Video Rename</span>\t"
-msgstr "<span weight=\"bold\" size=\"x-large\">Přejmenování videa</span>\t"
+msgid " hh:mm"
+msgstr " hh:mm"
#: rapid/glade3/prefs.ui.h:30
-msgid "Add unique identifier"
-msgstr "Přidat unikátní identifikátor"
+msgid "Synchronize RAW + JPEG sequence numbers"
+msgstr "Synchronizovat sekvenční čísla RAW + JPEG"
#: rapid/glade3/prefs.ui.h:31
-msgid "Automatically detect Portable Storage Devices"
-msgstr "Automatická detekce kapesních paměťových zařízení"
+msgid "<b>Compatibility with Other Operating Systems</b>"
+msgstr "<b>Kompaktibilita s jinými operačními systémy</b>"
#: rapid/glade3/prefs.ui.h:32
-msgid "Automatically detect backup devices"
-msgstr "Automatická detekce zálohovacích zařízení"
+msgid ""
+"Specify whether photo, video and folder names should have any characters "
+"removed that are not allowed by other operating systems."
+msgstr ""
+"Určete znaky, které se mohou objevit v názvech souborů, ale mohly by později "
+"působit problémy"
#: rapid/glade3/prefs.ui.h:33
-msgid "Automatically detect devices"
-msgstr "Automaticky detekovat zařízení"
+msgid "Strip incompatible characters"
+msgstr "Odstranit nekompatibilní znaky"
#: rapid/glade3/prefs.ui.h:34
-msgid "Automatically rotate JPEG images"
-msgstr "Automaticky otáčet obrázky formátu JPEG"
+msgid "Rename Options"
+msgstr "Možnosti přejmenování"
#: rapid/glade3/prefs.ui.h:35
-msgid "Backup"
-msgstr "Záloha"
+msgid "<span weight=\"bold\" size=\"x-large\">Job Codes</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Pracovní kódy</span>"
#: rapid/glade3/prefs.ui.h:36
-msgid "Backup photos and videos when downloading"
-msgstr "Zálohovat fotografie a videa při stahování"
+msgid "<b>Job Codes</b>"
+msgstr "<b>Pracovní kódy</b>"
#: rapid/glade3/prefs.ui.h:37
-msgid ""
-"Choose the download folder. Subfolders for the downloaded photos will be "
-"automatically created in this folder using the structure specified below."
-msgstr ""
-"Vyberte složku stahování. Podsložky pro stahované obrázky budou vytvořeny "
-"automaticky v této složce s použitím struktury specifikované níže."
-
-#: rapid/glade3/prefs.ui.h:38
-msgid ""
-"Choose the download folder. Subfolders for the downloaded videos will be "
-"automatically created in this folder using the structure specified below."
-msgstr ""
-"Vyberte složku pro stažení. Podsložky pro stažená videa jsou vytvořena "
-"automaticky podle schématu, které si vytvoříte."
+msgid "_Add..."
+msgstr "_Přidat..."
#: rapid/glade3/prefs.ui.h:39
-msgid "Day start:"
-msgstr "Začátek dne:"
+msgid "R_emove All"
+msgstr "O_dstranit vše"
#: rapid/glade3/prefs.ui.h:40
-msgid "Device Options"
-msgstr "Možnosti zařízení"
+msgid "Job Codes"
+msgstr "Pracovní kódy"
#: rapid/glade3/prefs.ui.h:41
+msgid "<span weight=\"bold\" size=\"x-large\">Devices</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Zařízení</span>"
+
+#: rapid/glade3/prefs.ui.h:42
msgid "Devices"
msgstr "Zařízení"
-#: rapid/glade3/prefs.ui.h:42
+#: rapid/glade3/prefs.ui.h:43
msgid ""
"Devices are from where to download photos and videos, such as cameras, "
"memory cards or Portable Storage Devices.\n"
@@ -1682,35 +1674,27 @@ msgid ""
"used.</i>"
msgstr ""
-#: rapid/glade3/prefs.ui.h:47
-msgid "Download folder:"
-msgstr "Složka stahování:"
-
#: rapid/glade3/prefs.ui.h:48
-msgid "Downloads today:"
-msgstr "Dnešní stahování:"
+msgid "Automatically detect Portable Storage Devices"
+msgstr "Automatická detekce kapesních paměťových zařízení"
#: rapid/glade3/prefs.ui.h:49
-msgid "Error Handling"
-msgstr "Chybová obsluha"
+msgid "Automatically detect devices"
+msgstr "Automaticky detekovat zařízení"
#: rapid/glade3/prefs.ui.h:50
-msgid "Exit program even if download had warnings or errors"
-msgstr "Ukončit program, i když stahování skončilo varováními nebo chybami"
-
-#: rapid/glade3/prefs.ui.h:51
-msgid "Exit program when download completes"
-msgstr "Ukončit program po stažení souborů"
-
-#: rapid/glade3/prefs.ui.h:52
-msgid "Generate thumbnails (slower)"
-msgstr "Generovat náhledy (pomalé)"
-
-#: rapid/glade3/prefs.ui.h:53
msgid ""
-"If you disable automatic detection, choose the exact backup locations."
+"If you enable automatic detection of Portable Storage Devices, the entire "
+"device will be scanned. On large devices, this could take some time.\n"
+"\n"
+"When this option is enabled, and a potential device is detected, you will be "
+"prompted to determine if it should be scanned or not."
msgstr ""
+#: rapid/glade3/prefs.ui.h:53
+msgid "Location:"
+msgstr "Umístění:"
+
#: rapid/glade3/prefs.ui.h:54
msgid ""
"If you disable automatic detection, choose the exact location of the photos "
@@ -1718,12 +1702,18 @@ msgid ""
msgstr ""
#: rapid/glade3/prefs.ui.h:55
+msgid "<span weight=\"bold\" size=\"x-large\">Device Options</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Možnosti zařízení</span>"
+
+#: rapid/glade3/prefs.ui.h:56
+msgid "Remembered Paths"
+msgstr "Zapamatované cesty"
+
+#: rapid/glade3/prefs.ui.h:57
msgid ""
-"If you enable automatic detection of Portable Storage Devices, the entire "
-"device will be scanned. On large devices, this could take some time.\n"
-"\n"
-"When this option is enabled, and a potential device is detected, you will be "
-"prompted to determine if it should be scanned or not."
+"Remembered paths are those associated with devices that you have chosen to "
+"always scan or ignore when automatic detection of Portable Storage Devices "
+"is enabled."
msgstr ""
#: rapid/glade3/prefs.ui.h:58
@@ -1731,164 +1721,155 @@ msgid "Ignored Paths"
msgstr "Ignorované cesty"
#: rapid/glade3/prefs.ui.h:59
-msgid "Job Codes"
-msgstr "Pracovní kódy"
-
-#: rapid/glade3/prefs.ui.h:60
-msgid "Location:"
-msgstr "Umístění:"
+msgid ""
+"Specify the ending portion of any paths you want ignored when scanning "
+"devices for photos or videos. Any path ending with the values below will not "
+"be scanned."
+msgstr ""
#: rapid/glade3/prefs.ui.h:61
-msgid "Miscellaneous"
-msgstr "Různé"
+msgid "Re_move All"
+msgstr "_Odstranit vše"
#: rapid/glade3/prefs.ui.h:62
-msgid "Overwrite"
-msgstr "Přepsat"
+msgid "Use _python-style regular expressions"
+msgstr "Použijte _python-style regulární zkratky"
#: rapid/glade3/prefs.ui.h:63
-msgid "Performance"
-msgstr "Výkon"
+msgid "Device Options"
+msgstr "Možnosti zařízení"
#: rapid/glade3/prefs.ui.h:64
-msgid "Photo Folders"
-msgstr "Složky fotografií"
+msgid "<span weight=\"bold\" size=\"x-large\">Backup</span>\t"
+msgstr "<span weight=\"bold\" size=\"x-large\">Záloha</span>\t"
#: rapid/glade3/prefs.ui.h:65
-msgid "Photo Rename"
-msgstr "Přejmenování fotografií"
+msgid "<b>Backup</b>"
+msgstr "<b>Záloha</b>"
#: rapid/glade3/prefs.ui.h:66
-msgid "Photo backup folder name:"
-msgstr "Název složky pro zálohu fotek"
+msgid ""
+"If you disable automatic detection, choose the exact backup locations."
+msgstr ""
#: rapid/glade3/prefs.ui.h:67
-msgid "Photo backup location:"
-msgstr "Umístění zálohy fotografií:"
+msgid "Automatically detect backup devices"
+msgstr "Automatická detekce zálohovacích zařízení"
#: rapid/glade3/prefs.ui.h:68
-msgid "Preferences: Rapid Photo Downloader"
-msgstr "Nastavení: Rapid Photo Downloader"
+msgid ""
+"You can have your photos and videos backed up to multiple locations as they "
+"are downloaded, e.g. external hard drives."
+msgstr ""
+"Při stahování můžete fotky a videa zálohovat na více umístění, např. na "
+"externí disky."
-#: rapid/glade3/prefs.ui.h:70
-msgid "R_emove All"
-msgstr "O_dstranit vše"
+#: rapid/glade3/prefs.ui.h:69
+msgid "Backup photos and videos when downloading"
+msgstr "Zálohovat fotografie a videa při stahování"
-#: rapid/glade3/prefs.ui.h:72
-msgid "Re_move All"
-msgstr "_Odstranit vše"
+#: rapid/glade3/prefs.ui.h:70
+msgid ""
+"Specify the folder in which backups are stored on the device. \n"
+"\n"
+"<i>Note: this will also be used to determine whether or not the device is "
+"used for backups. For each device you wish to use for backing up to, create "
+"a folder in it with one of these names.</i>"
+msgstr ""
+"Vyberte složku, ve které jsou na zařízení uloženy zálohy. \n"
+"<i>Poznámka: Podle toho se také pozná, zda je zařízení použito pro zálohy. "
+"Na každém zařízení, které chcete pro zálohy použít, vytvořte složku s "
+"některým jménem. </i>"
#: rapid/glade3/prefs.ui.h:73
-msgid "Remembered Paths"
-msgstr "Zapamatované cesty"
+msgid "Photo backup location:"
+msgstr "Umístění zálohy fotografií:"
#: rapid/glade3/prefs.ui.h:74
-msgid ""
-"Remembered paths are those associated with devices that you have chosen to "
-"always scan or ignore when automatic detection of Portable Storage Devices "
-"is enabled."
-msgstr ""
+msgid "Photo backup folder name:"
+msgstr "Název složky pro zálohu fotek"
#: rapid/glade3/prefs.ui.h:75
-msgid "Rename Options"
-msgstr "Možnosti přejmenování"
+msgid "<i>Example:</i>"
+msgstr "<i>Příklad:</i>"
#: rapid/glade3/prefs.ui.h:76
-msgid "Skip"
-msgstr "Vynechat"
+msgid "<i>/media/externaldrive/Photos</i>"
+msgstr "<i>/media/externaldrive/Photos</i>"
#: rapid/glade3/prefs.ui.h:77
-msgid "Skip download"
-msgstr "Vynechat stahování"
+msgid "Video backup folder name:"
+msgstr "Název složky pro zálohu videí"
#: rapid/glade3/prefs.ui.h:78
-msgid ""
-"Sorry, video downloading functionality disabled. To download videos, please "
-"install either the <i>hachoir metadata</i> and <i>kaa metadata</i> packages "
-"for python, or <i>exiftool</i>."
-msgstr ""
+msgid "Video backup location:"
+msgstr "Umístění zálohy videí:"
#: rapid/glade3/prefs.ui.h:79
-msgid ""
-"Specify the ending portion of any paths you want ignored when scanning "
-"devices for photos or videos. Any path ending with the values below will not "
-"be scanned."
-msgstr ""
+msgid "Backup"
+msgstr "Záloha"
#: rapid/glade3/prefs.ui.h:80
-msgid ""
-"Specify the folder in which backups are stored on the device. \n"
-"\n"
-"<i>Note: this will also be used to determine whether or not the device is "
-"used for backups. For each device you wish to use for backing up to, create "
-"a folder in it with one of these names.</i>"
-msgstr ""
-"Vyberte složku, ve které jsou na zařízení uloženy zálohy. \n"
-"<i>Poznámka: Podle toho se také pozná, zda je zařízení použito pro zálohy. "
-"Na každém zařízení, které chcete pro zálohy použít, vytvořte složku s "
-"některým jménem. </i>"
+msgid "<span weight=\"bold\" size=\"x-large\">Miscellaneous</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Různé</span>"
-#: rapid/glade3/prefs.ui.h:83
-msgid ""
-"Specify the time in 24 hour format at which the <i>Downloads today</i> "
-"sequence number should be reset."
-msgstr ""
-"Specifikujte čas ve 24 hodinovém formátu aby mohlo být resetováno sekvenční "
-"číslo v <i>Dnešní stahování</i>."
+#: rapid/glade3/prefs.ui.h:81
+msgid "<b>Program Automation</b>"
+msgstr "<b>Automatizace programu</b>"
-#: rapid/glade3/prefs.ui.h:84
-msgid ""
-"Specify whether photo, video and folder names should have any characters "
-"removed that are not allowed by other operating systems."
-msgstr ""
-"Určete znaky, které se mohou objevit v názvech souborů, ale mohly by později "
-"působit problémy"
+#: rapid/glade3/prefs.ui.h:82
+msgid "Unmount (\"eject\") device upon download completion"
+msgstr "Po stažení souborů odpojit zařízení"
-#: rapid/glade3/prefs.ui.h:85
+#: rapid/glade3/prefs.ui.h:83
msgid "Start downloading at program startup"
msgstr "Start stahování při startu programu"
-#: rapid/glade3/prefs.ui.h:86
+#: rapid/glade3/prefs.ui.h:84
msgid "Start downloading upon device insertion"
msgstr "Začít stahovat hned po vložení zařízení"
+#: rapid/glade3/prefs.ui.h:85
+msgid "Exit program when download completes"
+msgstr "Ukončit program po stažení souborů"
+
+#: rapid/glade3/prefs.ui.h:86
+msgid "Exit program even if download had warnings or errors"
+msgstr "Ukončit program, i když stahování skončilo varováními nebo chybami"
+
#: rapid/glade3/prefs.ui.h:87
-msgid "Stored number:"
-msgstr "Uskladněné číslo:"
+msgid "Automatically rotate JPEG images"
+msgstr "Automaticky otáčet obrázky formátu JPEG"
#: rapid/glade3/prefs.ui.h:88
-msgid "Strip incompatible characters"
-msgstr "Odstranit nekompatibilní znaky"
+msgid "Performance"
+msgstr "Výkon"
#: rapid/glade3/prefs.ui.h:89
-msgid "Synchronize RAW + JPEG sequence numbers"
-msgstr "Synchronizovat sekvenční čísla RAW + JPEG"
+msgid "Generate thumbnails (slower)"
+msgstr "Generovat náhledy (pomalé)"
#: rapid/glade3/prefs.ui.h:90
-msgid "Unmount (\"eject\") device upon download completion"
-msgstr "Po stažení souborů odpojit zařízení"
+msgid "Miscellaneous"
+msgstr "Různé"
#: rapid/glade3/prefs.ui.h:91
-msgid "Use _python-style regular expressions"
-msgstr "Použijte _python-style regulární zkratky"
+msgid "<span weight=\"bold\" size=\"x-large\">Error Handling</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Chybová obsluha</span>"
#: rapid/glade3/prefs.ui.h:92
-msgid "Video Folders"
-msgstr "Složky pro videa"
+msgid "<b>Photo and Video Name Conflicts</b>"
+msgstr "<b>Konflikty jmen fotografií a videa</b>"
#: rapid/glade3/prefs.ui.h:93
-msgid "Video Rename"
-msgstr "Přejmenovat videa"
+msgid "Add unique identifier"
+msgstr "Přidat unikátní identifikátor"
#: rapid/glade3/prefs.ui.h:94
-msgid "Video backup folder name:"
-msgstr "Název složky pro zálohu videí"
+msgid "Skip download"
+msgstr "Vynechat stahování"
#: rapid/glade3/prefs.ui.h:95
-msgid "Video backup location:"
-msgstr "Umístění zálohy videí:"
-
-#: rapid/glade3/prefs.ui.h:96
msgid ""
"When a photo or video of the same name has already been downloaded, choose "
"whether to skip downloading the file, or to add a unique indentifier."
@@ -1896,7 +1877,7 @@ msgstr ""
"Pokud má fotka nebo video stejný název jako již existující soubor, vyberte, "
"zda se má stahování přeskočit, nebo přejmenovat."
-#: rapid/glade3/prefs.ui.h:97
+#: rapid/glade3/prefs.ui.h:96
msgid ""
"When backing up, choose whether to overwrite a file on the backup device "
"that has the same name, or skip backing it up."
@@ -1904,17 +1885,17 @@ msgstr ""
"Vyberte, zda při zálohování přepsat na cílovém zařízení soubor se stejným "
"jménem, nebo jeho zálohování přeskočit."
+#: rapid/glade3/prefs.ui.h:97
+msgid "Overwrite"
+msgstr "Přepsat"
+
#: rapid/glade3/prefs.ui.h:98
-msgid ""
-"You can have your photos and videos backed up to multiple locations as they "
-"are downloaded, e.g. external hard drives."
-msgstr ""
-"Při stahování můžete fotky a videa zálohovat na více umístění, např. na "
-"externí disky."
+msgid "Skip"
+msgstr "Vynechat"
#: rapid/glade3/prefs.ui.h:99
-msgid "_Add..."
-msgstr "_Přidat..."
+msgid "Error Handling"
+msgstr "Chybová obsluha"
#: rapid/glade3/about.ui.h:1
msgid "Import your photos and videos efficiently and reliably"
diff --git a/po/da.po b/po/da.po
index b2378ea..a950382 100644
--- a/po/da.po
+++ b/po/da.po
@@ -7,22 +7,22 @@ msgid ""
msgstr ""
"Project-Id-Version: rapid\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
-"POT-Creation-Date: 2011-11-20 13:25-0600\n"
-"PO-Revision-Date: 2011-11-21 07:04+0000\n"
+"POT-Creation-Date: 2012-06-23 04:00-0500\n"
+"PO-Revision-Date: 2012-06-25 07:23+0000\n"
"Last-Translator: Torben Gundtofte-Bruun <torben@g-b.dk>\n"
"Language-Team: Danish <da@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-12-28 07:56+0000\n"
-"X-Generator: Launchpad (build 14560)\n"
+"X-Launchpad-Export-Date: 2012-09-11 00:24+0000\n"
+"X-Generator: Launchpad (build 15924)\n"
#. Translators: if neccessary, for guidance in how to translate this program, you may see http://damonlynch.net/translate.html
-#: rapid/rapid.py:107 rapid/rapid.py:1699 rapid/glade3/rapid.ui.h:14
+#: rapid/rapid.py:112 rapid/rapid.py:1784 rapid/glade3/rapid.ui.h:1
msgid "Rapid Photo Downloader"
msgstr "Rapid Photo Downloader"
-#: rapid/rapid.py:112
+#: rapid/rapid.py:117
#, python-format
msgid ""
"%(date)s\n"
@@ -31,33 +31,33 @@ msgstr ""
"%(date)s\n"
"%(time)s"
-#: rapid/rapid.py:114
+#: rapid/rapid.py:119
#, python-format
msgid "%(date)s %(time)s"
msgstr "%(date)s %(time)s"
-#: rapid/rapid.py:117
+#: rapid/rapid.py:122
#, python-format
msgid "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
msgstr "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
#. Device refers to a thing like a camera, memory card in its reader,
#. external hard drive, Portable Storage Device, etc.
-#: rapid/rapid.py:152
+#: rapid/rapid.py:157
msgid "Device"
msgstr "Enhed"
#. Size refers to the total size of images on the device, typically in
#. MB or GB
-#: rapid/rapid.py:170
+#: rapid/rapid.py:175
msgid "Size"
msgstr "Størrelse"
-#: rapid/rapid.py:173
+#: rapid/rapid.py:178
msgid "Download Progress"
msgstr "Downloadfremgang"
-#: rapid/rapid.py:319
+#: rapid/rapid.py:336
#, python-format
msgid "%(device)s did not unmount"
msgstr "%(device)s kunne ikke afmonteres"
@@ -66,22 +66,22 @@ msgstr "%(device)s kunne ikke afmonteres"
#. looking for photos or videos. It is visible initially in the progress bar for each device
#. (which normally holds "x photos and videos").
#. It maybe displayed only briefly if the contents of the device being scanned is small.
-#: rapid/rapid.py:1186
+#: rapid/rapid.py:1216
msgid "scanning..."
msgstr "gennemsøger..."
#. this location is a human readable explanation for /, and is inserted into Downloading from %(location)s
-#: rapid/rapid.py:1697
+#: rapid/rapid.py:1782
msgid "the root of the file system"
msgstr "filsystemets rod"
#. message in dialog box which asks the user if they really want to be downloading from this location
-#: rapid/rapid.py:1701
+#: rapid/rapid.py:1786
#, python-format
msgid "Downloading from %(location)s."
msgstr "henter fra %(location)s."
-#: rapid/rapid.py:1702
+#: rapid/rapid.py:1787
msgid ""
"Do you really want to download from here? On some systems, scanning this "
"location can take a very long time."
@@ -89,15 +89,15 @@ msgstr ""
"Vil du virkelig hente herfra? På nogle systemer kan det tage lang tid at "
"gennemse denne kilde."
-#: rapid/rapid.py:2124 rapid/glade3/rapid.ui.h:5
+#: rapid/rapid.py:2209
msgid "Download"
msgstr "Hent"
-#: rapid/rapid.py:2127
+#: rapid/rapid.py:2212
msgid "Pause"
msgstr "Pause"
-#: rapid/rapid.py:2228
+#: rapid/rapid.py:2317
#, python-format
msgid ""
"These download folders are invalid:\n"
@@ -108,7 +108,7 @@ msgstr ""
"%(folder1)s\n"
"%(folder2)s"
-#: rapid/rapid.py:2231
+#: rapid/rapid.py:2320
#, python-format
msgid ""
"This download folder is invalid:\n"
@@ -117,176 +117,176 @@ msgstr ""
"Denne download mappe er ugyldig:\n"
"%s"
-#: rapid/rapid.py:2232
+#: rapid/rapid.py:2321
msgid "Download cannot proceed"
msgstr "Download kan ikke fortsætte"
-#: rapid/rapid.py:2559
+#: rapid/rapid.py:2700
msgid "About 1 second remaining"
msgstr "Cirka 1 sekund endnu"
-#: rapid/rapid.py:2561
+#: rapid/rapid.py:2702
#, python-format
msgid "About %i seconds remaining"
msgstr "Cirka %i sekunder endnu"
-#: rapid/rapid.py:2563
+#: rapid/rapid.py:2704
msgid "About 1 minute remaining"
msgstr "Cirka 1 minut endnu"
#. Translators: in the text '%(minutes)i:%(seconds)02i', only the : should be translated, if needed.
#. '%(minutes)i' and '%(seconds)02i' should not be modified or left out. They are used to format and display the amount
#. of time the download has remainging, e.g. 'About 5:36 minutes remaining'
-#: rapid/rapid.py:2568
+#: rapid/rapid.py:2709
#, python-format
msgid "About %(minutes)i:%(seconds)02i minutes remaining"
msgstr "Cirka %(minutes)i:%(seconds)02i sekunder endnu"
-#: rapid/rapid.py:2590 rapid/rpdfile.py:113
+#: rapid/rapid.py:2731 rapid/rpdfile.py:123
msgid "photos and videos"
msgstr "fotos og videoer"
-#: rapid/rapid.py:2592 rapid/rpdfile.py:115
+#: rapid/rapid.py:2733 rapid/rpdfile.py:125
msgid "photos or videos"
msgstr "fotos eller videoer"
-#: rapid/rapid.py:2595 rapid/rapid.py:3408 rapid/rpdfile.py:118
+#: rapid/rapid.py:2736 rapid/rapid.py:3558 rapid/rpdfile.py:128
msgid "videos"
msgstr "videoer"
-#: rapid/rapid.py:2597 rapid/preferencesdialog.py:1617 rapid/rpdfile.py:120
-#: rapid/rpdfile.py:254
+#: rapid/rapid.py:2738 rapid/preferencesdialog.py:1620 rapid/rpdfile.py:130
+#: rapid/rpdfile.py:291
msgid "video"
msgstr "video"
-#: rapid/rapid.py:2600 rapid/rapid.py:3406 rapid/rpdfile.py:123
+#: rapid/rapid.py:2741 rapid/rapid.py:3556 rapid/rpdfile.py:133
msgid "photos"
msgstr "fotos"
#. check subfolder preferences for bad values
-#: rapid/rapid.py:2602 rapid/preferencesdialog.py:1616 rapid/rpdfile.py:125
-#: rapid/rpdfile.py:234
+#: rapid/rapid.py:2743 rapid/preferencesdialog.py:1619 rapid/rpdfile.py:135
+#: rapid/rpdfile.py:272
msgid "photo"
msgstr "foto"
-#: rapid/rapid.py:2629
+#: rapid/rapid.py:2770
#, python-format
msgid "%(noFiles)s %(filetypes)s downloaded"
msgstr "%(noFiles)s %(filetypes)s hentet"
-#: rapid/rapid.py:2633
+#: rapid/rapid.py:2774
#, python-format
msgid "%(noFiles)s %(filetypes)s failed to download"
msgstr "%(noFiles)s %(filetypes)s kunne ikke hentes"
-#: rapid/rapid.py:2636 rapid/rapid.py:2688
+#: rapid/rapid.py:2777 rapid/rapid.py:2829
msgid "warnings"
msgstr "advarsler"
-#: rapid/rapid.py:2645
+#: rapid/rapid.py:2786
msgid "All downloads complete"
msgstr "Alle downloads er afsluttet"
-#: rapid/rapid.py:2651 rapid/rapid.py:2660 rapid/rapid.py:2669
-#: rapid/rapid.py:2678 rapid/rapid.py:2686
+#: rapid/rapid.py:2792 rapid/rapid.py:2801 rapid/rapid.py:2810
+#: rapid/rapid.py:2819 rapid/rapid.py:2827
#, python-format
msgid "%(number)s %(numberdownloaded)s"
msgstr "%(number)s %(numberdownloaded)s"
-#: rapid/rapid.py:2653 rapid/rapid.py:2671
+#: rapid/rapid.py:2794 rapid/rapid.py:2812
#, python-format
msgid "%(filetype)s downloaded"
msgstr "%(filetype)s hentet"
-#: rapid/rapid.py:2662 rapid/rapid.py:2680
+#: rapid/rapid.py:2803 rapid/rapid.py:2821
#, python-format
msgid "%(filetype)s failed to download"
msgstr "%(filetype)s kunne ikke hentes"
#. e.g.: 3 of 205 photos and videos (202 remaining)
-#: rapid/rapid.py:2719
+#: rapid/rapid.py:2860
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s (%(remaining)s remaining)"
msgstr "%(number)s af %(total)s %(filetypes)s (%(remaining)s endnu)"
#. e.g.: 205 of 205 photos and videos
-#: rapid/rapid.py:2726
+#: rapid/rapid.py:2867
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s"
msgstr "%(number)s af %(total)s %(filetypes)s"
-#: rapid/rapid.py:3072
+#: rapid/rapid.py:3222
msgid "From"
msgstr "Fra"
-#: rapid/rapid.py:3080
+#: rapid/rapid.py:3230
msgid "Auto Detect"
msgstr "Opdag automatisk"
-#: rapid/rapid.py:3084 rapid/preferencesdialog.py:1324
+#: rapid/rapid.py:3234 rapid/preferencesdialog.py:1327
#, python-format
msgid "Select a folder containing %(file_types)s"
msgstr "Vælg en mappe der indeholder %(file_types)s"
-#: rapid/rapid.py:3125
+#: rapid/rapid.py:3275
msgid "Copy"
msgstr "Kopier"
-#: rapid/rapid.py:3138
+#: rapid/rapid.py:3288
msgid "Move"
msgstr "Flyt"
-#: rapid/rapid.py:3160
+#: rapid/rapid.py:3310
msgid "To"
msgstr "Til"
-#: rapid/rapid.py:3167 rapid/rapid.py:3796
+#: rapid/rapid.py:3317 rapid/rapid.py:3986
msgid "Photos:"
msgstr "Fotos:"
-#: rapid/rapid.py:3170 rapid/preferencesdialog.py:1161
+#: rapid/rapid.py:3320 rapid/preferencesdialog.py:1164
msgid "Select a folder to download photos to"
msgstr "Vælg en mappe at downloade fotos til"
-#: rapid/rapid.py:3182 rapid/rapid.py:3796
+#: rapid/rapid.py:3332 rapid/rapid.py:3986
msgid "Videos:"
msgstr "Videoer:"
-#: rapid/rapid.py:3184 rapid/preferencesdialog.py:1179
+#: rapid/rapid.py:3334 rapid/preferencesdialog.py:1182
msgid "Select a folder to download videos to"
msgstr "Vælg en mappe at downloade videoer til"
-#: rapid/rapid.py:3376
+#: rapid/rapid.py:3526
msgid "and"
msgstr "og"
-#: rapid/rapid.py:3381
+#: rapid/rapid.py:3531
msgid "Using backup devices"
msgstr "Benytter backup enheder"
-#: rapid/rapid.py:3383
+#: rapid/rapid.py:3533
msgid "Using backup device"
msgstr "Benytter backup enhed"
-#: rapid/rapid.py:3385
+#: rapid/rapid.py:3535
msgid "No backup devices detected"
msgstr "Ingen backup enheder fundet"
-#: rapid/rapid.py:3412
+#: rapid/rapid.py:3562
msgid "Free space:"
msgstr "Fri plads:"
#. (videos) or (photos) will be appended to the free space message displayed to the
#. user in the status bar.
#. you should only translate this if your language does not use parantheses
-#: rapid/rapid.py:3424
+#: rapid/rapid.py:3574
#, python-format
msgid "(%(file_type)s)"
msgstr "(%(file_type)s)"
#. Freespace available on the filesystem for downloading to
#. Displayed in status bar message on main window
-#: rapid/rapid.py:3428
+#: rapid/rapid.py:3578
#, python-format
msgid "%(free)s %(file_type)s"
msgstr "%(free)s %(file_type)s"
@@ -294,87 +294,87 @@ msgstr "%(free)s %(file_type)s"
#. Inserted in the middle of the statusbar message concerning the amount of freespace
#. Used to differentiate between two different file systems
#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
-#: rapid/rapid.py:3433
+#: rapid/rapid.py:3583
msgid "; "
msgstr ", "
#. Inserted at the end of the statusbar message concerning the amount of freespace
#. Used to differentiate between two different file systems
#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
-#: rapid/rapid.py:3438
+#: rapid/rapid.py:3588
msgid "."
msgstr ","
#. Freespace available on the filesystem for downloading to
#. Displayed in status bar message on main window
#. e.g. 14.7GB available
-#: rapid/rapid.py:3444
+#: rapid/rapid.py:3594
#, python-format
msgid "%(free)s free"
msgstr "%(free)s fri plads"
#. user manually specified the same location for photos and video backups
-#: rapid/rapid.py:3452
+#: rapid/rapid.py:3602
#, python-format
msgid "Backing up photos and videos to %(path)s"
msgstr "Sikkerhedskopierer fotos og videoer til %(path)s"
#. user manually specified backup location
-#: rapid/rapid.py:3455
+#: rapid/rapid.py:3605
#, python-format
msgid "Backing up to %(path)s"
msgstr "Tager sikkerhedskopi til %(path)s"
#. user manually specified different locations for photo and video backups
-#: rapid/rapid.py:3458
+#: rapid/rapid.py:3608
#, python-format
msgid "Backing up photos to %(path)s and videos to %(path2)s"
msgstr "Sikkerhedskopierer fotos til %(path)s og videoer til %(path2)s"
-#: rapid/rapid.py:3465
+#: rapid/rapid.py:3615
#, python-format
msgid "%(freespace)s. %(backuppaths)s."
msgstr "%(freespace)s. %(backuppaths)s."
-#: rapid/rapid.py:3494
+#: rapid/rapid.py:3644
msgid "Program preferences are invalid"
msgstr "Programmets indstillinger er ugyldige"
-#: rapid/rapid.py:3613 rapid/rpdfile.py:235
+#: rapid/rapid.py:3770 rapid/rpdfile.py:273
msgid "Photo"
msgstr "Foto"
-#: rapid/rapid.py:3615 rapid/rpdfile.py:255
+#: rapid/rapid.py:3772 rapid/rpdfile.py:292
msgid "Video"
msgstr "Video"
-#: rapid/rapid.py:3624
+#: rapid/rapid.py:3781
#, python-format
msgid "%(file_type)s download folder does not exist"
msgstr "%(file_type)s download mappe findes ikke"
-#: rapid/rapid.py:3626 rapid/rapid.py:3640 rapid/rapid.py:3653
+#: rapid/rapid.py:3783 rapid/rapid.py:3797 rapid/rapid.py:3810
#, python-format
msgid "Folder: %s"
msgstr "Mappe: %s"
-#: rapid/rapid.py:3638
+#: rapid/rapid.py:3795
#, python-format
msgid "%(file_type)s download folder is invalid"
msgstr "%(file_type)s download mappe er ugyldig"
-#: rapid/rapid.py:3651
+#: rapid/rapid.py:3808
#, python-format
msgid "%(file_type)s download folder is not writable"
msgstr "%(file_type)s download mappe er skrivebeskyttet"
-#: rapid/rapid.py:3729
+#: rapid/rapid.py:3894
msgid "Thumbnails"
msgstr "Små billeder"
#. Translators: this text is displayed to the user when they request information on the command line options.
#. The text %default should not be modified or left out.
-#: rapid/rapid.py:3777
+#: rapid/rapid.py:3949
#, python-format
msgid ""
"display program information on the command line as the program runs "
@@ -383,43 +383,67 @@ msgstr ""
"vis programinformation på kommandolinien mens programmet kører (standard: "
"%default)"
-#: rapid/rapid.py:3778
+#: rapid/rapid.py:3950
msgid "display debugging information when run from the command line"
msgstr ""
"vis fejlsøgningsinformation når programmet startes fra kommandolinien"
-#: rapid/rapid.py:3779
+#: rapid/rapid.py:3951
msgid "only output errors to the command line"
msgstr "vis kun fejl på kommandolinien"
#. image file extensions are recognized RAW files plus TIFF and JPG
-#: rapid/rapid.py:3781
+#: rapid/rapid.py:3953
msgid "list photo and video file extensions the program recognizes and exit"
msgstr "vis hvilke foto og video formater programmet kender, og afslut"
-#: rapid/rapid.py:3783
+#: rapid/rapid.py:3955
+msgid ""
+"automatically detect devices from which to download, overwriting existing "
+"program preferences"
+msgstr ""
+"opdag enheder automatisk, hvorfra der skal hentes, og overskriv "
+"eksisterende programindstillinger"
+
+#: rapid/rapid.py:3956
+msgid ""
+"manually specify the PATH of the device from which to download, overwriting "
+"existing program preferences"
+msgstr ""
+"angiv stien manuelt, hvorfra der skal hentes, og overskriv eksisterende "
+"programindstillinger"
+
+#: rapid/rapid.py:3957
msgid "reset all program settings and preferences and exit"
msgstr "nulstil alle programindstillinger og afslut"
-#: rapid/rapid.py:3801
+#: rapid/rapid.py:3970
+msgid ""
+"Error: specify device auto-detection or manually specify a device's path "
+"from which to download, but do not do both."
+msgstr ""
+"Fejl: angiv automatisk opdagelse af enheder, eller angiv stien manuelt, "
+"hvorfra der skal hentes, men angiv ikke begge dele."
+
+#: rapid/rapid.py:3991
#, python-format
msgid "and %s"
msgstr "og %s"
-#: rapid/rapid.py:3809
+#: rapid/rapid.py:3999
msgid "All settings and preferences have been reset"
msgstr "Alle indstillinger er blevet nulstillet"
-#: rapid/backupfile.py:142 rapid/backupfile.py:165
+#: rapid/backupfile.py:157 rapid/backupfile.py:180
msgid "Backing up error"
msgstr "Fejl ved sikkerhedskopiering"
-#: rapid/backupfile.py:144
+#: rapid/backupfile.py:159
#, python-format
msgid "Destination directory could not be created: %(directory)s\n"
msgstr "Destinationsmappe kunne ikke oprettes: %(directory)s\n"
-#: rapid/backupfile.py:146 rapid/backupfile.py:167 rapid/subfolderfile.py:196
+#: rapid/backupfile.py:161 rapid/backupfile.py:182 rapid/subfolderfile.py:199
#, python-format
msgid ""
"Source: %(source)s\n"
@@ -428,13 +452,13 @@ msgstr ""
"Kilde: %(source)s\n"
"Destination: %(destination)s"
-#: rapid/backupfile.py:149 rapid/backupfile.py:169
+#: rapid/backupfile.py:164 rapid/backupfile.py:184
#, python-format
msgid "Error: %(inst)s"
msgstr "Fejl: %(inst)s"
-#: rapid/copyfiles.py:159 rapid/subfolderfile.py:211
-#: rapid/subfolderfile.py:352 rapid/subfolderfile.py:370
+#: rapid/copyfiles.py:163 rapid/subfolderfile.py:214
+#: rapid/subfolderfile.py:347 rapid/subfolderfile.py:365
#, python-format
msgid ""
"%(problem)s\n"
@@ -443,491 +467,501 @@ msgstr ""
"%(problem)s\n"
"Fil: %(file)s"
-#: rapid/device.py:79
+#: rapid/device.py:80
msgid "Device Detected"
msgstr "Enhed fundet"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#usedeviceprompt
-#: rapid/device.py:88
+#: rapid/device.py:89
msgid ""
"Should this device or partition be used to download photos or videos from?"
msgstr "Skal fotos og videoer hentes fra denne enhed?"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#usedeviceprompt
-#: rapid/device.py:107
+#: rapid/device.py:108
msgid "_Remember this choice"
msgstr "_Husk dette valg"
-#: rapid/downloadtracker.py:298
+#: rapid/downloadtracker.py:299
msgid "MB/s"
msgstr "MB/s"
-#: rapid/generatenameconfig.py:150
+#: rapid/generatenameconfig.py:151
msgid "Date time"
msgstr "Dato og klokkeslæt"
-#: rapid/generatenameconfig.py:151
+#: rapid/generatenameconfig.py:152
msgid "Text"
msgstr "Tekst"
-#: rapid/generatenameconfig.py:152
+#: rapid/generatenameconfig.py:153
msgid "Filename"
msgstr "Filnavn"
-#: rapid/generatenameconfig.py:153
+#: rapid/generatenameconfig.py:154
msgid "Metadata"
msgstr "Metadata"
-#: rapid/generatenameconfig.py:154
+#: rapid/generatenameconfig.py:155
msgid "Sequences"
msgstr "Sekvenser"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
-#: rapid/generatenameconfig.py:156 rapid/preferencesdialog.py:574
+#: rapid/generatenameconfig.py:157 rapid/preferencesdialog.py:577
msgid "Job code"
msgstr "Job kode"
-#: rapid/generatenameconfig.py:157
+#: rapid/generatenameconfig.py:158
msgid "Image date"
msgstr "Billedets dato"
-#: rapid/generatenameconfig.py:158
+#: rapid/generatenameconfig.py:159
msgid "Video date"
msgstr "Videoens dato"
-#: rapid/generatenameconfig.py:159
+#: rapid/generatenameconfig.py:160
msgid "Today"
msgstr "I dag"
-#: rapid/generatenameconfig.py:160
+#: rapid/generatenameconfig.py:161
msgid "Yesterday"
msgstr "I går"
#. Translators: Download time is the time and date that the download started (when the user clicked the Download button)
-#: rapid/generatenameconfig.py:162
+#: rapid/generatenameconfig.py:163
msgid "Download time"
msgstr "Download klokkeslæt"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:164
+#: rapid/generatenameconfig.py:165
msgid "Name + extension"
msgstr "Navn + udvidelse"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:166
+#: rapid/generatenameconfig.py:167
msgid "Name"
msgstr "Navn"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:168
+#: rapid/generatenameconfig.py:169
msgid "Extension"
msgstr "Udvidelse"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:170
+#: rapid/generatenameconfig.py:171
msgid "Image number"
msgstr "Billedets nummer"
-#: rapid/generatenameconfig.py:171
+#: rapid/generatenameconfig.py:172
msgid "Video number"
msgstr "Videoens nummer"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:173
+#: rapid/generatenameconfig.py:174
msgid "Aperture"
msgstr "Blænde"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:175
+#: rapid/generatenameconfig.py:176
msgid "ISO"
msgstr "ISO"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:177
+#: rapid/generatenameconfig.py:178
msgid "Exposure time"
msgstr "Lukkertid"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:179
+#: rapid/generatenameconfig.py:180
msgid "Focal length"
msgstr "Brændvidde"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:181
+#: rapid/generatenameconfig.py:182
msgid "Camera make"
msgstr "Kameramærke"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:183
+#: rapid/generatenameconfig.py:184
msgid "Camera model"
msgstr "Kameramodel"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:185
+#: rapid/generatenameconfig.py:186
msgid "Short camera model"
msgstr "Forkortet kameramodel"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:187
+#: rapid/generatenameconfig.py:188
msgid "Hyphenated short camera model"
msgstr "Forkortet kameramodel med bindestreg"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:189
+#: rapid/generatenameconfig.py:190
msgid "Serial number"
msgstr "Serienummer"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:191
+#: rapid/generatenameconfig.py:192
msgid "Shutter count"
msgstr "Lukker-antal"
#. File number currently refers to the Exif value Exif.Canon.FileNumber
-#: rapid/generatenameconfig.py:193
+#: rapid/generatenameconfig.py:194
msgid "File number"
msgstr "Filnummer"
#. Only the folder component of the Exif.Canon.FileNumber value
-#: rapid/generatenameconfig.py:195
+#: rapid/generatenameconfig.py:196
msgid "Folder only"
msgstr "Kun mappen"
#. The folder and file component of the Exif.Canon.FileNumber value
-#: rapid/generatenameconfig.py:197
+#: rapid/generatenameconfig.py:198
msgid "Folder and file"
msgstr "Mappe og fil"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:199
+#: rapid/generatenameconfig.py:200
msgid "Owner name"
msgstr "Ejernavn"
-#: rapid/generatenameconfig.py:200
+#: rapid/generatenameconfig.py:201
msgid "Codec"
msgstr "Kodning"
-#: rapid/generatenameconfig.py:201
+#: rapid/generatenameconfig.py:202
msgid "Width"
msgstr "Bredde"
-#: rapid/generatenameconfig.py:202
+#: rapid/generatenameconfig.py:203
msgid "Height"
msgstr "Højde"
-#: rapid/generatenameconfig.py:203
+#: rapid/generatenameconfig.py:204
msgid "Length"
msgstr "Længde"
-#: rapid/generatenameconfig.py:204
+#: rapid/generatenameconfig.py:205
msgid "Frames Per Second"
msgstr "Billeder per sekund"
-#: rapid/generatenameconfig.py:205
+#: rapid/generatenameconfig.py:206
msgid "Artist"
msgstr "Kunstner"
-#: rapid/generatenameconfig.py:206
+#: rapid/generatenameconfig.py:207
msgid "Copyright"
msgstr "Ophavsret"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
-#: rapid/generatenameconfig.py:208
+#: rapid/generatenameconfig.py:209
msgid "Downloads today"
msgstr "Downloads i dag"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
-#: rapid/generatenameconfig.py:210
+#: rapid/generatenameconfig.py:211
msgid "Session number"
msgstr "Kørselsnummer"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
-#: rapid/generatenameconfig.py:212
+#: rapid/generatenameconfig.py:213
msgid "Subfolder number"
msgstr "Undermappe nummer"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
-#: rapid/generatenameconfig.py:214
+#: rapid/generatenameconfig.py:215
msgid "Stored number"
msgstr "Gemt nummer"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequenceletters
-#: rapid/generatenameconfig.py:216
+#: rapid/generatenameconfig.py:217
msgid "Sequence letter"
msgstr "Sekvensbogstav"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:218
+#: rapid/generatenameconfig.py:219
msgid "All digits"
msgstr "Alle cifre"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:220
+#: rapid/generatenameconfig.py:221
msgid "Last digit"
msgstr "Sidste ciffer"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:222
+#: rapid/generatenameconfig.py:223
msgid "Last 2 digits"
msgstr "Sidste 2 cifre"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:224
+#: rapid/generatenameconfig.py:225
msgid "Last 3 digits"
msgstr "Sidste 3 cifre"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:226
+#: rapid/generatenameconfig.py:227
msgid "Last 4 digits"
msgstr "Sidste 4 cifre"
#. Translators: please not the capitalization of this text, and keep it the same if your language features capitalization
-#: rapid/generatenameconfig.py:228
+#: rapid/generatenameconfig.py:229
msgid "Original Case"
msgstr "Oprindelige Store/Små Bogstaver"
#. Translators: please not the capitalization of this text, and keep it the same if your language features capitalization
-#: rapid/generatenameconfig.py:230
+#: rapid/generatenameconfig.py:231
msgid "UPPERCASE"
msgstr "STORE BOGSTAVER"
#. Translators: please not the capitalization of this text, and keep it the same if your language features capitalization
-#: rapid/generatenameconfig.py:232
+#: rapid/generatenameconfig.py:233
msgid "lowercase"
msgstr "små bogstaver"
-#: rapid/generatenameconfig.py:233
+#: rapid/generatenameconfig.py:234
msgid "One digit"
msgstr "Et ciffer"
-#: rapid/generatenameconfig.py:234
+#: rapid/generatenameconfig.py:235
msgid "Two digits"
msgstr "To cifre"
-#: rapid/generatenameconfig.py:235
+#: rapid/generatenameconfig.py:236
msgid "Three digits"
msgstr "Tre cifre"
-#: rapid/generatenameconfig.py:236
+#: rapid/generatenameconfig.py:237
msgid "Four digits"
msgstr "Fire cifre"
-#: rapid/generatenameconfig.py:237
+#: rapid/generatenameconfig.py:238
msgid "Five digits"
msgstr "Fem cifre"
-#: rapid/generatenameconfig.py:238
+#: rapid/generatenameconfig.py:239
msgid "Six digits"
msgstr "Seks cifre"
-#: rapid/generatenameconfig.py:239
+#: rapid/generatenameconfig.py:240
msgid "Seven digits"
msgstr "Syv cifre"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:241
+#: rapid/generatenameconfig.py:242
msgid "Subseconds"
msgstr "Delsekunder"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:243
+#: rapid/generatenameconfig.py:244
msgid "YYYYMMDD"
msgstr "ÅÅÅÅMMDD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:245
+#: rapid/generatenameconfig.py:246
msgid "YYYY-MM-DD"
msgstr "ÅÅÅÅ-MM-DD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:247
+#: rapid/generatenameconfig.py:248
msgid "YYMMDD"
msgstr "ÅÅMMDD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:249
+#: rapid/generatenameconfig.py:250
msgid "YY-MM-DD"
msgstr "ÅÅ-MM-DD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:251
+#: rapid/generatenameconfig.py:252
msgid "MMDDYYYY"
msgstr "MMDDÅÅÅÅ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:253
+#: rapid/generatenameconfig.py:254
msgid "MMDDYY"
msgstr "MMDDÅÅ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:255
+#: rapid/generatenameconfig.py:256
msgid "MMDD"
msgstr "MMDD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:257
+#: rapid/generatenameconfig.py:258
msgid "DDMMYYYY"
msgstr "DDMMÅÅÅÅ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:259
+#: rapid/generatenameconfig.py:260
msgid "DDMMYY"
msgstr "DDMMÅÅ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:261
+#: rapid/generatenameconfig.py:262
msgid "YYYY"
msgstr "ÅÅÅÅ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:263
+#: rapid/generatenameconfig.py:264
msgid "YY"
msgstr "ÅÅ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:265
+#: rapid/generatenameconfig.py:266
msgid "MM"
msgstr "MM"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:267
+#: rapid/generatenameconfig.py:268
msgid "DD"
msgstr "DD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:269
+#: rapid/generatenameconfig.py:270
+msgid "Month (full)"
+msgstr "Måned (udskrevet)"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:272
+msgid "Month (abbreviated)"
+msgstr "Måned (forkortet)"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:274
msgid "HHMMSS"
msgstr "TTMMSS"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:271
+#: rapid/generatenameconfig.py:276
msgid "HHMM"
msgstr "TTMM"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:273
+#: rapid/generatenameconfig.py:278
msgid "HH-MM-SS"
msgstr "TT-MM-SS"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:275
+#: rapid/generatenameconfig.py:280
msgid "HH-MM"
msgstr "TT-MM"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:277
+#: rapid/generatenameconfig.py:282
msgid "HH"
msgstr "TT"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:279
+#: rapid/generatenameconfig.py:284
msgid "MM (minutes)"
msgstr "MM (minutter)"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:281
+#: rapid/generatenameconfig.py:286
msgid "SS"
msgstr "SS"
-#: rapid/preferencesdialog.py:371
+#: rapid/preferencesdialog.py:374
#, python-format
msgid "Subfolder preferences should not start with a %s"
msgstr "Undermappe indstillinger bør ikke begynde med et %s"
-#: rapid/preferencesdialog.py:373
+#: rapid/preferencesdialog.py:376
#, python-format
msgid "Subfolder preferences should not end with a %s"
msgstr "Undermappe indstillinger bør ikke slutte med et %s"
-#: rapid/preferencesdialog.py:377
+#: rapid/preferencesdialog.py:380
#, python-format
msgid "Subfolder preferences should not contain two %s one after the other"
msgstr "Undermappe indstillinger bør ikke indeholde to %s efter hinanden"
-#: rapid/preferencesdialog.py:436 rapid/preferencesdialog.py:697
+#: rapid/preferencesdialog.py:439 rapid/preferencesdialog.py:700
msgid "Remove all Job Codes?"
msgstr "Fjern alle job koder?"
-#: rapid/preferencesdialog.py:437 rapid/preferencesdialog.py:714
+#: rapid/preferencesdialog.py:440 rapid/preferencesdialog.py:717
msgid "Should all Job Codes be removed?"
msgstr "Skal alle job koder fjernes?"
-#: rapid/preferencesdialog.py:443
+#: rapid/preferencesdialog.py:446
msgid "Remove all Remembered Paths?"
msgstr "Fjern alle huskede stier?"
-#: rapid/preferencesdialog.py:444
+#: rapid/preferencesdialog.py:447
msgid "Should all remembered paths be removed?"
msgstr "Skal alle huskede stier fjernes?"
-#: rapid/preferencesdialog.py:450
+#: rapid/preferencesdialog.py:453
msgid "Remove all Ignored Paths?"
msgstr "Fjern alle ignorerede stier?"
-#: rapid/preferencesdialog.py:451
+#: rapid/preferencesdialog.py:454
msgid "Should all ignored paths be removed?"
msgstr "Skal alle ignorerede stier fjernes?"
-#: rapid/preferencesdialog.py:462
+#: rapid/preferencesdialog.py:465
msgid "Error in Photo Rename preferences"
msgstr "Fejl i indstillinger til foto omdøbning"
-#: rapid/preferencesdialog.py:642
+#: rapid/preferencesdialog.py:645
msgid "Error in Video Rename preferences"
msgstr "Fejl i indstillinger til video omdøbning"
-#: rapid/preferencesdialog.py:663
+#: rapid/preferencesdialog.py:666
msgid "Error in Photo Download Subfolders preferences"
msgstr "Fejl i indstillinger til foto download undermapper"
-#: rapid/preferencesdialog.py:680
+#: rapid/preferencesdialog.py:683
msgid "Error in Video Download Subfolders preferences"
msgstr "Fejl i indstillinger til video download undermapper"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
-#: rapid/preferencesdialog.py:739
+#: rapid/preferencesdialog.py:742
msgid "Enter a Job Code"
msgstr "Angiv en jobkode"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
-#: rapid/preferencesdialog.py:755
+#: rapid/preferencesdialog.py:758
msgid "Enter a new Job Code, or select a previous one"
msgstr "Angiv en ny jobkode eller vælg en eksisterende"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
-#: rapid/preferencesdialog.py:758
+#: rapid/preferencesdialog.py:761
msgid "Enter a new Job Code"
msgstr "Angiv en ny jobkode"
-#: rapid/preferencesdialog.py:763
+#: rapid/preferencesdialog.py:766
msgid "Job Code:"
msgstr "Jobkode:"
-#: rapid/preferencesdialog.py:819
+#: rapid/preferencesdialog.py:822
msgid "Enter a Path to Ignore"
msgstr "Angiv en sti der skal ignoreres"
-#: rapid/preferencesdialog.py:831
+#: rapid/preferencesdialog.py:834
msgid "Specify a path that will never be scanned for photos or videos"
msgstr "Angiv en sti som aldrig skal gennemsøges efter fotos og videoer"
-#: rapid/preferencesdialog.py:836
+#: rapid/preferencesdialog.py:839
msgid "Path:"
msgstr "Sti:"
-#: rapid/preferencesdialog.py:1079
+#: rapid/preferencesdialog.py:1082
msgid "Job Code"
msgstr "Jobkode"
-#: rapid/preferencesdialog.py:1350
+#: rapid/preferencesdialog.py:1353
msgid "Select a folder in which to backup photos"
msgstr "Vælg en mappe til sikkerhedskopier af fotos"
-#: rapid/preferencesdialog.py:1363
+#: rapid/preferencesdialog.py:1366
msgid "Select a folder in which to backup videos"
msgstr "Vælg en mappe til sikkerhedskopier af videoer"
#. Translators: please do not modify or leave out html formatting tags like <i> and <b>. These are used to format the text the users sees
-#: rapid/preferencesdialog.py:1458
+#: rapid/preferencesdialog.py:1461
msgid ""
"<i><b>Warning:</b> There is insufficient metadata to fully generate the "
"name. Please use other renaming options.</i>"
@@ -935,7 +969,7 @@ msgstr ""
"<i><b>Advarsel:</b> Metadata er utlistrækkelige til at generere navnet. Vælg "
"andre muligheder for omdøbning.</i>"
-#: rapid/preferencesdialog.py:1509
+#: rapid/preferencesdialog.py:1512
msgid ""
"<i><b>Warning:</b> There is insufficient metadata to fully generate "
"subfolders. Please use other subfolder naming options.</i>"
@@ -944,13 +978,13 @@ msgstr ""
"Vælg andre muligheder for navngivning af undermapper.</i>"
#. Translators: you should not modify or leave out the %s. This is a code used by the programming language python to insert a value that thes user will see
-#: rapid/preferencesdialog.py:1512
+#: rapid/preferencesdialog.py:1515
#, python-format
msgid "<i>Example: %s</i>"
msgstr "<i>Eksempel: %s</i>"
#. Preferences list is now empty
-#: rapid/preferencesdialog.py:1602
+#: rapid/preferencesdialog.py:1605
#, python-format
msgid ""
"The %(filetype)s subfolder preferences entered are invalid and cannot be "
@@ -960,7 +994,7 @@ msgstr ""
"Indstillingerne til %(filetype)s undermappen er ugyldige.\n"
"De bliver nulstillet til deres standardværdier."
-#: rapid/preferencesdialog.py:1747
+#: rapid/preferencesdialog.py:1750
#, python-format
msgid ""
"The following regular expressions are invalid, and will be removed unless "
@@ -971,7 +1005,7 @@ msgstr ""
"ændrer dem:\n"
" %s"
-#: rapid/preferencesdialog.py:1749
+#: rapid/preferencesdialog.py:1752
#, python-format
msgid ""
"This regular expression is invalid, and will be removed unless you correct "
@@ -982,142 +1016,142 @@ msgstr ""
"ændrer det:\n"
" %s"
-#: rapid/preferencesdialog.py:1750
+#: rapid/preferencesdialog.py:1753
msgid "Invalid regular expression"
msgstr "Ugyldigt regulært udtryk"
#. Translators: this value is used as an example device when automatic backup device detection is enabled. You should translate this.
-#: rapid/preferencesdialog.py:1931
+#: rapid/preferencesdialog.py:1934
msgid "externaldrive1"
msgstr "eksterntdrev1"
#. Translators: this value is used as an example device when automatic backup device detection is enabled. You should translate this.
-#: rapid/preferencesdialog.py:1933
+#: rapid/preferencesdialog.py:1936
msgid "externaldrive2"
msgstr "eksterntdrev2"
-#: rapid/prefsrapid.py:126
+#: rapid/prefsrapid.py:127
msgid "New York"
msgstr "New York"
-#: rapid/prefsrapid.py:127
+#: rapid/prefsrapid.py:128
msgid "Manila"
msgstr "Manila"
-#: rapid/prefsrapid.py:127
+#: rapid/prefsrapid.py:128
msgid "Prague"
msgstr "Prag"
-#: rapid/prefsrapid.py:127
+#: rapid/prefsrapid.py:128
msgid "Helsinki"
msgstr "Helsingfors"
-#: rapid/prefsrapid.py:127
+#: rapid/prefsrapid.py:128
msgid "Wellington"
msgstr "Wellington"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Tehran"
msgstr "Teheran"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Kampala"
msgstr "Kampala"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Paris"
msgstr "Paris"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Berlin"
msgstr "Berlin"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Sydney"
msgstr "Sydney"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Budapest"
msgstr "Budapest"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Rome"
msgstr "Rom"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Moscow"
msgstr "Moskva"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Delhi"
msgstr "Delhi"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Warsaw"
msgstr "Warszawa"
-#: rapid/prefsrapid.py:130
+#: rapid/prefsrapid.py:131
msgid "Jakarta"
msgstr "Jakarta"
-#: rapid/prefsrapid.py:130
+#: rapid/prefsrapid.py:131
msgid "Madrid"
msgstr "Madrid"
-#: rapid/prefsrapid.py:130
+#: rapid/prefsrapid.py:131
msgid "Stockholm"
msgstr "Stockholm"
#. components
-#: rapid/problemnotification.py:26 rapid/subfolderfile.py:363
+#: rapid/problemnotification.py:27 rapid/subfolderfile.py:358
msgid "subfolder"
msgstr "undermappe"
-#: rapid/problemnotification.py:27 rapid/subfolderfile.py:361
+#: rapid/problemnotification.py:28 rapid/subfolderfile.py:356
msgid "filename"
msgstr "filnavn"
-#: rapid/problemnotification.py:80
+#: rapid/problemnotification.py:81
#, python-format
msgid "Date time value %s appears invalid."
msgstr "Værdi for dato og klokkeslæt %s forekommer ugyldigt."
-#: rapid/problemnotification.py:81
+#: rapid/problemnotification.py:82
msgid "Filename does not have an extension."
msgstr "Filnavnet har ingen udvidelse."
#. a number component is something like the 8346 in IMG_8346.JPG
-#: rapid/problemnotification.py:83
+#: rapid/problemnotification.py:84
msgid "Filename does not have a number component."
msgstr "Filnavnet indeholder ingen tal."
-#: rapid/problemnotification.py:84
+#: rapid/problemnotification.py:85
#, python-format
msgid "Error generating component %s."
msgstr "Kunne ikke generere component %s."
#. a generic problem
-#: rapid/problemnotification.py:86
+#: rapid/problemnotification.py:87
#, python-format
msgid "%(filetype)s metadata cannot be read"
msgstr "%(filetype)s metadata kan ikke læses"
-#: rapid/problemnotification.py:88
+#: rapid/problemnotification.py:89
#, python-format
msgid "%(filetype)s %(area)s could not be generated"
msgstr "%(filetype)s %(area)s kunne ikke genereres"
-#: rapid/problemnotification.py:90 rapid/problemnotification.py:91
+#: rapid/problemnotification.py:91 rapid/problemnotification.py:92
#, python-format
msgid "An error occurred when copying the %(filetype)s"
msgstr "Der opstod en fejl ved kopiering af %(filetype)s"
-#: rapid/problemnotification.py:93 rapid/problemnotification.py:94
+#: rapid/problemnotification.py:94 rapid/problemnotification.py:95
#, python-format
msgid "%(filetype)s already exists"
msgstr "%(filetype)s findes allerede"
-#: rapid/problemnotification.py:97
+#: rapid/problemnotification.py:98
#, python-format
msgid ""
"%(filetype)s could not be backed up because no suitable backup locations "
@@ -1126,7 +1160,7 @@ msgstr ""
"Der kunne ikke tages sikkerhedskopi af %(filetype)s, fordi der ikke findes "
"egnede placeringer til sikkerhedskopierne."
-#: rapid/problemnotification.py:102
+#: rapid/problemnotification.py:103
#, python-format
msgid ""
"%(image1)s was taken on %(image1_date)s at %(image1_time)s, and %(image2)s "
@@ -1135,12 +1169,12 @@ msgstr ""
"%(image1)s blev taget den %(image1_date)s kl. %(image1_time)s, og %(image2)s "
"den %(image2_date)s kl. %(image2_time)s."
-#: rapid/problemnotification.py:103
+#: rapid/problemnotification.py:104
#, python-format
msgid "%(filetype)s was already downloaded"
msgstr "%(filetype)s er allerede blevet downloadet"
-#: rapid/problemnotification.py:107
+#: rapid/problemnotification.py:108
#, python-format
msgid ""
"The existing %(filetype)s was last modified on %(date)s at %(time)s. Unique "
@@ -1149,27 +1183,27 @@ msgstr ""
"De eksisterende %(filetype)s er sidst ændret den %(date)s klokken %(time)s. "
"Entydig angivelse '%(identifier)s' blev tilføjet."
-#: rapid/problemnotification.py:108
+#: rapid/problemnotification.py:109
#, python-format
msgid "The existing %(filetype)s was last modified on %(date)s at %(time)s."
msgstr ""
"De eksisterende %(filetype)s er sidst ændret den %(date)s klokken %(time)s."
-#: rapid/problemnotification.py:109
+#: rapid/problemnotification.py:110
#, python-format
msgid "There is no data with which to name the %(filetype)s."
msgstr "Der mangler data til navngivning af %(filetype)sne."
-#: rapid/problemnotification.py:111
+#: rapid/problemnotification.py:112
#, python-format
msgid "Error: %(errorno)s %(strerror)s"
msgstr "Fejl: %(errorno)s %(strerror)s"
-#: rapid/problemnotification.py:201
+#: rapid/problemnotification.py:202
msgid "The metadata might be corrupt."
msgstr "Metadata kan være korrupt."
-#: rapid/problemnotification.py:204
+#: rapid/problemnotification.py:205
msgid ""
"The filename, extension and Exif information indicate it has already been "
"downloaded."
@@ -1177,28 +1211,28 @@ msgstr ""
"Filnavnet, udvidelsen og Exif informationerne antyder, at filen allerede er "
"blevet downloadet."
-#: rapid/problemnotification.py:223
+#: rapid/problemnotification.py:224
#, python-format
msgid " It was backed up to %(volume)s"
msgstr " Filen blev sikkerhedskopieret til %(volume)s"
-#: rapid/problemnotification.py:225
+#: rapid/problemnotification.py:226
msgid " It was backed up to these devices: "
msgstr " Filen blev sikkerhedskopieret til disse enheder: "
-#: rapid/problemnotification.py:227 rapid/problemnotification.py:288
-#: rapid/problemnotification.py:300
+#: rapid/problemnotification.py:228 rapid/problemnotification.py:289
+#: rapid/problemnotification.py:301
#, python-format
msgid "%s, "
msgstr "%s, "
-#: rapid/problemnotification.py:228 rapid/problemnotification.py:289
-#: rapid/problemnotification.py:301
+#: rapid/problemnotification.py:229 rapid/problemnotification.py:290
+#: rapid/problemnotification.py:302
#, python-format
msgid "%(volumes)s and %(final_volume)s."
msgstr "%(volumes)s og %(final_volume)s."
-#: rapid/problemnotification.py:240
+#: rapid/problemnotification.py:241
#, python-format
msgid ""
"Photos detected with the same filenames, but taken at different times: "
@@ -1206,484 +1240,451 @@ msgid ""
msgstr ""
"Der findes fotos med ens filnavne men forskellige datoer: %(details)s"
-#: rapid/problemnotification.py:257
+#: rapid/problemnotification.py:258
#, python-format
msgid "An error occurred when backing up on %(volume)s: %(inst)s."
msgstr "Der opstod en fejl ved sikkerhedskopiering til %(volume)s: %(inst)s."
-#: rapid/problemnotification.py:259
+#: rapid/problemnotification.py:260
#, python-format
msgid "An error occurred when backing up on %(volume)s."
msgstr "Der opstod en fejl ved sikkerhedskopiering til %(volume)s."
-#: rapid/problemnotification.py:261
+#: rapid/problemnotification.py:262
msgid "Errors occurred when backing up on the following backup devices: "
msgstr "Der opstod fejl ved sikkerhedskopiering til de følgende enheder: "
-#: rapid/problemnotification.py:265 rapid/problemnotification.py:313
+#: rapid/problemnotification.py:266 rapid/problemnotification.py:314
#, python-format
msgid "%(volume)s (%(inst)s), "
msgstr "%(volume)s (%(inst)s), "
-#: rapid/problemnotification.py:267
+#: rapid/problemnotification.py:268
#, python-format
msgid "%(volume)s, "
msgstr "%(volume)s, "
-#: rapid/problemnotification.py:271 rapid/problemnotification.py:315
+#: rapid/problemnotification.py:272 rapid/problemnotification.py:316
#, python-format
msgid "%(volumes)s and %(volume)s (%(inst)s)."
msgstr "%(volumes)s og %(volume)s (%(inst)s)."
-#: rapid/problemnotification.py:276
+#: rapid/problemnotification.py:277
#, python-format
msgid "%(volumes)s and %(volume)s."
msgstr "%(volumes)s og %(volume)s."
-#: rapid/problemnotification.py:284
+#: rapid/problemnotification.py:285
#, python-format
msgid "Backup already exists on %(volume)s."
msgstr "Sikkerhedskopi findes allerede på %(volume)s."
-#: rapid/problemnotification.py:286
+#: rapid/problemnotification.py:287
msgid "Backups already exist in these locations: "
msgstr "Sikkerhedskopier findes allerede her: "
-#: rapid/problemnotification.py:296
+#: rapid/problemnotification.py:297
#, python-format
msgid "Backup overwritten on %(volume)s."
msgstr "Sikkerhedskopi blev overskrevet på %(volume)s."
-#: rapid/problemnotification.py:298
+#: rapid/problemnotification.py:299
msgid "Backups overwritten on these devices: "
msgstr "Sikkerhedskopier blev overskrevet på disse enheder: "
-#: rapid/problemnotification.py:309
+#: rapid/problemnotification.py:310
#, python-format
msgid "An error occurred when creating directories on %(volume)s: %(inst)s."
msgstr "Der opstod en fejl ved oprettelse af mapper på %(volume)s: %(inst)s."
-#: rapid/problemnotification.py:311
+#: rapid/problemnotification.py:312
msgid ""
"Errors occurred when creating directories on the following backup devices: "
msgstr "Der opstod fejl ved oprettelse af mapper på disse enheder: "
-#: rapid/problemnotification.py:322
+#: rapid/problemnotification.py:323
#, python-format
msgid "%(previousproblem)s Additionally, %(newproblem)s"
msgstr "%(previousproblem)s Og %(newproblem)s"
-#: rapid/problemnotification.py:330
+#: rapid/problemnotification.py:331
#, python-format
msgid " Furthermore, there were %(problems)s."
msgstr " Desuden opstod der %(problems)s."
-#: rapid/problemnotification.py:332
+#: rapid/problemnotification.py:333
#, python-format
msgid " Furthermore, there was a %(problem)s."
msgstr " Desuden opstod der %(problem)s."
-#: rapid/problemnotification.py:341
+#: rapid/problemnotification.py:342
#, python-format
msgid "The %(type)s metadata is missing."
msgstr "Der mangler %(type)s metadata."
-#: rapid/problemnotification.py:343
+#: rapid/problemnotification.py:344
msgid "The following metadata is missing: "
msgstr "Følgende metadata mangler: "
-#: rapid/problemnotification.py:346
+#: rapid/problemnotification.py:347
#, python-format
msgid "%(missing_metadata_elements)s and %(final_missing_metadata_element)s."
msgstr "%(missing_metadata_elements)s og %(final_missing_metadata_element)s."
-#: rapid/problemnotification.py:363
+#: rapid/problemnotification.py:364
msgid "Problems in subfolder and filename generation"
msgstr "Problemer ved generering af undermapper og filnavne"
-#: rapid/problemnotification.py:365
+#: rapid/problemnotification.py:366
msgid "Problem in subfolder and filename generation"
msgstr "Problem ved generering af undermapper og filnavne"
-#: rapid/problemnotification.py:368
+#: rapid/problemnotification.py:369
#, python-format
msgid "Problems in %s generation"
msgstr "Problemer ved generering af %s"
-#: rapid/problemnotification.py:370
+#: rapid/problemnotification.py:371
#, python-format
msgid "Problem in %s generation"
msgstr "Problem ved generering af %s"
-#: rapid/problemnotification.py:379
+#: rapid/problemnotification.py:380
#, python-format
msgid "%(filetype)s already exists, but it was backed up"
msgstr "%(filetype)s findes allerede, men er sikkerhedskopieret"
-#: rapid/problemnotification.py:381
+#: rapid/problemnotification.py:382
#, python-format
msgid "An error occurred when copying the %(filetype)s, but it was backed up"
msgstr ""
"Der opstod en fejl ved kopiering af %(filetype)s, men det blev "
"sikkerhedskopieret"
-#: rapid/problemnotification.py:401
+#: rapid/problemnotification.py:402
msgid "Multiple problems were encountered"
msgstr "Der opstod adskillige problemer"
-#: rapid/problemnotification.py:403 rapid/subfolderfile.py:230
+#: rapid/problemnotification.py:404 rapid/subfolderfile.py:233
msgid "Photos detected with the same filenames, but taken at different times"
msgstr ""
"Der findes fotos med ens filnavne men forskellige klokkeslæt: %(details)s"
-#: rapid/problemnotification.py:409
+#: rapid/problemnotification.py:410
msgid "there were errors backing up"
msgstr "der opstod fejl ved sikkerhedskopiering"
-#: rapid/problemnotification.py:410
+#: rapid/problemnotification.py:411
msgid "There were errors backing up"
msgstr "Der opstod fejl ved sikkerhedskopiering"
-#: rapid/problemnotification.py:412
+#: rapid/problemnotification.py:413
msgid "there was an error backing up"
msgstr "der opstod en fejl ved sikkerhedskopiering"
-#: rapid/problemnotification.py:413
+#: rapid/problemnotification.py:414
msgid "There was an error backing up"
msgstr "Der opstod en fejl ved sikkerhedskopiering"
#. e.g.
-#: rapid/problemnotification.py:416
+#: rapid/problemnotification.py:417
#, python-format
msgid "%(previousproblem)s, and %(backinguperror)s"
msgstr "%(previousproblem)s, og %(backinguperror)s"
-#: rapid/rpdfile.py:139
+#: rapid/rpdfile.py:153
#, python-format
msgid "%(number)s %(filetypes)s"
msgstr "%(number)s %(filetypes)s"
-#: rapid/subfolderfile.py:79
+#: rapid/rpdfile.py:163
+#, python-format
+msgid "scanning (found %(photos)s photos and %(videos)s videos)..."
+msgstr "gennemsøger (%(photos)s fotos og %(videos)s videoer fundet)..."
+
+#: rapid/subfolderfile.py:80
#, python-format
msgid "%(hour)s:%(minute)s:%(second)s:%(subsecond)s"
msgstr "%(hour)s:%(minute)s:%(second)s:%(subsecond)s"
-#: rapid/subfolderfile.py:300
+#: rapid/subfolderfile.py:301
msgid "Photo has already been downloaded"
msgstr "Fotoet er allerede blevet downloadet"
-#: rapid/subfolderfile.py:301
+#: rapid/subfolderfile.py:302
#, python-format
msgid "Source: %(source)s"
msgstr "Kilde: %(source)s"
-#: rapid/subfolderfile.py:359
+#: rapid/subfolderfile.py:354
msgid "subfolder and filename"
msgstr "undermappe og filnavn"
-#: rapid/subfolderfile.py:397
+#: rapid/subfolderfile.py:393
msgid "Failed to create download subfolder"
msgstr "Kunne ikke oprette undermappe"
-#: rapid/subfolderfile.py:398
+#: rapid/subfolderfile.py:394
#, python-format
msgid "Path: %s"
msgstr "Sti: %s"
-#: rapid/glade3/rapid.ui.h:1
-msgid "About..."
-msgstr "Om..."
-
#: rapid/glade3/rapid.ui.h:2
-msgid "Check All"
-msgstr "Markér alle"
+msgid "_File"
+msgstr "_Fil"
#: rapid/glade3/rapid.ui.h:3
-msgid "Check All Photos"
-msgstr "Markér alle fotos"
+msgid "Download / Pause"
+msgstr "Download / Pause"
#: rapid/glade3/rapid.ui.h:4
-msgid "Check All Videos"
-msgstr "Markér alle videoer"
+msgid "_Select"
+msgstr "_Markér"
+
+#: rapid/glade3/rapid.ui.h:5
+msgid "Select All Without _Job Code"
+msgstr "Markér alle _uden jobkode"
#: rapid/glade3/rapid.ui.h:6
-msgid "Download / Pause"
-msgstr "Download / Pause"
+msgid "Select All Wit_h Job Code"
+msgstr "Markér alle med _jobkode"
#: rapid/glade3/rapid.ui.h:7
-msgid "Get Help Online..."
-msgstr "Få hjælp online..."
+msgid "_View"
+msgstr "_Vis"
#: rapid/glade3/rapid.ui.h:8
-msgid "Help"
-msgstr "Hjælp"
+msgid "_Error Log"
+msgstr "_Fejl-log"
#: rapid/glade3/rapid.ui.h:9
-msgid "Make a Donation..."
-msgstr "Giv et bidrag..."
+msgid "_Clear Completed Downloads"
+msgstr "_Ryd afsluttede downloads"
#: rapid/glade3/rapid.ui.h:10
-msgid "Next File"
-msgstr "Næste fil"
-
-#: rapid/glade3/rapid.ui.h:11
-msgid "Preferences"
-msgstr "Indstillinger"
-
-#: rapid/glade3/rapid.ui.h:12
msgid "Previous File"
msgstr "Forrige fil"
-#: rapid/glade3/rapid.ui.h:13
-msgid "Quit"
-msgstr "Afslut"
-
-#: rapid/glade3/rapid.ui.h:15
-msgid "Refresh"
-msgstr "Opdatér"
-
-#: rapid/glade3/rapid.ui.h:16
-msgid "Report a Problem..."
-msgstr "Rapportér et problem..."
-
-#: rapid/glade3/rapid.ui.h:17
-msgid "Select All Wit_h Job Code"
-msgstr "Markér alle med _jobkode"
-
-#: rapid/glade3/rapid.ui.h:18
-msgid "Select All Without _Job Code"
-msgstr "Markér alle _uden jobkode"
-
-#: rapid/glade3/rapid.ui.h:19
-msgid "Translate this Application..."
-msgstr "Oversæt dette program..."
-
-#: rapid/glade3/rapid.ui.h:20
-msgid "Uncheck All"
-msgstr "Afmarkér alle"
-
-#: rapid/glade3/rapid.ui.h:21
-msgid "_Check All"
-msgstr "_Markér alle"
-
-#: rapid/glade3/rapid.ui.h:22
-msgid "_Clear Completed Downloads"
-msgstr "_Ryd afsluttede downloads"
-
-#: rapid/glade3/rapid.ui.h:23
-msgid "_Download"
-msgstr "_Download"
-
-#: rapid/glade3/rapid.ui.h:24
-msgid "_Error Log"
-msgstr "_Fejl-log"
-
-#: rapid/glade3/rapid.ui.h:25
-msgid "_File"
-msgstr "_Fil"
+#: rapid/glade3/rapid.ui.h:11
+msgid "Next File"
+msgstr "Næste fil"
-#: rapid/glade3/rapid.ui.h:26
+#: rapid/glade3/rapid.ui.h:12
msgid "_Help"
msgstr "_Hjælp"
-#: rapid/glade3/rapid.ui.h:27
-msgid "_Include in download"
-msgstr "_Indkludér i download"
-
-#: rapid/glade3/rapid.ui.h:28
+#: rapid/glade3/rapid.ui.h:13
msgid "_Make a Donation..."
msgstr "_Giv et bidrag..."
-#: rapid/glade3/rapid.ui.h:29
-msgid "_Select"
-msgstr "_Markér"
-
-#: rapid/glade3/rapid.ui.h:30
+#: rapid/glade3/rapid.ui.h:14
msgid "_Translate this Application..."
msgstr "_Oversæt denne applikation..."
-#: rapid/glade3/rapid.ui.h:31
+#: rapid/glade3/rapid.ui.h:15
+msgid "_Check All"
+msgstr "_Markér alle"
+
+#: rapid/glade3/rapid.ui.h:16
msgid "_Uncheck All"
msgstr "_Afmarkér alle"
-#: rapid/glade3/rapid.ui.h:32
-msgid "_View"
-msgstr "_Vis"
+#: rapid/glade3/rapid.ui.h:17
+msgid "_Include in download"
+msgstr "_Indkludér i download"
+
+#: rapid/glade3/rapid.ui.h:18
+msgid "_Download"
+msgstr "_Download"
#: rapid/glade3/prefs.ui.h:1
-msgid " "
-msgstr " "
+msgid "Preferences: Rapid Photo Downloader"
+msgstr "Indstillinger: Rapid Photo Downloader"
#: rapid/glade3/prefs.ui.h:2
-msgid " hh:mm"
-msgstr " hh:mm"
+msgid "<span weight=\"bold\" size=\"x-large\">Photo Download Folders</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Foto download mapper</span>"
#: rapid/glade3/prefs.ui.h:3
-msgid ":"
-msgstr ":"
+msgid "<i>Example: /home/user/Pictures</i>"
+msgstr "<i>Eksempel: /home/user/Billeder</i>"
#: rapid/glade3/prefs.ui.h:4
-msgid "<b>Backup</b>"
-msgstr "<b>Sikkerhedskopi</b>"
+msgid "<b>Download Subfolders</b>"
+msgstr "<b>Download undermappe</b>"
#: rapid/glade3/prefs.ui.h:5
-msgid "<b>Compatibility with Other Operating Systems</b>"
-msgstr "<b>Kompatibilitet med andre styresystemer</b>"
+msgid "Download folder:"
+msgstr "Download mappe:"
#: rapid/glade3/prefs.ui.h:6
-msgid "<b>Download Folder</b>"
-msgstr "<b>Download mappe</b>"
+msgid ""
+"Choose the download folder. Subfolders for the downloaded photos will be "
+"automatically created in this folder using the structure specified below."
+msgstr ""
+"Vælg download mappen. Undermapper for de downloadede fotos vil automatisk "
+"blive oprettet her ved hjælp af den nedenfor angivne struktur."
#: rapid/glade3/prefs.ui.h:7
-msgid "<b>Download Subfolders</b>"
-msgstr "<b>Download undermappe</b>"
+msgid "<b>Download Folder</b>"
+msgstr "<b>Download mappe</b>"
#: rapid/glade3/prefs.ui.h:8
-msgid "<b>Example</b>"
-msgstr "<b>Eksempel</b>"
+msgid "Photo Folders"
+msgstr "Foto mapper"
#: rapid/glade3/prefs.ui.h:9
-msgid "<b>Job Codes</b>"
-msgstr "<b>Jobkoder</b>"
+msgid "<span weight=\"bold\" size=\"x-large\">Photo Rename</span>\t"
+msgstr "<span weight=\"bold\" size=\"x-large\">Foto omdøbning</span>\t"
#: rapid/glade3/prefs.ui.h:10
msgid "<b>Photo Rename</b>"
msgstr "<b>Photo omdøbning</b>"
#: rapid/glade3/prefs.ui.h:11
-msgid "<b>Photo and Video Name Conflicts</b>"
-msgstr "<b>Foto og video navnekonflikter</b>"
+msgid " "
+msgstr " "
#: rapid/glade3/prefs.ui.h:12
-msgid "<b>Program Automation</b>"
-msgstr "<b>Programautomatisering</b>"
+msgid "<i>New:</i>"
+msgstr "<i>Ny:</i>"
#: rapid/glade3/prefs.ui.h:13
-msgid "<b>Sequence Numbers</b>"
-msgstr "<b>Sekvensnumre</b>"
+msgid "<i>Original:</i>"
+msgstr "<i>Original:</i>"
#: rapid/glade3/prefs.ui.h:14
-msgid "<i>/media/externaldrive/Photos</i>"
-msgstr "<i>/medie/externtdrev/Fotos</i>"
+msgid "<b>Example</b>"
+msgstr "<b>Eksempel</b>"
#: rapid/glade3/prefs.ui.h:15
-msgid "<i>Example: /home/user/Pictures</i>"
-msgstr "<i>Eksempel: /home/user/Billeder</i>"
+msgid "Photo Rename"
+msgstr "Foto omdøbning"
#: rapid/glade3/prefs.ui.h:16
-msgid "<i>Example:</i>"
-msgstr "<i>Eksempel:</i>"
+msgid "<span weight=\"bold\" size=\"x-large\">Video Download Folders</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Video download mapper</span>"
#: rapid/glade3/prefs.ui.h:17
-msgid "<i>New:</i>"
-msgstr "<i>Ny:</i>"
+msgid ""
+"Sorry, video downloading functionality disabled. To download videos, please "
+"install either the <i>hachoir metadata</i> and <i>kaa metadata</i> packages "
+"for python, or <i>exiftool</i>."
+msgstr ""
+"Funktionen til hentning af videoer er slået fra. For at hente videoer skal "
+"du installere enten <i>hachoir metadata</i> og <i>kaa metadata</i> pakkerne "
+"eller <i>exiftool</i>."
#: rapid/glade3/prefs.ui.h:18
-msgid "<i>Original:</i>"
-msgstr "<i>Original:</i>"
+msgid ""
+"Choose the download folder. Subfolders for the downloaded videos will be "
+"automatically created in this folder using the structure specified below."
+msgstr ""
+"Vælg download mappen. Undermapper for de downloadede videoer vil automatisk "
+"blive oprettet her ved hjælp af den nedenfor angivne struktur."
#: rapid/glade3/prefs.ui.h:19
-msgid "<span weight=\"bold\" size=\"x-large\">Backup</span>\t"
-msgstr "<span weight=\"bold\" size=\"x-large\">Sikkerhedskopi</span>\t"
+msgid "Video Folders"
+msgstr "Video mapper"
#: rapid/glade3/prefs.ui.h:20
-msgid "<span weight=\"bold\" size=\"x-large\">Device Options</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Enhedsindstillinger</span>"
+msgid "<span weight=\"bold\" size=\"x-large\">Video Rename</span>\t"
+msgstr "<span weight=\"bold\" size=\"x-large\">Video omdøbning</span>\t"
#: rapid/glade3/prefs.ui.h:21
-msgid "<span weight=\"bold\" size=\"x-large\">Devices</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Enheder</span>"
+msgid "Video Rename"
+msgstr "Video omdøbning"
#: rapid/glade3/prefs.ui.h:22
-msgid "<span weight=\"bold\" size=\"x-large\">Error Handling</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Fejlhåndtering</span>"
+msgid "<span weight=\"bold\" size=\"x-large\">Rename Options</span>"
+msgstr ""
+"<span weight=\"bold\" size=\"x-large\">Omdøbningsindstillinger</span>"
#: rapid/glade3/prefs.ui.h:23
-msgid "<span weight=\"bold\" size=\"x-large\">Job Codes</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Jobkoder</span>"
+msgid "<b>Sequence Numbers</b>"
+msgstr "<b>Sekvensnumre</b>"
#: rapid/glade3/prefs.ui.h:24
-msgid "<span weight=\"bold\" size=\"x-large\">Miscellaneous</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Diverse</span>"
+msgid ""
+"Specify the time in 24 hour format at which the <i>Downloads today</i> "
+"sequence number should be reset."
+msgstr ""
+"Angiv på hvilket klokkeslæt <i>Downloads today</i> sekvensnummeret skal "
+"nulstilles. Brug 24-timers format."
#: rapid/glade3/prefs.ui.h:25
-msgid "<span weight=\"bold\" size=\"x-large\">Photo Download Folders</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Foto download mapper</span>"
+msgid "Day start:"
+msgstr "Dagen begynder:"
#: rapid/glade3/prefs.ui.h:26
-msgid "<span weight=\"bold\" size=\"x-large\">Photo Rename</span>\t"
-msgstr "<span weight=\"bold\" size=\"x-large\">Foto omdøbning</span>\t"
+msgid "Downloads today:"
+msgstr "Downloads i dag:"
#: rapid/glade3/prefs.ui.h:27
-msgid "<span weight=\"bold\" size=\"x-large\">Rename Options</span>"
-msgstr ""
-"<span weight=\"bold\" size=\"x-large\">Omdøbningsindstillinger</span>"
+msgid "Stored number:"
+msgstr "Husket nummer:"
#: rapid/glade3/prefs.ui.h:28
-msgid "<span weight=\"bold\" size=\"x-large\">Video Download Folders</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Video download mapper</span>"
+msgid ":"
+msgstr ":"
#: rapid/glade3/prefs.ui.h:29
-msgid "<span weight=\"bold\" size=\"x-large\">Video Rename</span>\t"
-msgstr "<span weight=\"bold\" size=\"x-large\">Video omdøbning</span>\t"
+msgid " hh:mm"
+msgstr " hh:mm"
#: rapid/glade3/prefs.ui.h:30
-msgid "Add unique identifier"
-msgstr "Tilføj entydig angivelse"
+msgid "Synchronize RAW + JPEG sequence numbers"
+msgstr "Synchronisér RAW + JPEG sekvensnumre"
#: rapid/glade3/prefs.ui.h:31
-msgid "Automatically detect Portable Storage Devices"
-msgstr "Opdag bærbare enheder automatisk"
+msgid "<b>Compatibility with Other Operating Systems</b>"
+msgstr "<b>Kompatibilitet med andre styresystemer</b>"
#: rapid/glade3/prefs.ui.h:32
-msgid "Automatically detect backup devices"
-msgstr "Opdag backup-enheder automatisk"
+msgid ""
+"Specify whether photo, video and folder names should have any characters "
+"removed that are not allowed by other operating systems."
+msgstr ""
+"Angiv, om tegn skal fjernes fra foto-, video- og mappenavne, hvis de ikke er "
+"tilladt på andre styresystemer."
#: rapid/glade3/prefs.ui.h:33
-msgid "Automatically detect devices"
-msgstr "Opdag enheder automatisk"
+msgid "Strip incompatible characters"
+msgstr "Fjern inkompatible tegn"
#: rapid/glade3/prefs.ui.h:34
-msgid "Automatically rotate JPEG images"
-msgstr "Rotér JPEG billeder automatisk"
+msgid "Rename Options"
+msgstr "Indstillinger for omdøbning"
#: rapid/glade3/prefs.ui.h:35
-msgid "Backup"
-msgstr "Sikkerhedskopi"
+msgid "<span weight=\"bold\" size=\"x-large\">Job Codes</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Jobkoder</span>"
#: rapid/glade3/prefs.ui.h:36
-msgid "Backup photos and videos when downloading"
-msgstr "Tag sikkerhedskopi af fotos og videoer mens de downloades"
+msgid "<b>Job Codes</b>"
+msgstr "<b>Jobkoder</b>"
#: rapid/glade3/prefs.ui.h:37
-msgid ""
-"Choose the download folder. Subfolders for the downloaded photos will be "
-"automatically created in this folder using the structure specified below."
-msgstr ""
-"Vælg download mappen. Undermapper for de downloadede fotos vil automatisk "
-"blive oprettet her ved hjælp af den nedenfor angivne struktur."
-
-#: rapid/glade3/prefs.ui.h:38
-msgid ""
-"Choose the download folder. Subfolders for the downloaded videos will be "
-"automatically created in this folder using the structure specified below."
-msgstr ""
-"Vælg download mappen. Undermapper for de downloadede videoer vil automatisk "
-"blive oprettet her ved hjælp af den nedenfor angivne struktur."
+msgid "_Add..."
+msgstr "_Tilføj..."
#: rapid/glade3/prefs.ui.h:39
-msgid "Day start:"
-msgstr "Dagen begynder:"
+msgid "R_emove All"
+msgstr "_Fjern alle"
#: rapid/glade3/prefs.ui.h:40
-msgid "Device Options"
-msgstr "Enhedsindstillinger"
+msgid "Job Codes"
+msgstr "Jobkoder"
#: rapid/glade3/prefs.ui.h:41
+msgid "<span weight=\"bold\" size=\"x-large\">Devices</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Enheder</span>"
+
+#: rapid/glade3/prefs.ui.h:42
msgid "Devices"
msgstr "Enheder"
-#: rapid/glade3/prefs.ui.h:42
+#: rapid/glade3/prefs.ui.h:43
msgid ""
"Devices are from where to download photos and videos, such as cameras, "
"memory cards or Portable Storage Devices.\n"
@@ -1707,37 +1708,31 @@ msgstr ""
"indstille kameraet til PTP. Hvis det ikke er muligt, skal du benytte en "
"kortlæser.</i>"
-#: rapid/glade3/prefs.ui.h:47
-msgid "Download folder:"
-msgstr "Download mappe:"
-
#: rapid/glade3/prefs.ui.h:48
-msgid "Downloads today:"
-msgstr "Downloads i dag:"
+msgid "Automatically detect Portable Storage Devices"
+msgstr "Opdag bærbare enheder automatisk"
#: rapid/glade3/prefs.ui.h:49
-msgid "Error Handling"
-msgstr "Fejlhåndtering"
+msgid "Automatically detect devices"
+msgstr "Opdag enheder automatisk"
#: rapid/glade3/prefs.ui.h:50
-msgid "Exit program even if download had warnings or errors"
+msgid ""
+"If you enable automatic detection of Portable Storage Devices, the entire "
+"device will be scanned. On large devices, this could take some time.\n"
+"\n"
+"When this option is enabled, and a potential device is detected, you will be "
+"prompted to determine if it should be scanned or not."
msgstr ""
-"Afslut programmet selvom der opstod fejl eller advarsler ved download"
-
-#: rapid/glade3/prefs.ui.h:51
-msgid "Exit program when download completes"
-msgstr "Afslut programmet når download er afsluttet"
-
-#: rapid/glade3/prefs.ui.h:52
-msgid "Generate thumbnails (slower)"
-msgstr "Dan små billeder"
+"Hvis du slår automatisk opdagelse fra, bliver hele enheden gennemsøgt. På "
+"store enheder kan det tage lang tid.\n"
+"\n"
+"Når en enhed bliver opdaget mens denne mulighed er valgt, bliver du spurgt "
+"om enheden skal gennemsøges eller ej."
#: rapid/glade3/prefs.ui.h:53
-msgid ""
-"If you disable automatic detection, choose the exact backup locations."
-msgstr ""
-"Vælg nøjagtig placering af sikkerhedskopier, hvis du slår automatisk "
-"opdagelse fra."
+msgid "Location:"
+msgstr "Sted:"
#: rapid/glade3/prefs.ui.h:54
msgid ""
@@ -1748,190 +1743,182 @@ msgstr ""
"opdagelse fra."
#: rapid/glade3/prefs.ui.h:55
+msgid "<span weight=\"bold\" size=\"x-large\">Device Options</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Enhedsindstillinger</span>"
+
+#: rapid/glade3/prefs.ui.h:56
+msgid "Remembered Paths"
+msgstr "Huskede stier"
+
+#: rapid/glade3/prefs.ui.h:57
msgid ""
-"If you enable automatic detection of Portable Storage Devices, the entire "
-"device will be scanned. On large devices, this could take some time.\n"
-"\n"
-"When this option is enabled, and a potential device is detected, you will be "
-"prompted to determine if it should be scanned or not."
+"Remembered paths are those associated with devices that you have chosen to "
+"always scan or ignore when automatic detection of Portable Storage Devices "
+"is enabled."
msgstr ""
-"Hvis du slår automatisk opdagelse fra, bliver hele enheden gennemsøgt. På "
-"store enheder kan det tage lang tid.\n"
-"\n"
-"Når en enhed bliver opdaget mens denne mulighed er valgt, bliver du spurgt "
-"om enheden skal gennemsøges eller ej."
+"Huskede stier er stier til bestemte enheder, som enten altid eller aldrig "
+"gennemsøges, når automatisk genkendelse af bærbare enheder er slået til."
#: rapid/glade3/prefs.ui.h:58
msgid "Ignored Paths"
msgstr "Ignorerede stier"
#: rapid/glade3/prefs.ui.h:59
-msgid "Job Codes"
-msgstr "Jobkoder"
-
-#: rapid/glade3/prefs.ui.h:60
-msgid "Location:"
-msgstr "Sted:"
+msgid ""
+"Specify the ending portion of any paths you want ignored when scanning "
+"devices for photos or videos. Any path ending with the values below will not "
+"be scanned."
+msgstr ""
+"Angiv den sidste del af stier, der skal ignoreres ved gennemsøgning af "
+"enheder. Stier, der ender med disse værdier, vil ikke bliev gennemsøgt."
#: rapid/glade3/prefs.ui.h:61
-msgid "Miscellaneous"
-msgstr "Diverse"
+msgid "Re_move All"
+msgstr "_Fjern alle"
#: rapid/glade3/prefs.ui.h:62
-msgid "Overwrite"
-msgstr "Overskriv"
+msgid "Use _python-style regular expressions"
+msgstr "brug regulære udtryk i _python-style"
#: rapid/glade3/prefs.ui.h:63
-msgid "Performance"
-msgstr "Ydeevne"
+msgid "Device Options"
+msgstr "Enhedsindstillinger"
#: rapid/glade3/prefs.ui.h:64
-msgid "Photo Folders"
-msgstr "Foto mapper"
+msgid "<span weight=\"bold\" size=\"x-large\">Backup</span>\t"
+msgstr "<span weight=\"bold\" size=\"x-large\">Sikkerhedskopi</span>\t"
#: rapid/glade3/prefs.ui.h:65
-msgid "Photo Rename"
-msgstr "Foto omdøbning"
+msgid "<b>Backup</b>"
+msgstr "<b>Sikkerhedskopi</b>"
#: rapid/glade3/prefs.ui.h:66
-msgid "Photo backup folder name:"
-msgstr "Navn til mappe til foto sikkerhedskopier:"
+msgid ""
+"If you disable automatic detection, choose the exact backup locations."
+msgstr ""
+"Vælg nøjagtig placering af sikkerhedskopier, hvis du slår automatisk "
+"opdagelse fra."
#: rapid/glade3/prefs.ui.h:67
-msgid "Photo backup location:"
-msgstr "Placering af foto sikkerhedskopier:"
+msgid "Automatically detect backup devices"
+msgstr "Opdag backup-enheder automatisk"
#: rapid/glade3/prefs.ui.h:68
-msgid "Preferences: Rapid Photo Downloader"
-msgstr "Indstillinger: Rapid Photo Downloader"
+msgid ""
+"You can have your photos and videos backed up to multiple locations as they "
+"are downloaded, e.g. external hard drives."
+msgstr ""
+"Dine fotos og videoer kan sikkerhedskopieres til flere steder mens de "
+"downloades, for eksempel en ekstern harddisk."
-#: rapid/glade3/prefs.ui.h:70
-msgid "R_emove All"
-msgstr "_Fjern alle"
+#: rapid/glade3/prefs.ui.h:69
+msgid "Backup photos and videos when downloading"
+msgstr "Tag sikkerhedskopi af fotos og videoer mens de downloades"
-#: rapid/glade3/prefs.ui.h:72
-msgid "Re_move All"
-msgstr "_Fjern alle"
+#: rapid/glade3/prefs.ui.h:70
+msgid ""
+"Specify the folder in which backups are stored on the device. \n"
+"\n"
+"<i>Note: this will also be used to determine whether or not the device is "
+"used for backups. For each device you wish to use for backing up to, create "
+"a folder in it with one of these names.</i>"
+msgstr ""
+"Angiv den mappe hvor sikkerhedskopier er gemt på enheden. \n"
+"\n"
+"<i>Bemærk: Dette afgør også, hvorvidt enheden bruges til sikkerhedskopier. "
+"Opret en mappe med en af disse navne på hver enhed, du ønsker at bruge til "
+"sikkerhedskopiering.</i>"
#: rapid/glade3/prefs.ui.h:73
-msgid "Remembered Paths"
-msgstr "Huskede stier"
+msgid "Photo backup location:"
+msgstr "Placering af foto sikkerhedskopier:"
#: rapid/glade3/prefs.ui.h:74
-msgid ""
-"Remembered paths are those associated with devices that you have chosen to "
-"always scan or ignore when automatic detection of Portable Storage Devices "
-"is enabled."
-msgstr ""
-"Huskede stier er stier til bestemte enheder, som enten altid eller aldrig "
-"gennemsøges, når automatisk genkendelse af bærbare enheder er slået til."
+msgid "Photo backup folder name:"
+msgstr "Navn til mappe til foto sikkerhedskopier:"
#: rapid/glade3/prefs.ui.h:75
-msgid "Rename Options"
-msgstr "Indstillinger for omdøbning"
+msgid "<i>Example:</i>"
+msgstr "<i>Eksempel:</i>"
#: rapid/glade3/prefs.ui.h:76
-msgid "Skip"
-msgstr "Spring over"
+msgid "<i>/media/externaldrive/Photos</i>"
+msgstr "<i>/medie/externtdrev/Fotos</i>"
#: rapid/glade3/prefs.ui.h:77
-msgid "Skip download"
-msgstr "Spring download over"
+msgid "Video backup folder name:"
+msgstr "Mappenavn til video sikkerhedskopi:"
#: rapid/glade3/prefs.ui.h:78
-msgid ""
-"Sorry, video downloading functionality disabled. To download videos, please "
-"install either the <i>hachoir metadata</i> and <i>kaa metadata</i> packages "
-"for python, or <i>exiftool</i>."
-msgstr ""
-"Funktionen til hentning af videoer er slået fra. For at hente videoer skal "
-"du installere enten <i>hachoir metadata</i> og <i>kaa metadata</i> pakkerne "
-"eller <i>exiftool</i>."
+msgid "Video backup location:"
+msgstr "Placering af video sikkerhedskopi:"
#: rapid/glade3/prefs.ui.h:79
-msgid ""
-"Specify the ending portion of any paths you want ignored when scanning "
-"devices for photos or videos. Any path ending with the values below will not "
-"be scanned."
-msgstr ""
-"Angiv den sidste del af stier, der skal ignoreres ved gennemsøgning af "
-"enheder. Stier, der ender med disse værdier, vil ikke bliev gennemsøgt."
+msgid "Backup"
+msgstr "Sikkerhedskopi"
#: rapid/glade3/prefs.ui.h:80
-msgid ""
-"Specify the folder in which backups are stored on the device. \n"
-"\n"
-"<i>Note: this will also be used to determine whether or not the device is "
-"used for backups. For each device you wish to use for backing up to, create "
-"a folder in it with one of these names.</i>"
-msgstr ""
-"Angiv den mappe hvor sikkerhedskopier er gemt på enheden. \n"
-"\n"
-"<i>Bemærk: Dette afgør også, hvorvidt enheden bruges til sikkerhedskopier. "
-"Opret en mappe med en af disse navne på hver enhed, du ønsker at bruge til "
-"sikkerhedskopiering.</i>"
+msgid "<span weight=\"bold\" size=\"x-large\">Miscellaneous</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Diverse</span>"
-#: rapid/glade3/prefs.ui.h:83
-msgid ""
-"Specify the time in 24 hour format at which the <i>Downloads today</i> "
-"sequence number should be reset."
-msgstr ""
-"Angiv på hvilket klokkeslæt <i>Downloads today</i> sekvensnummeret skal "
-"nulstilles. Brug 24-timers format."
+#: rapid/glade3/prefs.ui.h:81
+msgid "<b>Program Automation</b>"
+msgstr "<b>Programautomatisering</b>"
-#: rapid/glade3/prefs.ui.h:84
-msgid ""
-"Specify whether photo, video and folder names should have any characters "
-"removed that are not allowed by other operating systems."
-msgstr ""
-"Angiv, om tegn skal fjernes fra foto-, video- og mappenavne, hvis de ikke er "
-"tilladt på andre styresystemer."
+#: rapid/glade3/prefs.ui.h:82
+msgid "Unmount (\"eject\") device upon download completion"
+msgstr "Unmount enhed (\"skub ud\") når download er afsluttet"
-#: rapid/glade3/prefs.ui.h:85
+#: rapid/glade3/prefs.ui.h:83
msgid "Start downloading at program startup"
msgstr "Start download når programmet starter"
-#: rapid/glade3/prefs.ui.h:86
+#: rapid/glade3/prefs.ui.h:84
msgid "Start downloading upon device insertion"
msgstr "Start download når enhed tilsluttes"
+#: rapid/glade3/prefs.ui.h:85
+msgid "Exit program when download completes"
+msgstr "Afslut programmet når download er afsluttet"
+
+#: rapid/glade3/prefs.ui.h:86
+msgid "Exit program even if download had warnings or errors"
+msgstr ""
+"Afslut programmet selvom der opstod fejl eller advarsler ved download"
+
#: rapid/glade3/prefs.ui.h:87
-msgid "Stored number:"
-msgstr "Husket nummer:"
+msgid "Automatically rotate JPEG images"
+msgstr "Rotér JPEG billeder automatisk"
#: rapid/glade3/prefs.ui.h:88
-msgid "Strip incompatible characters"
-msgstr "Fjern inkompatible tegn"
+msgid "Performance"
+msgstr "Ydeevne"
#: rapid/glade3/prefs.ui.h:89
-msgid "Synchronize RAW + JPEG sequence numbers"
-msgstr "Synchronisér RAW + JPEG sekvensnumre"
+msgid "Generate thumbnails (slower)"
+msgstr "Dan små billeder"
#: rapid/glade3/prefs.ui.h:90
-msgid "Unmount (\"eject\") device upon download completion"
-msgstr "Unmount enhed (\"skub ud\") når download er afsluttet"
+msgid "Miscellaneous"
+msgstr "Diverse"
#: rapid/glade3/prefs.ui.h:91
-msgid "Use _python-style regular expressions"
-msgstr "brug regulære udtryk i _python-style"
+msgid "<span weight=\"bold\" size=\"x-large\">Error Handling</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Fejlhåndtering</span>"
#: rapid/glade3/prefs.ui.h:92
-msgid "Video Folders"
-msgstr "Video mapper"
+msgid "<b>Photo and Video Name Conflicts</b>"
+msgstr "<b>Foto og video navnekonflikter</b>"
#: rapid/glade3/prefs.ui.h:93
-msgid "Video Rename"
-msgstr "Video omdøbning"
+msgid "Add unique identifier"
+msgstr "Tilføj entydig angivelse"
#: rapid/glade3/prefs.ui.h:94
-msgid "Video backup folder name:"
-msgstr "Mappenavn til video sikkerhedskopi:"
+msgid "Skip download"
+msgstr "Spring download over"
#: rapid/glade3/prefs.ui.h:95
-msgid "Video backup location:"
-msgstr "Placering af video sikkerhedskopi:"
-
-#: rapid/glade3/prefs.ui.h:96
msgid ""
"When a photo or video of the same name has already been downloaded, choose "
"whether to skip downloading the file, or to add a unique indentifier."
@@ -1940,7 +1927,7 @@ msgstr ""
"tilføjes en entydig kending, når et foto eller en video med samme navn "
"allerede er downloadet."
-#: rapid/glade3/prefs.ui.h:97
+#: rapid/glade3/prefs.ui.h:96
msgid ""
"When backing up, choose whether to overwrite a file on the backup device "
"that has the same name, or skip backing it up."
@@ -1948,17 +1935,17 @@ msgstr ""
"Vælg, om et foto eller en video skal springes over eller overskrives, når "
"sikkerhedskopien allerede indeholder et foto eller en video med samme navn."
+#: rapid/glade3/prefs.ui.h:97
+msgid "Overwrite"
+msgstr "Overskriv"
+
#: rapid/glade3/prefs.ui.h:98
-msgid ""
-"You can have your photos and videos backed up to multiple locations as they "
-"are downloaded, e.g. external hard drives."
-msgstr ""
-"Dine fotos og videoer kan sikkerhedskopieres til flere steder mens de "
-"downloades, for eksempel en ekstern harddisk."
+msgid "Skip"
+msgstr "Spring over"
#: rapid/glade3/prefs.ui.h:99
-msgid "_Add..."
-msgstr "_Tilføj..."
+msgid "Error Handling"
+msgstr "Fejlhåndtering"
#: rapid/glade3/about.ui.h:1
msgid "Import your photos and videos efficiently and reliably"
diff --git a/po/de.po b/po/de.po
index a7a8f87..e365a90 100644
--- a/po/de.po
+++ b/po/de.po
@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: rapid\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
-"POT-Creation-Date: 2012-06-17 03:05-0500\n"
-"PO-Revision-Date: 2012-06-07 14:17+0000\n"
-"Last-Translator: Uwe Dulz <uwe.dulz@gmail.com>\n"
+"POT-Creation-Date: 2012-06-23 04:00-0500\n"
+"PO-Revision-Date: 2013-01-03 18:47+0000\n"
+"Last-Translator: Dennis Baudys <Unknown>\n"
"Language-Team: German <de@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-06-22 14:40+0000\n"
-"X-Generator: Launchpad (build 15461)\n"
+"X-Launchpad-Export-Date: 2013-01-22 23:36+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
#. Translators: if neccessary, for guidance in how to translate this program, you may see http://damonlynch.net/translate.html
#: rapid/rapid.py:112 rapid/rapid.py:1784 rapid/glade3/rapid.ui.h:1
@@ -55,7 +55,7 @@ msgstr "Grösse"
#: rapid/rapid.py:178
msgid "Download Progress"
-msgstr "Fortschritt beim Herunterladen"
+msgstr "Fortschritt des Herunterladens"
#: rapid/rapid.py:336
#, python-format
@@ -66,7 +66,7 @@ msgstr "%(device)s konnte nicht entfernt werden"
#. looking for photos or videos. It is visible initially in the progress bar for each device
#. (which normally holds "x photos and videos").
#. It maybe displayed only briefly if the contents of the device being scanned is small.
-#: rapid/rapid.py:1217
+#: rapid/rapid.py:1216
msgid "scanning..."
msgstr "Laufwerk wird durchsucht …"
@@ -144,7 +144,7 @@ msgstr "Etwa %(minutes)i:%(seconds)02i Minuten verbleibend"
#: rapid/rapid.py:2731 rapid/rpdfile.py:123
msgid "photos and videos"
-msgstr "BIlder und Filme"
+msgstr "Bilder und Filme"
#: rapid/rapid.py:2733 rapid/rpdfile.py:125
msgid "photos or videos"
@@ -217,7 +217,7 @@ msgstr "%(number)s von %(total)s %(filetypes)s"
#: rapid/rapid.py:3222
msgid "From"
-msgstr "von"
+msgstr "Von"
#: rapid/rapid.py:3230
msgid "Auto Detect"
@@ -238,9 +238,9 @@ msgstr "Verschieben"
#: rapid/rapid.py:3310
msgid "To"
-msgstr "An"
+msgstr "Nach"
-#: rapid/rapid.py:3317 rapid/rapid.py:3985
+#: rapid/rapid.py:3317 rapid/rapid.py:3986
msgid "Photos:"
msgstr "Bilder:"
@@ -248,7 +248,7 @@ msgstr "Bilder:"
msgid "Select a folder to download photos to"
msgstr "Wählen Sie ein Verzeichnis für den Download der Bilder"
-#: rapid/rapid.py:3332 rapid/rapid.py:3985
+#: rapid/rapid.py:3332 rapid/rapid.py:3986
msgid "Videos:"
msgstr "Filme:"
@@ -376,7 +376,7 @@ msgstr "Vorschaubilder"
#. Translators: this text is displayed to the user when they request information on the command line options.
#. The text %default should not be modified or left out.
-#: rapid/rapid.py:3948
+#: rapid/rapid.py:3949
#, python-format
msgid ""
"display program information on the command line as the program runs "
@@ -385,50 +385,57 @@ msgstr ""
"Zeige die Programminformationen an, wenn das Programm aus der Kommandozeile "
"aufgerufen wurde (Voreinstellung: %default)"
-#: rapid/rapid.py:3949
+#: rapid/rapid.py:3950
msgid "display debugging information when run from the command line"
msgstr ""
"Während des Ausführens von der Kommandozeile Debug-Informationen anzeigen"
-#: rapid/rapid.py:3950
+#: rapid/rapid.py:3951
msgid "only output errors to the command line"
msgstr "Zeige Fehlermeldungen nur auf der Kommandozeile an"
#. image file extensions are recognized RAW files plus TIFF and JPG
-#: rapid/rapid.py:3952
+#: rapid/rapid.py:3953
msgid "list photo and video file extensions the program recognizes and exit"
msgstr ""
"Anzeigen der Dateitypen für Bilder und Filme anzeigen, welche das Programm "
"erkennt und beenden"
-#: rapid/rapid.py:3954
+#: rapid/rapid.py:3955
msgid ""
"automatically detect devices from which to download, overwriting existing "
"program preferences"
msgstr ""
+"Laufwerke zum Herunterladen automatisch erkennen, bestehende "
+"Programmeinstellungen übergehen"
-#: rapid/rapid.py:3955
+#: rapid/rapid.py:3956
msgid ""
"manually specify the PATH of the device from which to download, overwriting "
"existing program preferences"
msgstr ""
+"PFAD zum Laufwerk für das Herunterladen manuell angeben, bestehende "
+"Programmeinstellungen übergehen"
-#: rapid/rapid.py:3956
+#: rapid/rapid.py:3957
msgid "reset all program settings and preferences and exit"
msgstr "Alle Einstellungen auf Standardwerte zurücksetzten und beenden"
-#: rapid/rapid.py:3969
+#: rapid/rapid.py:3970
msgid ""
-"Error: specify device auto-detection or manually specifiy a device's path "
+"Error: specify device auto-detection or manually specify a device's path "
"from which to download, but do not do both."
msgstr ""
+"Fehler: Wählen Sie entweder »Laufwerke zum Herunterladen automatisch "
+"erkennen« oder »PFAD zum Laufwerk für das Herunterladen manuell angeben«, "
+"aber nicht beides gleichzeitig."
-#: rapid/rapid.py:3990
+#: rapid/rapid.py:3991
#, python-format
msgid "and %s"
msgstr "und %s"
-#: rapid/rapid.py:3998
+#: rapid/rapid.py:3999
msgid "All settings and preferences have been reset"
msgstr "Alle Einstellungen wurden zurückgesetzt"
@@ -1355,21 +1362,21 @@ msgstr ""
#: rapid/problemnotification.py:364
msgid "Problems in subfolder and filename generation"
-msgstr "Probleme bei der Erstllung der Order und Dateinamen"
+msgstr "Probleme bei der Erstellung der Order und Dateinamen"
#: rapid/problemnotification.py:366
msgid "Problem in subfolder and filename generation"
-msgstr "Problem bei der Erstllung der Order und Dateinamen"
+msgstr "Problem bei der Erstellung der Order und Dateinamen"
#: rapid/problemnotification.py:369
#, python-format
msgid "Problems in %s generation"
-msgstr "Probleme bei der Erstllung von %s"
+msgstr "Probleme bei der Erstellung von %s"
#: rapid/problemnotification.py:371
#, python-format
msgid "Problem in %s generation"
-msgstr "Problem bei der Erstllung von %s"
+msgstr "Problem bei der Erstellung von %s"
#: rapid/problemnotification.py:380
#, python-format
@@ -1422,7 +1429,7 @@ msgstr "%(number)s %(filetypes)s"
#: rapid/rpdfile.py:163
#, python-format
msgid "scanning (found %(photos)s photos and %(videos)s videos)..."
-msgstr ""
+msgstr "Suche läuft (%(photos)s Fotos und %(videos)s Videos gefunden) …"
#: rapid/subfolderfile.py:80
#, python-format
diff --git a/po/es.po b/po/es.po
index 9e30387..862592d 100644
--- a/po/es.po
+++ b/po/es.po
@@ -6,23 +6,24 @@
msgid ""
msgstr ""
"Project-Id-Version: rapid\n"
-"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
-"POT-Creation-Date: 2012-05-13 22:31-0500\n"
-"PO-Revision-Date: 2012-05-24 14:21+0000\n"
-"Last-Translator: Jose Navajo Bardera <Unknown>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-23 04:00-0500\n"
+"PO-Revision-Date: 2013-01-12 00:14+0000\n"
+"Last-Translator: Adolfo Jayme Barrientos <fitoschido@gmail.com>\n"
"Language-Team: Spanish <es@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-05-29 18:44+0000\n"
-"X-Generator: Launchpad (build 15316)\n"
+"X-Launchpad-Export-Date: 2013-01-22 23:36+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
+"Language: es\n"
#. Translators: if neccessary, for guidance in how to translate this program, you may see http://damonlynch.net/translate.html
-#: rapid/rapid.py:110 rapid/rapid.py:1749 rapid/glade3/rapid.ui.h:1
+#: rapid/rapid.py:112 rapid/rapid.py:1784 rapid/glade3/rapid.ui.h:1
msgid "Rapid Photo Downloader"
-msgstr "Gestión Rápida de Fotografías"
+msgstr "Descargador rápido de fotos"
-#: rapid/rapid.py:115
+#: rapid/rapid.py:117
#, python-format
msgid ""
"%(date)s\n"
@@ -31,57 +32,57 @@ msgstr ""
"%(date)s\n"
"%(time)s"
-#: rapid/rapid.py:117
+#: rapid/rapid.py:119
#, python-format
msgid "%(date)s %(time)s"
msgstr "%(date)s %(time)s"
-#: rapid/rapid.py:120
+#: rapid/rapid.py:122
#, python-format
msgid "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
msgstr "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
#. Device refers to a thing like a camera, memory card in its reader,
#. external hard drive, Portable Storage Device, etc.
-#: rapid/rapid.py:155
+#: rapid/rapid.py:157
msgid "Device"
msgstr "Dispositivo"
#. Size refers to the total size of images on the device, typically in
#. MB or GB
-#: rapid/rapid.py:173
+#: rapid/rapid.py:175
msgid "Size"
msgstr "Tamaño"
-#: rapid/rapid.py:176
+#: rapid/rapid.py:178
msgid "Download Progress"
msgstr "Progreso de la descarga"
-#: rapid/rapid.py:322
+#: rapid/rapid.py:336
#, python-format
msgid "%(device)s did not unmount"
-msgstr "%(device)s no se puede expulsar el dispositivo"
+msgstr "%(device)s no se desmontó"
#. This refers to when a device like a hard drive is having its contents scanned,
#. looking for photos or videos. It is visible initially in the progress bar for each device
#. (which normally holds "x photos and videos").
#. It maybe displayed only briefly if the contents of the device being scanned is small.
-#: rapid/rapid.py:1189
+#: rapid/rapid.py:1216
msgid "scanning..."
msgstr "analizando…"
#. this location is a human readable explanation for /, and is inserted into Downloading from %(location)s
-#: rapid/rapid.py:1747
+#: rapid/rapid.py:1782
msgid "the root of the file system"
msgstr "la raíz del sistema de archivos"
#. message in dialog box which asks the user if they really want to be downloading from this location
-#: rapid/rapid.py:1751
+#: rapid/rapid.py:1786
#, python-format
msgid "Downloading from %(location)s."
msgstr "Descargando desde %(location)s."
-#: rapid/rapid.py:1752
+#: rapid/rapid.py:1787
msgid ""
"Do you really want to download from here? On some systems, scanning this "
"location can take a very long time."
@@ -89,15 +90,15 @@ msgstr ""
"¿Quiere realmente descargar desde aquí? En algunos sistemas, analizar esta "
"ubicación puede tardar mucho tiempo."
-#: rapid/rapid.py:2174
+#: rapid/rapid.py:2209
msgid "Download"
msgstr "Descargar"
-#: rapid/rapid.py:2177
+#: rapid/rapid.py:2212
msgid "Pause"
msgstr "Pausar"
-#: rapid/rapid.py:2282
+#: rapid/rapid.py:2317
#, python-format
msgid ""
"These download folders are invalid:\n"
@@ -108,7 +109,7 @@ msgstr ""
"%(folder1)s\n"
"%(folder2)s"
-#: rapid/rapid.py:2285
+#: rapid/rapid.py:2320
#, python-format
msgid ""
"This download folder is invalid:\n"
@@ -117,176 +118,176 @@ msgstr ""
"Esta carpeta de descarga no es válida:\n"
"%s"
-#: rapid/rapid.py:2286
+#: rapid/rapid.py:2321
msgid "Download cannot proceed"
msgstr "No se puede iniciar la descarga"
-#: rapid/rapid.py:2653
+#: rapid/rapid.py:2700
msgid "About 1 second remaining"
msgstr "Queda aproximadamente 1 segundo"
-#: rapid/rapid.py:2655
+#: rapid/rapid.py:2702
#, python-format
msgid "About %i seconds remaining"
msgstr "Quedan aproximadamente %i segundos"
-#: rapid/rapid.py:2657
+#: rapid/rapid.py:2704
msgid "About 1 minute remaining"
msgstr "Queda aproximadamente 1 minuto"
#. Translators: in the text '%(minutes)i:%(seconds)02i', only the : should be translated, if needed.
#. '%(minutes)i' and '%(seconds)02i' should not be modified or left out. They are used to format and display the amount
#. of time the download has remainging, e.g. 'About 5:36 minutes remaining'
-#: rapid/rapid.py:2662
+#: rapid/rapid.py:2709
#, python-format
msgid "About %(minutes)i:%(seconds)02i minutes remaining"
msgstr "Quedan aproximadamente %(minutes)i:%(seconds)02i minutos"
-#: rapid/rapid.py:2684 rapid/rpdfile.py:116
+#: rapid/rapid.py:2731 rapid/rpdfile.py:123
msgid "photos and videos"
msgstr "fotos y vídeos"
-#: rapid/rapid.py:2686 rapid/rpdfile.py:118
+#: rapid/rapid.py:2733 rapid/rpdfile.py:125
msgid "photos or videos"
msgstr "fotos o vídeos"
-#: rapid/rapid.py:2689 rapid/rapid.py:3502 rapid/rpdfile.py:121
+#: rapid/rapid.py:2736 rapid/rapid.py:3558 rapid/rpdfile.py:128
msgid "videos"
msgstr "vídeos"
-#: rapid/rapid.py:2691 rapid/preferencesdialog.py:1620 rapid/rpdfile.py:123
-#: rapid/rpdfile.py:272
+#: rapid/rapid.py:2738 rapid/preferencesdialog.py:1620 rapid/rpdfile.py:130
+#: rapid/rpdfile.py:291
msgid "video"
msgstr "vídeo"
-#: rapid/rapid.py:2694 rapid/rapid.py:3500 rapid/rpdfile.py:126
+#: rapid/rapid.py:2741 rapid/rapid.py:3556 rapid/rpdfile.py:133
msgid "photos"
msgstr "fotos"
#. check subfolder preferences for bad values
-#: rapid/rapid.py:2696 rapid/preferencesdialog.py:1619 rapid/rpdfile.py:128
-#: rapid/rpdfile.py:253
+#: rapid/rapid.py:2743 rapid/preferencesdialog.py:1619 rapid/rpdfile.py:135
+#: rapid/rpdfile.py:272
msgid "photo"
msgstr "foto"
-#: rapid/rapid.py:2723
+#: rapid/rapid.py:2770
#, python-format
msgid "%(noFiles)s %(filetypes)s downloaded"
msgstr "%(noFiles)s %(filetypes)s descargados"
-#: rapid/rapid.py:2727
+#: rapid/rapid.py:2774
#, python-format
msgid "%(noFiles)s %(filetypes)s failed to download"
msgstr "No se pudieron descargar %(noFiles)s %(filetypes)s"
-#: rapid/rapid.py:2730 rapid/rapid.py:2782
+#: rapid/rapid.py:2777 rapid/rapid.py:2829
msgid "warnings"
msgstr "avisos"
-#: rapid/rapid.py:2739
+#: rapid/rapid.py:2786
msgid "All downloads complete"
msgstr "Todas las descargas completadas"
-#: rapid/rapid.py:2745 rapid/rapid.py:2754 rapid/rapid.py:2763
-#: rapid/rapid.py:2772 rapid/rapid.py:2780
+#: rapid/rapid.py:2792 rapid/rapid.py:2801 rapid/rapid.py:2810
+#: rapid/rapid.py:2819 rapid/rapid.py:2827
#, python-format
msgid "%(number)s %(numberdownloaded)s"
msgstr "%(number)s %(numberdownloaded)s"
-#: rapid/rapid.py:2747 rapid/rapid.py:2765
+#: rapid/rapid.py:2794 rapid/rapid.py:2812
#, python-format
msgid "%(filetype)s downloaded"
msgstr "%(filetype)s descargados"
-#: rapid/rapid.py:2756 rapid/rapid.py:2774
+#: rapid/rapid.py:2803 rapid/rapid.py:2821
#, python-format
msgid "%(filetype)s failed to download"
msgstr "No se pudieron descargar %(filetype)s"
#. e.g.: 3 of 205 photos and videos (202 remaining)
-#: rapid/rapid.py:2813
+#: rapid/rapid.py:2860
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s (%(remaining)s remaining)"
msgstr "%(number)s de %(total)s %(filetypes)s (%(remaining)s restantes)"
#. e.g.: 205 of 205 photos and videos
-#: rapid/rapid.py:2820
+#: rapid/rapid.py:2867
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s"
msgstr "%(number)s de %(total)s %(filetypes)s"
-#: rapid/rapid.py:3166
+#: rapid/rapid.py:3222
msgid "From"
msgstr "Desde"
-#: rapid/rapid.py:3174
+#: rapid/rapid.py:3230
msgid "Auto Detect"
msgstr "Detectar automáticamente"
-#: rapid/rapid.py:3178 rapid/preferencesdialog.py:1327
+#: rapid/rapid.py:3234 rapid/preferencesdialog.py:1327
#, python-format
msgid "Select a folder containing %(file_types)s"
msgstr "Elija un directorio que contenga %(file_types)s"
-#: rapid/rapid.py:3219
+#: rapid/rapid.py:3275
msgid "Copy"
msgstr "Copiar"
-#: rapid/rapid.py:3232
+#: rapid/rapid.py:3288
msgid "Move"
msgstr "Mover"
-#: rapid/rapid.py:3254
+#: rapid/rapid.py:3310
msgid "To"
msgstr "A"
-#: rapid/rapid.py:3261 rapid/rapid.py:3897
+#: rapid/rapid.py:3317 rapid/rapid.py:3986
msgid "Photos:"
msgstr "Fotos:"
-#: rapid/rapid.py:3264 rapid/preferencesdialog.py:1164
+#: rapid/rapid.py:3320 rapid/preferencesdialog.py:1164
msgid "Select a folder to download photos to"
msgstr "Elija una carpeta donde descargar las fotos"
-#: rapid/rapid.py:3276 rapid/rapid.py:3897
+#: rapid/rapid.py:3332 rapid/rapid.py:3986
msgid "Videos:"
msgstr "Vídeos:"
-#: rapid/rapid.py:3278 rapid/preferencesdialog.py:1182
+#: rapid/rapid.py:3334 rapid/preferencesdialog.py:1182
msgid "Select a folder to download videos to"
msgstr "Elija una carpeta donde descargar los vídeos"
-#: rapid/rapid.py:3470
+#: rapid/rapid.py:3526
msgid "and"
msgstr "y"
-#: rapid/rapid.py:3475
+#: rapid/rapid.py:3531
msgid "Using backup devices"
msgstr "Usando dispositivos de copia de seguridad"
-#: rapid/rapid.py:3477
+#: rapid/rapid.py:3533
msgid "Using backup device"
msgstr "Usando dispositivo de copia de seguridad"
-#: rapid/rapid.py:3479
+#: rapid/rapid.py:3535
msgid "No backup devices detected"
msgstr "No se detectaron dispositivos de copia de seguridad"
-#: rapid/rapid.py:3506
+#: rapid/rapid.py:3562
msgid "Free space:"
msgstr "Espacio libre:"
#. (videos) or (photos) will be appended to the free space message displayed to the
#. user in the status bar.
#. you should only translate this if your language does not use parantheses
-#: rapid/rapid.py:3518
+#: rapid/rapid.py:3574
#, python-format
msgid "(%(file_type)s)"
msgstr "(%(file_type)s)"
#. Freespace available on the filesystem for downloading to
#. Displayed in status bar message on main window
-#: rapid/rapid.py:3522
+#: rapid/rapid.py:3578
#, python-format
msgid "%(free)s %(file_type)s"
msgstr "%(free)s %(file_type)s"
@@ -294,87 +295,87 @@ msgstr "%(free)s %(file_type)s"
#. Inserted in the middle of the statusbar message concerning the amount of freespace
#. Used to differentiate between two different file systems
#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
-#: rapid/rapid.py:3527
+#: rapid/rapid.py:3583
msgid "; "
msgstr "; "
#. Inserted at the end of the statusbar message concerning the amount of freespace
#. Used to differentiate between two different file systems
#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
-#: rapid/rapid.py:3532
+#: rapid/rapid.py:3588
msgid "."
msgstr "."
#. Freespace available on the filesystem for downloading to
#. Displayed in status bar message on main window
#. e.g. 14.7GB available
-#: rapid/rapid.py:3538
+#: rapid/rapid.py:3594
#, python-format
msgid "%(free)s free"
msgstr "%(free)s disponible"
#. user manually specified the same location for photos and video backups
-#: rapid/rapid.py:3546
+#: rapid/rapid.py:3602
#, python-format
msgid "Backing up photos and videos to %(path)s"
msgstr "Respaldando fotos y vídeos en %(path)s"
#. user manually specified backup location
-#: rapid/rapid.py:3549
+#: rapid/rapid.py:3605
#, python-format
msgid "Backing up to %(path)s"
msgstr "Respaldando en %(path)s"
#. user manually specified different locations for photo and video backups
-#: rapid/rapid.py:3552
+#: rapid/rapid.py:3608
#, python-format
msgid "Backing up photos to %(path)s and videos to %(path2)s"
msgstr "Respaldando fotos en %(path)s y vídeos en %(path2)s"
-#: rapid/rapid.py:3559
+#: rapid/rapid.py:3615
#, python-format
msgid "%(freespace)s. %(backuppaths)s."
msgstr "%(freespace)s. %(backuppaths)s."
-#: rapid/rapid.py:3588
+#: rapid/rapid.py:3644
msgid "Program preferences are invalid"
msgstr "Las preferencias del programa no son válidas"
-#: rapid/rapid.py:3707 rapid/rpdfile.py:254
+#: rapid/rapid.py:3770 rapid/rpdfile.py:273
msgid "Photo"
msgstr "Foto"
-#: rapid/rapid.py:3709 rapid/rpdfile.py:273
+#: rapid/rapid.py:3772 rapid/rpdfile.py:292
msgid "Video"
msgstr "Vídeo"
-#: rapid/rapid.py:3718
+#: rapid/rapid.py:3781
#, python-format
msgid "%(file_type)s download folder does not exist"
msgstr "%(file_type)s directorio de descarga no existe"
-#: rapid/rapid.py:3720 rapid/rapid.py:3734 rapid/rapid.py:3747
+#: rapid/rapid.py:3783 rapid/rapid.py:3797 rapid/rapid.py:3810
#, python-format
msgid "Folder: %s"
msgstr "Carpeta: %s"
-#: rapid/rapid.py:3732
+#: rapid/rapid.py:3795
#, python-format
msgid "%(file_type)s download folder is invalid"
msgstr "%(file_type)s directorio de descarga es incorrecto"
-#: rapid/rapid.py:3745
+#: rapid/rapid.py:3808
#, python-format
msgid "%(file_type)s download folder is not writable"
msgstr "%(file_type)s imposible escribir en directorio de descarga"
-#: rapid/rapid.py:3831
+#: rapid/rapid.py:3894
msgid "Thumbnails"
msgstr "Miniaturas"
#. Translators: this text is displayed to the user when they request information on the command line options.
#. The text %default should not be modified or left out.
-#: rapid/rapid.py:3878
+#: rapid/rapid.py:3949
#, python-format
msgid ""
"display program information on the command line as the program runs "
@@ -383,33 +384,57 @@ msgstr ""
"mostrar información del programa en la línea de órdenes mientras se ejecuta "
"el programa (predet.: %default)"
-#: rapid/rapid.py:3879
+#: rapid/rapid.py:3950
msgid "display debugging information when run from the command line"
msgstr ""
"mostrar información de depuración cuando se ejecute desde la línea de órdenes"
-#: rapid/rapid.py:3880
+#: rapid/rapid.py:3951
msgid "only output errors to the command line"
msgstr "solo errores de salida en la línea de comando"
#. image file extensions are recognized RAW files plus TIFF and JPG
-#: rapid/rapid.py:3882
+#: rapid/rapid.py:3953
msgid "list photo and video file extensions the program recognizes and exit"
msgstr ""
"listar las extensiones de archivo para fotos y vídeos que el programa "
"reconoce y salir"
-#: rapid/rapid.py:3884
+#: rapid/rapid.py:3955
+msgid ""
+"automatically detect devices from which to download, overwriting existing "
+"program preferences"
+msgstr ""
+"detectar automáticamente los dispositivos de los cuales descargarr, "
+"sobreescribiendo las preferencias existentes del programa"
+
+#: rapid/rapid.py:3956
+msgid ""
+"manually specify the PATH of the device from which to download, overwriting "
+"existing program preferences"
+msgstr ""
+"especificar manualmente de que dispositivos descargar, sobreescribiendo las "
+"preferencias existentes del programa"
+
+#: rapid/rapid.py:3957
msgid "reset all program settings and preferences and exit"
msgstr ""
"Restablecer todas las configuraciones y preferencias del programa y salir"
-#: rapid/rapid.py:3902
+#: rapid/rapid.py:3970
+msgid ""
+"Error: specify device auto-detection or manually specify a device's path "
+"from which to download, but do not do both."
+msgstr ""
+"Error: especificar autodeteccion del dispositivo o eleccion manual de "
+"dispositivo desde donde descargar, pero no ambas."
+
+#: rapid/rapid.py:3991
#, python-format
msgid "and %s"
msgstr "y %s"
-#: rapid/rapid.py:3910
+#: rapid/rapid.py:3999
msgid "All settings and preferences have been reset"
msgstr "Todas las opciones y preferencias se han reestablecido"
@@ -1386,11 +1411,16 @@ msgstr "Hubo un error al realizar la copia de seguridad"
msgid "%(previousproblem)s, and %(backinguperror)s"
msgstr "%(previousproblem)s, y %(backinguperror)s"
-#: rapid/rpdfile.py:142
+#: rapid/rpdfile.py:153
#, python-format
msgid "%(number)s %(filetypes)s"
msgstr "%(number)s %(filetypes)s"
+#: rapid/rpdfile.py:163
+#, python-format
+msgid "scanning (found %(photos)s photos and %(videos)s videos)..."
+msgstr "analizando (se encontraron %(photos)s fotos y %(videos)s vídeos)…"
+
#: rapid/subfolderfile.py:80
#, python-format
msgid "%(hour)s:%(minute)s:%(second)s:%(subsecond)s"
diff --git a/po/fr.po b/po/fr.po
index 9845356..37f5f5a 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -8,22 +8,22 @@ msgid ""
msgstr ""
"Project-Id-Version: rapid\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
-"POT-Creation-Date: 2012-05-13 22:31-0500\n"
-"PO-Revision-Date: 2012-05-18 16:09+0000\n"
-"Last-Translator: LEROY Jean-Christophe <Unknown>\n"
+"POT-Creation-Date: 2012-06-23 04:00-0500\n"
+"PO-Revision-Date: 2012-11-16 10:27+0000\n"
+"Last-Translator: Olivier Devineau <Unknown>\n"
"Language-Team: Français <null>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-05-29 18:44+0000\n"
-"X-Generator: Launchpad (build 15316)\n"
+"X-Launchpad-Export-Date: 2012-11-26 19:04+0000\n"
+"X-Generator: Launchpad (build 16309)\n"
#. Translators: if neccessary, for guidance in how to translate this program, you may see http://damonlynch.net/translate.html
-#: rapid/rapid.py:110 rapid/rapid.py:1749 rapid/glade3/rapid.ui.h:1
+#: rapid/rapid.py:112 rapid/rapid.py:1784 rapid/glade3/rapid.ui.h:1
msgid "Rapid Photo Downloader"
msgstr "Rapid Photo Downloader"
-#: rapid/rapid.py:115
+#: rapid/rapid.py:117
#, python-format
msgid ""
"%(date)s\n"
@@ -32,33 +32,33 @@ msgstr ""
"%(date)s\n"
"%(time)s"
-#: rapid/rapid.py:117
+#: rapid/rapid.py:119
#, python-format
msgid "%(date)s %(time)s"
msgstr "%(date)s %(time)s"
-#: rapid/rapid.py:120
+#: rapid/rapid.py:122
#, python-format
msgid "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
msgstr "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
#. Device refers to a thing like a camera, memory card in its reader,
#. external hard drive, Portable Storage Device, etc.
-#: rapid/rapid.py:155
+#: rapid/rapid.py:157
msgid "Device"
msgstr "Périphérique"
#. Size refers to the total size of images on the device, typically in
#. MB or GB
-#: rapid/rapid.py:173
+#: rapid/rapid.py:175
msgid "Size"
msgstr "Taille"
-#: rapid/rapid.py:176
+#: rapid/rapid.py:178
msgid "Download Progress"
msgstr "Progression du transfert"
-#: rapid/rapid.py:322
+#: rapid/rapid.py:336
#, python-format
msgid "%(device)s did not unmount"
msgstr "Le périphérique %(device)s n'a pas été démonté"
@@ -67,22 +67,22 @@ msgstr "Le périphérique %(device)s n'a pas été démonté"
#. looking for photos or videos. It is visible initially in the progress bar for each device
#. (which normally holds "x photos and videos").
#. It maybe displayed only briefly if the contents of the device being scanned is small.
-#: rapid/rapid.py:1189
+#: rapid/rapid.py:1216
msgid "scanning..."
msgstr "Détection en cours..."
#. this location is a human readable explanation for /, and is inserted into Downloading from %(location)s
-#: rapid/rapid.py:1747
+#: rapid/rapid.py:1782
msgid "the root of the file system"
msgstr "Partition racine"
#. message in dialog box which asks the user if they really want to be downloading from this location
-#: rapid/rapid.py:1751
+#: rapid/rapid.py:1786
#, python-format
msgid "Downloading from %(location)s."
msgstr "Transfert depuis %(location)s."
-#: rapid/rapid.py:1752
+#: rapid/rapid.py:1787
msgid ""
"Do you really want to download from here? On some systems, scanning this "
"location can take a very long time."
@@ -90,15 +90,15 @@ msgstr ""
"Êtes-vous sûr de vouloir transférer depuis cet emplacement ? Sur certains "
"systèmes, la recherche de photos ou de vidéos peut prendre du temps."
-#: rapid/rapid.py:2174
+#: rapid/rapid.py:2209
msgid "Download"
msgstr "Transférer"
-#: rapid/rapid.py:2177
+#: rapid/rapid.py:2212
msgid "Pause"
msgstr "Pause"
-#: rapid/rapid.py:2282
+#: rapid/rapid.py:2317
#, python-format
msgid ""
"These download folders are invalid:\n"
@@ -109,7 +109,7 @@ msgstr ""
"%(folder1)s\n"
"%(folder2)s"
-#: rapid/rapid.py:2285
+#: rapid/rapid.py:2320
#, python-format
msgid ""
"This download folder is invalid:\n"
@@ -118,176 +118,176 @@ msgstr ""
"Ce répertoire de destination n'est pas valide:\n"
"%s"
-#: rapid/rapid.py:2286
+#: rapid/rapid.py:2321
msgid "Download cannot proceed"
msgstr "Impossible de procéder au transfert"
-#: rapid/rapid.py:2653
+#: rapid/rapid.py:2700
msgid "About 1 second remaining"
msgstr "Environ 1 seconde restante"
-#: rapid/rapid.py:2655
+#: rapid/rapid.py:2702
#, python-format
msgid "About %i seconds remaining"
msgstr "Environ %i secondes restantes"
-#: rapid/rapid.py:2657
+#: rapid/rapid.py:2704
msgid "About 1 minute remaining"
msgstr "Environ 1 minute restante"
#. Translators: in the text '%(minutes)i:%(seconds)02i', only the : should be translated, if needed.
#. '%(minutes)i' and '%(seconds)02i' should not be modified or left out. They are used to format and display the amount
#. of time the download has remainging, e.g. 'About 5:36 minutes remaining'
-#: rapid/rapid.py:2662
+#: rapid/rapid.py:2709
#, python-format
msgid "About %(minutes)i:%(seconds)02i minutes remaining"
msgstr "Environ %(minutes)i:%(seconds)02i restantes"
-#: rapid/rapid.py:2684 rapid/rpdfile.py:116
+#: rapid/rapid.py:2731 rapid/rpdfile.py:123
msgid "photos and videos"
msgstr "photos et vidéos"
-#: rapid/rapid.py:2686 rapid/rpdfile.py:118
+#: rapid/rapid.py:2733 rapid/rpdfile.py:125
msgid "photos or videos"
msgstr "photos ou vidéos"
-#: rapid/rapid.py:2689 rapid/rapid.py:3502 rapid/rpdfile.py:121
+#: rapid/rapid.py:2736 rapid/rapid.py:3558 rapid/rpdfile.py:128
msgid "videos"
msgstr "vidéos"
-#: rapid/rapid.py:2691 rapid/preferencesdialog.py:1620 rapid/rpdfile.py:123
-#: rapid/rpdfile.py:272
+#: rapid/rapid.py:2738 rapid/preferencesdialog.py:1620 rapid/rpdfile.py:130
+#: rapid/rpdfile.py:291
msgid "video"
msgstr "vidéo"
-#: rapid/rapid.py:2694 rapid/rapid.py:3500 rapid/rpdfile.py:126
+#: rapid/rapid.py:2741 rapid/rapid.py:3556 rapid/rpdfile.py:133
msgid "photos"
msgstr "photos"
#. check subfolder preferences for bad values
-#: rapid/rapid.py:2696 rapid/preferencesdialog.py:1619 rapid/rpdfile.py:128
-#: rapid/rpdfile.py:253
+#: rapid/rapid.py:2743 rapid/preferencesdialog.py:1619 rapid/rpdfile.py:135
+#: rapid/rpdfile.py:272
msgid "photo"
msgstr "photo"
-#: rapid/rapid.py:2723
+#: rapid/rapid.py:2770
#, python-format
msgid "%(noFiles)s %(filetypes)s downloaded"
msgstr "%(noFiles)s %(filetypes)s transférés"
-#: rapid/rapid.py:2727
+#: rapid/rapid.py:2774
#, python-format
msgid "%(noFiles)s %(filetypes)s failed to download"
msgstr "erreur lors du transfert de %(noFiles)s %(filetypes)s"
-#: rapid/rapid.py:2730 rapid/rapid.py:2782
+#: rapid/rapid.py:2777 rapid/rapid.py:2829
msgid "warnings"
msgstr "avertissements"
-#: rapid/rapid.py:2739
+#: rapid/rapid.py:2786
msgid "All downloads complete"
msgstr "Tous les transferts sont terminés"
-#: rapid/rapid.py:2745 rapid/rapid.py:2754 rapid/rapid.py:2763
-#: rapid/rapid.py:2772 rapid/rapid.py:2780
+#: rapid/rapid.py:2792 rapid/rapid.py:2801 rapid/rapid.py:2810
+#: rapid/rapid.py:2819 rapid/rapid.py:2827
#, python-format
msgid "%(number)s %(numberdownloaded)s"
msgstr "%(number)s %(numberdownloaded)s"
-#: rapid/rapid.py:2747 rapid/rapid.py:2765
+#: rapid/rapid.py:2794 rapid/rapid.py:2812
#, python-format
msgid "%(filetype)s downloaded"
msgstr "%(filetype)s téléchargé"
-#: rapid/rapid.py:2756 rapid/rapid.py:2774
+#: rapid/rapid.py:2803 rapid/rapid.py:2821
#, python-format
msgid "%(filetype)s failed to download"
msgstr "Echec de transfert pour %(filetype)s"
#. e.g.: 3 of 205 photos and videos (202 remaining)
-#: rapid/rapid.py:2813
+#: rapid/rapid.py:2860
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s (%(remaining)s remaining)"
msgstr "%(number)s sur %(total)s %(filetypes)s (%(remaining)s restants)"
#. e.g.: 205 of 205 photos and videos
-#: rapid/rapid.py:2820
+#: rapid/rapid.py:2867
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s"
msgstr "%(number)s sur %(total)s %(filetypes)s"
-#: rapid/rapid.py:3166
+#: rapid/rapid.py:3222
msgid "From"
msgstr "Depuis"
-#: rapid/rapid.py:3174
+#: rapid/rapid.py:3230
msgid "Auto Detect"
msgstr "Détecter automatiquement"
-#: rapid/rapid.py:3178 rapid/preferencesdialog.py:1327
+#: rapid/rapid.py:3234 rapid/preferencesdialog.py:1327
#, python-format
msgid "Select a folder containing %(file_types)s"
msgstr "Sélectionnez un dossier contenant %(file_types)s"
-#: rapid/rapid.py:3219
+#: rapid/rapid.py:3275
msgid "Copy"
msgstr "Copier"
-#: rapid/rapid.py:3232
+#: rapid/rapid.py:3288
msgid "Move"
msgstr "Déplacer"
-#: rapid/rapid.py:3254
+#: rapid/rapid.py:3310
msgid "To"
msgstr "Vers"
-#: rapid/rapid.py:3261 rapid/rapid.py:3897
+#: rapid/rapid.py:3317 rapid/rapid.py:3986
msgid "Photos:"
msgstr "Photos :"
-#: rapid/rapid.py:3264 rapid/preferencesdialog.py:1164
+#: rapid/rapid.py:3320 rapid/preferencesdialog.py:1164
msgid "Select a folder to download photos to"
msgstr "Sélectionnez le dossier de destination"
-#: rapid/rapid.py:3276 rapid/rapid.py:3897
+#: rapid/rapid.py:3332 rapid/rapid.py:3986
msgid "Videos:"
msgstr "Vidéos :"
-#: rapid/rapid.py:3278 rapid/preferencesdialog.py:1182
+#: rapid/rapid.py:3334 rapid/preferencesdialog.py:1182
msgid "Select a folder to download videos to"
msgstr "Sélectionnez un dossier vers lequel transférer vos vidéos"
-#: rapid/rapid.py:3470
+#: rapid/rapid.py:3526
msgid "and"
msgstr "et"
-#: rapid/rapid.py:3475
+#: rapid/rapid.py:3531
msgid "Using backup devices"
msgstr "Utilisation des volumes de sauvegarde"
-#: rapid/rapid.py:3477
+#: rapid/rapid.py:3533
msgid "Using backup device"
msgstr "Utilisation du volume de sauvegarde"
-#: rapid/rapid.py:3479
+#: rapid/rapid.py:3535
msgid "No backup devices detected"
msgstr "Aucun volume de sauvegarde détécté"
-#: rapid/rapid.py:3506
+#: rapid/rapid.py:3562
msgid "Free space:"
msgstr "Espace libre :"
#. (videos) or (photos) will be appended to the free space message displayed to the
#. user in the status bar.
#. you should only translate this if your language does not use parantheses
-#: rapid/rapid.py:3518
+#: rapid/rapid.py:3574
#, python-format
msgid "(%(file_type)s)"
msgstr "(%(file_type)s)"
#. Freespace available on the filesystem for downloading to
#. Displayed in status bar message on main window
-#: rapid/rapid.py:3522
+#: rapid/rapid.py:3578
#, python-format
msgid "%(free)s %(file_type)s"
msgstr "%(free)s %(file_type)s"
@@ -295,87 +295,87 @@ msgstr "%(free)s %(file_type)s"
#. Inserted in the middle of the statusbar message concerning the amount of freespace
#. Used to differentiate between two different file systems
#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
-#: rapid/rapid.py:3527
+#: rapid/rapid.py:3583
msgid "; "
msgstr ", "
#. Inserted at the end of the statusbar message concerning the amount of freespace
#. Used to differentiate between two different file systems
#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
-#: rapid/rapid.py:3532
+#: rapid/rapid.py:3588
msgid "."
msgstr "."
#. Freespace available on the filesystem for downloading to
#. Displayed in status bar message on main window
#. e.g. 14.7GB available
-#: rapid/rapid.py:3538
+#: rapid/rapid.py:3594
#, python-format
msgid "%(free)s free"
msgstr "%(free)s disponibles"
#. user manually specified the same location for photos and video backups
-#: rapid/rapid.py:3546
+#: rapid/rapid.py:3602
#, python-format
msgid "Backing up photos and videos to %(path)s"
msgstr "Sauvegarde des photos et vidéos vers %(path)s"
#. user manually specified backup location
-#: rapid/rapid.py:3549
+#: rapid/rapid.py:3605
#, python-format
msgid "Backing up to %(path)s"
msgstr "Sauvegarde sur %(path)s"
#. user manually specified different locations for photo and video backups
-#: rapid/rapid.py:3552
+#: rapid/rapid.py:3608
#, python-format
msgid "Backing up photos to %(path)s and videos to %(path2)s"
msgstr "Sauvegarde des photos vers %(path)s et des vidéos vers %(path2)s"
-#: rapid/rapid.py:3559
+#: rapid/rapid.py:3615
#, python-format
msgid "%(freespace)s. %(backuppaths)s."
msgstr "%(freespace)s. %(backuppaths)s."
-#: rapid/rapid.py:3588
+#: rapid/rapid.py:3644
msgid "Program preferences are invalid"
msgstr "Les préférences de l'application sont invalides"
-#: rapid/rapid.py:3707 rapid/rpdfile.py:254
+#: rapid/rapid.py:3770 rapid/rpdfile.py:273
msgid "Photo"
msgstr "Photo"
-#: rapid/rapid.py:3709 rapid/rpdfile.py:273
+#: rapid/rapid.py:3772 rapid/rpdfile.py:292
msgid "Video"
msgstr "Vidéo"
-#: rapid/rapid.py:3718
+#: rapid/rapid.py:3781
#, python-format
msgid "%(file_type)s download folder does not exist"
msgstr "%(file_type)s répertoires de destination n'existe pas"
-#: rapid/rapid.py:3720 rapid/rapid.py:3734 rapid/rapid.py:3747
+#: rapid/rapid.py:3783 rapid/rapid.py:3797 rapid/rapid.py:3810
#, python-format
msgid "Folder: %s"
msgstr "Répertoire: %s"
-#: rapid/rapid.py:3732
+#: rapid/rapid.py:3795
#, python-format
msgid "%(file_type)s download folder is invalid"
msgstr "%(file_type)s répertoire de destination n'est pas valide"
-#: rapid/rapid.py:3745
+#: rapid/rapid.py:3808
#, python-format
msgid "%(file_type)s download folder is not writable"
msgstr "%(file_type)s répertoire de destination protégé en écriture"
-#: rapid/rapid.py:3831
+#: rapid/rapid.py:3894
msgid "Thumbnails"
msgstr "Aperçus"
#. Translators: this text is displayed to the user when they request information on the command line options.
#. The text %default should not be modified or left out.
-#: rapid/rapid.py:3878
+#: rapid/rapid.py:3949
#, python-format
msgid ""
"display program information on the command line as the program runs "
@@ -384,30 +384,54 @@ msgstr ""
"affiche les informations de l'application sur la ligne de commande lorsque "
"l'application est active (défaut: %default)"
-#: rapid/rapid.py:3879
+#: rapid/rapid.py:3950
msgid "display debugging information when run from the command line"
msgstr "Affiche les informations de débogage en mode console"
-#: rapid/rapid.py:3880
+#: rapid/rapid.py:3951
msgid "only output errors to the command line"
msgstr "n'affiche que les erreurs sur la ligne de commande"
#. image file extensions are recognized RAW files plus TIFF and JPG
-#: rapid/rapid.py:3882
+#: rapid/rapid.py:3953
msgid "list photo and video file extensions the program recognizes and exit"
msgstr ""
"Liste des extensions de fichiers photo et vidéo reconnues par le programme"
-#: rapid/rapid.py:3884
+#: rapid/rapid.py:3955
+msgid ""
+"automatically detect devices from which to download, overwriting existing "
+"program preferences"
+msgstr ""
+"Détecter automatiquement les périphériques à partir desquels télécharger, "
+"écraser les préférences du programme"
+
+#: rapid/rapid.py:3956
+msgid ""
+"manually specify the PATH of the device from which to download, overwriting "
+"existing program preferences"
+msgstr ""
+"Spécifier manuellement le chemin des périphériques à partir desquels "
+"télécharger, écraser les préférences du programme"
+
+#: rapid/rapid.py:3957
msgid "reset all program settings and preferences and exit"
msgstr "Réinitialise tous les paramètres et préférences du programme"
-#: rapid/rapid.py:3902
+#: rapid/rapid.py:3970
+msgid ""
+"Error: specify device auto-detection or manually specify a device's path "
+"from which to download, but do not do both."
+msgstr ""
+"Erreur: activez l'auto-détection ou spécifiez manuellement un chemin pour "
+"les périphériques à partir desquels télécharger mais ne faites pas les deux."
+
+#: rapid/rapid.py:3991
#, python-format
msgid "and %s"
msgstr "et %s"
-#: rapid/rapid.py:3910
+#: rapid/rapid.py:3999
msgid "All settings and preferences have been reset"
msgstr "Tous les paramètres et préférences ont été réinitialisés"
@@ -1390,11 +1414,16 @@ msgstr "Il y a eu une erreur lors de la sauvegarde"
msgid "%(previousproblem)s, and %(backinguperror)s"
msgstr "%(previousproblem)s, et %(backinguperror)s"
-#: rapid/rpdfile.py:142
+#: rapid/rpdfile.py:153
#, python-format
msgid "%(number)s %(filetypes)s"
msgstr "%(number)s %(filetypes)s"
+#: rapid/rpdfile.py:163
+#, python-format
+msgid "scanning (found %(photos)s photos and %(videos)s videos)..."
+msgstr "Lecture en cours: %(photos)s photos et %(videos)s vidéos trouvées"
+
#: rapid/subfolderfile.py:80
#, python-format
msgid "%(hour)s:%(minute)s:%(second)s:%(subsecond)s"
diff --git a/po/it.po b/po/it.po
index b760975..1359a9c 100644
--- a/po/it.po
+++ b/po/it.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: rapid\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-06-23 04:00-0500\n"
-"PO-Revision-Date: 2012-06-22 15:28+0000\n"
-"Last-Translator: Marco Solari <marcosolari@gmail.com>\n"
+"PO-Revision-Date: 2012-09-30 14:30+0000\n"
+"Last-Translator: Milo Casagrande <milo.casagrande@gmail.com>\n"
"Language-Team: Italian <it@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-06-25 00:48+0000\n"
-"X-Generator: Launchpad (build 15461)\n"
+"X-Launchpad-Export-Date: 2012-11-26 19:04+0000\n"
+"X-Generator: Launchpad (build 16309)\n"
#. Translators: if neccessary, for guidance in how to translate this program, you may see http://damonlynch.net/translate.html
#: rapid/rapid.py:112 rapid/rapid.py:1784 rapid/glade3/rapid.ui.h:1
@@ -39,7 +39,7 @@ msgstr "%(date)s %(time)s"
#: rapid/rapid.py:122
#, python-format
msgid "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
-msgstr "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
+msgstr "%(date)s %(hour)s.%(minute)s.%(second)s.%(subsecond)s"
#. Device refers to a thing like a camera, memory card in its reader,
#. external hard drive, Portable Storage Device, etc.
@@ -55,12 +55,12 @@ msgstr "Dimensione"
#: rapid/rapid.py:178
msgid "Download Progress"
-msgstr "Avanzamento del download"
+msgstr "Avanzamento scaricamento"
#: rapid/rapid.py:336
#, python-format
msgid "%(device)s did not unmount"
-msgstr "%(device)s non si è smontato correttamente"
+msgstr "%(device)s non è stato smontato correttamente"
#. This refers to when a device like a hard drive is having its contents scanned,
#. looking for photos or videos. It is visible initially in the progress bar for each device
@@ -68,7 +68,7 @@ msgstr "%(device)s non si è smontato correttamente"
#. It maybe displayed only briefly if the contents of the device being scanned is small.
#: rapid/rapid.py:1216
msgid "scanning..."
-msgstr "scansione in corso..."
+msgstr "Analisi..."
#. this location is a human readable explanation for /, and is inserted into Downloading from %(location)s
#: rapid/rapid.py:1782
@@ -79,7 +79,7 @@ msgstr "l'origine del file system"
#: rapid/rapid.py:1786
#, python-format
msgid "Downloading from %(location)s."
-msgstr "Si scarica da %(location)s."
+msgstr "Scaricamento da %(location)s."
#: rapid/rapid.py:1787
msgid ""
@@ -91,7 +91,7 @@ msgstr ""
#: rapid/rapid.py:2209
msgid "Download"
-msgstr "Download"
+msgstr "Scarica"
#: rapid/rapid.py:2212
msgid "Pause"
@@ -104,7 +104,7 @@ msgid ""
"%(folder1)s\n"
"%(folder2)s"
msgstr ""
-"Queste cartelle per il download non sono valide:\n"
+"Le seguenti cartelle da scaricare non sono valide:\n"
"%(folder1)s\n"
"%(folder2)s"
@@ -114,7 +114,7 @@ msgid ""
"This download folder is invalid:\n"
"%s"
msgstr ""
-"Questa cartelle per il download non è valida:\n"
+"La seguente cartella da scaricare non è valida:\n"
"%s"
#: rapid/rapid.py:2321
@@ -140,7 +140,7 @@ msgstr "Manca circa 1 minuto"
#: rapid/rapid.py:2709
#, python-format
msgid "About %(minutes)i:%(seconds)02i minutes remaining"
-msgstr "Circa %(minutes)i:%(seconds)02i minuti rimanenti"
+msgstr "Circa %(minutes)i.%(seconds)02i minuti rimanenti"
#: rapid/rapid.py:2731 rapid/rpdfile.py:123
msgid "photos and videos"
@@ -423,6 +423,9 @@ msgid ""
"Error: specify device auto-detection or manually specify a device's path "
"from which to download, but do not do both."
msgstr ""
+"Errore: specifica il dispositivo di autorilevamento o specifica manualmente "
+"il percorso di un dispositivo dal quale scaricare, ma non fare entrambe le "
+"cose."
#: rapid/rapid.py:3991
#, python-format
@@ -580,17 +583,17 @@ msgstr "Lunghezza focale"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
#: rapid/generatenameconfig.py:182
msgid "Camera make"
-msgstr "Marca della fotocamera"
+msgstr "Marca fotocamera"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
#: rapid/generatenameconfig.py:184
msgid "Camera model"
-msgstr "Modello della fotocamera (es.: Canon EOS-1Ds Mark III)"
+msgstr "Modello fotocamera"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
#: rapid/generatenameconfig.py:186
msgid "Short camera model"
-msgstr "Modello brevissimo della fotocamera (es.: D300)"
+msgstr "Modello fotocamera breve"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
#: rapid/generatenameconfig.py:188
diff --git a/po/nb.po b/po/nb.po
index 4e7774d..bd5b400 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: rapid\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
-"POT-Creation-Date: 2012-06-17 03:05-0500\n"
-"PO-Revision-Date: 2012-06-17 10:05+0000\n"
+"POT-Creation-Date: 2012-06-23 04:00-0500\n"
+"PO-Revision-Date: 2012-06-25 09:45+0000\n"
"Last-Translator: Erik M <Unknown>\n"
"Language-Team: Norwegian Bokmal <nb@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-06-22 14:40+0000\n"
-"X-Generator: Launchpad (build 15461)\n"
+"X-Launchpad-Export-Date: 2012-09-11 00:24+0000\n"
+"X-Generator: Launchpad (build 15924)\n"
#. Translators: if neccessary, for guidance in how to translate this program, you may see http://damonlynch.net/translate.html
#: rapid/rapid.py:112 rapid/rapid.py:1784 rapid/glade3/rapid.ui.h:1
@@ -66,7 +66,7 @@ msgstr "%(device)s ble ikke utløst"
#. looking for photos or videos. It is visible initially in the progress bar for each device
#. (which normally holds "x photos and videos").
#. It maybe displayed only briefly if the contents of the device being scanned is small.
-#: rapid/rapid.py:1217
+#: rapid/rapid.py:1216
msgid "scanning..."
msgstr "søker..."
@@ -240,7 +240,7 @@ msgstr "Flytt"
msgid "To"
msgstr "Til"
-#: rapid/rapid.py:3317 rapid/rapid.py:3985
+#: rapid/rapid.py:3317 rapid/rapid.py:3986
msgid "Photos:"
msgstr "Bilder:"
@@ -248,7 +248,7 @@ msgstr "Bilder:"
msgid "Select a folder to download photos to"
msgstr "Velg katalog for å laste inn bilder"
-#: rapid/rapid.py:3332 rapid/rapid.py:3985
+#: rapid/rapid.py:3332 rapid/rapid.py:3986
msgid "Videos:"
msgstr "Videoer:"
@@ -374,7 +374,7 @@ msgstr "Miniatyrbilder"
#. Translators: this text is displayed to the user when they request information on the command line options.
#. The text %default should not be modified or left out.
-#: rapid/rapid.py:3948
+#: rapid/rapid.py:3949
#, python-format
msgid ""
"display program information on the command line as the program runs "
@@ -383,48 +383,48 @@ msgstr ""
"vis programinformasjon på kommandolinjen når programmet kjører (standard: "
"%default)"
-#: rapid/rapid.py:3949
+#: rapid/rapid.py:3950
msgid "display debugging information when run from the command line"
msgstr "vis feilrettingsinformasjon ved kjøring fra kommandolinje"
-#: rapid/rapid.py:3950
+#: rapid/rapid.py:3951
msgid "only output errors to the command line"
msgstr "vis bare feil på kommandolinjen"
#. image file extensions are recognized RAW files plus TIFF and JPG
-#: rapid/rapid.py:3952
+#: rapid/rapid.py:3953
msgid "list photo and video file extensions the program recognizes and exit"
msgstr ""
"vis hvilke bilde- og videofiltyper programmet gjenkjenner, og avslutt"
-#: rapid/rapid.py:3954
+#: rapid/rapid.py:3955
msgid ""
"automatically detect devices from which to download, overwriting existing "
"program preferences"
msgstr ""
-#: rapid/rapid.py:3955
+#: rapid/rapid.py:3956
msgid ""
"manually specify the PATH of the device from which to download, overwriting "
"existing program preferences"
msgstr ""
-#: rapid/rapid.py:3956
+#: rapid/rapid.py:3957
msgid "reset all program settings and preferences and exit"
msgstr "nullstill alle programinnstillinger og avslutt"
-#: rapid/rapid.py:3969
+#: rapid/rapid.py:3970
msgid ""
-"Error: specify device auto-detection or manually specifiy a device's path "
+"Error: specify device auto-detection or manually specify a device's path "
"from which to download, but do not do both."
msgstr ""
-#: rapid/rapid.py:3990
+#: rapid/rapid.py:3991
#, python-format
msgid "and %s"
msgstr "og %s"
-#: rapid/rapid.py:3998
+#: rapid/rapid.py:3999
msgid "All settings and preferences have been reset"
msgstr "Alle innstillingene er nullstillte"
@@ -1650,7 +1650,7 @@ msgstr "Alternativer for gi nytt navn"
#: rapid/glade3/prefs.ui.h:35
msgid "<span weight=\"bold\" size=\"x-large\">Job Codes</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Jobbnamn</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Jobbnavn</span>"
#: rapid/glade3/prefs.ui.h:36
msgid "<b>Job Codes</b>"
diff --git a/po/nl.po b/po/nl.po
index 213645c..70b0b4a 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -11,12 +11,12 @@ msgstr ""
"PO-Revision-Date: 2012-06-24 09:07+0000\n"
"Last-Translator: A.J. Baudrez <a.baudrez@gmail.com>\n"
"Language-Team: Dutch <nl@li.org>\n"
+"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-25 00:48+0000\n"
"X-Generator: Launchpad (build 15461)\n"
-"Language: nl\n"
#. Translators: if neccessary, for guidance in how to translate this program, you may see http://damonlynch.net/translate.html
#: rapid/rapid.py:112 rapid/rapid.py:1784 rapid/glade3/rapid.ui.h:1
@@ -208,8 +208,7 @@ msgstr "%(filetype)s werden niet gedownload"
#: rapid/rapid.py:2860
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s (%(remaining)s remaining)"
-msgstr ""
-"%(number)s van de %(total)s %(filetypes)s (%(remaining)s blijven over)"
+msgstr "%(number)s van de %(total)s %(filetypes)s (%(remaining)s blijven over)"
#. e.g.: 205 of 205 photos and videos
#: rapid/rapid.py:2867
@@ -1582,8 +1581,8 @@ msgid ""
"for python, or <i>exiftool</i>."
msgstr ""
"Sorry, de video download functionaliteit is uitgezet. Om video's te "
-"downloaden moet je ofwel de <i>hachoir metadata</i> en de <i>kaa "
-"metadata</i> paketten voor python, ofwel <i>exiftool</i> installeren."
+"downloaden moet je ofwel de <i>hachoir metadata</i> en de <i>kaa metadata</"
+"i> paketten voor python, ofwel <i>exiftool</i> installeren."
#: rapid/glade3/prefs.ui.h:18
msgid ""
@@ -1703,8 +1702,8 @@ msgid ""
"\n"
"<i>Downloading directly from cameras is currently an experimental feature. "
"If downloading directly from your camera works poorly or not at all, try "
-"setting it to PTP mode. If that is not possible, a card reader must be "
-"used.</i>"
+"setting it to PTP mode. If that is not possible, a card reader must be used."
+"</i>"
msgstr ""
"Met apparaten wordt bedoeld waar je de foto's en video's van downloadt, "
"zoals camera's, geheugenkaarten of Draagbare Opslagmedia.\n"
@@ -1805,8 +1804,7 @@ msgid "<b>Backup</b>"
msgstr "<b>Backup</b>"
#: rapid/glade3/prefs.ui.h:66
-msgid ""
-"If you disable automatic detection, choose the exact backup locations."
+msgid "If you disable automatic detection, choose the exact backup locations."
msgstr ""
"Als je de automatische herkenning uitzet, moet je een exacte backup locatie "
"ingeven."
@@ -1978,13 +1976,12 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ "Please check preferences, restart the program, and try again."
#~ msgstr ""
#~ "\n"
-#~ "Gelieve de voorkeuren te controleren, het programma te herstarten en opnieuw "
-#~ "te proberen."
+#~ "Gelieve de voorkeuren te controleren, het programma te herstarten en "
+#~ "opnieuw te proberen."
#~ msgid "There is an error in the program preferences."
#~ msgstr "Er is een fout in de programma voorkeuren."
-#, python-format
#~ msgid "0 of %s images copied"
#~ msgstr "0 van %s afbeeldingen gekopieerd"
@@ -1994,19 +1991,16 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgid "Resetting to midnight.\n"
#~ msgstr "Terugzetten op middernacht.\n"
-#, python-format
#~ msgid "Device scan complete: found %(number)s images on %(device)s"
#~ msgstr ""
#~ "Apparaat scan afgelopen: %(number)s afbeeldingen gevonden op %(device)s"
-#, python-format
#~ msgid "Device scan complete: no images found on %s"
#~ msgstr "Apparaat scan afgelopen: geen afbeeldingen gevonden op %s"
#~ msgid "Image filename could not be generated"
#~ msgstr "Afbeeldingsnaam kon niet aangemaakt worden"
-#, python-format
#~ msgid ""
#~ "Source: %(source)s\n"
#~ "Problem: %(problem)s"
@@ -2018,10 +2012,9 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ "Image filename could not be properly generated. Check to ensure there is "
#~ "sufficient image metadata."
#~ msgstr ""
-#~ "Afbeeldingsnaam kon niet goed aangemaakt worden. Controlleer of er voldoende "
-#~ "afbeeldingsmetadata aanwezig is."
+#~ "Afbeeldingsnaam kon niet goed aangemaakt worden. Controlleer of er "
+#~ "voldoende afbeeldingsmetadata aanwezig is."
-#, python-format
#~ msgid ""
#~ "Source: %(source)s\n"
#~ "Destination: %(destination)s\n"
@@ -2034,21 +2027,18 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgid "Could not open image"
#~ msgstr "Kon afbeelding niet openen"
-#, python-format
#~ msgid "Source: %s"
#~ msgstr "Bron: %s"
#~ msgid "Image has no metadata"
#~ msgstr "Afbeelding heeft geen metadata"
-#, python-format
#~ msgid "Unique identifier '%s' added"
#~ msgstr "Unieke identifier '%s' toegevoegd"
#~ msgid "Download copying error"
#~ msgstr "Download kopieer fout"
-#, python-format
#~ msgid ""
#~ "Source: %(source)s\n"
#~ "Destination: %(destination)s\n"
@@ -2064,7 +2054,6 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgid "Backup image already exists"
#~ msgstr "Backup afbeelding bestaat al"
-#, python-format
#~ msgid ""
#~ "Destination directory could not be created\n"
#~ "%(directory)s\n"
@@ -2074,7 +2063,6 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ "%(directory)s\n"
#~ "Fout: %(errno)s %(strerror)s"
-#, python-format
#~ msgid ""
#~ "Source: %(source)s\n"
#~ "Destination: %(destination)s\n"
@@ -2087,11 +2075,9 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgid "The device can now be safely removed"
#~ msgstr "Het apparaat kan nu veilig verwijderd worden"
-#, python-format
#~ msgid "%s images downloaded"
#~ msgstr "%s afbeeldingen gedownload"
-#, python-format
#~ msgid "%s images skipped"
#~ msgstr "%s afbeeldingen overgeslaan"
@@ -2101,7 +2087,6 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgid "Backup device missing"
#~ msgstr "Backup apparaat afwezig"
-#, python-format
#~ msgid "Download has started from %s"
#~ msgstr "Download begonnen vanaf %s"
@@ -2117,7 +2102,6 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgid "Image has no thumbnail"
#~ msgstr "Afbeelding heeft geen miniatuur"
-#, python-format
#~ msgid "%(number)s of %(total)s images copied"
#~ msgstr "%(number)s van %(total)s afbeeldingen gekopieerd"
@@ -2127,21 +2111,21 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgid "It may be corrupted"
#~ msgstr "Het kan corrupt zijn"
-#, python-format
#~ msgid "%s selected for downloading from"
#~ msgstr "%s aangeduid om gedownload te worden van"
#~ msgid "This device or partition will always be used to download from"
#~ msgstr ""
-#~ "Dit apparaat of deze partitie zal altijd gebruikt worden om van te downloaden"
+#~ "Dit apparaat of deze partitie zal altijd gebruikt worden om van te "
+#~ "downloaden"
-#, python-format
#~ msgid "%s rejected as a download device"
#~ msgstr "%s afgewezen als download apparaat"
#~ msgid "This device or partition will never be used to download from"
#~ msgstr ""
-#~ "Dit apparaat of deze partitie zal nooit gebruikt worden om van te downloaden"
+#~ "Dit apparaat of deze partitie zal nooit gebruikt worden om van te "
+#~ "downloaden"
#~ msgid "Enter a new job code."
#~ msgstr "Geef een nieuwe job code."
@@ -2155,7 +2139,6 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgid "Some preferences will be reset."
#~ msgstr "Sommige voorkeuren worden gereset"
-#, python-format
#~ msgid "Prompting whether to use %s"
#~ msgstr "Vragen om %s te gebruiken"
@@ -2193,8 +2176,8 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgstr "Voorkeuren werden aangepast."
#~ msgid ""
-#~ "This version of the program uses different preferences than the old version. "
-#~ "Your preferences have been updated.\n"
+#~ "This version of the program uses different preferences than the old "
+#~ "version. Your preferences have been updated.\n"
#~ "\n"
#~ "Please check them to ensure correct operation."
#~ msgstr ""
@@ -2212,11 +2195,9 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgid "Failed to receive pynotify server capabilities."
#~ msgstr "Kon de pynotify server mogelijkheden niet ontvangen."
-#, python-format
#~ msgid "Device %(device)s (%(path)s) ignored"
#~ msgstr "Apparaat %(device)s (%(path)s) wordt genegeerd"
-#, python-format
#~ msgid "Detected %(device)s with path %(path)s"
#~ msgstr "Detecteerde %(device)s met als pad %(path)s"
@@ -2235,25 +2216,21 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgid "Using"
#~ msgstr "Gebruik makend van"
-#, python-format
#~ msgid "%s is already running"
#~ msgstr "%s is al draaiende"
-#, python-format
#~ msgid "Preference value '%(value)s' is invalid"
#~ msgstr "Voorkeurwaarde '%(value)s' is ongeldig"
#~ msgid "_Pause"
#~ msgstr "_Pauze"
-#, python-format
#~ msgid "Error in date time component. Value %s appears invalid"
#~ msgstr "Fout in datum/tijd component. Waarde %s blijkt ongeldig"
#~ msgid "extension was specified but image name has no extension"
#~ msgstr "Uitbreiding was gespecifieerd, maar afbeeldingsnaam heeft er geen"
-#, python-format
#~ msgid "error generating name with component %s"
#~ msgstr "fout bij het aanmaken van de naam met component %s"
@@ -2273,7 +2250,8 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgstr "Automatisering"
#~ msgid "<span weight=\"bold\" size=\"x-large\">Image Rename</span>\t"
-#~ msgstr "<span weight=\"bold\" size=\"x-large\">Afbeelding Hernoemen</span>\t"
+#~ msgstr ""
+#~ "<span weight=\"bold\" size=\"x-large\">Afbeelding Hernoemen</span>\t"
#~ msgid "Copyright Damon Lynch 2007-09"
#~ msgstr "Copyright Damon Lynch 2007-09"
@@ -2284,9 +2262,11 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgid "Image Devices"
#~ msgstr "Afbeeldingsapparaat"
-#~ msgid "If you disable automatic detection, choose the exact backup location."
+#~ msgid ""
+#~ "If you disable automatic detection, choose the exact backup location."
#~ msgstr ""
-#~ "Als je de automatische herkenning uitschakelt, kies de juiste backup plaats."
+#~ "Als je de automatische herkenning uitschakelt, kies de juiste backup "
+#~ "plaats."
#~ msgid "Exit program after completion of successful download"
#~ msgstr "Verlaat programma na het beëindigen van een gelukte download"
@@ -2295,10 +2275,11 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgstr "Negeren"
#~ msgid ""
-#~ "If you disable automatic detection, choose the exact location of the images."
+#~ "If you disable automatic detection, choose the exact location of the "
+#~ "images."
#~ msgstr ""
-#~ "Als je de automatische herkenning uitschakelt, kies de juiste plaats voor de "
-#~ "afbeeldingen."
+#~ "Als je de automatische herkenning uitschakelt, kies de juiste plaats voor "
+#~ "de afbeeldingen."
#~ msgid "Error Log"
#~ msgstr "Foutenlog"
@@ -2322,8 +2303,8 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ "Specify what to do when an image of the same name has already been "
#~ "downloaded or backed up."
#~ msgstr ""
-#~ "Specifieer wat er dient te gebeuren indien een afbeelding met dezelfde naam "
-#~ "reeds gedownload of gebackupped was."
+#~ "Specifieer wat er dient te gebeuren indien een afbeelding met dezelfde "
+#~ "naam reeds gedownload of gebackupped was."
#~ msgid "Unmount (\"eject\") image device upon download completion"
#~ msgstr "Ontkoppel (\"verwijder\") het afbeeldingsapparaat na de download"
@@ -2332,8 +2313,8 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ "You can have your photos backed up to multiple locations as they are "
#~ "downloaded, e.g. external hard drives."
#~ msgstr ""
-#~ "Je kan je foto's op meerdere plaatsen backuppen tijdens het downloaden, bv. "
-#~ "externe harde schijven."
+#~ "Je kan je foto's op meerdere plaatsen backuppen tijdens het downloaden, "
+#~ "bv. externe harde schijven."
#~ msgid "_Get Help Online..."
#~ msgstr "_Online Help..."
@@ -2351,7 +2332,8 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgstr "_Miniaturen"
#~ msgid ""
-#~ "Choose whether to skip downloading the image, or to add a unique indentifier."
+#~ "Choose whether to skip downloading the image, or to add a unique "
+#~ "indentifier."
#~ msgstr ""
#~ "Kies tussen het overslaan van de download van de afbeelding, of er een "
#~ "unieke identifier aan toe te kennen."
@@ -2361,9 +2343,9 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ "device will be scanned for images. On large devices, this could take some "
#~ "time."
#~ msgstr ""
-#~ "Als je de automatische herkenning van Draagbare Opslagmedia inschakelt, zal "
-#~ "het volledig apparaat gescanned worden op afbeeldingen. Bij grote apparaten, "
-#~ "kan dat een tijd duren."
+#~ "Als je de automatische herkenning van Draagbare Opslagmedia inschakelt, "
+#~ "zal het volledig apparaat gescanned worden op afbeeldingen. Bij grote "
+#~ "apparaten, kan dat een tijd duren."
#~ msgid ""
#~ "Image devices are devices from which to download photos, such as cameras, "
@@ -2371,9 +2353,9 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ "\n"
#~ "You can download photos from multiple image devices simultaneously.\n"
#~ "\n"
-#~ "<i>If downloading directly from your camera works poorly or not at all, try "
-#~ "setting it to PTP mode. If that is not possible, consider using a card "
-#~ "reader.</i>"
+#~ "<i>If downloading directly from your camera works poorly or not at all, "
+#~ "try setting it to PTP mode. If that is not possible, consider using a "
+#~ "card reader.</i>"
#~ msgstr ""
#~ "Afbeeldingsapparaten zijn apparaten waar we foto's van kunnen downloaden "
#~ "zoals camera's, geheugenkaarten en draagbare opslagmedia.\n"
@@ -2381,12 +2363,12 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ "Je kunt foto's van meerdere afbeeldingsapparaten simultaan downloaden.\n"
#~ "\n"
#~ "<i>Indien het rechtstreeks downloaden vanaf je camera slecht of helemaal "
-#~ "niet werkt, probeer het via de PTP mode. Als dat niet mogelijk is overweeg "
-#~ "een kaartlezer te gebruiken.</i>"
+#~ "niet werkt, probeer het via de PTP mode. Als dat niet mogelijk is "
+#~ "overweeg een kaartlezer te gebruiken.</i>"
#~ msgid ""
-#~ "When backing up, choose whether to overwrite an image on the backup device "
-#~ "that has the same name, or skip backing it up."
+#~ "When backing up, choose whether to overwrite an image on the backup "
+#~ "device that has the same name, or skip backing it up."
#~ msgstr ""
#~ "Kies tijdens het backuppen om een afbeelding met dezelfde naam op het "
#~ "backupapparaat te overschrijven of over te slaan."
@@ -2410,7 +2392,8 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ "The subfolder preferences entered are invalid and cannot be used.\n"
#~ "They will be reset to their default values."
#~ msgstr ""
-#~ "De ingevulde submapvoorkeuren zijn ongeldig en kunnen niet gebruikt worden.\n"
+#~ "De ingevulde submapvoorkeuren zijn ongeldig en kunnen niet gebruikt "
+#~ "worden.\n"
#~ "Ze zullen naar de standaard waardes worden teruggezet."
#~ msgid "The subfolder preferences had some unnecessary values removed."
@@ -2421,17 +2404,17 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ "<i><b>Warning:</b> There is insufficient image metadata to fully generate "
#~ "the name. Please use other renaming options.</i>"
#~ msgstr ""
-#~ "<i><b>Opgepast:</b> Er is onvoldoende afbeeldingsmetadata om een volledige "
-#~ "naam aan te maken. Gelieve andere hernoemingsopties te gebruiken.</i>"
+#~ "<i><b>Opgepast:</b> Er is onvoldoende afbeeldingsmetadata om een "
+#~ "volledige naam aan te maken. Gelieve andere hernoemingsopties te "
+#~ "gebruiken.</i>"
#~ msgid ""
#~ "<i><b>Warning:</b> There is insufficient image metadata to fully generate "
#~ "subfolders. Please use other subfolder naming options.</i>"
#~ msgstr ""
-#~ "<i><b>Opgepast:</b> Er is onvoldoende afbeeldingsmetadata om een submap aan "
-#~ "te maken. Gelieve andere submap benoemingsopties te gebruiken.</i>"
+#~ "<i><b>Opgepast:</b> Er is onvoldoende afbeeldingsmetadata om een submap "
+#~ "aan te maken. Gelieve andere submap benoemingsopties te gebruiken.</i>"
-#, python-format
#~ msgid ""
#~ "Metadata is essential for generating subfolders / image names.\n"
#~ "Source: %s"
@@ -2450,7 +2433,6 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ "Submapnaam kon niet goed aangemaakt worden. Controlleer of er voldoende "
#~ "afbeeldingsmetadata aanwezig is."
-#, python-format
#~ msgid ""
#~ "Subfolder: %(subfolder)s\n"
#~ "Image: %(image)s\n"
@@ -2466,7 +2448,6 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgid "This device has no images to download from."
#~ msgstr "Dit apparaat bevat geen afbeeldingen die gedownload kunnen worden."
-#, python-format
#~ msgid "Download complete from %s"
#~ msgstr "Download van %s afgelopen"
@@ -2482,9 +2463,9 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgstr "Waarschuwing:"
#~ msgid ""
-#~ "This version of the program uses different preferences than the old version. "
-#~ "Some of your previous preferences were invalid, and could not be updated. "
-#~ "They will be reset."
+#~ "This version of the program uses different preferences than the old "
+#~ "version. Some of your previous preferences were invalid, and could not be "
+#~ "updated. They will be reset."
#~ msgstr ""
#~ "Deze versie van het programma gebruikt andere voorkeuren dan de vorige. "
#~ "Bepaalde van je vorige voorkeuren zijn ongeldig en kunnen niet aangepast "
@@ -2498,9 +2479,9 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgid "list image file extensions the program recognizes and exit"
#~ msgstr ""
-#~ "toon een lijst van bestandextenties welke het programma herkent en keer terug"
+#~ "toon een lijst van bestandextenties welke het programma herkent en keer "
+#~ "terug"
-#, python-format
#~ msgid ""
#~ "Preference key '%(key)s' is invalid.\n"
#~ "Expected one of %(value)s"
@@ -2511,7 +2492,6 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgid "Subsecond metadata not present in image"
#~ msgstr "Subsecond metadata niet aanwezig in de afbeelding"
-#, python-format
#~ msgid "%s metadata is not present in image"
#~ msgstr "%s metadata is niet aanwezig in de afbeelding"
@@ -2545,18 +2525,19 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ msgid ""
#~ "Rapid Photo Downloader is free software; you can redistribute it and/or "
-#~ "modify it under the terms of the GNU General Public License as published by "
-#~ "the Free Software Foundation; either version 2 of the License, or (at your "
-#~ "option) any later version.\n"
+#~ "modify it under the terms of the GNU General Public License as published "
+#~ "by the Free Software Foundation; either version 2 of the License, or (at "
+#~ "your option) any later version.\n"
#~ "\n"
#~ "Rapid Photo Downloader is distributed in the hope that it will be useful, "
#~ "but WITHOUT ANY WARRANTY; without even the implied warranty of "
#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General "
#~ "Public License for more details.\n"
#~ "\n"
-#~ "You should have received a copy of the GNU General Public License along with "
-#~ "Rapid Photo Downloader; if not, write to the Free Software Foundation, Inc., "
-#~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA."
+#~ "You should have received a copy of the GNU General Public License along "
+#~ "with Rapid Photo Downloader; if not, write to the Free Software "
+#~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, "
+#~ "USA."
#~ msgstr ""
#~ "Rapid Photo Downloader is vrije software; je mag het herverdelen en/of "
#~ "aanpassen onder de termen van de GNU General Public License zoals "
@@ -2565,13 +2546,13 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ "\n"
#~ "Rapid Photo Downloader wordt verdeeld in de hoop dat het nuttig zal zijn, "
#~ "maar ZONDER ENIGE GARANTIE; zelfs zonder de impliciete garantie van "
-#~ "VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD DOEL . Zie de GNU General "
-#~ "Public License voor meer details.\n"
+#~ "VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD DOEL . Zie de GNU "
+#~ "General Public License voor meer details.\n"
#~ "\n"
-#~ "Je zou een kopie van de GNU General Public License ontvangen moeten hebben "
-#~ "samen met Rapid Photo Downloader; indien niet, contacteer de Free Software "
-#~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, "
-#~ "USA."
+#~ "Je zou een kopie van de GNU General Public License ontvangen moeten "
+#~ "hebben samen met Rapid Photo Downloader; indien niet, contacteer de Free "
+#~ "Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA "
+#~ "02110-1301, USA."
#~ msgid "Specify what to do when there are no backup devices."
#~ msgstr ""
@@ -2581,8 +2562,8 @@ msgstr "Importeer je foto's en video's efficiënt en betrouwbaar"
#~ "Specify the folder in which backups are stored on the device. \n"
#~ "\n"
#~ "<i>Note: this will also be used to determine whether or not the device is "
-#~ "used for backups. For each device you wish to use for backing up to, create "
-#~ "a folder in it with this name.</i>"
+#~ "used for backups. For each device you wish to use for backing up to, "
+#~ "create a folder in it with this name.</i>"
#~ msgstr ""
#~ "Specifieer de map waar de backups opgeslagen zijn op het apparaat. \n"
#~ "\n"
diff --git a/po/rapid-photo-downloader.pot b/po/rapid-photo-downloader.pot
index d056e3a..365d0c2 100644
--- a/po/rapid-photo-downloader.pot
+++ b/po/rapid-photo-downloader.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-23 03:53-0500\n"
+"POT-Creation-Date: 2012-06-23 04:00-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#. Translators: if neccessary, for guidance in how to translate this program, you may see http://damonlynch.net/translate.html
-#: rapid/rapid.py:112 rapid/rapid.py:1779 rapid/glade3/rapid.ui.h:1
+#: rapid/rapid.py:112 rapid/rapid.py:1784 rapid/glade3/rapid.ui.h:1
msgid "Rapid Photo Downloader"
msgstr ""
@@ -69,31 +69,31 @@ msgid "scanning..."
msgstr ""
#. this location is a human readable explanation for /, and is inserted into Downloading from %(location)s
-#: rapid/rapid.py:1777
+#: rapid/rapid.py:1782
msgid "the root of the file system"
msgstr ""
#. message in dialog box which asks the user if they really want to be downloading from this location
-#: rapid/rapid.py:1781
+#: rapid/rapid.py:1786
#, python-format
msgid "Downloading from %(location)s."
msgstr ""
-#: rapid/rapid.py:1782
+#: rapid/rapid.py:1787
msgid ""
"Do you really want to download from here? On some systems, scanning this "
"location can take a very long time."
msgstr ""
-#: rapid/rapid.py:2204
+#: rapid/rapid.py:2209
msgid "Download"
msgstr ""
-#: rapid/rapid.py:2207
+#: rapid/rapid.py:2212
msgid "Pause"
msgstr ""
-#: rapid/rapid.py:2312
+#: rapid/rapid.py:2317
#, python-format
msgid ""
"These download folders are invalid:\n"
@@ -101,183 +101,183 @@ msgid ""
"%(folder2)s"
msgstr ""
-#: rapid/rapid.py:2315
+#: rapid/rapid.py:2320
#, python-format
msgid ""
"This download folder is invalid:\n"
"%s"
msgstr ""
-#: rapid/rapid.py:2316
+#: rapid/rapid.py:2321
msgid "Download cannot proceed"
msgstr ""
-#: rapid/rapid.py:2695
+#: rapid/rapid.py:2700
msgid "About 1 second remaining"
msgstr ""
-#: rapid/rapid.py:2697
+#: rapid/rapid.py:2702
#, python-format
msgid "About %i seconds remaining"
msgstr ""
-#: rapid/rapid.py:2699
+#: rapid/rapid.py:2704
msgid "About 1 minute remaining"
msgstr ""
#. Translators: in the text '%(minutes)i:%(seconds)02i', only the : should be translated, if needed.
#. '%(minutes)i' and '%(seconds)02i' should not be modified or left out. They are used to format and display the amount
#. of time the download has remainging, e.g. 'About 5:36 minutes remaining'
-#: rapid/rapid.py:2704
+#: rapid/rapid.py:2709
#, python-format
msgid "About %(minutes)i:%(seconds)02i minutes remaining"
msgstr ""
-#: rapid/rapid.py:2726 rapid/rpdfile.py:123
+#: rapid/rapid.py:2731 rapid/rpdfile.py:123
msgid "photos and videos"
msgstr ""
-#: rapid/rapid.py:2728 rapid/rpdfile.py:125
+#: rapid/rapid.py:2733 rapid/rpdfile.py:125
msgid "photos or videos"
msgstr ""
-#: rapid/rapid.py:2731 rapid/rapid.py:3553 rapid/rpdfile.py:128
+#: rapid/rapid.py:2736 rapid/rapid.py:3558 rapid/rpdfile.py:128
msgid "videos"
msgstr ""
-#: rapid/rapid.py:2733 rapid/preferencesdialog.py:1620 rapid/rpdfile.py:130
+#: rapid/rapid.py:2738 rapid/preferencesdialog.py:1620 rapid/rpdfile.py:130
#: rapid/rpdfile.py:291
msgid "video"
msgstr ""
-#: rapid/rapid.py:2736 rapid/rapid.py:3551 rapid/rpdfile.py:133
+#: rapid/rapid.py:2741 rapid/rapid.py:3556 rapid/rpdfile.py:133
msgid "photos"
msgstr ""
#. check subfolder preferences for bad values
-#: rapid/rapid.py:2738 rapid/preferencesdialog.py:1619 rapid/rpdfile.py:135
+#: rapid/rapid.py:2743 rapid/preferencesdialog.py:1619 rapid/rpdfile.py:135
#: rapid/rpdfile.py:272
msgid "photo"
msgstr ""
-#: rapid/rapid.py:2765
+#: rapid/rapid.py:2770
#, python-format
msgid "%(noFiles)s %(filetypes)s downloaded"
msgstr ""
-#: rapid/rapid.py:2769
+#: rapid/rapid.py:2774
#, python-format
msgid "%(noFiles)s %(filetypes)s failed to download"
msgstr ""
-#: rapid/rapid.py:2772 rapid/rapid.py:2824
+#: rapid/rapid.py:2777 rapid/rapid.py:2829
msgid "warnings"
msgstr ""
-#: rapid/rapid.py:2781
+#: rapid/rapid.py:2786
msgid "All downloads complete"
msgstr ""
-#: rapid/rapid.py:2787 rapid/rapid.py:2796 rapid/rapid.py:2805
-#: rapid/rapid.py:2814 rapid/rapid.py:2822
+#: rapid/rapid.py:2792 rapid/rapid.py:2801 rapid/rapid.py:2810
+#: rapid/rapid.py:2819 rapid/rapid.py:2827
#, python-format
msgid "%(number)s %(numberdownloaded)s"
msgstr ""
-#: rapid/rapid.py:2789 rapid/rapid.py:2807
+#: rapid/rapid.py:2794 rapid/rapid.py:2812
#, python-format
msgid "%(filetype)s downloaded"
msgstr ""
-#: rapid/rapid.py:2798 rapid/rapid.py:2816
+#: rapid/rapid.py:2803 rapid/rapid.py:2821
#, python-format
msgid "%(filetype)s failed to download"
msgstr ""
#. e.g.: 3 of 205 photos and videos (202 remaining)
-#: rapid/rapid.py:2855
+#: rapid/rapid.py:2860
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s (%(remaining)s remaining)"
msgstr ""
#. e.g.: 205 of 205 photos and videos
-#: rapid/rapid.py:2862
+#: rapid/rapid.py:2867
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s"
msgstr ""
-#: rapid/rapid.py:3217
+#: rapid/rapid.py:3222
msgid "From"
msgstr ""
-#: rapid/rapid.py:3225
+#: rapid/rapid.py:3230
msgid "Auto Detect"
msgstr ""
-#: rapid/rapid.py:3229 rapid/preferencesdialog.py:1327
+#: rapid/rapid.py:3234 rapid/preferencesdialog.py:1327
#, python-format
msgid "Select a folder containing %(file_types)s"
msgstr ""
-#: rapid/rapid.py:3270
+#: rapid/rapid.py:3275
msgid "Copy"
msgstr ""
-#: rapid/rapid.py:3283
+#: rapid/rapid.py:3288
msgid "Move"
msgstr ""
-#: rapid/rapid.py:3305
+#: rapid/rapid.py:3310
msgid "To"
msgstr ""
-#: rapid/rapid.py:3312 rapid/rapid.py:3981
+#: rapid/rapid.py:3317 rapid/rapid.py:3986
msgid "Photos:"
msgstr ""
-#: rapid/rapid.py:3315 rapid/preferencesdialog.py:1164
+#: rapid/rapid.py:3320 rapid/preferencesdialog.py:1164
msgid "Select a folder to download photos to"
msgstr ""
-#: rapid/rapid.py:3327 rapid/rapid.py:3981
+#: rapid/rapid.py:3332 rapid/rapid.py:3986
msgid "Videos:"
msgstr ""
-#: rapid/rapid.py:3329 rapid/preferencesdialog.py:1182
+#: rapid/rapid.py:3334 rapid/preferencesdialog.py:1182
msgid "Select a folder to download videos to"
msgstr ""
-#: rapid/rapid.py:3521
+#: rapid/rapid.py:3526
msgid "and"
msgstr ""
-#: rapid/rapid.py:3526
+#: rapid/rapid.py:3531
msgid "Using backup devices"
msgstr ""
-#: rapid/rapid.py:3528
+#: rapid/rapid.py:3533
msgid "Using backup device"
msgstr ""
-#: rapid/rapid.py:3530
+#: rapid/rapid.py:3535
msgid "No backup devices detected"
msgstr ""
-#: rapid/rapid.py:3557
+#: rapid/rapid.py:3562
msgid "Free space:"
msgstr ""
#. (videos) or (photos) will be appended to the free space message displayed to the
#. user in the status bar.
#. you should only translate this if your language does not use parantheses
-#: rapid/rapid.py:3569
+#: rapid/rapid.py:3574
#, python-format
msgid "(%(file_type)s)"
msgstr ""
#. Freespace available on the filesystem for downloading to
#. Displayed in status bar message on main window
-#: rapid/rapid.py:3573
+#: rapid/rapid.py:3578
#, python-format
msgid "%(free)s %(file_type)s"
msgstr ""
@@ -285,134 +285,134 @@ msgstr ""
#. Inserted in the middle of the statusbar message concerning the amount of freespace
#. Used to differentiate between two different file systems
#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
-#: rapid/rapid.py:3578
+#: rapid/rapid.py:3583
msgid "; "
msgstr ""
#. Inserted at the end of the statusbar message concerning the amount of freespace
#. Used to differentiate between two different file systems
#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
-#: rapid/rapid.py:3583
+#: rapid/rapid.py:3588
msgid "."
msgstr ""
#. Freespace available on the filesystem for downloading to
#. Displayed in status bar message on main window
#. e.g. 14.7GB available
-#: rapid/rapid.py:3589
+#: rapid/rapid.py:3594
#, python-format
msgid "%(free)s free"
msgstr ""
#. user manually specified the same location for photos and video backups
-#: rapid/rapid.py:3597
+#: rapid/rapid.py:3602
#, python-format
msgid "Backing up photos and videos to %(path)s"
msgstr ""
#. user manually specified backup location
-#: rapid/rapid.py:3600
+#: rapid/rapid.py:3605
#, python-format
msgid "Backing up to %(path)s"
msgstr ""
#. user manually specified different locations for photo and video backups
-#: rapid/rapid.py:3603
+#: rapid/rapid.py:3608
#, python-format
msgid "Backing up photos to %(path)s and videos to %(path2)s"
msgstr ""
-#: rapid/rapid.py:3610
+#: rapid/rapid.py:3615
#, python-format
msgid "%(freespace)s. %(backuppaths)s."
msgstr ""
-#: rapid/rapid.py:3639
+#: rapid/rapid.py:3644
msgid "Program preferences are invalid"
msgstr ""
-#: rapid/rapid.py:3765 rapid/rpdfile.py:273
+#: rapid/rapid.py:3770 rapid/rpdfile.py:273
msgid "Photo"
msgstr ""
-#: rapid/rapid.py:3767 rapid/rpdfile.py:292
+#: rapid/rapid.py:3772 rapid/rpdfile.py:292
msgid "Video"
msgstr ""
-#: rapid/rapid.py:3776
+#: rapid/rapid.py:3781
#, python-format
msgid "%(file_type)s download folder does not exist"
msgstr ""
-#: rapid/rapid.py:3778 rapid/rapid.py:3792 rapid/rapid.py:3805
+#: rapid/rapid.py:3783 rapid/rapid.py:3797 rapid/rapid.py:3810
#, python-format
msgid "Folder: %s"
msgstr ""
-#: rapid/rapid.py:3790
+#: rapid/rapid.py:3795
#, python-format
msgid "%(file_type)s download folder is invalid"
msgstr ""
-#: rapid/rapid.py:3803
+#: rapid/rapid.py:3808
#, python-format
msgid "%(file_type)s download folder is not writable"
msgstr ""
-#: rapid/rapid.py:3889
+#: rapid/rapid.py:3894
msgid "Thumbnails"
msgstr ""
#. Translators: this text is displayed to the user when they request information on the command line options.
#. The text %default should not be modified or left out.
-#: rapid/rapid.py:3944
+#: rapid/rapid.py:3949
#, python-format
msgid ""
"display program information on the command line as the program runs "
"(default: %default)"
msgstr ""
-#: rapid/rapid.py:3945
+#: rapid/rapid.py:3950
msgid "display debugging information when run from the command line"
msgstr ""
-#: rapid/rapid.py:3946
+#: rapid/rapid.py:3951
msgid "only output errors to the command line"
msgstr ""
#. image file extensions are recognized RAW files plus TIFF and JPG
-#: rapid/rapid.py:3948
+#: rapid/rapid.py:3953
msgid "list photo and video file extensions the program recognizes and exit"
msgstr ""
-#: rapid/rapid.py:3950
+#: rapid/rapid.py:3955
msgid ""
"automatically detect devices from which to download, overwriting existing "
"program preferences"
msgstr ""
-#: rapid/rapid.py:3951
+#: rapid/rapid.py:3956
msgid ""
"manually specify the PATH of the device from which to download, overwriting "
"existing program preferences"
msgstr ""
-#: rapid/rapid.py:3952
+#: rapid/rapid.py:3957
msgid "reset all program settings and preferences and exit"
msgstr ""
-#: rapid/rapid.py:3965
+#: rapid/rapid.py:3970
msgid ""
"Error: specify device auto-detection or manually specify a device's path "
"from which to download, but do not do both."
msgstr ""
-#: rapid/rapid.py:3986
+#: rapid/rapid.py:3991
#, python-format
msgid "and %s"
msgstr ""
-#: rapid/rapid.py:3994
+#: rapid/rapid.py:3999
msgid "All settings and preferences have been reset"
msgstr ""
diff --git a/po/ru.po b/po/ru.po
index b740d4b..3fb90ac 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -6,23 +6,24 @@
msgid ""
msgstr ""
"Project-Id-Version: rapid\n"
-"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
-"POT-Creation-Date: 2012-05-13 22:31-0500\n"
-"PO-Revision-Date: 2012-05-20 07:07+0000\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-23 04:00-0500\n"
+"PO-Revision-Date: 2012-07-03 07:38+0000\n"
"Last-Translator: Eugene Marshal <Unknown>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-05-29 18:44+0000\n"
-"X-Generator: Launchpad (build 15316)\n"
+"X-Launchpad-Export-Date: 2012-09-11 00:24+0000\n"
+"X-Generator: Launchpad (build 15924)\n"
+"Language: ru\n"
#. Translators: if neccessary, for guidance in how to translate this program, you may see http://damonlynch.net/translate.html
-#: rapid/rapid.py:110 rapid/rapid.py:1749 rapid/glade3/rapid.ui.h:1
+#: rapid/rapid.py:112 rapid/rapid.py:1784 rapid/glade3/rapid.ui.h:1
msgid "Rapid Photo Downloader"
msgstr "Rapid Photo Downloader"
-#: rapid/rapid.py:115
+#: rapid/rapid.py:117
#, python-format
msgid ""
"%(date)s\n"
@@ -31,33 +32,33 @@ msgstr ""
"%(date)s\n"
"%(time)s"
-#: rapid/rapid.py:117
+#: rapid/rapid.py:119
#, python-format
msgid "%(date)s %(time)s"
msgstr "%(date)s %(time)s"
-#: rapid/rapid.py:120
+#: rapid/rapid.py:122
#, python-format
msgid "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
msgstr "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
#. Device refers to a thing like a camera, memory card in its reader,
#. external hard drive, Portable Storage Device, etc.
-#: rapid/rapid.py:155
+#: rapid/rapid.py:157
msgid "Device"
msgstr "Носитель"
#. Size refers to the total size of images on the device, typically in
#. MB or GB
-#: rapid/rapid.py:173
+#: rapid/rapid.py:175
msgid "Size"
msgstr "Размер"
-#: rapid/rapid.py:176
+#: rapid/rapid.py:178
msgid "Download Progress"
msgstr "Ход загрузки"
-#: rapid/rapid.py:322
+#: rapid/rapid.py:336
#, python-format
msgid "%(device)s did not unmount"
msgstr "%(device)s не отсоединён"
@@ -66,22 +67,22 @@ msgstr "%(device)s не отсоединён"
#. looking for photos or videos. It is visible initially in the progress bar for each device
#. (which normally holds "x photos and videos").
#. It maybe displayed only briefly if the contents of the device being scanned is small.
-#: rapid/rapid.py:1189
+#: rapid/rapid.py:1216
msgid "scanning..."
msgstr "поиск файлов..."
#. this location is a human readable explanation for /, and is inserted into Downloading from %(location)s
-#: rapid/rapid.py:1747
+#: rapid/rapid.py:1782
msgid "the root of the file system"
msgstr "корень файловой системы"
#. message in dialog box which asks the user if they really want to be downloading from this location
-#: rapid/rapid.py:1751
+#: rapid/rapid.py:1786
#, python-format
msgid "Downloading from %(location)s."
msgstr "Загрузка из %(location)s."
-#: rapid/rapid.py:1752
+#: rapid/rapid.py:1787
msgid ""
"Do you really want to download from here? On some systems, scanning this "
"location can take a very long time."
@@ -89,15 +90,15 @@ msgstr ""
"Вы точно хотите загрузить отсюда? На некоторых системах сканирование этого "
"местоположения может занять много времени."
-#: rapid/rapid.py:2174
+#: rapid/rapid.py:2209
msgid "Download"
msgstr "Загрузка"
-#: rapid/rapid.py:2177
+#: rapid/rapid.py:2212
msgid "Pause"
msgstr "Пауза"
-#: rapid/rapid.py:2282
+#: rapid/rapid.py:2317
#, python-format
msgid ""
"These download folders are invalid:\n"
@@ -108,7 +109,7 @@ msgstr ""
"%(folder1)s\n"
"%(folder2)s"
-#: rapid/rapid.py:2285
+#: rapid/rapid.py:2320
#, python-format
msgid ""
"This download folder is invalid:\n"
@@ -117,176 +118,176 @@ msgstr ""
"Неправильно указанная папка загрузки:\n"
"%s"
-#: rapid/rapid.py:2286
+#: rapid/rapid.py:2321
msgid "Download cannot proceed"
msgstr "Невозможно загрузить"
-#: rapid/rapid.py:2653
+#: rapid/rapid.py:2700
msgid "About 1 second remaining"
msgstr "Осталась примерно 1 секунда"
-#: rapid/rapid.py:2655
+#: rapid/rapid.py:2702
#, python-format
msgid "About %i seconds remaining"
msgstr "Осталось %i секунд"
-#: rapid/rapid.py:2657
+#: rapid/rapid.py:2704
msgid "About 1 minute remaining"
msgstr "Осталась примерно 1 минута"
#. Translators: in the text '%(minutes)i:%(seconds)02i', only the : should be translated, if needed.
#. '%(minutes)i' and '%(seconds)02i' should not be modified or left out. They are used to format and display the amount
#. of time the download has remainging, e.g. 'About 5:36 minutes remaining'
-#: rapid/rapid.py:2662
+#: rapid/rapid.py:2709
#, python-format
msgid "About %(minutes)i:%(seconds)02i minutes remaining"
msgstr "Осталось примерно %(minutes)i:%(seconds)02i"
-#: rapid/rapid.py:2684 rapid/rpdfile.py:116
+#: rapid/rapid.py:2731 rapid/rpdfile.py:123
msgid "photos and videos"
msgstr "фото и видео"
-#: rapid/rapid.py:2686 rapid/rpdfile.py:118
+#: rapid/rapid.py:2733 rapid/rpdfile.py:125
msgid "photos or videos"
msgstr "фото или видео"
-#: rapid/rapid.py:2689 rapid/rapid.py:3502 rapid/rpdfile.py:121
+#: rapid/rapid.py:2736 rapid/rapid.py:3558 rapid/rpdfile.py:128
msgid "videos"
msgstr "видео"
-#: rapid/rapid.py:2691 rapid/preferencesdialog.py:1620 rapid/rpdfile.py:123
-#: rapid/rpdfile.py:272
+#: rapid/rapid.py:2738 rapid/preferencesdialog.py:1620 rapid/rpdfile.py:130
+#: rapid/rpdfile.py:291
msgid "video"
msgstr "видео"
-#: rapid/rapid.py:2694 rapid/rapid.py:3500 rapid/rpdfile.py:126
+#: rapid/rapid.py:2741 rapid/rapid.py:3556 rapid/rpdfile.py:133
msgid "photos"
msgstr "фото"
#. check subfolder preferences for bad values
-#: rapid/rapid.py:2696 rapid/preferencesdialog.py:1619 rapid/rpdfile.py:128
-#: rapid/rpdfile.py:253
+#: rapid/rapid.py:2743 rapid/preferencesdialog.py:1619 rapid/rpdfile.py:135
+#: rapid/rpdfile.py:272
msgid "photo"
msgstr "фото"
-#: rapid/rapid.py:2723
+#: rapid/rapid.py:2770
#, python-format
msgid "%(noFiles)s %(filetypes)s downloaded"
msgstr "%(noFiles)s %(filetypes)s загружено"
-#: rapid/rapid.py:2727
+#: rapid/rapid.py:2774
#, python-format
msgid "%(noFiles)s %(filetypes)s failed to download"
msgstr "%(noFiles)s %(filetypes)s не удалось загрузить"
-#: rapid/rapid.py:2730 rapid/rapid.py:2782
+#: rapid/rapid.py:2777 rapid/rapid.py:2829
msgid "warnings"
msgstr "предупреждения"
-#: rapid/rapid.py:2739
+#: rapid/rapid.py:2786
msgid "All downloads complete"
msgstr "Все загрузки завершены"
-#: rapid/rapid.py:2745 rapid/rapid.py:2754 rapid/rapid.py:2763
-#: rapid/rapid.py:2772 rapid/rapid.py:2780
+#: rapid/rapid.py:2792 rapid/rapid.py:2801 rapid/rapid.py:2810
+#: rapid/rapid.py:2819 rapid/rapid.py:2827
#, python-format
msgid "%(number)s %(numberdownloaded)s"
msgstr "%(number)s %(numberdownloaded)s"
-#: rapid/rapid.py:2747 rapid/rapid.py:2765
+#: rapid/rapid.py:2794 rapid/rapid.py:2812
#, python-format
msgid "%(filetype)s downloaded"
msgstr "%(filetype)s загружено"
-#: rapid/rapid.py:2756 rapid/rapid.py:2774
+#: rapid/rapid.py:2803 rapid/rapid.py:2821
#, python-format
msgid "%(filetype)s failed to download"
msgstr "%(filetype)s не удалось загрузить"
#. e.g.: 3 of 205 photos and videos (202 remaining)
-#: rapid/rapid.py:2813
+#: rapid/rapid.py:2860
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s (%(remaining)s remaining)"
msgstr "%(number)s из %(total)s %(filetypes)s (%(remaining)s осталось)"
#. e.g.: 205 of 205 photos and videos
-#: rapid/rapid.py:2820
+#: rapid/rapid.py:2867
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s"
msgstr "%(number)s из %(total)s %(filetypes)s"
-#: rapid/rapid.py:3166
+#: rapid/rapid.py:3222
msgid "From"
msgstr "Из"
-#: rapid/rapid.py:3174
+#: rapid/rapid.py:3230
msgid "Auto Detect"
msgstr "Автоопределение"
-#: rapid/rapid.py:3178 rapid/preferencesdialog.py:1327
+#: rapid/rapid.py:3234 rapid/preferencesdialog.py:1327
#, python-format
msgid "Select a folder containing %(file_types)s"
msgstr "Выберите каталог, содержащий %(file_types)s"
-#: rapid/rapid.py:3219
+#: rapid/rapid.py:3275
msgid "Copy"
msgstr "Копировать"
-#: rapid/rapid.py:3232
+#: rapid/rapid.py:3288
msgid "Move"
msgstr "Переместить"
-#: rapid/rapid.py:3254
+#: rapid/rapid.py:3310
msgid "To"
msgstr "к"
-#: rapid/rapid.py:3261 rapid/rapid.py:3897
+#: rapid/rapid.py:3317 rapid/rapid.py:3986
msgid "Photos:"
msgstr "Фото:"
-#: rapid/rapid.py:3264 rapid/preferencesdialog.py:1164
+#: rapid/rapid.py:3320 rapid/preferencesdialog.py:1164
msgid "Select a folder to download photos to"
msgstr "Выберите каталог для загрузки фото"
-#: rapid/rapid.py:3276 rapid/rapid.py:3897
+#: rapid/rapid.py:3332 rapid/rapid.py:3986
msgid "Videos:"
msgstr "Видео:"
-#: rapid/rapid.py:3278 rapid/preferencesdialog.py:1182
+#: rapid/rapid.py:3334 rapid/preferencesdialog.py:1182
msgid "Select a folder to download videos to"
msgstr "Выберите каталог для загрузки видео"
-#: rapid/rapid.py:3470
+#: rapid/rapid.py:3526
msgid "and"
msgstr "и"
-#: rapid/rapid.py:3475
+#: rapid/rapid.py:3531
msgid "Using backup devices"
msgstr "Использование носителя для резервного копирования"
-#: rapid/rapid.py:3477
+#: rapid/rapid.py:3533
msgid "Using backup device"
msgstr "Использование носителя для резервного копирования"
-#: rapid/rapid.py:3479
+#: rapid/rapid.py:3535
msgid "No backup devices detected"
msgstr "Не обнаружен носитель для резервных копий"
-#: rapid/rapid.py:3506
+#: rapid/rapid.py:3562
msgid "Free space:"
msgstr "Свободное место:"
#. (videos) or (photos) will be appended to the free space message displayed to the
#. user in the status bar.
#. you should only translate this if your language does not use parantheses
-#: rapid/rapid.py:3518
+#: rapid/rapid.py:3574
#, python-format
msgid "(%(file_type)s)"
msgstr "(%(file_type)s)"
#. Freespace available on the filesystem for downloading to
#. Displayed in status bar message on main window
-#: rapid/rapid.py:3522
+#: rapid/rapid.py:3578
#, python-format
msgid "%(free)s %(file_type)s"
msgstr "Доступно %(free)s для %(file_type)s"
@@ -294,88 +295,88 @@ msgstr "Доступно %(free)s для %(file_type)s"
#. Inserted in the middle of the statusbar message concerning the amount of freespace
#. Used to differentiate between two different file systems
#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
-#: rapid/rapid.py:3527
+#: rapid/rapid.py:3583
msgid "; "
msgstr "; "
#. Inserted at the end of the statusbar message concerning the amount of freespace
#. Used to differentiate between two different file systems
#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
-#: rapid/rapid.py:3532
+#: rapid/rapid.py:3588
msgid "."
msgstr "."
#. Freespace available on the filesystem for downloading to
#. Displayed in status bar message on main window
#. e.g. 14.7GB available
-#: rapid/rapid.py:3538
+#: rapid/rapid.py:3594
#, python-format
msgid "%(free)s free"
msgstr "%(free)s свободно"
#. user manually specified the same location for photos and video backups
-#: rapid/rapid.py:3546
+#: rapid/rapid.py:3602
#, python-format
msgid "Backing up photos and videos to %(path)s"
msgstr "Резервное копирование фотографий и видеозаписей в %(path)s"
#. user manually specified backup location
-#: rapid/rapid.py:3549
+#: rapid/rapid.py:3605
#, python-format
msgid "Backing up to %(path)s"
msgstr "Резервное копирование в %(path)s"
#. user manually specified different locations for photo and video backups
-#: rapid/rapid.py:3552
+#: rapid/rapid.py:3608
#, python-format
msgid "Backing up photos to %(path)s and videos to %(path2)s"
msgstr ""
"Резервное копирование фотографий в %(path)s и видеозаписей в %(path2)s"
-#: rapid/rapid.py:3559
+#: rapid/rapid.py:3615
#, python-format
msgid "%(freespace)s. %(backuppaths)s."
msgstr "%(freespace)s. %(backuppaths)s."
-#: rapid/rapid.py:3588
+#: rapid/rapid.py:3644
msgid "Program preferences are invalid"
msgstr "Настройки программы не корректны"
-#: rapid/rapid.py:3707 rapid/rpdfile.py:254
+#: rapid/rapid.py:3770 rapid/rpdfile.py:273
msgid "Photo"
msgstr "Фото"
-#: rapid/rapid.py:3709 rapid/rpdfile.py:273
+#: rapid/rapid.py:3772 rapid/rpdfile.py:292
msgid "Video"
msgstr "Видео"
-#: rapid/rapid.py:3718
+#: rapid/rapid.py:3781
#, python-format
msgid "%(file_type)s download folder does not exist"
msgstr "Указанный для загрузки каталог %(file_type)s не существует"
-#: rapid/rapid.py:3720 rapid/rapid.py:3734 rapid/rapid.py:3747
+#: rapid/rapid.py:3783 rapid/rapid.py:3797 rapid/rapid.py:3810
#, python-format
msgid "Folder: %s"
msgstr "Каталог: %s"
-#: rapid/rapid.py:3732
+#: rapid/rapid.py:3795
#, python-format
msgid "%(file_type)s download folder is invalid"
msgstr "для %(file_type)s папка загрузки указана неверно."
-#: rapid/rapid.py:3745
+#: rapid/rapid.py:3808
#, python-format
msgid "%(file_type)s download folder is not writable"
msgstr "каталог для %(file_type)s доступен только для чтения"
-#: rapid/rapid.py:3831
+#: rapid/rapid.py:3894
msgid "Thumbnails"
msgstr "Миниатюры"
#. Translators: this text is displayed to the user when they request information on the command line options.
#. The text %default should not be modified or left out.
-#: rapid/rapid.py:3878
+#: rapid/rapid.py:3949
#, python-format
msgid ""
"display program information on the command line as the program runs "
@@ -384,30 +385,55 @@ msgstr ""
"выводить информацию в командной строке во время выполнения программы (по "
"умолчанию: %default)"
-#: rapid/rapid.py:3879
+#: rapid/rapid.py:3950
msgid "display debugging information when run from the command line"
msgstr "отображать отладочную информацию при запуске из командной строки"
-#: rapid/rapid.py:3880
+#: rapid/rapid.py:3951
msgid "only output errors to the command line"
msgstr "выводить в командную строку только ошибки"
#. image file extensions are recognized RAW files plus TIFF and JPG
-#: rapid/rapid.py:3882
+#: rapid/rapid.py:3953
msgid "list photo and video file extensions the program recognizes and exit"
msgstr ""
"вывести расширения фото- и видеофайлов, которые распознает программа, и выйти"
-#: rapid/rapid.py:3884
+#: rapid/rapid.py:3955
+msgid ""
+"automatically detect devices from which to download, overwriting existing "
+"program preferences"
+msgstr ""
+"автоматически определять устройство, с которого будет производиться "
+"загрузка, заменяя существующие настройки программы"
+
+#: rapid/rapid.py:3956
+msgid ""
+"manually specify the PATH of the device from which to download, overwriting "
+"existing program preferences"
+msgstr ""
+"самостоятельно укажите расположение (PATH) устройства, с которого будет "
+"производиться загрузка, заменяя существующие настройки программы"
+
+#: rapid/rapid.py:3957
msgid "reset all program settings and preferences and exit"
msgstr "сбросить все настройки и выйти"
-#: rapid/rapid.py:3902
+#: rapid/rapid.py:3970
+msgid ""
+"Error: specify device auto-detection or manually specify a device's path "
+"from which to download, but do not do both."
+msgstr ""
+"Ошибка: укажите автоматическое определение устройства или самостоятельно "
+"укажите расположение устройства, с которого будет производиться загрузка, но "
+"не используйте сразу оба варианта."
+
+#: rapid/rapid.py:3991
#, python-format
msgid "and %s"
msgstr "и %s"
-#: rapid/rapid.py:3910
+#: rapid/rapid.py:3999
msgid "All settings and preferences have been reset"
msgstr "Все установки и настройки были сброшены"
@@ -1373,11 +1399,17 @@ msgstr "Была ошибка при резевном копировании"
msgid "%(previousproblem)s, and %(backinguperror)s"
msgstr "%(previousproblem)s, еще %(backinguperror)s"
-#: rapid/rpdfile.py:142
+#: rapid/rpdfile.py:153
#, python-format
msgid "%(number)s %(filetypes)s"
msgstr "%(number)s %(filetypes)s"
+#: rapid/rpdfile.py:163
+#, python-format
+msgid "scanning (found %(photos)s photos and %(videos)s videos)..."
+msgstr ""
+"проверка (найдено %(photos)s фотографий и %(videos)s видеозаписей)..."
+
#: rapid/subfolderfile.py:80
#, python-format
msgid "%(hour)s:%(minute)s:%(second)s:%(subsecond)s"
diff --git a/po/sr.po b/po/sr.po
index 74b0bcc..a602eb1 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -1,28 +1,28 @@
# Serbian translation for rapid
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
# This file is distributed under the same license as the rapid package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
-#
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: rapid\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
-"POT-Creation-Date: 2011-11-20 13:25-0600\n"
-"PO-Revision-Date: 2011-11-21 09:55+0000\n"
-"Last-Translator: Miloš Popović <gpopac@gmail.com>\n"
-"Language-Team: Serbian <sr@li.org>\n"
+"POT-Creation-Date: 2012-06-23 04:00-0500\n"
+"PO-Revision-Date: 2012-10-30 08:48+0000\n"
+"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
+"Language-Team: Serbian translators\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-12-28 07:56+0000\n"
-"X-Generator: Launchpad (build 14560)\n"
+"X-Launchpad-Export-Date: 2012-11-26 19:04+0000\n"
+"X-Generator: Launchpad (build 16309)\n"
+"Language: sr\n"
#. Translators: if neccessary, for guidance in how to translate this program, you may see http://damonlynch.net/translate.html
-#: rapid/rapid.py:107 rapid/rapid.py:1699 rapid/glade3/rapid.ui.h:14
+#: rapid/rapid.py:112 rapid/rapid.py:1784 rapid/glade3/rapid.ui.h:1
msgid "Rapid Photo Downloader"
msgstr "Брзи преносилац фотографија"
-#: rapid/rapid.py:112
+#: rapid/rapid.py:117
#, python-format
msgid ""
"%(date)s\n"
@@ -31,33 +31,33 @@ msgstr ""
"%(date)s\n"
"%(time)s"
-#: rapid/rapid.py:114
+#: rapid/rapid.py:119
#, python-format
msgid "%(date)s %(time)s"
msgstr "%(date)s %(time)s"
-#: rapid/rapid.py:117
+#: rapid/rapid.py:122
#, python-format
msgid "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
msgstr "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
#. Device refers to a thing like a camera, memory card in its reader,
#. external hard drive, Portable Storage Device, etc.
-#: rapid/rapid.py:152
+#: rapid/rapid.py:157
msgid "Device"
msgstr "Уређај"
#. Size refers to the total size of images on the device, typically in
#. MB or GB
-#: rapid/rapid.py:170
+#: rapid/rapid.py:175
msgid "Size"
msgstr "Величина"
-#: rapid/rapid.py:173
+#: rapid/rapid.py:178
msgid "Download Progress"
msgstr "Напредак преузимања"
-#: rapid/rapid.py:319
+#: rapid/rapid.py:336
#, python-format
msgid "%(device)s did not unmount"
msgstr "%(device)s није демонтиран"
@@ -66,22 +66,22 @@ msgstr "%(device)s није демонтиран"
#. looking for photos or videos. It is visible initially in the progress bar for each device
#. (which normally holds "x photos and videos").
#. It maybe displayed only briefly if the contents of the device being scanned is small.
-#: rapid/rapid.py:1186
+#: rapid/rapid.py:1216
msgid "scanning..."
msgstr "претражујем уређај..."
#. this location is a human readable explanation for /, and is inserted into Downloading from %(location)s
-#: rapid/rapid.py:1697
+#: rapid/rapid.py:1782
msgid "the root of the file system"
msgstr "почетни директоријум система датотека"
#. message in dialog box which asks the user if they really want to be downloading from this location
-#: rapid/rapid.py:1701
+#: rapid/rapid.py:1786
#, python-format
msgid "Downloading from %(location)s."
msgstr "Преузми са %(location)s."
-#: rapid/rapid.py:1702
+#: rapid/rapid.py:1787
msgid ""
"Do you really want to download from here? On some systems, scanning this "
"location can take a very long time."
@@ -89,15 +89,15 @@ msgstr ""
"Да ли заиста желите да преузмете слике одавде? На неким системима "
"претраживање те путање може да потраје."
-#: rapid/rapid.py:2124 rapid/glade3/rapid.ui.h:5
+#: rapid/rapid.py:2209
msgid "Download"
msgstr "Преузми"
-#: rapid/rapid.py:2127
+#: rapid/rapid.py:2212
msgid "Pause"
msgstr "Паузирај"
-#: rapid/rapid.py:2228
+#: rapid/rapid.py:2317
#, python-format
msgid ""
"These download folders are invalid:\n"
@@ -108,7 +108,7 @@ msgstr ""
"%(folder1)s\n"
"%(folder2)s"
-#: rapid/rapid.py:2231
+#: rapid/rapid.py:2320
#, python-format
msgid ""
"This download folder is invalid:\n"
@@ -117,176 +117,176 @@ msgstr ""
"Следећа фасцикла за преузимање је неисправна:\n"
"%s"
-#: rapid/rapid.py:2232
+#: rapid/rapid.py:2321
msgid "Download cannot proceed"
msgstr "Не могу да наставим преузимање"
-#: rapid/rapid.py:2559
+#: rapid/rapid.py:2700
msgid "About 1 second remaining"
msgstr "Преостала је 1 секунда"
-#: rapid/rapid.py:2561
+#: rapid/rapid.py:2702
#, python-format
msgid "About %i seconds remaining"
msgstr "Преостало је %i секунди"
-#: rapid/rapid.py:2563
+#: rapid/rapid.py:2704
msgid "About 1 minute remaining"
msgstr "Преостао је 1 минут"
#. Translators: in the text '%(minutes)i:%(seconds)02i', only the : should be translated, if needed.
#. '%(minutes)i' and '%(seconds)02i' should not be modified or left out. They are used to format and display the amount
#. of time the download has remainging, e.g. 'About 5:36 minutes remaining'
-#: rapid/rapid.py:2568
+#: rapid/rapid.py:2709
#, python-format
msgid "About %(minutes)i:%(seconds)02i minutes remaining"
msgstr "Преостало је %(minutes)i:%(seconds)02i"
-#: rapid/rapid.py:2590 rapid/rpdfile.py:113
+#: rapid/rapid.py:2731 rapid/rpdfile.py:123
msgid "photos and videos"
msgstr "фотографије и видео"
-#: rapid/rapid.py:2592 rapid/rpdfile.py:115
+#: rapid/rapid.py:2733 rapid/rpdfile.py:125
msgid "photos or videos"
msgstr "фотографије или видео"
-#: rapid/rapid.py:2595 rapid/rapid.py:3408 rapid/rpdfile.py:118
+#: rapid/rapid.py:2736 rapid/rapid.py:3558 rapid/rpdfile.py:128
msgid "videos"
msgstr "видео"
-#: rapid/rapid.py:2597 rapid/preferencesdialog.py:1617 rapid/rpdfile.py:120
-#: rapid/rpdfile.py:254
+#: rapid/rapid.py:2738 rapid/preferencesdialog.py:1620 rapid/rpdfile.py:130
+#: rapid/rpdfile.py:291
msgid "video"
msgstr "видео"
-#: rapid/rapid.py:2600 rapid/rapid.py:3406 rapid/rpdfile.py:123
+#: rapid/rapid.py:2741 rapid/rapid.py:3556 rapid/rpdfile.py:133
msgid "photos"
msgstr "фотографије"
#. check subfolder preferences for bad values
-#: rapid/rapid.py:2602 rapid/preferencesdialog.py:1616 rapid/rpdfile.py:125
-#: rapid/rpdfile.py:234
+#: rapid/rapid.py:2743 rapid/preferencesdialog.py:1619 rapid/rpdfile.py:135
+#: rapid/rpdfile.py:272
msgid "photo"
msgstr "фотографија"
-#: rapid/rapid.py:2629
+#: rapid/rapid.py:2770
#, python-format
msgid "%(noFiles)s %(filetypes)s downloaded"
msgstr "%(noFiles)s %(filetypes)s преузето"
-#: rapid/rapid.py:2633
+#: rapid/rapid.py:2774
#, python-format
msgid "%(noFiles)s %(filetypes)s failed to download"
msgstr "%(noFiles)s %(filetypes)s није преузето"
-#: rapid/rapid.py:2636 rapid/rapid.py:2688
+#: rapid/rapid.py:2777 rapid/rapid.py:2829
msgid "warnings"
msgstr "упозорења"
-#: rapid/rapid.py:2645
+#: rapid/rapid.py:2786
msgid "All downloads complete"
msgstr "Сва преузимања су завршена"
-#: rapid/rapid.py:2651 rapid/rapid.py:2660 rapid/rapid.py:2669
-#: rapid/rapid.py:2678 rapid/rapid.py:2686
+#: rapid/rapid.py:2792 rapid/rapid.py:2801 rapid/rapid.py:2810
+#: rapid/rapid.py:2819 rapid/rapid.py:2827
#, python-format
msgid "%(number)s %(numberdownloaded)s"
msgstr "%(number)s %(numberdownloaded)s"
-#: rapid/rapid.py:2653 rapid/rapid.py:2671
+#: rapid/rapid.py:2794 rapid/rapid.py:2812
#, python-format
msgid "%(filetype)s downloaded"
msgstr "%(filetype)s преузето"
-#: rapid/rapid.py:2662 rapid/rapid.py:2680
+#: rapid/rapid.py:2803 rapid/rapid.py:2821
#, python-format
msgid "%(filetype)s failed to download"
msgstr "%(filetype)s није преузето"
#. e.g.: 3 of 205 photos and videos (202 remaining)
-#: rapid/rapid.py:2719
+#: rapid/rapid.py:2860
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s (%(remaining)s remaining)"
msgstr "%(number)s од %(total)s %(filetypes)s (преостаје %(remaining)s)"
#. e.g.: 205 of 205 photos and videos
-#: rapid/rapid.py:2726
+#: rapid/rapid.py:2867
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s"
msgstr "%(number)s од %(total)s %(filetypes)s"
-#: rapid/rapid.py:3072
+#: rapid/rapid.py:3222
msgid "From"
msgstr "Од"
-#: rapid/rapid.py:3080
+#: rapid/rapid.py:3230
msgid "Auto Detect"
msgstr "Сам одреди"
-#: rapid/rapid.py:3084 rapid/preferencesdialog.py:1324
+#: rapid/rapid.py:3234 rapid/preferencesdialog.py:1327
#, python-format
msgid "Select a folder containing %(file_types)s"
msgstr "Изаберите фасциклу која садржи %(file_types)s"
-#: rapid/rapid.py:3125
+#: rapid/rapid.py:3275
msgid "Copy"
-msgstr "Копирај"
+msgstr "Умножи"
-#: rapid/rapid.py:3138
+#: rapid/rapid.py:3288
msgid "Move"
msgstr "Премести"
-#: rapid/rapid.py:3160
+#: rapid/rapid.py:3310
msgid "To"
msgstr "У"
-#: rapid/rapid.py:3167 rapid/rapid.py:3796
+#: rapid/rapid.py:3317 rapid/rapid.py:3986
msgid "Photos:"
msgstr "Фотографије:"
-#: rapid/rapid.py:3170 rapid/preferencesdialog.py:1161
+#: rapid/rapid.py:3320 rapid/preferencesdialog.py:1164
msgid "Select a folder to download photos to"
msgstr "Изаберите фасциклу за чување фотографија"
-#: rapid/rapid.py:3182 rapid/rapid.py:3796
+#: rapid/rapid.py:3332 rapid/rapid.py:3986
msgid "Videos:"
msgstr "Видео:"
-#: rapid/rapid.py:3184 rapid/preferencesdialog.py:1179
+#: rapid/rapid.py:3334 rapid/preferencesdialog.py:1182
msgid "Select a folder to download videos to"
msgstr "Изаберите фасциклу за смештање преузетог видеа"
-#: rapid/rapid.py:3376
+#: rapid/rapid.py:3526
msgid "and"
msgstr "и"
-#: rapid/rapid.py:3381
+#: rapid/rapid.py:3531
msgid "Using backup devices"
msgstr "Употреба резервних уређаја"
-#: rapid/rapid.py:3383
+#: rapid/rapid.py:3533
msgid "Using backup device"
msgstr "Употреба резервног уређаја"
-#: rapid/rapid.py:3385
+#: rapid/rapid.py:3535
msgid "No backup devices detected"
msgstr "Нису изабрани резервни уређаји"
-#: rapid/rapid.py:3412
+#: rapid/rapid.py:3562
msgid "Free space:"
msgstr "Слободан простор:"
#. (videos) or (photos) will be appended to the free space message displayed to the
#. user in the status bar.
#. you should only translate this if your language does not use parantheses
-#: rapid/rapid.py:3424
+#: rapid/rapid.py:3574
#, python-format
msgid "(%(file_type)s)"
msgstr "(%(file_type)s)"
#. Freespace available on the filesystem for downloading to
#. Displayed in status bar message on main window
-#: rapid/rapid.py:3428
+#: rapid/rapid.py:3578
#, python-format
msgid "%(free)s %(file_type)s"
msgstr "%(free)s %(file_type)s"
@@ -294,87 +294,87 @@ msgstr "%(free)s %(file_type)s"
#. Inserted in the middle of the statusbar message concerning the amount of freespace
#. Used to differentiate between two different file systems
#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
-#: rapid/rapid.py:3433
+#: rapid/rapid.py:3583
msgid "; "
msgstr "; "
#. Inserted at the end of the statusbar message concerning the amount of freespace
#. Used to differentiate between two different file systems
#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
-#: rapid/rapid.py:3438
+#: rapid/rapid.py:3588
msgid "."
msgstr "."
#. Freespace available on the filesystem for downloading to
#. Displayed in status bar message on main window
#. e.g. 14.7GB available
-#: rapid/rapid.py:3444
+#: rapid/rapid.py:3594
#, python-format
msgid "%(free)s free"
msgstr "%(free)s слободно"
#. user manually specified the same location for photos and video backups
-#: rapid/rapid.py:3452
+#: rapid/rapid.py:3602
#, python-format
msgid "Backing up photos and videos to %(path)s"
-msgstr "Направи резервну копију слика и видеа у %(path)s"
+msgstr "Направи резерву слика и видеа у %(path)s"
#. user manually specified backup location
-#: rapid/rapid.py:3455
+#: rapid/rapid.py:3605
#, python-format
msgid "Backing up to %(path)s"
msgstr "Правим резерву у %(path)s"
#. user manually specified different locations for photo and video backups
-#: rapid/rapid.py:3458
+#: rapid/rapid.py:3608
#, python-format
msgid "Backing up photos to %(path)s and videos to %(path2)s"
-msgstr "Правим резервну копију слика у %(path)s и видеа у %(path2)s"
+msgstr "Правим резерву слика у %(path)s и видеа у %(path2)s"
-#: rapid/rapid.py:3465
+#: rapid/rapid.py:3615
#, python-format
msgid "%(freespace)s. %(backuppaths)s."
msgstr "%(freespace)s. у %(backuppaths)s."
-#: rapid/rapid.py:3494
+#: rapid/rapid.py:3644
msgid "Program preferences are invalid"
msgstr "Подешавања програма су неисправна"
-#: rapid/rapid.py:3613 rapid/rpdfile.py:235
+#: rapid/rapid.py:3770 rapid/rpdfile.py:273
msgid "Photo"
msgstr "Фотографија"
-#: rapid/rapid.py:3615 rapid/rpdfile.py:255
+#: rapid/rapid.py:3772 rapid/rpdfile.py:292
msgid "Video"
msgstr "Видео"
-#: rapid/rapid.py:3624
+#: rapid/rapid.py:3781
#, python-format
msgid "%(file_type)s download folder does not exist"
msgstr "Фасцикла за преузимање %(file_type)s датотека не постоји"
-#: rapid/rapid.py:3626 rapid/rapid.py:3640 rapid/rapid.py:3653
+#: rapid/rapid.py:3783 rapid/rapid.py:3797 rapid/rapid.py:3810
#, python-format
msgid "Folder: %s"
msgstr "Фасцикла: %s"
-#: rapid/rapid.py:3638
+#: rapid/rapid.py:3795
#, python-format
msgid "%(file_type)s download folder is invalid"
msgstr "Фасцикла за преузимање %(file_type)s датотека је неисправна"
-#: rapid/rapid.py:3651
+#: rapid/rapid.py:3808
#, python-format
msgid "%(file_type)s download folder is not writable"
msgstr "Фасцикла за преузимање %(file_type)s датотека је неуписива"
-#: rapid/rapid.py:3729
+#: rapid/rapid.py:3894
msgid "Thumbnails"
msgstr "Умањени прикази"
#. Translators: this text is displayed to the user when they request information on the command line options.
#. The text %default should not be modified or left out.
-#: rapid/rapid.py:3777
+#: rapid/rapid.py:3949
#, python-format
msgid ""
"display program information on the command line as the program runs "
@@ -383,43 +383,68 @@ msgstr ""
"исписује податке о програму у командној линији док је покренут програм "
"(подразумевано: %default)"
-#: rapid/rapid.py:3778
+#: rapid/rapid.py:3950
msgid "display debugging information when run from the command line"
msgstr ""
-"прикажи податке за тражење грешки у програму при покретању из командне линије"
+"приказује податке за тражење грешака у програму при покретању из командне "
+"линије"
-#: rapid/rapid.py:3779
+#: rapid/rapid.py:3951
msgid "only output errors to the command line"
msgstr "исписује грешке само у командној линији"
#. image file extensions are recognized RAW files plus TIFF and JPG
-#: rapid/rapid.py:3781
+#: rapid/rapid.py:3953
msgid "list photo and video file extensions the program recognizes and exit"
-msgstr "исписује екстензије подржаних слика и видеа и напушта програма"
+msgstr "исписује проширења подржаних слика и видеа и напушта програм"
+
+#: rapid/rapid.py:3955
+msgid ""
+"automatically detect devices from which to download, overwriting existing "
+"program preferences"
+msgstr ""
+"сам открива уређаје са којих ће да преузима, преписујући постојеће поставке "
+"програма"
+
+#: rapid/rapid.py:3956
+msgid ""
+"manually specify the PATH of the device from which to download, overwriting "
+"existing program preferences"
+msgstr ""
+"ручно наводи ПУТАЊУ уређаја са којих ће да преузима, преписујући постојеће "
+"поставке програма"
-#: rapid/rapid.py:3783
+#: rapid/rapid.py:3957
msgid "reset all program settings and preferences and exit"
msgstr "враћа све поставке на подразумевано и напушта програм"
-#: rapid/rapid.py:3801
+#: rapid/rapid.py:3970
+msgid ""
+"Error: specify device auto-detection or manually specify a device's path "
+"from which to download, but do not do both."
+msgstr ""
+"Грешка: наведите самооткривање уређаја или ручно наведите путању уређаја са "
+"којих вршити преузимање, али немојте оба истовремено."
+
+#: rapid/rapid.py:3991
#, python-format
msgid "and %s"
msgstr "и %s"
-#: rapid/rapid.py:3809
+#: rapid/rapid.py:3999
msgid "All settings and preferences have been reset"
msgstr "Сва подешавања су враћена на подразумеване вредности"
-#: rapid/backupfile.py:142 rapid/backupfile.py:165
+#: rapid/backupfile.py:157 rapid/backupfile.py:180
msgid "Backing up error"
-msgstr "Грешка приликом образовања резервне копије"
+msgstr "Грешка прављења резерве"
-#: rapid/backupfile.py:144
+#: rapid/backupfile.py:159
#, python-format
msgid "Destination directory could not be created: %(directory)s\n"
msgstr "Не могу да направим циљни директоријум: %(directory)s\n"
-#: rapid/backupfile.py:146 rapid/backupfile.py:167 rapid/subfolderfile.py:196
+#: rapid/backupfile.py:161 rapid/backupfile.py:182 rapid/subfolderfile.py:199
#, python-format
msgid ""
"Source: %(source)s\n"
@@ -428,13 +453,13 @@ msgstr ""
"Извор: %(source)s\n"
"Циљ: %(destination)s"
-#: rapid/backupfile.py:149 rapid/backupfile.py:169
+#: rapid/backupfile.py:164 rapid/backupfile.py:184
#, python-format
msgid "Error: %(inst)s"
msgstr "Грешка: %(inst)s"
-#: rapid/copyfiles.py:159 rapid/subfolderfile.py:211
-#: rapid/subfolderfile.py:352 rapid/subfolderfile.py:370
+#: rapid/copyfiles.py:163 rapid/subfolderfile.py:214
+#: rapid/subfolderfile.py:347 rapid/subfolderfile.py:365
#, python-format
msgid ""
"%(problem)s\n"
@@ -443,491 +468,501 @@ msgstr ""
"%(problem)s\n"
"Датотека: %(file)s"
-#: rapid/device.py:79
+#: rapid/device.py:80
msgid "Device Detected"
msgstr "Пронађен је нови уређај"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#usedeviceprompt
-#: rapid/device.py:88
+#: rapid/device.py:89
msgid ""
"Should this device or partition be used to download photos or videos from?"
-msgstr "Да ли да преузимам фотографије или видео са овог уређаја/партиције?"
+msgstr "Да ли да преузмем фотографије или видео са овог уређаја/партиције?"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#usedeviceprompt
-#: rapid/device.py:107
+#: rapid/device.py:108
msgid "_Remember this choice"
msgstr "_Запамти овај избор"
-#: rapid/downloadtracker.py:298
+#: rapid/downloadtracker.py:299
msgid "MB/s"
msgstr "MB/s"
-#: rapid/generatenameconfig.py:150
+#: rapid/generatenameconfig.py:151
msgid "Date time"
msgstr "Датум"
-#: rapid/generatenameconfig.py:151
+#: rapid/generatenameconfig.py:152
msgid "Text"
msgstr "Текст"
-#: rapid/generatenameconfig.py:152
+#: rapid/generatenameconfig.py:153
msgid "Filename"
-msgstr "Име датотеке"
+msgstr "Назив датотеке"
-#: rapid/generatenameconfig.py:153
+#: rapid/generatenameconfig.py:154
msgid "Metadata"
msgstr "Метаподаци"
-#: rapid/generatenameconfig.py:154
+#: rapid/generatenameconfig.py:155
msgid "Sequences"
msgstr "Низови"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
-#: rapid/generatenameconfig.py:156 rapid/preferencesdialog.py:574
+#: rapid/generatenameconfig.py:157 rapid/preferencesdialog.py:577
msgid "Job code"
msgstr "Код задатка"
-#: rapid/generatenameconfig.py:157
+#: rapid/generatenameconfig.py:158
msgid "Image date"
msgstr "Датум фотографије"
-#: rapid/generatenameconfig.py:158
+#: rapid/generatenameconfig.py:159
msgid "Video date"
msgstr "Датум видеа"
-#: rapid/generatenameconfig.py:159
+#: rapid/generatenameconfig.py:160
msgid "Today"
msgstr "Данас"
-#: rapid/generatenameconfig.py:160
+#: rapid/generatenameconfig.py:161
msgid "Yesterday"
msgstr "Јуче"
#. Translators: Download time is the time and date that the download started (when the user clicked the Download button)
-#: rapid/generatenameconfig.py:162
+#: rapid/generatenameconfig.py:163
msgid "Download time"
msgstr "Датум преузимања"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:164
+#: rapid/generatenameconfig.py:165
msgid "Name + extension"
msgstr "Назив + наставак"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:166
+#: rapid/generatenameconfig.py:167
msgid "Name"
msgstr "Назив"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:168
+#: rapid/generatenameconfig.py:169
msgid "Extension"
msgstr "Наставак"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:170
+#: rapid/generatenameconfig.py:171
msgid "Image number"
msgstr "Број слике"
-#: rapid/generatenameconfig.py:171
+#: rapid/generatenameconfig.py:172
msgid "Video number"
msgstr "Број видеа"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:173
+#: rapid/generatenameconfig.py:174
msgid "Aperture"
msgstr "Отвор бленде"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:175
+#: rapid/generatenameconfig.py:176
msgid "ISO"
msgstr "ИСО"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:177
+#: rapid/generatenameconfig.py:178
msgid "Exposure time"
-msgstr "Време експозиције"
+msgstr "Време излагања"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:179
+#: rapid/generatenameconfig.py:180
msgid "Focal length"
msgstr "Жижна даљина"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:181
+#: rapid/generatenameconfig.py:182
msgid "Camera make"
-msgstr "Произвођач фотоапарата"
+msgstr "Произвођач фото-апарата"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:183
+#: rapid/generatenameconfig.py:184
msgid "Camera model"
-msgstr "Модел фотоапарата"
+msgstr "Модел фото-апарата"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:185
+#: rapid/generatenameconfig.py:186
msgid "Short camera model"
-msgstr "Скраћени назив фотоапарата"
+msgstr "Скраћени назив фото-апарата"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:187
+#: rapid/generatenameconfig.py:188
msgid "Hyphenated short camera model"
-msgstr "Дужи назив фотоапарата"
+msgstr "Дужи назив фото-апарата"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:189
+#: rapid/generatenameconfig.py:190
msgid "Serial number"
msgstr "Серијски број"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:191
+#: rapid/generatenameconfig.py:192
msgid "Shutter count"
msgstr "Број окидања"
#. File number currently refers to the Exif value Exif.Canon.FileNumber
-#: rapid/generatenameconfig.py:193
+#: rapid/generatenameconfig.py:194
msgid "File number"
msgstr "Број датотеке"
#. Only the folder component of the Exif.Canon.FileNumber value
-#: rapid/generatenameconfig.py:195
+#: rapid/generatenameconfig.py:196
msgid "Folder only"
msgstr "Само фасцикла"
#. The folder and file component of the Exif.Canon.FileNumber value
-#: rapid/generatenameconfig.py:197
+#: rapid/generatenameconfig.py:198
msgid "Folder and file"
msgstr "Фасцикла и датотека"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:199
+#: rapid/generatenameconfig.py:200
msgid "Owner name"
msgstr "Име власника"
-#: rapid/generatenameconfig.py:200
+#: rapid/generatenameconfig.py:201
msgid "Codec"
msgstr "Кодек"
-#: rapid/generatenameconfig.py:201
+#: rapid/generatenameconfig.py:202
msgid "Width"
msgstr "Ширина"
-#: rapid/generatenameconfig.py:202
+#: rapid/generatenameconfig.py:203
msgid "Height"
msgstr "Висина"
-#: rapid/generatenameconfig.py:203
+#: rapid/generatenameconfig.py:204
msgid "Length"
msgstr "Дужина"
-#: rapid/generatenameconfig.py:204
+#: rapid/generatenameconfig.py:205
msgid "Frames Per Second"
msgstr "Кадрова у секунди"
-#: rapid/generatenameconfig.py:205
+#: rapid/generatenameconfig.py:206
msgid "Artist"
msgstr "Аутор"
-#: rapid/generatenameconfig.py:206
+#: rapid/generatenameconfig.py:207
msgid "Copyright"
msgstr "Ауторска права"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
-#: rapid/generatenameconfig.py:208
+#: rapid/generatenameconfig.py:209
msgid "Downloads today"
msgstr "Данашња преузимања"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
-#: rapid/generatenameconfig.py:210
+#: rapid/generatenameconfig.py:211
msgid "Session number"
msgstr "Број сесије"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
-#: rapid/generatenameconfig.py:212
+#: rapid/generatenameconfig.py:213
msgid "Subfolder number"
msgstr "Број подфасцикле"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
-#: rapid/generatenameconfig.py:214
+#: rapid/generatenameconfig.py:215
msgid "Stored number"
msgstr "Сачувани број"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequenceletters
-#: rapid/generatenameconfig.py:216
+#: rapid/generatenameconfig.py:217
msgid "Sequence letter"
msgstr "Низ слова"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:218
+#: rapid/generatenameconfig.py:219
msgid "All digits"
msgstr "Све цифре"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:220
+#: rapid/generatenameconfig.py:221
msgid "Last digit"
msgstr "Последње цифре"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:222
+#: rapid/generatenameconfig.py:223
msgid "Last 2 digits"
msgstr "Последње две цифре"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:224
+#: rapid/generatenameconfig.py:225
msgid "Last 3 digits"
msgstr "Последње три цифре"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:226
+#: rapid/generatenameconfig.py:227
msgid "Last 4 digits"
msgstr "Последње четири цифре"
#. Translators: please not the capitalization of this text, and keep it the same if your language features capitalization
-#: rapid/generatenameconfig.py:228
+#: rapid/generatenameconfig.py:229
msgid "Original Case"
msgstr "Оригинална величина слова"
#. Translators: please not the capitalization of this text, and keep it the same if your language features capitalization
-#: rapid/generatenameconfig.py:230
+#: rapid/generatenameconfig.py:231
msgid "UPPERCASE"
msgstr "ВЕЛИКА СЛОВА"
#. Translators: please not the capitalization of this text, and keep it the same if your language features capitalization
-#: rapid/generatenameconfig.py:232
+#: rapid/generatenameconfig.py:233
msgid "lowercase"
msgstr "мала слова"
-#: rapid/generatenameconfig.py:233
+#: rapid/generatenameconfig.py:234
msgid "One digit"
msgstr "Једна цифра"
-#: rapid/generatenameconfig.py:234
+#: rapid/generatenameconfig.py:235
msgid "Two digits"
msgstr "Две цифре"
-#: rapid/generatenameconfig.py:235
+#: rapid/generatenameconfig.py:236
msgid "Three digits"
msgstr "Три цифре"
-#: rapid/generatenameconfig.py:236
+#: rapid/generatenameconfig.py:237
msgid "Four digits"
msgstr "Четири цифре"
-#: rapid/generatenameconfig.py:237
+#: rapid/generatenameconfig.py:238
msgid "Five digits"
msgstr "Пет цифре"
-#: rapid/generatenameconfig.py:238
+#: rapid/generatenameconfig.py:239
msgid "Six digits"
msgstr "Шест цифре"
-#: rapid/generatenameconfig.py:239
+#: rapid/generatenameconfig.py:240
msgid "Seven digits"
msgstr "Седам цифара"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:241
+#: rapid/generatenameconfig.py:242
msgid "Subseconds"
msgstr "Стотинке"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:243
+#: rapid/generatenameconfig.py:244
msgid "YYYYMMDD"
msgstr "ГГГГММДД"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:245
+#: rapid/generatenameconfig.py:246
msgid "YYYY-MM-DD"
msgstr "ГГГГ-ММ-ДД"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:247
+#: rapid/generatenameconfig.py:248
msgid "YYMMDD"
msgstr "ГГММДД"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:249
+#: rapid/generatenameconfig.py:250
msgid "YY-MM-DD"
msgstr "ГГ-ММ-ДД"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:251
+#: rapid/generatenameconfig.py:252
msgid "MMDDYYYY"
msgstr "ММДДГГГГ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:253
+#: rapid/generatenameconfig.py:254
msgid "MMDDYY"
msgstr "ММДДГГ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:255
+#: rapid/generatenameconfig.py:256
msgid "MMDD"
msgstr "ММДД"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:257
+#: rapid/generatenameconfig.py:258
msgid "DDMMYYYY"
msgstr "ДДММГГГГ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:259
+#: rapid/generatenameconfig.py:260
msgid "DDMMYY"
msgstr "ДДММГГ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:261
+#: rapid/generatenameconfig.py:262
msgid "YYYY"
msgstr "ГГГГ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:263
+#: rapid/generatenameconfig.py:264
msgid "YY"
msgstr "ГГ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:265
+#: rapid/generatenameconfig.py:266
msgid "MM"
msgstr "ММ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:267
+#: rapid/generatenameconfig.py:268
msgid "DD"
msgstr "ДД"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:269
+#: rapid/generatenameconfig.py:270
+msgid "Month (full)"
+msgstr "Месец (пун)"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:272
+msgid "Month (abbreviated)"
+msgstr "Месец (скраћен)"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:274
msgid "HHMMSS"
msgstr "ЧЧММСС"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:271
+#: rapid/generatenameconfig.py:276
msgid "HHMM"
msgstr "ЧЧММ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:273
+#: rapid/generatenameconfig.py:278
msgid "HH-MM-SS"
msgstr "ЧЧ-ММ-СС"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:275
+#: rapid/generatenameconfig.py:280
msgid "HH-MM"
msgstr "ЧЧ-ММ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:277
+#: rapid/generatenameconfig.py:282
msgid "HH"
msgstr "ЧЧ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:279
+#: rapid/generatenameconfig.py:284
msgid "MM (minutes)"
msgstr "ММ (минута)"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:281
+#: rapid/generatenameconfig.py:286
msgid "SS"
msgstr "СС"
-#: rapid/preferencesdialog.py:371
+#: rapid/preferencesdialog.py:374
#, python-format
msgid "Subfolder preferences should not start with a %s"
msgstr "Подешавања подфасцикле не треба да почиње са %s"
-#: rapid/preferencesdialog.py:373
+#: rapid/preferencesdialog.py:376
#, python-format
msgid "Subfolder preferences should not end with a %s"
msgstr "Подешавања подфасцикле не треба да се завршава са %s"
-#: rapid/preferencesdialog.py:377
+#: rapid/preferencesdialog.py:380
#, python-format
msgid "Subfolder preferences should not contain two %s one after the other"
msgstr "Подешавања подфасцикле не треба да садржи два %s један за другим"
-#: rapid/preferencesdialog.py:436 rapid/preferencesdialog.py:697
+#: rapid/preferencesdialog.py:439 rapid/preferencesdialog.py:700
msgid "Remove all Job Codes?"
msgstr "Да уклоним све кодове задатка?"
-#: rapid/preferencesdialog.py:437 rapid/preferencesdialog.py:714
+#: rapid/preferencesdialog.py:440 rapid/preferencesdialog.py:717
msgid "Should all Job Codes be removed?"
msgstr "Да ли да уклоним све кодове задатка?"
-#: rapid/preferencesdialog.py:443
+#: rapid/preferencesdialog.py:446
msgid "Remove all Remembered Paths?"
msgstr "Да уклоним све запамћене путање?"
-#: rapid/preferencesdialog.py:444
+#: rapid/preferencesdialog.py:447
msgid "Should all remembered paths be removed?"
msgstr "Да ли да уклоним све запамћене путање?"
-#: rapid/preferencesdialog.py:450
+#: rapid/preferencesdialog.py:453
msgid "Remove all Ignored Paths?"
msgstr "Да уклоним све занемарене путање?"
-#: rapid/preferencesdialog.py:451
+#: rapid/preferencesdialog.py:454
msgid "Should all ignored paths be removed?"
msgstr "Да ли да уклоним све занемарене путање?"
-#: rapid/preferencesdialog.py:462
+#: rapid/preferencesdialog.py:465
msgid "Error in Photo Rename preferences"
msgstr "Грешка у поставкама за преименовање фотографија"
-#: rapid/preferencesdialog.py:642
+#: rapid/preferencesdialog.py:645
msgid "Error in Video Rename preferences"
msgstr "Грешка у поставкама за преименовање видеа"
-#: rapid/preferencesdialog.py:663
+#: rapid/preferencesdialog.py:666
msgid "Error in Photo Download Subfolders preferences"
-msgstr "Грешка у поставкама субфасцикли за преузете фотографије"
+msgstr "Грешка у поставкама подфасцикли за преузете фотографије"
-#: rapid/preferencesdialog.py:680
+#: rapid/preferencesdialog.py:683
msgid "Error in Video Download Subfolders preferences"
-msgstr "Грешка у поставкама субфасцикли за преузет видео"
+msgstr "Грешка у поставкама подфасцикли за преузет видео"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
-#: rapid/preferencesdialog.py:739
+#: rapid/preferencesdialog.py:742
msgid "Enter a Job Code"
msgstr "Унесите код задатка"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
-#: rapid/preferencesdialog.py:755
+#: rapid/preferencesdialog.py:758
msgid "Enter a new Job Code, or select a previous one"
msgstr "Упишите код задатка или изаберите неки претходни"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
-#: rapid/preferencesdialog.py:758
+#: rapid/preferencesdialog.py:761
msgid "Enter a new Job Code"
msgstr "Упишите нови код задатка"
-#: rapid/preferencesdialog.py:763
+#: rapid/preferencesdialog.py:766
msgid "Job Code:"
msgstr "Код задатка:"
-#: rapid/preferencesdialog.py:819
+#: rapid/preferencesdialog.py:822
msgid "Enter a Path to Ignore"
msgstr "Унесите путање за занемаривање"
-#: rapid/preferencesdialog.py:831
+#: rapid/preferencesdialog.py:834
msgid "Specify a path that will never be scanned for photos or videos"
msgstr "Одредите путање са којих никада не желите да преузмете слике и видео"
-#: rapid/preferencesdialog.py:836
+#: rapid/preferencesdialog.py:839
msgid "Path:"
msgstr "Путања:"
-#: rapid/preferencesdialog.py:1079
+#: rapid/preferencesdialog.py:1082
msgid "Job Code"
msgstr "Код задатка"
-#: rapid/preferencesdialog.py:1350
+#: rapid/preferencesdialog.py:1353
msgid "Select a folder in which to backup photos"
msgstr "Изаберите фасциклу за резерве фотографија"
-#: rapid/preferencesdialog.py:1363
+#: rapid/preferencesdialog.py:1366
msgid "Select a folder in which to backup videos"
msgstr "Изаберите фасциклу за резерву видеа"
#. Translators: please do not modify or leave out html formatting tags like <i> and <b>. These are used to format the text the users sees
-#: rapid/preferencesdialog.py:1458
+#: rapid/preferencesdialog.py:1461
msgid ""
"<i><b>Warning:</b> There is insufficient metadata to fully generate the "
"name. Please use other renaming options.</i>"
@@ -935,7 +970,7 @@ msgstr ""
"<i><b>Упозорење:</b> Нема довољно метаподатака за образовање пуног имена. "
"Искористите друге опције за преименовање.</i>"
-#: rapid/preferencesdialog.py:1509
+#: rapid/preferencesdialog.py:1512
msgid ""
"<i><b>Warning:</b> There is insufficient metadata to fully generate "
"subfolders. Please use other subfolder naming options.</i>"
@@ -944,13 +979,13 @@ msgstr ""
"Искористите другу опцију за именовање фасцикли.</i>"
#. Translators: you should not modify or leave out the %s. This is a code used by the programming language python to insert a value that thes user will see
-#: rapid/preferencesdialog.py:1512
+#: rapid/preferencesdialog.py:1515
#, python-format
msgid "<i>Example: %s</i>"
msgstr "<i>Пример: %s</i>"
#. Preferences list is now empty
-#: rapid/preferencesdialog.py:1602
+#: rapid/preferencesdialog.py:1605
#, python-format
msgid ""
"The %(filetype)s subfolder preferences entered are invalid and cannot be "
@@ -961,7 +996,7 @@ msgstr ""
"коришћене.\n"
"Враћам поставке на подразумеване вредности."
-#: rapid/preferencesdialog.py:1747
+#: rapid/preferencesdialog.py:1750
#, python-format
msgid ""
"The following regular expressions are invalid, and will be removed unless "
@@ -971,7 +1006,7 @@ msgstr ""
"Следећи изрази су неисправни и биће уклоњени уколико их не поправите:\n"
" %s"
-#: rapid/preferencesdialog.py:1749
+#: rapid/preferencesdialog.py:1752
#, python-format
msgid ""
"This regular expression is invalid, and will be removed unless you correct "
@@ -981,142 +1016,142 @@ msgstr ""
"Следећи израз је неисправан и биће уклоњен уколико га не поправите:\n"
" %s"
-#: rapid/preferencesdialog.py:1750
+#: rapid/preferencesdialog.py:1753
msgid "Invalid regular expression"
msgstr "Неисправан регуларни израз"
#. Translators: this value is used as an example device when automatic backup device detection is enabled. You should translate this.
-#: rapid/preferencesdialog.py:1931
+#: rapid/preferencesdialog.py:1934
msgid "externaldrive1"
msgstr "СпољниУређај1"
#. Translators: this value is used as an example device when automatic backup device detection is enabled. You should translate this.
-#: rapid/preferencesdialog.py:1933
+#: rapid/preferencesdialog.py:1936
msgid "externaldrive2"
msgstr "СпољниУређај2"
-#: rapid/prefsrapid.py:126
+#: rapid/prefsrapid.py:127
msgid "New York"
msgstr "Београд"
-#: rapid/prefsrapid.py:127
+#: rapid/prefsrapid.py:128
msgid "Manila"
msgstr "Софија"
-#: rapid/prefsrapid.py:127
+#: rapid/prefsrapid.py:128
msgid "Prague"
msgstr "Праг"
-#: rapid/prefsrapid.py:127
+#: rapid/prefsrapid.py:128
msgid "Helsinki"
msgstr "Зајечар"
-#: rapid/prefsrapid.py:127
+#: rapid/prefsrapid.py:128
msgid "Wellington"
msgstr "Нови Сад"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Tehran"
msgstr "Техеран"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Kampala"
msgstr "Будва"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Paris"
msgstr "Париз"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Berlin"
msgstr "Берлин"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Sydney"
msgstr "Сиднеј"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Budapest"
msgstr "Будимпешта"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Rome"
msgstr "Рим"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Moscow"
msgstr "Москва"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Delhi"
msgstr "Делфи"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Warsaw"
msgstr "Варшава"
-#: rapid/prefsrapid.py:130
+#: rapid/prefsrapid.py:131
msgid "Jakarta"
msgstr "Амазон"
-#: rapid/prefsrapid.py:130
+#: rapid/prefsrapid.py:131
msgid "Madrid"
msgstr "Мадрид"
-#: rapid/prefsrapid.py:130
+#: rapid/prefsrapid.py:131
msgid "Stockholm"
msgstr "Истамбул"
#. components
-#: rapid/problemnotification.py:26 rapid/subfolderfile.py:363
+#: rapid/problemnotification.py:27 rapid/subfolderfile.py:358
msgid "subfolder"
msgstr "подфасцикла"
-#: rapid/problemnotification.py:27 rapid/subfolderfile.py:361
+#: rapid/problemnotification.py:28 rapid/subfolderfile.py:356
msgid "filename"
-msgstr "име датотеке"
+msgstr "назив датотеке"
-#: rapid/problemnotification.py:80
+#: rapid/problemnotification.py:81
#, python-format
msgid "Date time value %s appears invalid."
msgstr "Вредности за датум и време %s су неисправне."
-#: rapid/problemnotification.py:81
+#: rapid/problemnotification.py:82
msgid "Filename does not have an extension."
-msgstr "Име датотеке не садржи екстензију."
+msgstr "Назив датотеке не садржи проширење."
#. a number component is something like the 8346 in IMG_8346.JPG
-#: rapid/problemnotification.py:83
+#: rapid/problemnotification.py:84
msgid "Filename does not have a number component."
-msgstr "Име датотеке нема секвенцу бројева."
+msgstr "Назив датотеке нема секвенцу бројева."
-#: rapid/problemnotification.py:84
+#: rapid/problemnotification.py:85
#, python-format
msgid "Error generating component %s."
msgstr "Не могу да образујем део имена за %s."
#. a generic problem
-#: rapid/problemnotification.py:86
+#: rapid/problemnotification.py:87
#, python-format
msgid "%(filetype)s metadata cannot be read"
msgstr "Не могу да читам %(filetype)s метаподатке"
-#: rapid/problemnotification.py:88
+#: rapid/problemnotification.py:89
#, python-format
msgid "%(filetype)s %(area)s could not be generated"
msgstr "Не могу да образујем %(filetype)s %(area)s"
-#: rapid/problemnotification.py:90 rapid/problemnotification.py:91
+#: rapid/problemnotification.py:91 rapid/problemnotification.py:92
#, python-format
msgid "An error occurred when copying the %(filetype)s"
-msgstr "Грешка приликом копирања %(filetype)s"
+msgstr "Грешка приликом умножавања %(filetype)s"
-#: rapid/problemnotification.py:93 rapid/problemnotification.py:94
+#: rapid/problemnotification.py:94 rapid/problemnotification.py:95
#, python-format
msgid "%(filetype)s already exists"
msgstr "Већ постоји %(filetype)s"
-#: rapid/problemnotification.py:97
+#: rapid/problemnotification.py:98
#, python-format
msgid ""
"%(filetype)s could not be backed up because no suitable backup locations "
@@ -1125,7 +1160,7 @@ msgstr ""
"Не могу да направим резерву %(filetype)s датотека јер није нађена "
"одговарајућа локација."
-#: rapid/problemnotification.py:102
+#: rapid/problemnotification.py:103
#, python-format
msgid ""
"%(image1)s was taken on %(image1_date)s at %(image1_time)s, and %(image2)s "
@@ -1134,556 +1169,521 @@ msgstr ""
"%(image1)s је сликана %(image1_date)s у %(image1_time)s, а %(image2)s "
"%(image2_date)s у %(image2_time)s."
-#: rapid/problemnotification.py:103
+#: rapid/problemnotification.py:104
#, python-format
msgid "%(filetype)s was already downloaded"
msgstr "%(filetype)s је већ преузет"
-#: rapid/problemnotification.py:107
+#: rapid/problemnotification.py:108
#, python-format
msgid ""
"The existing %(filetype)s was last modified on %(date)s at %(time)s. Unique "
"identifier '%(identifier)s' added."
msgstr ""
"Постојећи %(filetype)s је измењен %(date)s у %(time)s. Додата је јединствена "
-"реч '%(identifier)s'."
+"реч „%(identifier)s“."
-#: rapid/problemnotification.py:108
+#: rapid/problemnotification.py:109
#, python-format
msgid "The existing %(filetype)s was last modified on %(date)s at %(time)s."
msgstr "Постојећи %(filetype)s је измењен %(date)s у %(time)s."
-#: rapid/problemnotification.py:109
+#: rapid/problemnotification.py:110
#, python-format
msgid "There is no data with which to name the %(filetype)s."
msgstr "Не постоје подаци за именовање %(filetype)s."
-#: rapid/problemnotification.py:111
+#: rapid/problemnotification.py:112
#, python-format
msgid "Error: %(errorno)s %(strerror)s"
msgstr "Грешка: %(errorno)s %(strerror)s"
-#: rapid/problemnotification.py:201
+#: rapid/problemnotification.py:202
msgid "The metadata might be corrupt."
msgstr "Метаподаци су можда неисправни."
-#: rapid/problemnotification.py:204
+#: rapid/problemnotification.py:205
msgid ""
"The filename, extension and Exif information indicate it has already been "
"downloaded."
msgstr ""
-"Име датотеке, екстензија и Exif подаци указују да је датотека већ преузета."
+"Назив датотеке, проширење и Ексиф подаци указују да је датотека већ преузета."
-#: rapid/problemnotification.py:223
+#: rapid/problemnotification.py:224
#, python-format
msgid " It was backed up to %(volume)s"
-msgstr " Резервна копија је смешрена на %(volume)s"
+msgstr " Резерва је смештена на %(volume)s"
-#: rapid/problemnotification.py:225
+#: rapid/problemnotification.py:226
msgid " It was backed up to these devices: "
-msgstr " Резервна копија је смештена на следеће уређаје: "
+msgstr " Резерва је смештена на следеће уређаје: "
-#: rapid/problemnotification.py:227 rapid/problemnotification.py:288
-#: rapid/problemnotification.py:300
+#: rapid/problemnotification.py:228 rapid/problemnotification.py:289
+#: rapid/problemnotification.py:301
#, python-format
msgid "%s, "
msgstr "%s, "
-#: rapid/problemnotification.py:228 rapid/problemnotification.py:289
-#: rapid/problemnotification.py:301
+#: rapid/problemnotification.py:229 rapid/problemnotification.py:290
+#: rapid/problemnotification.py:302
#, python-format
msgid "%(volumes)s and %(final_volume)s."
msgstr "%(volumes)s и %(final_volume)s."
-#: rapid/problemnotification.py:240
+#: rapid/problemnotification.py:241
#, python-format
msgid ""
"Photos detected with the same filenames, but taken at different times: "
"%(details)s"
msgstr ""
-"Нађене су фотографије са истим именом датотека, али сликане у различито "
+"Нађене су фотографије са истим називом датотека, али сликане у различито "
"време: %(details)s"
-#: rapid/problemnotification.py:257
+#: rapid/problemnotification.py:258
#, python-format
msgid "An error occurred when backing up on %(volume)s: %(inst)s."
-msgstr "Грешка приликом прављења резервне копије на %(volume)s: %(inst)s."
+msgstr "Грешка приликом прављења резерве на %(volume)s: %(inst)s."
-#: rapid/problemnotification.py:259
+#: rapid/problemnotification.py:260
#, python-format
msgid "An error occurred when backing up on %(volume)s."
-msgstr "Грешка приликом прављења резервне копије на %(volume)s."
+msgstr "Грешка приликом прављења резерве на %(volume)s."
-#: rapid/problemnotification.py:261
+#: rapid/problemnotification.py:262
msgid "Errors occurred when backing up on the following backup devices: "
-msgstr "Грешка приликом прављења резервне копије на следећим уређајима: "
+msgstr "Грешка приликом прављења резерве на следећим уређајима: "
-#: rapid/problemnotification.py:265 rapid/problemnotification.py:313
+#: rapid/problemnotification.py:266 rapid/problemnotification.py:314
#, python-format
msgid "%(volume)s (%(inst)s), "
msgstr "%(volume)s (%(inst)s), "
-#: rapid/problemnotification.py:267
+#: rapid/problemnotification.py:268
#, python-format
msgid "%(volume)s, "
msgstr "%(volume)s, "
-#: rapid/problemnotification.py:271 rapid/problemnotification.py:315
+#: rapid/problemnotification.py:272 rapid/problemnotification.py:316
#, python-format
msgid "%(volumes)s and %(volume)s (%(inst)s)."
msgstr "%(volumes)s и %(volume)s (%(inst)s)."
-#: rapid/problemnotification.py:276
+#: rapid/problemnotification.py:277
#, python-format
msgid "%(volumes)s and %(volume)s."
msgstr "%(volumes)s и %(volume)s."
-#: rapid/problemnotification.py:284
+#: rapid/problemnotification.py:285
#, python-format
msgid "Backup already exists on %(volume)s."
-msgstr "Већ постоји резервна копија на %(volume)s."
+msgstr "Већ постоји резерва на %(volume)s."
-#: rapid/problemnotification.py:286
+#: rapid/problemnotification.py:287
msgid "Backups already exist in these locations: "
-msgstr "Већ постоји резервна копија на овим местима: "
+msgstr "Већ постоји резерва на овим местима: "
-#: rapid/problemnotification.py:296
+#: rapid/problemnotification.py:297
#, python-format
msgid "Backup overwritten on %(volume)s."
-msgstr "Резервна копија је преписана на %(volume)s."
+msgstr "Резерва је преписана на %(volume)s."
-#: rapid/problemnotification.py:298
+#: rapid/problemnotification.py:299
msgid "Backups overwritten on these devices: "
-msgstr "Резервна копија је преписана на овим уређајима: "
+msgstr "Резерва је преписана на овим уређајима: "
-#: rapid/problemnotification.py:309
+#: rapid/problemnotification.py:310
#, python-format
msgid "An error occurred when creating directories on %(volume)s: %(inst)s."
msgstr "Грешка при образовању директоријума на %(volume)s: %(inst)s."
-#: rapid/problemnotification.py:311
+#: rapid/problemnotification.py:312
msgid ""
"Errors occurred when creating directories on the following backup devices: "
-msgstr ": Грешка при образовању директоријума на следећим уређајима: "
+msgstr "Грешка при образовању директоријума на следећим уређајима: "
-#: rapid/problemnotification.py:322
+#: rapid/problemnotification.py:323
#, python-format
msgid "%(previousproblem)s Additionally, %(newproblem)s"
msgstr "%(previousproblem)s Додатно, %(newproblem)s"
-#: rapid/problemnotification.py:330
+#: rapid/problemnotification.py:331
#, python-format
msgid " Furthermore, there were %(problems)s."
msgstr " Такође, дошло је и до %(problems)s."
-#: rapid/problemnotification.py:332
+#: rapid/problemnotification.py:333
#, python-format
msgid " Furthermore, there was a %(problem)s."
msgstr " Такође, дошло је и до %(problem)s."
-#: rapid/problemnotification.py:341
+#: rapid/problemnotification.py:342
#, python-format
msgid "The %(type)s metadata is missing."
msgstr "Недостају %(type)s метаподаци."
-#: rapid/problemnotification.py:343
+#: rapid/problemnotification.py:344
msgid "The following metadata is missing: "
msgstr "Недостају следећи метаподаци: "
-#: rapid/problemnotification.py:346
+#: rapid/problemnotification.py:347
#, python-format
msgid "%(missing_metadata_elements)s and %(final_missing_metadata_element)s."
msgstr "%(missing_metadata_elements)s и %(final_missing_metadata_element)s."
-#: rapid/problemnotification.py:363
+#: rapid/problemnotification.py:364
msgid "Problems in subfolder and filename generation"
-msgstr "Проблеми при образовању подфасцикли и имена датотека"
+msgstr "Проблеми при образовању подфасцикли и назива датотека"
-#: rapid/problemnotification.py:365
+#: rapid/problemnotification.py:366
msgid "Problem in subfolder and filename generation"
-msgstr "Проблем при образовању подфасцикли и имена датотека"
+msgstr "Проблем при образовању подфасцикли и назива датотека"
-#: rapid/problemnotification.py:368
+#: rapid/problemnotification.py:369
#, python-format
msgid "Problems in %s generation"
msgstr "Проблеми при образовању %s"
-#: rapid/problemnotification.py:370
+#: rapid/problemnotification.py:371
#, python-format
msgid "Problem in %s generation"
msgstr "Проблем при образовању %s"
-#: rapid/problemnotification.py:379
+#: rapid/problemnotification.py:380
#, python-format
msgid "%(filetype)s already exists, but it was backed up"
-msgstr "Већ постоји %(filetype)s, али је направљена резервна копија"
+msgstr "Већ постоји %(filetype)s, али је направљена резерва"
-#: rapid/problemnotification.py:381
+#: rapid/problemnotification.py:382
#, python-format
msgid "An error occurred when copying the %(filetype)s, but it was backed up"
msgstr ""
-"Дошло је до грешке приликом копирања %(filetype)s, али је направљена "
-"резервна копија"
+"Дошло је до грешке приликом умножавања %(filetype)s, али је направљена "
+"резерва"
-#: rapid/problemnotification.py:401
+#: rapid/problemnotification.py:402
msgid "Multiple problems were encountered"
-msgstr "Јавило се више грешака"
+msgstr "Дошло је до више грешака"
-#: rapid/problemnotification.py:403 rapid/subfolderfile.py:230
+#: rapid/problemnotification.py:404 rapid/subfolderfile.py:233
msgid "Photos detected with the same filenames, but taken at different times"
msgstr ""
"Нађене су фотографије са истим именом, које су сликане у различито време"
-#: rapid/problemnotification.py:409
+#: rapid/problemnotification.py:410
msgid "there were errors backing up"
-msgstr "дошло је до грешки приликом образовања резервне копије"
+msgstr "дошло је до грешака при прављењу резерве"
-#: rapid/problemnotification.py:410
+#: rapid/problemnotification.py:411
msgid "There were errors backing up"
-msgstr "Дошло је до грешки приликом образовања резервне копије"
+msgstr "Дошло је до грешака при прављењу резерве"
-#: rapid/problemnotification.py:412
+#: rapid/problemnotification.py:413
msgid "there was an error backing up"
-msgstr "грешка при образовању резервне копије"
+msgstr "дошло је до грешке при прављењу резерве"
-#: rapid/problemnotification.py:413
+#: rapid/problemnotification.py:414
msgid "There was an error backing up"
-msgstr "Грешка при образовању резервне копије"
+msgstr "Дошло је до грешке при прављењу резерве"
#. e.g.
-#: rapid/problemnotification.py:416
+#: rapid/problemnotification.py:417
#, python-format
msgid "%(previousproblem)s, and %(backinguperror)s"
msgstr "%(previousproblem)s, и %(backinguperror)s"
-#: rapid/rpdfile.py:139
+#: rapid/rpdfile.py:153
#, python-format
msgid "%(number)s %(filetypes)s"
msgstr "%(number)s %(filetypes)s"
-#: rapid/subfolderfile.py:79
+#: rapid/rpdfile.py:163
+#, python-format
+msgid "scanning (found %(photos)s photos and %(videos)s videos)..."
+msgstr "прегледам (нађох %(photos)s фотографија и %(videos)s видеа)..."
+
+#: rapid/subfolderfile.py:80
#, python-format
msgid "%(hour)s:%(minute)s:%(second)s:%(subsecond)s"
msgstr "%(hour)s:%(minute)s:%(second)s:%(subsecond)s"
-#: rapid/subfolderfile.py:300
+#: rapid/subfolderfile.py:301
msgid "Photo has already been downloaded"
msgstr "Фотографије су већ преузете"
-#: rapid/subfolderfile.py:301
+#: rapid/subfolderfile.py:302
#, python-format
msgid "Source: %(source)s"
msgstr "Извор: %(source)s"
-#: rapid/subfolderfile.py:359
+#: rapid/subfolderfile.py:354
msgid "subfolder and filename"
-msgstr "подфасцикла и име датотеке"
+msgstr "подфасцикла и назив датотеке"
-#: rapid/subfolderfile.py:397
+#: rapid/subfolderfile.py:393
msgid "Failed to create download subfolder"
msgstr "Не могу да направим подфасциклу за преузимање"
-#: rapid/subfolderfile.py:398
+#: rapid/subfolderfile.py:394
#, python-format
msgid "Path: %s"
msgstr "Путања: %s"
-#: rapid/glade3/rapid.ui.h:1
-msgid "About..."
-msgstr "О програму..."
-
#: rapid/glade3/rapid.ui.h:2
-msgid "Check All"
-msgstr "Изабери све"
+msgid "_File"
+msgstr "_Датотека"
#: rapid/glade3/rapid.ui.h:3
-msgid "Check All Photos"
-msgstr "Изабери све фотографије"
+msgid "Download / Pause"
+msgstr "Преузми / Паузирај"
#: rapid/glade3/rapid.ui.h:4
-msgid "Check All Videos"
-msgstr "Изабери сав видео"
+msgid "_Select"
+msgstr "_Изабери"
+
+#: rapid/glade3/rapid.ui.h:5
+msgid "Select All Without _Job Code"
+msgstr "Изабери све без к_ода задатка"
#: rapid/glade3/rapid.ui.h:6
-msgid "Download / Pause"
-msgstr "Преузми / Паузирај"
+msgid "Select All Wit_h Job Code"
+msgstr "Изабери све са _кодом задатка"
#: rapid/glade3/rapid.ui.h:7
-msgid "Get Help Online..."
-msgstr "Потражите помоћ на мрежи..."
+msgid "_View"
+msgstr "П_реглед"
#: rapid/glade3/rapid.ui.h:8
-msgid "Help"
-msgstr "Помоћ"
+msgid "_Error Log"
+msgstr "Списак са _грешкама"
#: rapid/glade3/rapid.ui.h:9
-msgid "Make a Donation..."
-msgstr "Дајте донацију..."
+msgid "_Clear Completed Downloads"
+msgstr "_Очисти завршена преузимања"
#: rapid/glade3/rapid.ui.h:10
-msgid "Next File"
-msgstr "Следећа датотека"
+msgid "Previous File"
+msgstr "Претходна датотека"
#: rapid/glade3/rapid.ui.h:11
-msgid "Preferences"
-msgstr "Поставке"
+msgid "Next File"
+msgstr "Следећа датотека"
#: rapid/glade3/rapid.ui.h:12
-msgid "Previous File"
-msgstr "Претходна датотека"
+msgid "_Help"
+msgstr "_Помоћ"
#: rapid/glade3/rapid.ui.h:13
-msgid "Quit"
-msgstr "Изађи"
+msgid "_Make a Donation..."
+msgstr "_Приложите неки динар..."
+
+#: rapid/glade3/rapid.ui.h:14
+msgid "_Translate this Application..."
+msgstr "_Преведите овај програм..."
#: rapid/glade3/rapid.ui.h:15
-msgid "Refresh"
-msgstr "Освежи"
+msgid "_Check All"
+msgstr "Изабери _све"
#: rapid/glade3/rapid.ui.h:16
-msgid "Report a Problem..."
-msgstr "Пријавите проблем..."
+msgid "_Uncheck All"
+msgstr "_Поништи сав избор"
#: rapid/glade3/rapid.ui.h:17
-msgid "Select All Wit_h Job Code"
-msgstr "Изабери све са _кодом задатка"
+msgid "_Include in download"
+msgstr "_Укључи у преузето"
#: rapid/glade3/rapid.ui.h:18
-msgid "Select All Without _Job Code"
-msgstr "Изабери све без к_ода задатка"
-
-#: rapid/glade3/rapid.ui.h:19
-msgid "Translate this Application..."
-msgstr "Преведите овај програм..."
-
-#: rapid/glade3/rapid.ui.h:20
-msgid "Uncheck All"
-msgstr "Поништи сав избор"
-
-#: rapid/glade3/rapid.ui.h:21
-msgid "_Check All"
-msgstr "И_забери све"
-
-#: rapid/glade3/rapid.ui.h:22
-msgid "_Clear Completed Downloads"
-msgstr "_Очисти завршена преузимања"
-
-#: rapid/glade3/rapid.ui.h:23
msgid "_Download"
msgstr "_Преузми"
-#: rapid/glade3/rapid.ui.h:24
-msgid "_Error Log"
-msgstr "Списак са _грешкама"
-
-#: rapid/glade3/rapid.ui.h:25
-msgid "_File"
-msgstr "_Датотека"
-
-#: rapid/glade3/rapid.ui.h:26
-msgid "_Help"
-msgstr "_Помоћ"
-
-#: rapid/glade3/rapid.ui.h:27
-msgid "_Include in download"
-msgstr "_Укључи у преузето"
-
-#: rapid/glade3/rapid.ui.h:28
-msgid "_Make a Donation..."
-msgstr "_Новчани прилог пројекту"
-
-#: rapid/glade3/rapid.ui.h:29
-msgid "_Select"
-msgstr "_Изабери"
-
-#: rapid/glade3/rapid.ui.h:30
-msgid "_Translate this Application..."
-msgstr "Помоћ у _локализацији"
-
-#: rapid/glade3/rapid.ui.h:31
-msgid "_Uncheck All"
-msgstr "_Поништи сав избор"
-
-#: rapid/glade3/rapid.ui.h:32
-msgid "_View"
-msgstr "П_реглед"
-
#: rapid/glade3/prefs.ui.h:1
-msgid " "
-msgstr " "
+msgid "Preferences: Rapid Photo Downloader"
+msgstr "Поставке: Брзи преносилац фотографија"
#: rapid/glade3/prefs.ui.h:2
-msgid " hh:mm"
-msgstr " чч:мм"
+msgid "<span weight=\"bold\" size=\"x-large\">Photo Download Folders</span>"
+msgstr ""
+"<span weight=\"bold\" size=\"x-large\">Фасцикла за преузете слике</span>"
#: rapid/glade3/prefs.ui.h:3
-msgid ":"
-msgstr ":"
+msgid "<i>Example: /home/user/Pictures</i>"
+msgstr "<i>Пример: /home/user/Фотографије</i>"
#: rapid/glade3/prefs.ui.h:4
-msgid "<b>Backup</b>"
-msgstr "<b>Резервна копија</b>"
+msgid "<b>Download Subfolders</b>"
+msgstr "<b>Подфасцикле за преузимања</b>"
#: rapid/glade3/prefs.ui.h:5
-msgid "<b>Compatibility with Other Operating Systems</b>"
-msgstr "<b>Сагласност са осталим оперативним системима</b>"
+msgid "Download folder:"
+msgstr "Фасцикла за чување:"
#: rapid/glade3/prefs.ui.h:6
-msgid "<b>Download Folder</b>"
-msgstr "<b>Фасцикла за чување фотографија</b>"
+msgid ""
+"Choose the download folder. Subfolders for the downloaded photos will be "
+"automatically created in this folder using the structure specified below."
+msgstr ""
+"Изаберите фасциклу за чување преузетих фотографија. Подфасцикле ће бити "
+"направљене на основу задатог редоследа."
#: rapid/glade3/prefs.ui.h:7
-msgid "<b>Download Subfolders</b>"
-msgstr "<b>Подфасцикле за чување фотографија</b>"
+msgid "<b>Download Folder</b>"
+msgstr "<b>Фасцикла за фотографија</b>"
#: rapid/glade3/prefs.ui.h:8
-msgid "<b>Example</b>"
-msgstr "<b>Пример</b>"
+msgid "Photo Folders"
+msgstr "Фасцикла за слике"
#: rapid/glade3/prefs.ui.h:9
-msgid "<b>Job Codes</b>"
-msgstr "<b>Кодови задатка</b>"
+msgid "<span weight=\"bold\" size=\"x-large\">Photo Rename</span>\t"
+msgstr ""
+"<span weight=\"bold\" size=\"x-large\">Преименовање фотографија</span>\t"
#: rapid/glade3/prefs.ui.h:10
msgid "<b>Photo Rename</b>"
msgstr "<b>Преименовање фотографија</b>"
#: rapid/glade3/prefs.ui.h:11
-msgid "<b>Photo and Video Name Conflicts</b>"
-msgstr "<b>Несагласност имена видеа и слика</b>"
+msgid " "
+msgstr " "
#: rapid/glade3/prefs.ui.h:12
-msgid "<b>Program Automation</b>"
-msgstr "<b>Аутоматизација програма</b>"
+msgid "<i>New:</i>"
+msgstr "<i>Нова:</i>"
#: rapid/glade3/prefs.ui.h:13
-msgid "<b>Sequence Numbers</b>"
-msgstr "<b>Низ бројева</b>"
+msgid "<i>Original:</i>"
+msgstr "<i>Првобитна:</i>"
#: rapid/glade3/prefs.ui.h:14
-msgid "<i>/media/externaldrive/Photos</i>"
-msgstr "<i>/media/Спољни_Уређај/Фотографије</i>"
+msgid "<b>Example</b>"
+msgstr "<b>Пример</b>"
#: rapid/glade3/prefs.ui.h:15
-msgid "<i>Example: /home/user/Pictures</i>"
-msgstr "<i>Пример: /home/user/Фотографије</i>"
+msgid "Photo Rename"
+msgstr "Преименовање фотографија"
#: rapid/glade3/prefs.ui.h:16
-msgid "<i>Example:</i>"
-msgstr "<i>Пример:</i>"
+msgid "<span weight=\"bold\" size=\"x-large\">Video Download Folders</span>"
+msgstr ""
+"<span weight=\"bold\" size=\"x-large\">Фасцикла за преузет видео</span>"
#: rapid/glade3/prefs.ui.h:17
-msgid "<i>New:</i>"
-msgstr "<i>Нова:</i>"
+msgid ""
+"Sorry, video downloading functionality disabled. To download videos, please "
+"install either the <i>hachoir metadata</i> and <i>kaa metadata</i> packages "
+"for python, or <i>exiftool</i>."
+msgstr ""
+"Преузимање видеа је онемогућено. За преузимање видеа инсталирајте <i>hachoir "
+"metadata</i> и <i>kaa metadata</i> за Питон и <i>exiftool</i>."
#: rapid/glade3/prefs.ui.h:18
-msgid "<i>Original:</i>"
-msgstr "<i>Оригинал:</i>"
+msgid ""
+"Choose the download folder. Subfolders for the downloaded videos will be "
+"automatically created in this folder using the structure specified below."
+msgstr ""
+"Изаберите фасциклу за чување преузетог видеа. Подфасцикле ће бити направљене "
+"на основу задатог редоследа."
#: rapid/glade3/prefs.ui.h:19
-msgid "<span weight=\"bold\" size=\"x-large\">Backup</span>\t"
-msgstr "<span weight=\"bold\" size=\"x-large\">Резервна копија</span>\t"
+msgid "Video Folders"
+msgstr "Видео фасцикле"
#: rapid/glade3/prefs.ui.h:20
-msgid "<span weight=\"bold\" size=\"x-large\">Device Options</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Опције уређаја</span>"
+msgid "<span weight=\"bold\" size=\"x-large\">Video Rename</span>\t"
+msgstr "<span weight=\"bold\" size=\"x-large\">Преименовање видеа</span>\t"
#: rapid/glade3/prefs.ui.h:21
-msgid "<span weight=\"bold\" size=\"x-large\">Devices</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Уређаји</span>"
+msgid "Video Rename"
+msgstr "Преименовање видеа"
#: rapid/glade3/prefs.ui.h:22
-msgid "<span weight=\"bold\" size=\"x-large\">Error Handling</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Превазилажење грешака</span>"
+msgid "<span weight=\"bold\" size=\"x-large\">Rename Options</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Опције за преименовање</span>"
#: rapid/glade3/prefs.ui.h:23
-msgid "<span weight=\"bold\" size=\"x-large\">Job Codes</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Кодови задатка</span>"
+msgid "<b>Sequence Numbers</b>"
+msgstr "<b>Низ бројева</b>"
#: rapid/glade3/prefs.ui.h:24
-msgid "<span weight=\"bold\" size=\"x-large\">Miscellaneous</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Остало</span>"
+msgid ""
+"Specify the time in 24 hour format at which the <i>Downloads today</i> "
+"sequence number should be reset."
+msgstr ""
+"Одређује време у које ће вредност <i>данашњих преузимања</i> бити поништена."
#: rapid/glade3/prefs.ui.h:25
-msgid "<span weight=\"bold\" size=\"x-large\">Photo Download Folders</span>"
-msgstr ""
-"<span weight=\"bold\" size=\"x-large\">Фасцикла за преузете слике</span>"
+msgid "Day start:"
+msgstr "Почетак дана:"
#: rapid/glade3/prefs.ui.h:26
-msgid "<span weight=\"bold\" size=\"x-large\">Photo Rename</span>\t"
-msgstr ""
-"<span weight=\"bold\" size=\"x-large\">Преименовање фотографија</span>\t"
+msgid "Downloads today:"
+msgstr "Данашњих преузимања:"
#: rapid/glade3/prefs.ui.h:27
-msgid "<span weight=\"bold\" size=\"x-large\">Rename Options</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Опције за преименовање</span>"
+msgid "Stored number:"
+msgstr "Сачувани бројеви:"
#: rapid/glade3/prefs.ui.h:28
-msgid "<span weight=\"bold\" size=\"x-large\">Video Download Folders</span>"
-msgstr ""
-"<span weight=\"bold\" size=\"x-large\">Фасцикла за преузет видео</span>"
+msgid ":"
+msgstr ":"
#: rapid/glade3/prefs.ui.h:29
-msgid "<span weight=\"bold\" size=\"x-large\">Video Rename</span>\t"
-msgstr "<span weight=\"bold\" size=\"x-large\">Преименовање видеа</span>\t"
+msgid " hh:mm"
+msgstr " чч:мм"
#: rapid/glade3/prefs.ui.h:30
-msgid "Add unique identifier"
-msgstr "Додај јединствену реч"
+msgid "Synchronize RAW + JPEG sequence numbers"
+msgstr "Усагласи називе РАВ и ЈПЕГ слика"
#: rapid/glade3/prefs.ui.h:31
-msgid "Automatically detect Portable Storage Devices"
-msgstr "Сам пронађи преносне меморијске уређаје"
+msgid "<b>Compatibility with Other Operating Systems</b>"
+msgstr "<b>Сагласност са осталим оперативним системима</b>"
#: rapid/glade3/prefs.ui.h:32
-msgid "Automatically detect backup devices"
-msgstr "Сам пронађи уређаје за резервне копије"
+msgid ""
+"Specify whether photo, video and folder names should have any characters "
+"removed that are not allowed by other operating systems."
+msgstr ""
+"Одређује да ли из назива фотографија, видеа и фасцикли треба уклонити знаке "
+"који нису подржани на другим оперативним системима."
#: rapid/glade3/prefs.ui.h:33
-msgid "Automatically detect devices"
-msgstr "Сам пронађи уређаје"
+msgid "Strip incompatible characters"
+msgstr "Избаци неподржане знакове"
#: rapid/glade3/prefs.ui.h:34
-msgid "Automatically rotate JPEG images"
-msgstr "Сам окрени слике"
+msgid "Rename Options"
+msgstr "Опције преименовања"
#: rapid/glade3/prefs.ui.h:35
-msgid "Backup"
-msgstr "Резервна копија"
+msgid "<span weight=\"bold\" size=\"x-large\">Job Codes</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Кодови задатка</span>"
#: rapid/glade3/prefs.ui.h:36
-msgid "Backup photos and videos when downloading"
-msgstr "Направи резерву слика и видеа при преузимању"
+msgid "<b>Job Codes</b>"
+msgstr "<b>Кодови задатка</b>"
#: rapid/glade3/prefs.ui.h:37
-msgid ""
-"Choose the download folder. Subfolders for the downloaded photos will be "
-"automatically created in this folder using the structure specified below."
-msgstr ""
-"Изаберите фасциклу за чување преузетих фотографија. Подфасцикле ће бити "
-"направљене на основу задатог редоследа."
-
-#: rapid/glade3/prefs.ui.h:38
-msgid ""
-"Choose the download folder. Subfolders for the downloaded videos will be "
-"automatically created in this folder using the structure specified below."
-msgstr ""
-"Изаберите фасциклу за чување преузетог видеа. Подфасцикле ће бити направљене "
-"на основу задатог редоследа."
+msgid "_Add..."
+msgstr "_Додај..."
#: rapid/glade3/prefs.ui.h:39
-msgid "Day start:"
-msgstr "Почетак дана:"
+msgid "R_emove All"
+msgstr "У_клони све"
#: rapid/glade3/prefs.ui.h:40
-msgid "Device Options"
-msgstr "Опције уређаја"
+msgid "Job Codes"
+msgstr "Код задатка"
#: rapid/glade3/prefs.ui.h:41
+msgid "<span weight=\"bold\" size=\"x-large\">Devices</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Уређаји</span>"
+
+#: rapid/glade3/prefs.ui.h:42
msgid "Devices"
msgstr "Уређаји"
-#: rapid/glade3/prefs.ui.h:42
+#: rapid/glade3/prefs.ui.h:43
msgid ""
"Devices are from where to download photos and videos, such as cameras, "
"memory cards or Portable Storage Devices.\n"
@@ -1696,7 +1696,7 @@ msgid ""
"setting it to PTP mode. If that is not possible, a card reader must be "
"used.</i>"
msgstr ""
-"Уређаји са којих се преузима слике или видео, као што су фото-апарати, "
+"Уређаји са којих се преузимају слике или видео, као што су фото-апарати, "
"меморијске картице или преносна складишта.\n"
"\n"
"Можете преузимати податке са више уређаја у исто време или уместо уређаја "
@@ -1706,35 +1706,31 @@ msgstr ""
"приметите да је брзина преузимања мала, или да преузимање уопште не ради, "
"поставите апарат у ПТП режим или купите читач картица.</i>"
-#: rapid/glade3/prefs.ui.h:47
-msgid "Download folder:"
-msgstr "Фасцикла за чување фотографија:"
-
#: rapid/glade3/prefs.ui.h:48
-msgid "Downloads today:"
-msgstr "Данашњих преузимања:"
+msgid "Automatically detect Portable Storage Devices"
+msgstr "Сам пронађи преносне меморијске уређаје"
#: rapid/glade3/prefs.ui.h:49
-msgid "Error Handling"
-msgstr "Грешке"
+msgid "Automatically detect devices"
+msgstr "Сам пронађи уређаје"
#: rapid/glade3/prefs.ui.h:50
-msgid "Exit program even if download had warnings or errors"
-msgstr "Изађи из програма чак и када постоје грешке у преузимању"
-
-#: rapid/glade3/prefs.ui.h:51
-msgid "Exit program when download completes"
-msgstr "Изађи из програма по преузимању"
-
-#: rapid/glade3/prefs.ui.h:52
-msgid "Generate thumbnails (slower)"
-msgstr "Изгради умањене приказе (спорије)"
-
-#: rapid/glade3/prefs.ui.h:53
msgid ""
-"If you disable automatic detection, choose the exact backup locations."
+"If you enable automatic detection of Portable Storage Devices, the entire "
+"device will be scanned. On large devices, this could take some time.\n"
+"\n"
+"When this option is enabled, and a potential device is detected, you will be "
+"prompted to determine if it should be scanned or not."
msgstr ""
-"Уколико искључите аутоматско налажење уређаја, изаберите тачно место."
+"Уколико омогућите аутоматско налажење преносних уређаја, то може да потраје "
+"када је преносни уређај велики јер ће бити претражен у потпуности.\n"
+"\n"
+"При налажењу одговарајућег уређаја бићете упитани да ли желите да га "
+"претражите или не."
+
+#: rapid/glade3/prefs.ui.h:53
+msgid "Location:"
+msgstr "Место:"
#: rapid/glade3/prefs.ui.h:54
msgid ""
@@ -1742,217 +1738,209 @@ msgid ""
"and videos."
msgstr ""
"Уколико онемогућите аутоматско налажење уређаја, изаберите место до слика "
-"или видеа"
+"или видеа."
#: rapid/glade3/prefs.ui.h:55
+msgid "<span weight=\"bold\" size=\"x-large\">Device Options</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Опције уређаја</span>"
+
+#: rapid/glade3/prefs.ui.h:56
+msgid "Remembered Paths"
+msgstr "Запамћене путање"
+
+#: rapid/glade3/prefs.ui.h:57
msgid ""
-"If you enable automatic detection of Portable Storage Devices, the entire "
-"device will be scanned. On large devices, this could take some time.\n"
-"\n"
-"When this option is enabled, and a potential device is detected, you will be "
-"prompted to determine if it should be scanned or not."
+"Remembered paths are those associated with devices that you have chosen to "
+"always scan or ignore when automatic detection of Portable Storage Devices "
+"is enabled."
msgstr ""
-"Уколико омогућите аутоматско налажење преносних уређаја, то може да потраје "
-"када је преносни уређај велики јер ће он бити претражен у потпуности.\n"
-"\n"
-"При налажењу одговарајућег уређаја бићете упитани да ли желите да га "
-"претражите или не."
+"Упамћене путање су оне које се везују за уређаје које желите да увек "
+"претражите или занемарите при аутоматском тражењу уређаја."
#: rapid/glade3/prefs.ui.h:58
msgid "Ignored Paths"
msgstr "Занемарене путање"
#: rapid/glade3/prefs.ui.h:59
-msgid "Job Codes"
-msgstr "Код задатка"
-
-#: rapid/glade3/prefs.ui.h:60
-msgid "Location:"
-msgstr "Место:"
+msgid ""
+"Specify the ending portion of any paths you want ignored when scanning "
+"devices for photos or videos. Any path ending with the values below will not "
+"be scanned."
+msgstr ""
+"Унесите део назива путања које желите да занемарите приликом претраживања "
+"уређаја. Све путање које се завршавају овим називом ће бити занемарене."
#: rapid/glade3/prefs.ui.h:61
-msgid "Miscellaneous"
-msgstr "Остало"
+msgid "Re_move All"
+msgstr "У_клони све"
#: rapid/glade3/prefs.ui.h:62
-msgid "Overwrite"
-msgstr "Препиши"
+msgid "Use _python-style regular expressions"
+msgstr "Користи _регуларни израз у Питоновом стилу"
#: rapid/glade3/prefs.ui.h:63
-msgid "Performance"
-msgstr "Перформансе"
+msgid "Device Options"
+msgstr "Опције уређаја"
#: rapid/glade3/prefs.ui.h:64
-msgid "Photo Folders"
-msgstr "Фасцикла за слике"
+msgid "<span weight=\"bold\" size=\"x-large\">Backup</span>\t"
+msgstr "<span weight=\"bold\" size=\"x-large\">Резерва</span>\t"
#: rapid/glade3/prefs.ui.h:65
-msgid "Photo Rename"
-msgstr "Преименовање фотографија"
+msgid "<b>Backup</b>"
+msgstr "<b>Резерва</b>"
#: rapid/glade3/prefs.ui.h:66
-msgid "Photo backup folder name:"
-msgstr "Име резевне фасцикле за слике:"
+msgid ""
+"If you disable automatic detection, choose the exact backup locations."
+msgstr ""
+"Уколико искључите аутоматско налажење уређаја, изаберите тачно место."
#: rapid/glade3/prefs.ui.h:67
-msgid "Photo backup location:"
-msgstr "Место до резервних фотографија:"
+msgid "Automatically detect backup devices"
+msgstr "Сам пронађи уређаје за резерве"
#: rapid/glade3/prefs.ui.h:68
-msgid "Preferences: Rapid Photo Downloader"
-msgstr "Поставке: Брзи преносилац фотографија"
+msgid ""
+"You can have your photos and videos backed up to multiple locations as they "
+"are downloaded, e.g. external hard drives."
+msgstr ""
+"Можете направити резерве фотографија и видеа на више места при преузимању, "
+"нпр. на спољним дисковима."
-#: rapid/glade3/prefs.ui.h:70
-msgid "R_emove All"
-msgstr "У_клони све"
+#: rapid/glade3/prefs.ui.h:69
+msgid "Backup photos and videos when downloading"
+msgstr "Направи резерву слика и видеа при преузимању"
-#: rapid/glade3/prefs.ui.h:72
-msgid "Re_move All"
-msgstr "У_клони све"
+#: rapid/glade3/prefs.ui.h:70
+msgid ""
+"Specify the folder in which backups are stored on the device. \n"
+"\n"
+"<i>Note: this will also be used to determine whether or not the device is "
+"used for backups. For each device you wish to use for backing up to, create "
+"a folder in it with one of these names.</i>"
+msgstr ""
+"Наведите фасциклу на уређају у којој се чувају резерве. \n"
+"\n"
+"<i>Примедба: ово одређује и да ли се уређаји користе као резервни. Унутар "
+"сваког резервног уређаја морате направити фасцику са неким од ових "
+"назива.</i>"
#: rapid/glade3/prefs.ui.h:73
-msgid "Remembered Paths"
-msgstr "Запамћене путање"
+msgid "Photo backup location:"
+msgstr "Место до резервних фотографија:"
#: rapid/glade3/prefs.ui.h:74
-msgid ""
-"Remembered paths are those associated with devices that you have chosen to "
-"always scan or ignore when automatic detection of Portable Storage Devices "
-"is enabled."
-msgstr ""
-"Упамћене путање су оне које се везују за уређаје које желите да увек "
-"претражите или занемарите при аутоматском тражењу уређаја."
+msgid "Photo backup folder name:"
+msgstr "Назив фасцикле резерве за слике:"
#: rapid/glade3/prefs.ui.h:75
-msgid "Rename Options"
-msgstr "Опције преименовања"
+msgid "<i>Example:</i>"
+msgstr "<i>Пример:</i>"
#: rapid/glade3/prefs.ui.h:76
-msgid "Skip"
-msgstr "Прескочи"
+msgid "<i>/media/externaldrive/Photos</i>"
+msgstr "<i>/media/Спољни_уређај/Фотографије</i>"
#: rapid/glade3/prefs.ui.h:77
-msgid "Skip download"
-msgstr "Прескочи преузимање"
+msgid "Video backup folder name:"
+msgstr "Назив фасцикле резерве за видео:"
#: rapid/glade3/prefs.ui.h:78
-msgid ""
-"Sorry, video downloading functionality disabled. To download videos, please "
-"install either the <i>hachoir metadata</i> and <i>kaa metadata</i> packages "
-"for python, or <i>exiftool</i>."
-msgstr ""
-"Преузимање видеа је онемогућено. За преузимање видеа инсталирајте <i>hachoir "
-"metadata</i> и <i>kaa metadata</i> за Питон и <i>exiftool</i>."
+msgid "Video backup location:"
+msgstr "Путања до резервног видеа:"
#: rapid/glade3/prefs.ui.h:79
-msgid ""
-"Specify the ending portion of any paths you want ignored when scanning "
-"devices for photos or videos. Any path ending with the values below will not "
-"be scanned."
-msgstr ""
-"Унесите део имена путања које желите да занемарите приликом претраживања "
-"уређаја. Све путање које се завршавају овом именом ће бити занемарене."
+msgid "Backup"
+msgstr "Резерва"
#: rapid/glade3/prefs.ui.h:80
-msgid ""
-"Specify the folder in which backups are stored on the device. \n"
-"\n"
-"<i>Note: this will also be used to determine whether or not the device is "
-"used for backups. For each device you wish to use for backing up to, create "
-"a folder in it with one of these names.</i>"
-msgstr ""
-"Одређује фасциклу на уређају у којој се чувају резервне копије. \n"
-"\n"
-"<i>Примедба: ово одређује и да ли се уређаји користе као резервни. Унутар "
-"сваког резервног уређаја морате направити фасцику са неким од ових "
-"назива.</i>"
+msgid "<span weight=\"bold\" size=\"x-large\">Miscellaneous</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Остало</span>"
-#: rapid/glade3/prefs.ui.h:83
-msgid ""
-"Specify the time in 24 hour format at which the <i>Downloads today</i> "
-"sequence number should be reset."
-msgstr ""
-"Одређује време у које ће вредност <i>данашњих преузимања</i> бити поништена."
+#: rapid/glade3/prefs.ui.h:81
+msgid "<b>Program Automation</b>"
+msgstr "<b>Аутоматизација програма</b>"
-#: rapid/glade3/prefs.ui.h:84
-msgid ""
-"Specify whether photo, video and folder names should have any characters "
-"removed that are not allowed by other operating systems."
-msgstr ""
-"Одређује да ли треба уклонити неподржане знаке из имена фотографија, видеа и "
-"фасцикли."
+#: rapid/glade3/prefs.ui.h:82
+msgid "Unmount (\"eject\") device upon download completion"
+msgstr "Демонтирај (избаци) уређај након успешног преузимања"
-#: rapid/glade3/prefs.ui.h:85
+#: rapid/glade3/prefs.ui.h:83
msgid "Start downloading at program startup"
msgstr "Започни преузимање по покретању програма"
-#: rapid/glade3/prefs.ui.h:86
+#: rapid/glade3/prefs.ui.h:84
msgid "Start downloading upon device insertion"
msgstr "Започни преузимање по прикључивању уређаја"
+#: rapid/glade3/prefs.ui.h:85
+msgid "Exit program when download completes"
+msgstr "Изађи из програма по преузимању"
+
+#: rapid/glade3/prefs.ui.h:86
+msgid "Exit program even if download had warnings or errors"
+msgstr "Изађи из програма чак и када постоје грешке у преузимању"
+
#: rapid/glade3/prefs.ui.h:87
-msgid "Stored number:"
-msgstr "Сачувани бројеви:"
+msgid "Automatically rotate JPEG images"
+msgstr "Сам окрени слике"
#: rapid/glade3/prefs.ui.h:88
-msgid "Strip incompatible characters"
-msgstr "Избаци неподржане знакове"
+msgid "Performance"
+msgstr "Учинак"
#: rapid/glade3/prefs.ui.h:89
-msgid "Synchronize RAW + JPEG sequence numbers"
-msgstr "Усагласи називе RAW и JPEG слика"
+msgid "Generate thumbnails (slower)"
+msgstr "Изгради умањене приказе (спорије)"
#: rapid/glade3/prefs.ui.h:90
-msgid "Unmount (\"eject\") device upon download completion"
-msgstr "Демонтирај (избаци) уређај након успешног преузимања"
+msgid "Miscellaneous"
+msgstr "Остало"
#: rapid/glade3/prefs.ui.h:91
-msgid "Use _python-style regular expressions"
-msgstr "Користи _регуларни израз у Питоновом стилу"
+msgid "<span weight=\"bold\" size=\"x-large\">Error Handling</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Превазилажење грешака</span>"
#: rapid/glade3/prefs.ui.h:92
-msgid "Video Folders"
-msgstr "Видео фасцикле"
+msgid "<b>Photo and Video Name Conflicts</b>"
+msgstr "<b>Сукоби назива видеа и слика</b>"
#: rapid/glade3/prefs.ui.h:93
-msgid "Video Rename"
-msgstr "Преименовање видеа"
+msgid "Add unique identifier"
+msgstr "Додај јединствену реч"
#: rapid/glade3/prefs.ui.h:94
-msgid "Video backup folder name:"
-msgstr "Име резервне фасцикле за видео:"
+msgid "Skip download"
+msgstr "Прескочи преузимање"
#: rapid/glade3/prefs.ui.h:95
-msgid "Video backup location:"
-msgstr "Путања до резервног видеа:"
-
-#: rapid/glade3/prefs.ui.h:96
msgid ""
"When a photo or video of the same name has already been downloaded, choose "
"whether to skip downloading the file, or to add a unique indentifier."
msgstr ""
-"Када је већ преузета фотографија или видео са изтим именом, изаберите или да "
-"је прескочите или да јој додате јединствену ознаку."
+"Када је већ преузета фотографија или видео са истим називом, изаберите или "
+"да је прескочите или да јој додате јединствену ознаку."
-#: rapid/glade3/prefs.ui.h:97
+#: rapid/glade3/prefs.ui.h:96
msgid ""
"When backing up, choose whether to overwrite a file on the backup device "
"that has the same name, or skip backing it up."
msgstr ""
-"Да ли да препишем датотеку са истим именом на резервном уређају или да је "
-"прескочим приликом прављења резевне копије."
+"Да ли да препишем датотеку са истим називом на резервном уређају или да је "
+"прескочим приликом прављења резерве."
+
+#: rapid/glade3/prefs.ui.h:97
+msgid "Overwrite"
+msgstr "Препиши"
#: rapid/glade3/prefs.ui.h:98
-msgid ""
-"You can have your photos and videos backed up to multiple locations as they "
-"are downloaded, e.g. external hard drives."
-msgstr ""
-"Можете направити резервне кпије фотографија и видеа на више места при "
-"преузимању, нпр. на екстерним дисковима."
+msgid "Skip"
+msgstr "Прескочи"
#: rapid/glade3/prefs.ui.h:99
-msgid "_Add..."
-msgstr "_Додај..."
+msgid "Error Handling"
+msgstr "Руковање грешкама"
#: rapid/glade3/about.ui.h:1
msgid "Import your photos and videos efficiently and reliably"
diff --git a/po/sv.po b/po/sv.po
index 186cd90..bca543e 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,22 +7,22 @@ msgid ""
msgstr ""
"Project-Id-Version: rapid\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
-"POT-Creation-Date: 2011-11-20 13:25-0600\n"
-"PO-Revision-Date: 2011-12-16 16:45+0000\n"
-"Last-Translator: Silas Lenz <Unknown>\n"
+"POT-Creation-Date: 2012-06-23 04:00-0500\n"
+"PO-Revision-Date: 2012-11-09 01:10+0000\n"
+"Last-Translator: Mikael Hiort af Ornäs <lakritslemmel@hotmail.com>\n"
"Language-Team: Swedish <sv@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-12-28 07:56+0000\n"
-"X-Generator: Launchpad (build 14560)\n"
+"X-Launchpad-Export-Date: 2012-11-26 19:04+0000\n"
+"X-Generator: Launchpad (build 16309)\n"
#. Translators: if neccessary, for guidance in how to translate this program, you may see http://damonlynch.net/translate.html
-#: rapid/rapid.py:107 rapid/rapid.py:1699 rapid/glade3/rapid.ui.h:14
+#: rapid/rapid.py:112 rapid/rapid.py:1784 rapid/glade3/rapid.ui.h:1
msgid "Rapid Photo Downloader"
msgstr "Rapid Photo Downloader"
-#: rapid/rapid.py:112
+#: rapid/rapid.py:117
#, python-format
msgid ""
"%(date)s\n"
@@ -31,33 +31,33 @@ msgstr ""
"%(date)s\n"
"%(time)s"
-#: rapid/rapid.py:114
+#: rapid/rapid.py:119
#, python-format
msgid "%(date)s %(time)s"
msgstr "%(date)s %(time)s"
-#: rapid/rapid.py:117
+#: rapid/rapid.py:122
#, python-format
msgid "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
msgstr "%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s"
#. Device refers to a thing like a camera, memory card in its reader,
#. external hard drive, Portable Storage Device, etc.
-#: rapid/rapid.py:152
+#: rapid/rapid.py:157
msgid "Device"
msgstr "Enhet"
#. Size refers to the total size of images on the device, typically in
#. MB or GB
-#: rapid/rapid.py:170
+#: rapid/rapid.py:175
msgid "Size"
msgstr "Storlek"
-#: rapid/rapid.py:173
+#: rapid/rapid.py:178
msgid "Download Progress"
msgstr "Överföringsförlopp"
-#: rapid/rapid.py:319
+#: rapid/rapid.py:336
#, python-format
msgid "%(device)s did not unmount"
msgstr "%(device)s enheter avmonterades inte"
@@ -66,36 +66,38 @@ msgstr "%(device)s enheter avmonterades inte"
#. looking for photos or videos. It is visible initially in the progress bar for each device
#. (which normally holds "x photos and videos").
#. It maybe displayed only briefly if the contents of the device being scanned is small.
-#: rapid/rapid.py:1186
+#: rapid/rapid.py:1216
msgid "scanning..."
msgstr "söker av..."
#. this location is a human readable explanation for /, and is inserted into Downloading from %(location)s
-#: rapid/rapid.py:1697
+#: rapid/rapid.py:1782
msgid "the root of the file system"
-msgstr ""
+msgstr "filsystemets rotmapp"
#. message in dialog box which asks the user if they really want to be downloading from this location
-#: rapid/rapid.py:1701
+#: rapid/rapid.py:1786
#, python-format
msgid "Downloading from %(location)s."
msgstr "Laddar ner från %(location)s."
-#: rapid/rapid.py:1702
+#: rapid/rapid.py:1787
msgid ""
"Do you really want to download from here? On some systems, scanning this "
"location can take a very long time."
msgstr ""
+"Vill du verkligen ladda ner härifrån? På vissa filsystem kan det ta väldigt "
+"lång tid att scanna den här platsen."
-#: rapid/rapid.py:2124 rapid/glade3/rapid.ui.h:5
+#: rapid/rapid.py:2209
msgid "Download"
msgstr "Hämta"
-#: rapid/rapid.py:2127
+#: rapid/rapid.py:2212
msgid "Pause"
msgstr "Pausa"
-#: rapid/rapid.py:2228
+#: rapid/rapid.py:2317
#, python-format
msgid ""
"These download folders are invalid:\n"
@@ -106,7 +108,7 @@ msgstr ""
"%(folder1)s\n"
"%(folder2)s"
-#: rapid/rapid.py:2231
+#: rapid/rapid.py:2320
#, python-format
msgid ""
"This download folder is invalid:\n"
@@ -115,176 +117,176 @@ msgstr ""
"Denna mapp är ogiltig:\n"
"%s"
-#: rapid/rapid.py:2232
+#: rapid/rapid.py:2321
msgid "Download cannot proceed"
msgstr "Kan inte fortsätta överföringen"
-#: rapid/rapid.py:2559
+#: rapid/rapid.py:2700
msgid "About 1 second remaining"
msgstr "Cirka en sekund återstår"
-#: rapid/rapid.py:2561
+#: rapid/rapid.py:2702
#, python-format
msgid "About %i seconds remaining"
msgstr "Cirka %i sekunder återstår"
-#: rapid/rapid.py:2563
+#: rapid/rapid.py:2704
msgid "About 1 minute remaining"
msgstr "Cirka en minut återstår"
#. Translators: in the text '%(minutes)i:%(seconds)02i', only the : should be translated, if needed.
#. '%(minutes)i' and '%(seconds)02i' should not be modified or left out. They are used to format and display the amount
#. of time the download has remainging, e.g. 'About 5:36 minutes remaining'
-#: rapid/rapid.py:2568
+#: rapid/rapid.py:2709
#, python-format
msgid "About %(minutes)i:%(seconds)02i minutes remaining"
msgstr "Ungefär %(minutes)i:%(seconds)02i minuter återstår"
-#: rapid/rapid.py:2590 rapid/rpdfile.py:113
+#: rapid/rapid.py:2731 rapid/rpdfile.py:123
msgid "photos and videos"
msgstr "bilder och filmer"
-#: rapid/rapid.py:2592 rapid/rpdfile.py:115
+#: rapid/rapid.py:2733 rapid/rpdfile.py:125
msgid "photos or videos"
msgstr "bilder eller filmer"
-#: rapid/rapid.py:2595 rapid/rapid.py:3408 rapid/rpdfile.py:118
+#: rapid/rapid.py:2736 rapid/rapid.py:3558 rapid/rpdfile.py:128
msgid "videos"
msgstr "video"
-#: rapid/rapid.py:2597 rapid/preferencesdialog.py:1617 rapid/rpdfile.py:120
-#: rapid/rpdfile.py:254
+#: rapid/rapid.py:2738 rapid/preferencesdialog.py:1620 rapid/rpdfile.py:130
+#: rapid/rpdfile.py:291
msgid "video"
msgstr "video"
-#: rapid/rapid.py:2600 rapid/rapid.py:3406 rapid/rpdfile.py:123
+#: rapid/rapid.py:2741 rapid/rapid.py:3556 rapid/rpdfile.py:133
msgid "photos"
msgstr "bilder"
#. check subfolder preferences for bad values
-#: rapid/rapid.py:2602 rapid/preferencesdialog.py:1616 rapid/rpdfile.py:125
-#: rapid/rpdfile.py:234
+#: rapid/rapid.py:2743 rapid/preferencesdialog.py:1619 rapid/rpdfile.py:135
+#: rapid/rpdfile.py:272
msgid "photo"
msgstr "bild"
-#: rapid/rapid.py:2629
+#: rapid/rapid.py:2770
#, python-format
msgid "%(noFiles)s %(filetypes)s downloaded"
msgstr "%(noFiles)s %(filetypes)s överfördes"
-#: rapid/rapid.py:2633
+#: rapid/rapid.py:2774
#, python-format
msgid "%(noFiles)s %(filetypes)s failed to download"
msgstr "%(noFiles)s %(filetypes)s gick inte att hämta"
-#: rapid/rapid.py:2636 rapid/rapid.py:2688
+#: rapid/rapid.py:2777 rapid/rapid.py:2829
msgid "warnings"
msgstr "varningar"
-#: rapid/rapid.py:2645
+#: rapid/rapid.py:2786
msgid "All downloads complete"
msgstr "Alla överföringar klara"
-#: rapid/rapid.py:2651 rapid/rapid.py:2660 rapid/rapid.py:2669
-#: rapid/rapid.py:2678 rapid/rapid.py:2686
+#: rapid/rapid.py:2792 rapid/rapid.py:2801 rapid/rapid.py:2810
+#: rapid/rapid.py:2819 rapid/rapid.py:2827
#, python-format
msgid "%(number)s %(numberdownloaded)s"
msgstr "%(number)s %(numberdownloaded)s"
-#: rapid/rapid.py:2653 rapid/rapid.py:2671
+#: rapid/rapid.py:2794 rapid/rapid.py:2812
#, python-format
msgid "%(filetype)s downloaded"
msgstr "%(filetype)s hämtade"
-#: rapid/rapid.py:2662 rapid/rapid.py:2680
+#: rapid/rapid.py:2803 rapid/rapid.py:2821
#, python-format
msgid "%(filetype)s failed to download"
msgstr "%(filetype)s gick inte att hämta"
#. e.g.: 3 of 205 photos and videos (202 remaining)
-#: rapid/rapid.py:2719
+#: rapid/rapid.py:2860
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s (%(remaining)s remaining)"
msgstr "%(number)s av %(total)s %(filetypes)s (%(remaining)s återstår)"
#. e.g.: 205 of 205 photos and videos
-#: rapid/rapid.py:2726
+#: rapid/rapid.py:2867
#, python-format
msgid "%(number)s of %(total)s %(filetypes)s"
msgstr "%(number)s av %(total)s %(filetypes)s"
-#: rapid/rapid.py:3072
+#: rapid/rapid.py:3222
msgid "From"
msgstr "Från"
-#: rapid/rapid.py:3080
+#: rapid/rapid.py:3230
msgid "Auto Detect"
msgstr "Upptäck automatiskt"
-#: rapid/rapid.py:3084 rapid/preferencesdialog.py:1324
+#: rapid/rapid.py:3234 rapid/preferencesdialog.py:1327
#, python-format
msgid "Select a folder containing %(file_types)s"
msgstr "Välj en katalog innehållande %(file_types)s"
-#: rapid/rapid.py:3125
+#: rapid/rapid.py:3275
msgid "Copy"
msgstr "Kopiera"
-#: rapid/rapid.py:3138
+#: rapid/rapid.py:3288
msgid "Move"
msgstr "Flytta"
-#: rapid/rapid.py:3160
+#: rapid/rapid.py:3310
msgid "To"
msgstr "Till"
-#: rapid/rapid.py:3167 rapid/rapid.py:3796
+#: rapid/rapid.py:3317 rapid/rapid.py:3986
msgid "Photos:"
msgstr "Bilder:"
-#: rapid/rapid.py:3170 rapid/preferencesdialog.py:1161
+#: rapid/rapid.py:3320 rapid/preferencesdialog.py:1164
msgid "Select a folder to download photos to"
msgstr "Välj en katalog att överföra bilder till"
-#: rapid/rapid.py:3182 rapid/rapid.py:3796
+#: rapid/rapid.py:3332 rapid/rapid.py:3986
msgid "Videos:"
msgstr "Filmer:"
-#: rapid/rapid.py:3184 rapid/preferencesdialog.py:1179
+#: rapid/rapid.py:3334 rapid/preferencesdialog.py:1182
msgid "Select a folder to download videos to"
msgstr "Välj en katalog att överföra filmer till"
-#: rapid/rapid.py:3376
+#: rapid/rapid.py:3526
msgid "and"
msgstr "och"
-#: rapid/rapid.py:3381
+#: rapid/rapid.py:3531
msgid "Using backup devices"
msgstr "Använder enheter för säkerhetskopiering"
-#: rapid/rapid.py:3383
+#: rapid/rapid.py:3533
msgid "Using backup device"
msgstr "Använder enhet för säkerhetskopiering"
-#: rapid/rapid.py:3385
+#: rapid/rapid.py:3535
msgid "No backup devices detected"
msgstr "Inga enheter för säkerhetskopiering hittades"
-#: rapid/rapid.py:3412
+#: rapid/rapid.py:3562
msgid "Free space:"
msgstr "Ledigt utrymme:"
#. (videos) or (photos) will be appended to the free space message displayed to the
#. user in the status bar.
#. you should only translate this if your language does not use parantheses
-#: rapid/rapid.py:3424
+#: rapid/rapid.py:3574
#, python-format
msgid "(%(file_type)s)"
msgstr "(%(file_type)s)"
#. Freespace available on the filesystem for downloading to
#. Displayed in status bar message on main window
-#: rapid/rapid.py:3428
+#: rapid/rapid.py:3578
#, python-format
msgid "%(free)s %(file_type)s"
msgstr "%(free)s %(file_type)s"
@@ -292,87 +294,87 @@ msgstr "%(free)s %(file_type)s"
#. Inserted in the middle of the statusbar message concerning the amount of freespace
#. Used to differentiate between two different file systems
#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
-#: rapid/rapid.py:3433
+#: rapid/rapid.py:3583
msgid "; "
msgstr "; "
#. Inserted at the end of the statusbar message concerning the amount of freespace
#. Used to differentiate between two different file systems
#. e.g. Free space: 21.3GB (photos); 14.7GB (videos).
-#: rapid/rapid.py:3438
+#: rapid/rapid.py:3588
msgid "."
msgstr "."
#. Freespace available on the filesystem for downloading to
#. Displayed in status bar message on main window
#. e.g. 14.7GB available
-#: rapid/rapid.py:3444
+#: rapid/rapid.py:3594
#, python-format
msgid "%(free)s free"
msgstr "%(free)s tillgängligt"
#. user manually specified the same location for photos and video backups
-#: rapid/rapid.py:3452
+#: rapid/rapid.py:3602
#, python-format
msgid "Backing up photos and videos to %(path)s"
msgstr "Säkerhetskopierar bilder och filmer till %(path)s"
#. user manually specified backup location
-#: rapid/rapid.py:3455
+#: rapid/rapid.py:3605
#, python-format
msgid "Backing up to %(path)s"
msgstr "Säkerhetskopierar till %(path)s"
#. user manually specified different locations for photo and video backups
-#: rapid/rapid.py:3458
+#: rapid/rapid.py:3608
#, python-format
msgid "Backing up photos to %(path)s and videos to %(path2)s"
msgstr "Säkerhetskopierar bolder till %(path)s och videor till %(path2)s"
-#: rapid/rapid.py:3465
+#: rapid/rapid.py:3615
#, python-format
msgid "%(freespace)s. %(backuppaths)s."
msgstr "%(freespace)s. %(backuppaths)s."
-#: rapid/rapid.py:3494
+#: rapid/rapid.py:3644
msgid "Program preferences are invalid"
msgstr "Programinställningarna är ogiltiga"
-#: rapid/rapid.py:3613 rapid/rpdfile.py:235
+#: rapid/rapid.py:3770 rapid/rpdfile.py:273
msgid "Photo"
msgstr "Bild"
-#: rapid/rapid.py:3615 rapid/rpdfile.py:255
+#: rapid/rapid.py:3772 rapid/rpdfile.py:292
msgid "Video"
msgstr "Film"
-#: rapid/rapid.py:3624
+#: rapid/rapid.py:3781
#, python-format
msgid "%(file_type)s download folder does not exist"
msgstr "%(file_type)s nedladdningsmapp saknas"
-#: rapid/rapid.py:3626 rapid/rapid.py:3640 rapid/rapid.py:3653
+#: rapid/rapid.py:3783 rapid/rapid.py:3797 rapid/rapid.py:3810
#, python-format
msgid "Folder: %s"
msgstr "Mapp: %s"
-#: rapid/rapid.py:3638
+#: rapid/rapid.py:3795
#, python-format
msgid "%(file_type)s download folder is invalid"
msgstr "%(file_type)s nedladdningsmapp är ogiltig"
-#: rapid/rapid.py:3651
+#: rapid/rapid.py:3808
#, python-format
msgid "%(file_type)s download folder is not writable"
msgstr "%(file_type)s nedladdningsmapp är inte skrivbar"
-#: rapid/rapid.py:3729
+#: rapid/rapid.py:3894
msgid "Thumbnails"
msgstr "Miniatyrer"
#. Translators: this text is displayed to the user when they request information on the command line options.
#. The text %default should not be modified or left out.
-#: rapid/rapid.py:3777
+#: rapid/rapid.py:3949
#, python-format
msgid ""
"display program information on the command line as the program runs "
@@ -381,42 +383,66 @@ msgstr ""
"visa programinformation på kommandoraden när programmet körs (standardvärde: "
"%default)"
-#: rapid/rapid.py:3778
+#: rapid/rapid.py:3950
msgid "display debugging information when run from the command line"
msgstr "visa debuginformation när programmet körs från kommandorad"
-#: rapid/rapid.py:3779
+#: rapid/rapid.py:3951
msgid "only output errors to the command line"
msgstr "Visa fel endast på kommandoraden"
#. image file extensions are recognized RAW files plus TIFF and JPG
-#: rapid/rapid.py:3781
+#: rapid/rapid.py:3953
msgid "list photo and video file extensions the program recognizes and exit"
msgstr "lista filändelser som programmet stödjer och avsluta"
-#: rapid/rapid.py:3783
+#: rapid/rapid.py:3955
+msgid ""
+"automatically detect devices from which to download, overwriting existing "
+"program preferences"
+msgstr ""
+"identifiera automatiskt enheter att hämta objekt från och ersätt därmed "
+"befintliga programinställningar"
+
+#: rapid/rapid.py:3956
+msgid ""
+"manually specify the PATH of the device from which to download, overwriting "
+"existing program preferences"
+msgstr ""
+"ange SÖKVÄGEN manuellt till den enhet från vilken du önskar hämta objekt och "
+"ersätt därmed befintliga programinställningar"
+
+#: rapid/rapid.py:3957
msgid "reset all program settings and preferences and exit"
msgstr "nollställ alla inställningar och avsluta"
-#: rapid/rapid.py:3801
+#: rapid/rapid.py:3970
+msgid ""
+"Error: specify device auto-detection or manually specify a device's path "
+"from which to download, but do not do both."
+msgstr ""
+"Fel: Aktivera antingen automatisk identifiering av enheter eller ange en "
+"enhetssökväg manuellt. Du kan inte välja båda."
+
+#: rapid/rapid.py:3991
#, python-format
msgid "and %s"
msgstr "och %s"
-#: rapid/rapid.py:3809
+#: rapid/rapid.py:3999
msgid "All settings and preferences have been reset"
msgstr "Alla inställningar har nollställts"
-#: rapid/backupfile.py:142 rapid/backupfile.py:165
+#: rapid/backupfile.py:157 rapid/backupfile.py:180
msgid "Backing up error"
msgstr "Fel vid säkerhetskopiering"
-#: rapid/backupfile.py:144
+#: rapid/backupfile.py:159
#, python-format
msgid "Destination directory could not be created: %(directory)s\n"
msgstr "Målplatsen kunde inte skapas: %(directory)s\n"
-#: rapid/backupfile.py:146 rapid/backupfile.py:167 rapid/subfolderfile.py:196
+#: rapid/backupfile.py:161 rapid/backupfile.py:182 rapid/subfolderfile.py:199
#, python-format
msgid ""
"Source: %(source)s\n"
@@ -425,13 +451,13 @@ msgstr ""
"Källa: %(source)s\n"
"Destination: %(destination)s"
-#: rapid/backupfile.py:149 rapid/backupfile.py:169
+#: rapid/backupfile.py:164 rapid/backupfile.py:184
#, python-format
msgid "Error: %(inst)s"
msgstr "Fel: %(inst)s"
-#: rapid/copyfiles.py:159 rapid/subfolderfile.py:211
-#: rapid/subfolderfile.py:352 rapid/subfolderfile.py:370
+#: rapid/copyfiles.py:163 rapid/subfolderfile.py:214
+#: rapid/subfolderfile.py:347 rapid/subfolderfile.py:365
#, python-format
msgid ""
"%(problem)s\n"
@@ -440,492 +466,502 @@ msgstr ""
"%(problem)s\n"
"Fil: %(file)s"
-#: rapid/device.py:79
+#: rapid/device.py:80
msgid "Device Detected"
msgstr "Enhet hittad"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#usedeviceprompt
-#: rapid/device.py:88
+#: rapid/device.py:89
msgid ""
"Should this device or partition be used to download photos or videos from?"
msgstr "Skall denna enhet användas för bild- eller filmöverföring?"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#usedeviceprompt
-#: rapid/device.py:107
+#: rapid/device.py:108
msgid "_Remember this choice"
msgstr "_Kom ihåg mitt val"
-#: rapid/downloadtracker.py:298
+#: rapid/downloadtracker.py:299
msgid "MB/s"
msgstr "MB/s"
-#: rapid/generatenameconfig.py:150
+#: rapid/generatenameconfig.py:151
msgid "Date time"
msgstr "Datumtid"
-#: rapid/generatenameconfig.py:151
+#: rapid/generatenameconfig.py:152
msgid "Text"
msgstr "Text"
-#: rapid/generatenameconfig.py:152
+#: rapid/generatenameconfig.py:153
msgid "Filename"
msgstr "Filnamn"
-#: rapid/generatenameconfig.py:153
+#: rapid/generatenameconfig.py:154
msgid "Metadata"
msgstr "Metadata"
-#: rapid/generatenameconfig.py:154
+#: rapid/generatenameconfig.py:155
msgid "Sequences"
msgstr "Sekvenser"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
-#: rapid/generatenameconfig.py:156 rapid/preferencesdialog.py:574
+#: rapid/generatenameconfig.py:157 rapid/preferencesdialog.py:577
msgid "Job code"
msgstr "Fototillfälle"
-#: rapid/generatenameconfig.py:157
+#: rapid/generatenameconfig.py:158
msgid "Image date"
msgstr "Bilddatum"
-#: rapid/generatenameconfig.py:158
+#: rapid/generatenameconfig.py:159
msgid "Video date"
msgstr "Filmdatum"
-#: rapid/generatenameconfig.py:159
+#: rapid/generatenameconfig.py:160
msgid "Today"
msgstr "Idag"
-#: rapid/generatenameconfig.py:160
+#: rapid/generatenameconfig.py:161
msgid "Yesterday"
msgstr "Igår"
#. Translators: Download time is the time and date that the download started (when the user clicked the Download button)
-#: rapid/generatenameconfig.py:162
+#: rapid/generatenameconfig.py:163
msgid "Download time"
msgstr "Nedladdningstid"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:164
+#: rapid/generatenameconfig.py:165
msgid "Name + extension"
msgstr "Namn + filändelse"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:166
+#: rapid/generatenameconfig.py:167
msgid "Name"
msgstr "Namn"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:168
+#: rapid/generatenameconfig.py:169
msgid "Extension"
msgstr "Filändelse"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:170
+#: rapid/generatenameconfig.py:171
msgid "Image number"
msgstr "Bildnummer"
-#: rapid/generatenameconfig.py:171
+#: rapid/generatenameconfig.py:172
msgid "Video number"
msgstr "Filmnummer"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:173
+#: rapid/generatenameconfig.py:174
msgid "Aperture"
msgstr "Bländare"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:175
+#: rapid/generatenameconfig.py:176
msgid "ISO"
msgstr "ISO"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:177
+#: rapid/generatenameconfig.py:178
msgid "Exposure time"
msgstr "Bländartid"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:179
+#: rapid/generatenameconfig.py:180
msgid "Focal length"
msgstr "Brännvidd"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:181
+#: rapid/generatenameconfig.py:182
msgid "Camera make"
msgstr "Kameratillverkare"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:183
+#: rapid/generatenameconfig.py:184
msgid "Camera model"
msgstr "Kameramodell"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:185
+#: rapid/generatenameconfig.py:186
msgid "Short camera model"
msgstr "Förkortning på kameramodell"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:187
+#: rapid/generatenameconfig.py:188
msgid "Hyphenated short camera model"
msgstr "Utökad förkortning på kameramodell"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:189
+#: rapid/generatenameconfig.py:190
msgid "Serial number"
msgstr "Serienummer"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:191
+#: rapid/generatenameconfig.py:192
msgid "Shutter count"
msgstr "Antal exponeringar"
#. File number currently refers to the Exif value Exif.Canon.FileNumber
-#: rapid/generatenameconfig.py:193
+#: rapid/generatenameconfig.py:194
msgid "File number"
-msgstr ""
+msgstr "Filnummer"
#. Only the folder component of the Exif.Canon.FileNumber value
-#: rapid/generatenameconfig.py:195
+#: rapid/generatenameconfig.py:196
msgid "Folder only"
msgstr "Endast mappen"
#. The folder and file component of the Exif.Canon.FileNumber value
-#: rapid/generatenameconfig.py:197
+#: rapid/generatenameconfig.py:198
msgid "Folder and file"
-msgstr ""
+msgstr "Mapp och fil"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamemetadata
-#: rapid/generatenameconfig.py:199
+#: rapid/generatenameconfig.py:200
msgid "Owner name"
msgstr "Ägarens namn"
-#: rapid/generatenameconfig.py:200
+#: rapid/generatenameconfig.py:201
msgid "Codec"
msgstr "Kodek"
-#: rapid/generatenameconfig.py:201
+#: rapid/generatenameconfig.py:202
msgid "Width"
msgstr "Bredd"
-#: rapid/generatenameconfig.py:202
+#: rapid/generatenameconfig.py:203
msgid "Height"
msgstr "Höjd"
-#: rapid/generatenameconfig.py:203
+#: rapid/generatenameconfig.py:204
msgid "Length"
msgstr "Längd"
-#: rapid/generatenameconfig.py:204
+#: rapid/generatenameconfig.py:205
msgid "Frames Per Second"
msgstr "Bildrutor per sekund"
-#: rapid/generatenameconfig.py:205
+#: rapid/generatenameconfig.py:206
msgid "Artist"
msgstr "Artist"
-#: rapid/generatenameconfig.py:206
+#: rapid/generatenameconfig.py:207
msgid "Copyright"
msgstr "Upphovsrätt"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
-#: rapid/generatenameconfig.py:208
+#: rapid/generatenameconfig.py:209
msgid "Downloads today"
msgstr "Överföringar idag"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
-#: rapid/generatenameconfig.py:210
+#: rapid/generatenameconfig.py:211
msgid "Session number"
msgstr "Sessionsnummer"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
-#: rapid/generatenameconfig.py:212
+#: rapid/generatenameconfig.py:213
msgid "Subfolder number"
msgstr "Nummer på underkatalog"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequencenumbers
-#: rapid/generatenameconfig.py:214
+#: rapid/generatenameconfig.py:215
msgid "Stored number"
msgstr "Tidigare sekvensnummer"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#sequenceletters
-#: rapid/generatenameconfig.py:216
+#: rapid/generatenameconfig.py:217
msgid "Sequence letter"
msgstr "Sekvensbokstav"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:218
+#: rapid/generatenameconfig.py:219
msgid "All digits"
msgstr "Alla siffror"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:220
+#: rapid/generatenameconfig.py:221
msgid "Last digit"
msgstr "Senaste siffra"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:222
+#: rapid/generatenameconfig.py:223
msgid "Last 2 digits"
msgstr "Senaste två siffrorna"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:224
+#: rapid/generatenameconfig.py:225
msgid "Last 3 digits"
msgstr "Senaste tre siffrorna"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamefilename
-#: rapid/generatenameconfig.py:226
+#: rapid/generatenameconfig.py:227
msgid "Last 4 digits"
msgstr "Senaste fyra siffrorna"
#. Translators: please not the capitalization of this text, and keep it the same if your language features capitalization
-#: rapid/generatenameconfig.py:228
+#: rapid/generatenameconfig.py:229
msgid "Original Case"
msgstr "Använd ursprungligt skiftläge"
#. Translators: please not the capitalization of this text, and keep it the same if your language features capitalization
-#: rapid/generatenameconfig.py:230
+#: rapid/generatenameconfig.py:231
msgid "UPPERCASE"
msgstr "VERSALER"
#. Translators: please not the capitalization of this text, and keep it the same if your language features capitalization
-#: rapid/generatenameconfig.py:232
+#: rapid/generatenameconfig.py:233
msgid "lowercase"
msgstr "gemener"
-#: rapid/generatenameconfig.py:233
+#: rapid/generatenameconfig.py:234
msgid "One digit"
msgstr "En siffra"
-#: rapid/generatenameconfig.py:234
+#: rapid/generatenameconfig.py:235
msgid "Two digits"
msgstr "Två siffror"
-#: rapid/generatenameconfig.py:235
+#: rapid/generatenameconfig.py:236
msgid "Three digits"
msgstr "Tre siffror"
-#: rapid/generatenameconfig.py:236
+#: rapid/generatenameconfig.py:237
msgid "Four digits"
msgstr "Fyra siffror"
-#: rapid/generatenameconfig.py:237
+#: rapid/generatenameconfig.py:238
msgid "Five digits"
msgstr "Fem siffror"
-#: rapid/generatenameconfig.py:238
+#: rapid/generatenameconfig.py:239
msgid "Six digits"
msgstr "Sex siffror"
-#: rapid/generatenameconfig.py:239
+#: rapid/generatenameconfig.py:240
msgid "Seven digits"
msgstr "Sju siffror"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:241
+#: rapid/generatenameconfig.py:242
msgid "Subseconds"
msgstr "Sekunder"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:243
+#: rapid/generatenameconfig.py:244
msgid "YYYYMMDD"
msgstr "ÅÅÅÅMMDD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:245
+#: rapid/generatenameconfig.py:246
msgid "YYYY-MM-DD"
msgstr "ÅÅÅÅ-MM-DD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:247
+#: rapid/generatenameconfig.py:248
msgid "YYMMDD"
msgstr "ÅÅMMDD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:249
+#: rapid/generatenameconfig.py:250
msgid "YY-MM-DD"
msgstr "ÅÅ-MM-DD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:251
+#: rapid/generatenameconfig.py:252
msgid "MMDDYYYY"
msgstr "MMDDÅÅÅÅ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:253
+#: rapid/generatenameconfig.py:254
msgid "MMDDYY"
msgstr "MMDDÅÅ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:255
+#: rapid/generatenameconfig.py:256
msgid "MMDD"
msgstr "MMDD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:257
+#: rapid/generatenameconfig.py:258
msgid "DDMMYYYY"
msgstr "DDMMÅÅÅÅ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:259
+#: rapid/generatenameconfig.py:260
msgid "DDMMYY"
msgstr "DDMMÅÅ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:261
+#: rapid/generatenameconfig.py:262
msgid "YYYY"
msgstr "ÅÅÅÅ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:263
+#: rapid/generatenameconfig.py:264
msgid "YY"
msgstr "ÅÅ"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:265
+#: rapid/generatenameconfig.py:266
msgid "MM"
msgstr "MM"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:267
+#: rapid/generatenameconfig.py:268
msgid "DD"
msgstr "DD"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:269
+#: rapid/generatenameconfig.py:270
+msgid "Month (full)"
+msgstr "Månad (fullständigt namn)"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:272
+msgid "Month (abbreviated)"
+msgstr "Månad (förkortad)"
+
+#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
+#: rapid/generatenameconfig.py:274
msgid "HHMMSS"
msgstr "HHMMSS"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:271
+#: rapid/generatenameconfig.py:276
msgid "HHMM"
msgstr "HHMM"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:273
+#: rapid/generatenameconfig.py:278
msgid "HH-MM-SS"
msgstr "HH-MM-SS"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:275
+#: rapid/generatenameconfig.py:280
msgid "HH-MM"
msgstr "HH-MM"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:277
+#: rapid/generatenameconfig.py:282
msgid "HH"
msgstr "HH"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:279
+#: rapid/generatenameconfig.py:284
msgid "MM (minutes)"
msgstr "MM (minuter)"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#renamedateandtime
-#: rapid/generatenameconfig.py:281
+#: rapid/generatenameconfig.py:286
msgid "SS"
msgstr "SS"
-#: rapid/preferencesdialog.py:371
+#: rapid/preferencesdialog.py:374
#, python-format
msgid "Subfolder preferences should not start with a %s"
msgstr "Inställningen för underkataloger skall inte börja med %s"
-#: rapid/preferencesdialog.py:373
+#: rapid/preferencesdialog.py:376
#, python-format
msgid "Subfolder preferences should not end with a %s"
msgstr "Inställning för underkatalog skall inte börja med %s"
-#: rapid/preferencesdialog.py:377
+#: rapid/preferencesdialog.py:380
#, python-format
msgid "Subfolder preferences should not contain two %s one after the other"
msgstr "Inställning för underkatalog skall inte innehålla två %s i rad"
-#: rapid/preferencesdialog.py:436 rapid/preferencesdialog.py:697
+#: rapid/preferencesdialog.py:439 rapid/preferencesdialog.py:700
msgid "Remove all Job Codes?"
msgstr "Ta bort alla fototillfällen?"
-#: rapid/preferencesdialog.py:437 rapid/preferencesdialog.py:714
+#: rapid/preferencesdialog.py:440 rapid/preferencesdialog.py:717
msgid "Should all Job Codes be removed?"
msgstr "Vill du ta bort alla fototillfällen?"
-#: rapid/preferencesdialog.py:443
+#: rapid/preferencesdialog.py:446
msgid "Remove all Remembered Paths?"
msgstr "Ta bort alla sparade sökvägar?"
-#: rapid/preferencesdialog.py:444
+#: rapid/preferencesdialog.py:447
msgid "Should all remembered paths be removed?"
msgstr "Ska alla sparade sökvägar tas bort?"
-#: rapid/preferencesdialog.py:450
+#: rapid/preferencesdialog.py:453
msgid "Remove all Ignored Paths?"
msgstr "Ta bort alla ignorerade sökvägar?"
-#: rapid/preferencesdialog.py:451
+#: rapid/preferencesdialog.py:454
msgid "Should all ignored paths be removed?"
msgstr "Ska alla ignorerade sökvägar tas bort?"
-#: rapid/preferencesdialog.py:462
+#: rapid/preferencesdialog.py:465
msgid "Error in Photo Rename preferences"
msgstr "Fel i inställningarna för bildnamnbyte"
-#: rapid/preferencesdialog.py:642
+#: rapid/preferencesdialog.py:645
msgid "Error in Video Rename preferences"
msgstr "Fel i inställningarna för filmnamnbyte"
-#: rapid/preferencesdialog.py:663
+#: rapid/preferencesdialog.py:666
msgid "Error in Photo Download Subfolders preferences"
msgstr "Fel i inställningarna för bildöverföring"
-#: rapid/preferencesdialog.py:680
+#: rapid/preferencesdialog.py:683
msgid "Error in Video Download Subfolders preferences"
msgstr "Fel i inställningarna för filmöverföring"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
-#: rapid/preferencesdialog.py:739
+#: rapid/preferencesdialog.py:742
msgid "Enter a Job Code"
msgstr "Ange fototillfälle"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
-#: rapid/preferencesdialog.py:755
+#: rapid/preferencesdialog.py:758
msgid "Enter a new Job Code, or select a previous one"
msgstr "Skriv ett nytt jobbnummer, eller välj ett föregående"
#. Translators: for an explanation of what this means, see http://damonlynch.net/rapid/documentation/index.html#jobcode
-#: rapid/preferencesdialog.py:758
+#: rapid/preferencesdialog.py:761
msgid "Enter a new Job Code"
msgstr "Ange nytt jobbnamn"
-#: rapid/preferencesdialog.py:763
+#: rapid/preferencesdialog.py:766
msgid "Job Code:"
msgstr "Fototillfälle:"
-#: rapid/preferencesdialog.py:819
+#: rapid/preferencesdialog.py:822
msgid "Enter a Path to Ignore"
msgstr "Ange sökväg att ignorera"
-#: rapid/preferencesdialog.py:831
+#: rapid/preferencesdialog.py:834
msgid "Specify a path that will never be scanned for photos or videos"
msgstr ""
"Ange en sökväg som aldrig kommer att avsökas efter bilder eller videor"
-#: rapid/preferencesdialog.py:836
+#: rapid/preferencesdialog.py:839
msgid "Path:"
msgstr "Sökväg:"
-#: rapid/preferencesdialog.py:1079
+#: rapid/preferencesdialog.py:1082
msgid "Job Code"
msgstr "Jobbnamn"
-#: rapid/preferencesdialog.py:1350
+#: rapid/preferencesdialog.py:1353
msgid "Select a folder in which to backup photos"
msgstr "Välj en plats för att säkerhetskopiera bilder"
-#: rapid/preferencesdialog.py:1363
+#: rapid/preferencesdialog.py:1366
msgid "Select a folder in which to backup videos"
msgstr "Välj en plats för att säkerhetskopiera videor"
#. Translators: please do not modify or leave out html formatting tags like <i> and <b>. These are used to format the text the users sees
-#: rapid/preferencesdialog.py:1458
+#: rapid/preferencesdialog.py:1461
msgid ""
"<i><b>Warning:</b> There is insufficient metadata to fully generate the "
"name. Please use other renaming options.</i>"
@@ -933,7 +969,7 @@ msgstr ""
"<i><b>Varning:</b> Det saknas metadata för att namnge. Var god välj andra "
"inställningar för namngivning.</i>"
-#: rapid/preferencesdialog.py:1509
+#: rapid/preferencesdialog.py:1512
msgid ""
"<i><b>Warning:</b> There is insufficient metadata to fully generate "
"subfolders. Please use other subfolder naming options.</i>"
@@ -942,13 +978,13 @@ msgstr ""
"underkataloger. Välj andra inställningar för att namnge underkataloger.</i>"
#. Translators: you should not modify or leave out the %s. This is a code used by the programming language python to insert a value that thes user will see
-#: rapid/preferencesdialog.py:1512
+#: rapid/preferencesdialog.py:1515
#, python-format
msgid "<i>Example: %s</i>"
msgstr "<i>Exempel: %s</i>"
#. Preferences list is now empty
-#: rapid/preferencesdialog.py:1602
+#: rapid/preferencesdialog.py:1605
#, python-format
msgid ""
"The %(filetype)s subfolder preferences entered are invalid and cannot be "
@@ -959,7 +995,7 @@ msgstr ""
"användas.\n"
"Återställer till standardvärden."
-#: rapid/preferencesdialog.py:1747
+#: rapid/preferencesdialog.py:1750
#, python-format
msgid ""
"The following regular expressions are invalid, and will be removed unless "
@@ -970,7 +1006,7 @@ msgstr ""
"ändrar dem:\n"
" %s"
-#: rapid/preferencesdialog.py:1749
+#: rapid/preferencesdialog.py:1752
#, python-format
msgid ""
"This regular expression is invalid, and will be removed unless you correct "
@@ -981,142 +1017,142 @@ msgstr ""
"ändrar det:\n"
" %s"
-#: rapid/preferencesdialog.py:1750
+#: rapid/preferencesdialog.py:1753
msgid "Invalid regular expression"
msgstr "Ogiltigt reguljärt uttryck"
#. Translators: this value is used as an example device when automatic backup device detection is enabled. You should translate this.
-#: rapid/preferencesdialog.py:1931
+#: rapid/preferencesdialog.py:1934
msgid "externaldrive1"
msgstr "extern_enhet_1"
#. Translators: this value is used as an example device when automatic backup device detection is enabled. You should translate this.
-#: rapid/preferencesdialog.py:1933
+#: rapid/preferencesdialog.py:1936
msgid "externaldrive2"
msgstr "extern_enhet_2"
-#: rapid/prefsrapid.py:126
+#: rapid/prefsrapid.py:127
msgid "New York"
msgstr "New York"
-#: rapid/prefsrapid.py:127
+#: rapid/prefsrapid.py:128
msgid "Manila"
msgstr "Manilla"
-#: rapid/prefsrapid.py:127
+#: rapid/prefsrapid.py:128
msgid "Prague"
msgstr "Prag"
-#: rapid/prefsrapid.py:127
+#: rapid/prefsrapid.py:128
msgid "Helsinki"
msgstr "Helsingfors"
-#: rapid/prefsrapid.py:127
+#: rapid/prefsrapid.py:128
msgid "Wellington"
msgstr "Wellington"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Tehran"
msgstr "Teheran"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Kampala"
msgstr "Kampala"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Paris"
msgstr "Paris"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Berlin"
msgstr "Berlin"
-#: rapid/prefsrapid.py:128
+#: rapid/prefsrapid.py:129
msgid "Sydney"
msgstr "Sydney"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Budapest"
msgstr "Budapest"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Rome"
msgstr "Rom"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Moscow"
msgstr "Moskva"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Delhi"
msgstr "Delhi"
-#: rapid/prefsrapid.py:129
+#: rapid/prefsrapid.py:130
msgid "Warsaw"
msgstr "Warszawa"
-#: rapid/prefsrapid.py:130
+#: rapid/prefsrapid.py:131
msgid "Jakarta"
msgstr "Djakarta"
-#: rapid/prefsrapid.py:130
+#: rapid/prefsrapid.py:131
msgid "Madrid"
msgstr "Madrid"
-#: rapid/prefsrapid.py:130
+#: rapid/prefsrapid.py:131
msgid "Stockholm"
msgstr "Stockholm"
#. components
-#: rapid/problemnotification.py:26 rapid/subfolderfile.py:363
+#: rapid/problemnotification.py:27 rapid/subfolderfile.py:358
msgid "subfolder"
msgstr "Underkatalog"
-#: rapid/problemnotification.py:27 rapid/subfolderfile.py:361
+#: rapid/problemnotification.py:28 rapid/subfolderfile.py:356
msgid "filename"
msgstr "Filnamn"
-#: rapid/problemnotification.py:80
+#: rapid/problemnotification.py:81
#, python-format
msgid "Date time value %s appears invalid."
msgstr "Datum/tid-värde %s verkar ogiltigt."
-#: rapid/problemnotification.py:81
+#: rapid/problemnotification.py:82
msgid "Filename does not have an extension."
msgstr "Filnamnet saknar filändelse."
#. a number component is something like the 8346 in IMG_8346.JPG
-#: rapid/problemnotification.py:83
+#: rapid/problemnotification.py:84
msgid "Filename does not have a number component."
msgstr "Filnamnet saknar sekvensnummer."
-#: rapid/problemnotification.py:84
+#: rapid/problemnotification.py:85
#, python-format
msgid "Error generating component %s."
msgstr "Ett fel uppstod när nummer %s skulle skapas."
#. a generic problem
-#: rapid/problemnotification.py:86
+#: rapid/problemnotification.py:87
#, python-format
msgid "%(filetype)s metadata cannot be read"
msgstr "Metadata i %(filetype)s kan inte läsas."
-#: rapid/problemnotification.py:88
+#: rapid/problemnotification.py:89
#, python-format
msgid "%(filetype)s %(area)s could not be generated"
msgstr "%(filetype)s %(area)s kunde inte skapas."
-#: rapid/problemnotification.py:90 rapid/problemnotification.py:91
+#: rapid/problemnotification.py:91 rapid/problemnotification.py:92
#, python-format
msgid "An error occurred when copying the %(filetype)s"
msgstr "Ett fel uppstod när %(filetype)s skulle kopieras"
-#: rapid/problemnotification.py:93 rapid/problemnotification.py:94
+#: rapid/problemnotification.py:94 rapid/problemnotification.py:95
#, python-format
msgid "%(filetype)s already exists"
msgstr "%(filetype)s finns redan"
-#: rapid/problemnotification.py:97
+#: rapid/problemnotification.py:98
#, python-format
msgid ""
"%(filetype)s could not be backed up because no suitable backup locations "
@@ -1125,7 +1161,7 @@ msgstr ""
"%(filetype)s kunde inte säkerhetskopieras, eftersom ingen plats för "
"säkerhetskopior hittades."
-#: rapid/problemnotification.py:102
+#: rapid/problemnotification.py:103
#, python-format
msgid ""
"%(image1)s was taken on %(image1_date)s at %(image1_time)s, and %(image2)s "
@@ -1134,12 +1170,12 @@ msgstr ""
"%(image1)s togs den %(image1_date)s kl %(image1_time)s, och %(image2)s den "
"%(image2_date)s kl %(image2_time)s."
-#: rapid/problemnotification.py:103
+#: rapid/problemnotification.py:104
#, python-format
msgid "%(filetype)s was already downloaded"
msgstr "%(filetype)s är redan nedladdad"
-#: rapid/problemnotification.py:107
+#: rapid/problemnotification.py:108
#, python-format
msgid ""
"The existing %(filetype)s was last modified on %(date)s at %(time)s. Unique "
@@ -1148,54 +1184,54 @@ msgstr ""
"Den existerande %(filetype)s ändrades senast den %(date)s kl %(time)s. Den "
"har fått '%(identifier)s' som unik identifierare."
-#: rapid/problemnotification.py:108
+#: rapid/problemnotification.py:109
#, python-format
msgid "The existing %(filetype)s was last modified on %(date)s at %(time)s."
msgstr ""
"Den existerande %(filetype)s ändrades senast den %(date)s kl %(time)s."
-#: rapid/problemnotification.py:109
+#: rapid/problemnotification.py:110
#, python-format
msgid "There is no data with which to name the %(filetype)s."
msgstr "Det saknas data för att namnge %(filetype)s."
-#: rapid/problemnotification.py:111
+#: rapid/problemnotification.py:112
#, python-format
msgid "Error: %(errorno)s %(strerror)s"
msgstr "Fel: %(errorno)s %(strerror)s"
-#: rapid/problemnotification.py:201
+#: rapid/problemnotification.py:202
msgid "The metadata might be corrupt."
msgstr "Metadatan kan vara korrupt."
-#: rapid/problemnotification.py:204
+#: rapid/problemnotification.py:205
msgid ""
"The filename, extension and Exif information indicate it has already been "
"downloaded."
msgstr "Filnamnet, filändelsen och Exif-informationen har redan överförts."
-#: rapid/problemnotification.py:223
+#: rapid/problemnotification.py:224
#, python-format
msgid " It was backed up to %(volume)s"
msgstr " Den har säkerhetskopierats till %(volume)s"
-#: rapid/problemnotification.py:225
+#: rapid/problemnotification.py:226
msgid " It was backed up to these devices: "
msgstr " Den har säkerhetskopierats till följande enheter: "
-#: rapid/problemnotification.py:227 rapid/problemnotification.py:288
-#: rapid/problemnotification.py:300
+#: rapid/problemnotification.py:228 rapid/problemnotification.py:289
+#: rapid/problemnotification.py:301
#, python-format
msgid "%s, "
msgstr "%s, "
-#: rapid/problemnotification.py:228 rapid/problemnotification.py:289
-#: rapid/problemnotification.py:301
+#: rapid/problemnotification.py:229 rapid/problemnotification.py:290
+#: rapid/problemnotification.py:302
#, python-format
msgid "%(volumes)s and %(final_volume)s."
msgstr "%(volumes)s och %(final_volume)s."
-#: rapid/problemnotification.py:240
+#: rapid/problemnotification.py:241
#, python-format
msgid ""
"Photos detected with the same filenames, but taken at different times: "
@@ -1204,486 +1240,453 @@ msgstr ""
"Hittade bilder med samma filnamn, fast tagna vid olika tillfällen: "
"%(details)s"
-#: rapid/problemnotification.py:257
+#: rapid/problemnotification.py:258
#, python-format
msgid "An error occurred when backing up on %(volume)s: %(inst)s."
msgstr ""
"Ett fel uppstod när säkerhetskopia skulle tas till %(volume)s: %(inst)s."
-#: rapid/problemnotification.py:259
+#: rapid/problemnotification.py:260
#, python-format
msgid "An error occurred when backing up on %(volume)s."
msgstr "Ett fel uppstod när säkerhetskopia skulle tas till %(volume)s."
-#: rapid/problemnotification.py:261
+#: rapid/problemnotification.py:262
msgid "Errors occurred when backing up on the following backup devices: "
msgstr ""
"Ett fel uppstod när säkerhetskopia skulle tas till följande enheter: "
-#: rapid/problemnotification.py:265 rapid/problemnotification.py:313
+#: rapid/problemnotification.py:266 rapid/problemnotification.py:314
#, python-format
msgid "%(volume)s (%(inst)s), "
msgstr "%(volume)s (%(inst)s), "
-#: rapid/problemnotification.py:267
+#: rapid/problemnotification.py:268
#, python-format
msgid "%(volume)s, "
msgstr "%(volume)s, "
-#: rapid/problemnotification.py:271 rapid/problemnotification.py:315
+#: rapid/problemnotification.py:272 rapid/problemnotification.py:316
#, python-format
msgid "%(volumes)s and %(volume)s (%(inst)s)."
msgstr "%(volumes)s och %(volume)s (%(inst)s)."
-#: rapid/problemnotification.py:276
+#: rapid/problemnotification.py:277
#, python-format
msgid "%(volumes)s and %(volume)s."
msgstr "%(volumes)s och %(volume)s."
-#: rapid/problemnotification.py:284
+#: rapid/problemnotification.py:285
#, python-format
msgid "Backup already exists on %(volume)s."
msgstr "Säkerhetskopia finns redan på %(volume)s."
-#: rapid/problemnotification.py:286
+#: rapid/problemnotification.py:287
msgid "Backups already exist in these locations: "
msgstr "Säkerhetskopia finns redan i: "
-#: rapid/problemnotification.py:296
+#: rapid/problemnotification.py:297
#, python-format
msgid "Backup overwritten on %(volume)s."
msgstr "Säkerhetskopia skrevs över på %(volume)s."
-#: rapid/problemnotification.py:298
+#: rapid/problemnotification.py:299
msgid "Backups overwritten on these devices: "
msgstr "Säkerhetskopia skrevs över i: "
-#: rapid/problemnotification.py:309
+#: rapid/problemnotification.py:310
#, python-format
msgid "An error occurred when creating directories on %(volume)s: %(inst)s."
msgstr "Ett fel uppstod när kataloger skulle skapas på %(volume)s: %(inst)s."
-#: rapid/problemnotification.py:311
+#: rapid/problemnotification.py:312
msgid ""
"Errors occurred when creating directories on the following backup devices: "
msgstr "Ett fel uppstod när kataloger skulle skapas på följande enheter: "
-#: rapid/problemnotification.py:322
+#: rapid/problemnotification.py:323
#, python-format
msgid "%(previousproblem)s Additionally, %(newproblem)s"
msgstr "%(previousproblem)s Mer problem därtill, %(newproblem)s"
-#: rapid/problemnotification.py:330
+#: rapid/problemnotification.py:331
#, python-format
msgid " Furthermore, there were %(problems)s."
msgstr " Problem hittades %(problems)s."
-#: rapid/problemnotification.py:332
+#: rapid/problemnotification.py:333
#, python-format
msgid " Furthermore, there was a %(problem)s."
msgstr " Ett problem hittades %(problem)s."
-#: rapid/problemnotification.py:341
+#: rapid/problemnotification.py:342
#, python-format
msgid "The %(type)s metadata is missing."
msgstr "%(type)s metadata saknas."
-#: rapid/problemnotification.py:343
+#: rapid/problemnotification.py:344
msgid "The following metadata is missing: "
msgstr "Följande metadata saknas: "
-#: rapid/problemnotification.py:346
+#: rapid/problemnotification.py:347
#, python-format
msgid "%(missing_metadata_elements)s and %(final_missing_metadata_element)s."
msgstr ""
"%(missing_metadata_elements)s oct %(final_missing_metadata_element)s."
-#: rapid/problemnotification.py:363
+#: rapid/problemnotification.py:364
msgid "Problems in subfolder and filename generation"
msgstr "Problem med skapande av undermappar och filnamn"
-#: rapid/problemnotification.py:365
+#: rapid/problemnotification.py:366
msgid "Problem in subfolder and filename generation"
msgstr "Problem med skapande av undermappar och filnamn"
-#: rapid/problemnotification.py:368
+#: rapid/problemnotification.py:369
#, python-format
msgid "Problems in %s generation"
msgstr "Problem med skapande av %s"
-#: rapid/problemnotification.py:370
+#: rapid/problemnotification.py:371
#, python-format
msgid "Problem in %s generation"
msgstr "Problem med skapande av %s"
-#: rapid/problemnotification.py:379
+#: rapid/problemnotification.py:380
#, python-format
msgid "%(filetype)s already exists, but it was backed up"
msgstr "%(filetype)s finns redan, men säkerhetskopierades"
-#: rapid/problemnotification.py:381
+#: rapid/problemnotification.py:382
#, python-format
msgid "An error occurred when copying the %(filetype)s, but it was backed up"
msgstr ""
"Ett fel uppstod vid kopiering av %(filetype)s, men säkerhetskopierades"
-#: rapid/problemnotification.py:401
+#: rapid/problemnotification.py:402
msgid "Multiple problems were encountered"
msgstr "Flera fel hittades"
-#: rapid/problemnotification.py:403 rapid/subfolderfile.py:230
+#: rapid/problemnotification.py:404 rapid/subfolderfile.py:233
msgid "Photos detected with the same filenames, but taken at different times"
msgstr "Bilder med samma filnamn hittades, fast tagna vid olika tillfällen"
-#: rapid/problemnotification.py:409
+#: rapid/problemnotification.py:410
msgid "there were errors backing up"
msgstr "det uppstod fel vid säkerhetskopiering"
-#: rapid/problemnotification.py:410
+#: rapid/problemnotification.py:411
msgid "There were errors backing up"
msgstr "Det uppstod fel vid säkerhetskopiering"
-#: rapid/problemnotification.py:412
+#: rapid/problemnotification.py:413
msgid "there was an error backing up"
msgstr "det uppstod ett fel vid säkerhetskopiering"
-#: rapid/problemnotification.py:413
+#: rapid/problemnotification.py:414
msgid "There was an error backing up"
msgstr "Det uppstod ett fel vid säkerhetskopiering"
#. e.g.
-#: rapid/problemnotification.py:416
+#: rapid/problemnotification.py:417
#, python-format
msgid "%(previousproblem)s, and %(backinguperror)s"
msgstr "%(previousproblem)s, och %(backinguperror)s"
-#: rapid/rpdfile.py:139
+#: rapid/rpdfile.py:153
#, python-format
msgid "%(number)s %(filetypes)s"
msgstr "%(number)s %(filetypes)s"
-#: rapid/subfolderfile.py:79
+#: rapid/rpdfile.py:163
+#, python-format
+msgid "scanning (found %(photos)s photos and %(videos)s videos)..."
+msgstr "söker igenom (har hittat %(photos)s bilder och %(videos)s videor)…"
+
+#: rapid/subfolderfile.py:80
#, python-format
msgid "%(hour)s:%(minute)s:%(second)s:%(subsecond)s"
msgstr "%(hour)s:%(minute)s:%(second)s:%(subsecond)s"
-#: rapid/subfolderfile.py:300
+#: rapid/subfolderfile.py:301
msgid "Photo has already been downloaded"
msgstr "Bilden har redan överförts"
-#: rapid/subfolderfile.py:301
+#: rapid/subfolderfile.py:302
#, python-format
msgid "Source: %(source)s"
msgstr "Källa: %(source)s"
-#: rapid/subfolderfile.py:359
+#: rapid/subfolderfile.py:354
msgid "subfolder and filename"
msgstr "undermapp och filnamn"
-#: rapid/subfolderfile.py:397
+#: rapid/subfolderfile.py:393
msgid "Failed to create download subfolder"
msgstr "Misslyckades med att skapa mapp för nedladdning"
-#: rapid/subfolderfile.py:398
+#: rapid/subfolderfile.py:394
#, python-format
msgid "Path: %s"
msgstr "Sökväg: %s"
-#: rapid/glade3/rapid.ui.h:1
-msgid "About..."
-msgstr "Om..."
-
#: rapid/glade3/rapid.ui.h:2
-msgid "Check All"
-msgstr "Markera alla"
+msgid "_File"
+msgstr "_Arkiv"
#: rapid/glade3/rapid.ui.h:3
-msgid "Check All Photos"
-msgstr "Markera alla bilder"
+msgid "Download / Pause"
+msgstr "Överföring / Paus"
#: rapid/glade3/rapid.ui.h:4
-msgid "Check All Videos"
-msgstr "Markera alla videor"
+msgid "_Select"
+msgstr "_Markera"
+
+#: rapid/glade3/rapid.ui.h:5
+msgid "Select All Without _Job Code"
+msgstr "Markera alla som sakna_r fototillfälle"
#: rapid/glade3/rapid.ui.h:6
-msgid "Download / Pause"
-msgstr "Överföring / Paus"
+msgid "Select All Wit_h Job Code"
+msgstr "Markera alla vid ett fototillf_älle"
#: rapid/glade3/rapid.ui.h:7
-msgid "Get Help Online..."
-msgstr "Få hjälp på internet..."
+msgid "_View"
+msgstr "_Visa"
#: rapid/glade3/rapid.ui.h:8
-msgid "Help"
-msgstr "Hjälp"
+msgid "_Error Log"
+msgstr "_Fellogg"
#: rapid/glade3/rapid.ui.h:9
-msgid "Make a Donation..."
-msgstr "Donera..."
+msgid "_Clear Completed Downloads"
+msgstr "_Töm slutförda överföringar"
#: rapid/glade3/rapid.ui.h:10
-msgid "Next File"
-msgstr "Nästa fil"
-
-#: rapid/glade3/rapid.ui.h:11
-msgid "Preferences"
-msgstr "Inställningar"
-
-#: rapid/glade3/rapid.ui.h:12
msgid "Previous File"
msgstr "Föregående fil"
-#: rapid/glade3/rapid.ui.h:13
-msgid "Quit"
-msgstr "Avsluta"
-
-#: rapid/glade3/rapid.ui.h:15
-msgid "Refresh"
-msgstr "Uppdatera"
-
-#: rapid/glade3/rapid.ui.h:16
-msgid "Report a Problem..."
-msgstr "Rapportera problem..."
-
-#: rapid/glade3/rapid.ui.h:17
-msgid "Select All Wit_h Job Code"
-msgstr "Markera alla vid ett fototillf_älle"
-
-#: rapid/glade3/rapid.ui.h:18
-msgid "Select All Without _Job Code"
-msgstr "Markera alla som sakna_r fototillfälle"
-
-#: rapid/glade3/rapid.ui.h:19
-msgid "Translate this Application..."
-msgstr "Översätt detta program..."
-
-#: rapid/glade3/rapid.ui.h:20
-msgid "Uncheck All"
-msgstr "Avmarkera alla"
-
-#: rapid/glade3/rapid.ui.h:21
-msgid "_Check All"
-msgstr "_Markera allt"
-
-#: rapid/glade3/rapid.ui.h:22
-msgid "_Clear Completed Downloads"
-msgstr "_Töm slutförda överföringar"
-
-#: rapid/glade3/rapid.ui.h:23
-msgid "_Download"
-msgstr "_Överför"
-
-#: rapid/glade3/rapid.ui.h:24
-msgid "_Error Log"
-msgstr "_Fellogg"
-
-#: rapid/glade3/rapid.ui.h:25
-msgid "_File"
-msgstr "_Arkiv"
+#: rapid/glade3/rapid.ui.h:11
+msgid "Next File"
+msgstr "Nästa fil"
-#: rapid/glade3/rapid.ui.h:26
+#: rapid/glade3/rapid.ui.h:12
msgid "_Help"
msgstr "_Hjälp"
-#: rapid/glade3/rapid.ui.h:27
-msgid "_Include in download"
-msgstr "_Ta med i överföring"
-
-#: rapid/glade3/rapid.ui.h:28
+#: rapid/glade3/rapid.ui.h:13
msgid "_Make a Donation..."
msgstr "_Donera..."
-#: rapid/glade3/rapid.ui.h:29
-msgid "_Select"
-msgstr "_Markera"
-
-#: rapid/glade3/rapid.ui.h:30
+#: rapid/glade3/rapid.ui.h:14
msgid "_Translate this Application..."
msgstr "_Översätt programmet..."
-#: rapid/glade3/rapid.ui.h:31
+#: rapid/glade3/rapid.ui.h:15
+msgid "_Check All"
+msgstr "_Markera allt"
+
+#: rapid/glade3/rapid.ui.h:16
msgid "_Uncheck All"
msgstr "_Avmarkera allt"
-#: rapid/glade3/rapid.ui.h:32
-msgid "_View"
-msgstr "_Visa"
+#: rapid/glade3/rapid.ui.h:17
+msgid "_Include in download"
+msgstr "_Ta med i överföring"
+
+#: rapid/glade3/rapid.ui.h:18
+msgid "_Download"
+msgstr "_Överför"
#: rapid/glade3/prefs.ui.h:1
-msgid " "
-msgstr " "
+msgid "Preferences: Rapid Photo Downloader"
+msgstr "Inställningar: Rapid Photo Downloader"
#: rapid/glade3/prefs.ui.h:2
-msgid " hh:mm"
-msgstr " hh:mm"
+msgid "<span weight=\"bold\" size=\"x-large\">Photo Download Folders</span>"
+msgstr ""
+"<span weight=\"bold\" size=\"x-large\">Bildöverföringskataloger</span>"
#: rapid/glade3/prefs.ui.h:3
-msgid ":"
-msgstr ":"
+msgid "<i>Example: /home/user/Pictures</i>"
+msgstr "<i>Exempel: /home/user/Bilder</i>"
#: rapid/glade3/prefs.ui.h:4
-msgid "<b>Backup</b>"
-msgstr "<b>Säkerhetskopia</b>"
+msgid "<b>Download Subfolders</b>"
+msgstr "<b>Underkataloger till överföring</b>"
#: rapid/glade3/prefs.ui.h:5
-msgid "<b>Compatibility with Other Operating Systems</b>"
-msgstr "<b>Kompatibilitet med andra operativsystem</b>"
+msgid "Download folder:"
+msgstr "Katalog för överföring:"
#: rapid/glade3/prefs.ui.h:6
-msgid "<b>Download Folder</b>"
-msgstr "<b>Överföringskatalog</b>"
+msgid ""
+"Choose the download folder. Subfolders for the downloaded photos will be "
+"automatically created in this folder using the structure specified below."
+msgstr ""
+"Ange en katalog för överföring. Underkataloger kommer att skapas automatiskt "
+"enligt strukturen nedan."
#: rapid/glade3/prefs.ui.h:7
-msgid "<b>Download Subfolders</b>"
-msgstr "<b>Underkataloger till överföring</b>"
+msgid "<b>Download Folder</b>"
+msgstr "<b>Överföringskatalog</b>"
#: rapid/glade3/prefs.ui.h:8
-msgid "<b>Example</b>"
-msgstr "<b>Exempel</b>"
+msgid "Photo Folders"
+msgstr "Bildkataloger"
#: rapid/glade3/prefs.ui.h:9
-msgid "<b>Job Codes</b>"
-msgstr "<b>Fototillfällen</b>"
+msgid "<span weight=\"bold\" size=\"x-large\">Photo Rename</span>\t"
+msgstr "<span weight=\"bold\" size=\"x-large\">Bildnamngivning</span>\t"
#: rapid/glade3/prefs.ui.h:10
msgid "<b>Photo Rename</b>"
msgstr "<b>Bildnamngivning</b>"
#: rapid/glade3/prefs.ui.h:11
-msgid "<b>Photo and Video Name Conflicts</b>"
-msgstr "<b>Bild- och filmnamnkonflikter</b>"
+msgid " "
+msgstr " "
#: rapid/glade3/prefs.ui.h:12
-msgid "<b>Program Automation</b>"
-msgstr "<b>Automatisering av programmet</b>"
+msgid "<i>New:</i>"
+msgstr "<i>Ny:</i>"
#: rapid/glade3/prefs.ui.h:13
-msgid "<b>Sequence Numbers</b>"
-msgstr "<b>Sekvensnummer</b>"
+msgid "<i>Original:</i>"
+msgstr "<i>Original:</i>"
#: rapid/glade3/prefs.ui.h:14
-msgid "<i>/media/externaldrive/Photos</i>"
-msgstr "<i>/media/extern_enhet/Photos</i>"
+msgid "<b>Example</b>"
+msgstr "<b>Exempel</b>"
#: rapid/glade3/prefs.ui.h:15
-msgid "<i>Example: /home/user/Pictures</i>"
-msgstr "<i>Exempel: /home/user/Bilder</i>"
+msgid "Photo Rename"
+msgstr "Bildnamngivning"
#: rapid/glade3/prefs.ui.h:16
-msgid "<i>Example:</i>"
-msgstr "<i>Exempel:</i>"
+msgid "<span weight=\"bold\" size=\"x-large\">Video Download Folders</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Filmöverföringsmappar</span>"
#: rapid/glade3/prefs.ui.h:17
-msgid "<i>New:</i>"
-msgstr "<i>Ny:</i>"
+msgid ""
+"Sorry, video downloading functionality disabled. To download videos, please "
+"install either the <i>hachoir metadata</i> and <i>kaa metadata</i> packages "
+"for python, or <i>exiftool</i>."
+msgstr ""
+"Ledsen, men videohämtningsfunktionen har inaktiverats. För att hämta videor, "
+"installera antingen paketen <i>hachoir metadata</i> och <i>kaa metadata</i> "
+"för python, eller <i>exiftool</i>."
#: rapid/glade3/prefs.ui.h:18
-msgid "<i>Original:</i>"
-msgstr "<i>Original:</i>"
+msgid ""
+"Choose the download folder. Subfolders for the downloaded videos will be "
+"automatically created in this folder using the structure specified below."
+msgstr ""
+"Välj katalog för överföring. Underkataloger kommer att skapas automatiskt "
+"enligt inställningarna nedan."
#: rapid/glade3/prefs.ui.h:19
-msgid "<span weight=\"bold\" size=\"x-large\">Backup</span>\t"
-msgstr "<span weight=\"bold\" size=\"x-large\">Säkerhetskopiering</span>\t"
+msgid "Video Folders"
+msgstr "Filmkataloger"
#: rapid/glade3/prefs.ui.h:20
-msgid "<span weight=\"bold\" size=\"x-large\">Device Options</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Enhetsinställningar</span>"
+msgid "<span weight=\"bold\" size=\"x-large\">Video Rename</span>\t"
+msgstr "<span weight=\"bold\" size=\"x-large\">Filmnamngivning</span>\t"
#: rapid/glade3/prefs.ui.h:21
-msgid "<span weight=\"bold\" size=\"x-large\">Devices</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Enheter</span>"
+msgid "Video Rename"
+msgstr "Filmnamngivning"
#: rapid/glade3/prefs.ui.h:22
-msgid "<span weight=\"bold\" size=\"x-large\">Error Handling</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Felhantering</span>"
+msgid "<span weight=\"bold\" size=\"x-large\">Rename Options</span>"
+msgstr ""
+"<span weight=\"bold\" size=\"x-large\">Alternativ för namnbyte</span>"
#: rapid/glade3/prefs.ui.h:23
-msgid "<span weight=\"bold\" size=\"x-large\">Job Codes</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Fototillfällen</span>"
+msgid "<b>Sequence Numbers</b>"
+msgstr "<b>Sekvensnummer</b>"
#: rapid/glade3/prefs.ui.h:24
-msgid "<span weight=\"bold\" size=\"x-large\">Miscellaneous</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Diverse</span>"
+msgid ""
+"Specify the time in 24 hour format at which the <i>Downloads today</i> "
+"sequence number should be reset."
+msgstr ""
+"Ange tiden i 24-timmarsformat då <i>Antal överföringar idag</i> ska "
+"nollställas."
#: rapid/glade3/prefs.ui.h:25
-msgid "<span weight=\"bold\" size=\"x-large\">Photo Download Folders</span>"
-msgstr ""
-"<span weight=\"bold\" size=\"x-large\">Bildöverföringskataloger</span>"
+msgid "Day start:"
+msgstr "Början på dagen:"
#: rapid/glade3/prefs.ui.h:26
-msgid "<span weight=\"bold\" size=\"x-large\">Photo Rename</span>\t"
-msgstr "<span weight=\"bold\" size=\"x-large\">Bildnamngivning</span>\t"
+msgid "Downloads today:"
+msgstr "Antal överföringar idag:"
#: rapid/glade3/prefs.ui.h:27
-msgid "<span weight=\"bold\" size=\"x-large\">Rename Options</span>"
-msgstr ""
-"<span weight=\"bold\" size=\"x-large\">Alternativ för namnbyte</span>"
+msgid "Stored number:"
+msgstr "Lagrat nummer:"
#: rapid/glade3/prefs.ui.h:28
-msgid "<span weight=\"bold\" size=\"x-large\">Video Download Folders</span>"
-msgstr "<span weight=\"bold\" size=\"x-large\">Filmöverföringsmappar</span>"
+msgid ":"
+msgstr ":"
#: rapid/glade3/prefs.ui.h:29
-msgid "<span weight=\"bold\" size=\"x-large\">Video Rename</span>\t"
-msgstr "<span weight=\"bold\" size=\"x-large\">Filmnamngivning</span>\t"
+msgid " hh:mm"
+msgstr " hh:mm"
#: rapid/glade3/prefs.ui.h:30
-msgid "Add unique identifier"
-msgstr "Lägg till unik identifierare"
+msgid "Synchronize RAW + JPEG sequence numbers"
+msgstr "Synkronisera RAW och JPEG-sekvensnummer"
#: rapid/glade3/prefs.ui.h:31
-msgid "Automatically detect Portable Storage Devices"
-msgstr "Hitta bärbara lagringsenheter automatiskt"
+msgid "<b>Compatibility with Other Operating Systems</b>"
+msgstr "<b>Kompatibilitet med andra operativsystem</b>"
#: rapid/glade3/prefs.ui.h:32
-msgid "Automatically detect backup devices"
-msgstr "Hitta enheter för säkerhetskopiering automatiskt"
+msgid ""
+"Specify whether photo, video and folder names should have any characters "
+"removed that are not allowed by other operating systems."
+msgstr ""
+"Ange om specialtecken som inte stöds av operativsystemet ska tas bort från "
+"filnamn."
#: rapid/glade3/prefs.ui.h:33
-msgid "Automatically detect devices"
-msgstr "Hitta enheter automatiskt"
+msgid "Strip incompatible characters"
+msgstr "Avlägsna inkompatibla tecken"
#: rapid/glade3/prefs.ui.h:34
-msgid "Automatically rotate JPEG images"
-msgstr ""
+msgid "Rename Options"
+msgstr "Inställningar för namnbyte"
#: rapid/glade3/prefs.ui.h:35
-msgid "Backup"
-msgstr "Säkerhetskopiering"
+msgid "<span weight=\"bold\" size=\"x-large\">Job Codes</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Fototillfällen</span>"
#: rapid/glade3/prefs.ui.h:36
-msgid "Backup photos and videos when downloading"
-msgstr "Säkerhetskopiera bilder och filmer vid överföring"
+msgid "<b>Job Codes</b>"
+msgstr "<b>Fototillfällen</b>"
#: rapid/glade3/prefs.ui.h:37
-msgid ""
-"Choose the download folder. Subfolders for the downloaded photos will be "
-"automatically created in this folder using the structure specified below."
-msgstr ""
-"Ange en katalog för överföring. Underkataloger kommer att skapas automatiskt "
-"enligt strukturen nedan."
-
-#: rapid/glade3/prefs.ui.h:38
-msgid ""
-"Choose the download folder. Subfolders for the downloaded videos will be "
-"automatically created in this folder using the structure specified below."
-msgstr ""
-"Välj katalog för överföring. Underkataloger kommer att skapas automatiskt "
-"enligt inställningarna nedan."
+msgid "_Add..."
+msgstr "_Lägg till..."
#: rapid/glade3/prefs.ui.h:39
-msgid "Day start:"
-msgstr "Början på dagen:"
+msgid "R_emove All"
+msgstr "_Ta bort alla"
#: rapid/glade3/prefs.ui.h:40
-msgid "Device Options"
-msgstr "Enhetsinställningar"
+msgid "Job Codes"
+msgstr "Fototillfällen"
#: rapid/glade3/prefs.ui.h:41
+msgid "<span weight=\"bold\" size=\"x-large\">Devices</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Enheter</span>"
+
+#: rapid/glade3/prefs.ui.h:42
msgid "Devices"
msgstr "Enheter"
-#: rapid/glade3/prefs.ui.h:42
+#: rapid/glade3/prefs.ui.h:43
msgid ""
"Devices are from where to download photos and videos, such as cameras, "
"memory cards or Portable Storage Devices.\n"
@@ -1706,35 +1709,31 @@ msgstr ""
"fungerar dåligt eller inte alls, prova att aktivera PTP läge på din kamera. "
"Om det ändå inte fungerar måste du använda en kortläsare.</i>"
-#: rapid/glade3/prefs.ui.h:47
-msgid "Download folder:"
-msgstr "Katalog för överföring:"
-
#: rapid/glade3/prefs.ui.h:48
-msgid "Downloads today:"
-msgstr "Antal överföringar idag:"
+msgid "Automatically detect Portable Storage Devices"
+msgstr "Hitta bärbara lagringsenheter automatiskt"
#: rapid/glade3/prefs.ui.h:49
-msgid "Error Handling"
-msgstr "Felhantering"
+msgid "Automatically detect devices"
+msgstr "Hitta enheter automatiskt"
#: rapid/glade3/prefs.ui.h:50
-msgid "Exit program even if download had warnings or errors"
-msgstr "Avsluta programmet även om fel eller varningar uppstod"
-
-#: rapid/glade3/prefs.ui.h:51
-msgid "Exit program when download completes"
-msgstr "Avsluta programmet när överföring är klar"
-
-#: rapid/glade3/prefs.ui.h:52
-msgid "Generate thumbnails (slower)"
-msgstr "Skapa miniatyrer (långsammare)"
-
-#: rapid/glade3/prefs.ui.h:53
msgid ""
-"If you disable automatic detection, choose the exact backup locations."
+"If you enable automatic detection of Portable Storage Devices, the entire "
+"device will be scanned. On large devices, this could take some time.\n"
+"\n"
+"When this option is enabled, and a potential device is detected, you will be "
+"prompted to determine if it should be scanned or not."
msgstr ""
-"Om du inaktiverar automatisk sökning, ange exakt plats för säkerhetskopior."
+"Om du aktiverar sökning av externa enheter så kommer hela enheten att "
+"avsökas. På stora enheter kan det ta en stund.\n"
+"\n"
+"När denna inställning är påslagen och en potentiell enhet hittas, så kommer "
+"du att frågas om den ska avsökas eller ej."
+
+#: rapid/glade3/prefs.ui.h:53
+msgid "Location:"
+msgstr "Plats:"
#: rapid/glade3/prefs.ui.h:54
msgid ""
@@ -1744,185 +1743,178 @@ msgstr ""
"Om du inaktiverar automatisk sökning, ange exakt plats för bilder och videor."
#: rapid/glade3/prefs.ui.h:55
+msgid "<span weight=\"bold\" size=\"x-large\">Device Options</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Enhetsinställningar</span>"
+
+#: rapid/glade3/prefs.ui.h:56
+msgid "Remembered Paths"
+msgstr "Sparade sökvägar"
+
+#: rapid/glade3/prefs.ui.h:57
msgid ""
-"If you enable automatic detection of Portable Storage Devices, the entire "
-"device will be scanned. On large devices, this could take some time.\n"
-"\n"
-"When this option is enabled, and a potential device is detected, you will be "
-"prompted to determine if it should be scanned or not."
+"Remembered paths are those associated with devices that you have chosen to "
+"always scan or ignore when automatic detection of Portable Storage Devices "
+"is enabled."
msgstr ""
-"Om du aktiverar sökning av externa enheter så kommer hela enheten att "
-"avsökas. På stora enheter kan det ta en stund.\n"
-"\n"
-"När denna inställning är påslagen och en potentiell enhet hittas, så kommer "
-"du att frågas om den ska avsökas eller ej."
+"Sparade sökvägar är sådana som förknippas med enheter där du har valt att "
+"alltid avsöka eller ignorera, när automatisk avsökning är påslaget."
#: rapid/glade3/prefs.ui.h:58
msgid "Ignored Paths"
msgstr "Ignorerade sökvägar"
#: rapid/glade3/prefs.ui.h:59
-msgid "Job Codes"
-msgstr "Fototillfällen"
-
-#: rapid/glade3/prefs.ui.h:60
-msgid "Location:"
-msgstr "Plats:"
+msgid ""
+"Specify the ending portion of any paths you want ignored when scanning "
+"devices for photos or videos. Any path ending with the values below will not "
+"be scanned."
+msgstr "Ange namnändelse på sökvägar som du inte vill att de ska avsökas."
#: rapid/glade3/prefs.ui.h:61
-msgid "Miscellaneous"
-msgstr "Diverse"
+msgid "Re_move All"
+msgstr "Ta bo_rt alla"
#: rapid/glade3/prefs.ui.h:62
-msgid "Overwrite"
-msgstr "Ersätt"
+msgid "Use _python-style regular expressions"
+msgstr "Använd Python-kompatibla reguljära uttryck"
#: rapid/glade3/prefs.ui.h:63
-msgid "Performance"
-msgstr "Prestanda"
+msgid "Device Options"
+msgstr "Enhetsinställningar"
#: rapid/glade3/prefs.ui.h:64
-msgid "Photo Folders"
-msgstr "Bildkataloger"
+msgid "<span weight=\"bold\" size=\"x-large\">Backup</span>\t"
+msgstr "<span weight=\"bold\" size=\"x-large\">Säkerhetskopiering</span>\t"
#: rapid/glade3/prefs.ui.h:65
-msgid "Photo Rename"
-msgstr "Bildnamngivning"
+msgid "<b>Backup</b>"
+msgstr "<b>Säkerhetskopia</b>"
#: rapid/glade3/prefs.ui.h:66
-msgid "Photo backup folder name:"
-msgstr "Plats för säkerhetskopiering av bilder:"
+msgid ""
+"If you disable automatic detection, choose the exact backup locations."
+msgstr ""
+"Om du inaktiverar automatisk sökning, ange exakt plats för säkerhetskopior."
#: rapid/glade3/prefs.ui.h:67
-msgid "Photo backup location:"
-msgstr "Plats för säkerhetskopiering av bilder:"
+msgid "Automatically detect backup devices"
+msgstr "Hitta enheter för säkerhetskopiering automatiskt"
#: rapid/glade3/prefs.ui.h:68
-msgid "Preferences: Rapid Photo Downloader"
-msgstr "Inställningar: Rapid Photo Downloader"
+msgid ""
+"You can have your photos and videos backed up to multiple locations as they "
+"are downloaded, e.g. external hard drives."
+msgstr ""
+"Du kan säkerhetskopiera dina bilder och filmer till flera mål när de "
+"överförs, till exempel externa hårddiskar."
-#: rapid/glade3/prefs.ui.h:70
-msgid "R_emove All"
-msgstr "_Ta bort alla"
+#: rapid/glade3/prefs.ui.h:69
+msgid "Backup photos and videos when downloading"
+msgstr "Säkerhetskopiera bilder och filmer vid överföring"
-#: rapid/glade3/prefs.ui.h:72
-msgid "Re_move All"
-msgstr "Ta bo_rt alla"
+#: rapid/glade3/prefs.ui.h:70
+msgid ""
+"Specify the folder in which backups are stored on the device. \n"
+"\n"
+"<i>Note: this will also be used to determine whether or not the device is "
+"used for backups. For each device you wish to use for backing up to, create "
+"a folder in it with one of these names.</i>"
+msgstr ""
+"Välj i vilken katalog på enheten som används till säkerhetskopior.\n"
+"\n"
+"<i>Observera att katalogen kommer användas för att avgöra om enheten används "
+"till säkerhetskopior. För varje enhet du vill använda till säkerhetskopior "
+"kan du skapa en mapp med ett av dessa namn.</i>"
#: rapid/glade3/prefs.ui.h:73
-msgid "Remembered Paths"
-msgstr "Sparade sökvägar"
+msgid "Photo backup location:"
+msgstr "Plats för säkerhetskopiering av bilder:"
#: rapid/glade3/prefs.ui.h:74
-msgid ""
-"Remembered paths are those associated with devices that you have chosen to "
-"always scan or ignore when automatic detection of Portable Storage Devices "
-"is enabled."
-msgstr ""
-"Sparade sökvägar är sådana som förknippas med enheter där du har valt att "
-"alltid avsöka eller ignorera, när automatisk avsökning är påslaget."
+msgid "Photo backup folder name:"
+msgstr "Plats för säkerhetskopiering av bilder:"
#: rapid/glade3/prefs.ui.h:75
-msgid "Rename Options"
-msgstr "Inställningar för namnbyte"
+msgid "<i>Example:</i>"
+msgstr "<i>Exempel:</i>"
#: rapid/glade3/prefs.ui.h:76
-msgid "Skip"
-msgstr "Hoppa över"
+msgid "<i>/media/externaldrive/Photos</i>"
+msgstr "<i>/media/extern_enhet/Photos</i>"
#: rapid/glade3/prefs.ui.h:77
-msgid "Skip download"
-msgstr "Hoppa över överföring"
+msgid "Video backup folder name:"
+msgstr "Katalog för säkerhetskopiering av film:"
#: rapid/glade3/prefs.ui.h:78
-msgid ""
-"Sorry, video downloading functionality disabled. To download videos, please "
-"install either the <i>hachoir metadata</i> and <i>kaa metadata</i> packages "
-"for python, or <i>exiftool</i>."
-msgstr ""
+msgid "Video backup location:"
+msgstr "Plats för säkerhetskopiering av videor:"
#: rapid/glade3/prefs.ui.h:79
-msgid ""
-"Specify the ending portion of any paths you want ignored when scanning "
-"devices for photos or videos. Any path ending with the values below will not "
-"be scanned."
-msgstr "Ange namnändelse på sökvägar som du inte vill att de ska avsökas."
+msgid "Backup"
+msgstr "Säkerhetskopiering"
#: rapid/glade3/prefs.ui.h:80
-msgid ""
-"Specify the folder in which backups are stored on the device. \n"
-"\n"
-"<i>Note: this will also be used to determine whether or not the device is "
-"used for backups. For each device you wish to use for backing up to, create "
-"a folder in it with one of these names.</i>"
-msgstr ""
-"Välj i vilken katalog på enheten som används till säkerhetskopior.\n"
-"\n"
-"<i>Observera att katalogen kommer användas för att avgöra om enheten används "
-"till säkerhetskopior. För varje enhet du vill använda till säkerhetskopior "
-"kan du skapa en mapp med ett av dessa namn.</i>"
+msgid "<span weight=\"bold\" size=\"x-large\">Miscellaneous</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Diverse</span>"
-#: rapid/glade3/prefs.ui.h:83
-msgid ""
-"Specify the time in 24 hour format at which the <i>Downloads today</i> "
-"sequence number should be reset."
-msgstr ""
-"Ange tiden i 24-timmarsformat då <i>Antal överföringar idag</i> ska "
-"nollställas."
+#: rapid/glade3/prefs.ui.h:81
+msgid "<b>Program Automation</b>"
+msgstr "<b>Automatisering av programmet</b>"
-#: rapid/glade3/prefs.ui.h:84
-msgid ""
-"Specify whether photo, video and folder names should have any characters "
-"removed that are not allowed by other operating systems."
-msgstr ""
-"Ange om specialtecken som inte stöds av operativsystemet ska tas bort från "
-"filnamn."
+#: rapid/glade3/prefs.ui.h:82
+msgid "Unmount (\"eject\") device upon download completion"
+msgstr "Mata ut och avmontera enheter när överföring är klar"
-#: rapid/glade3/prefs.ui.h:85
+#: rapid/glade3/prefs.ui.h:83
msgid "Start downloading at program startup"
msgstr "Börja överföring vid programstart"
-#: rapid/glade3/prefs.ui.h:86
+#: rapid/glade3/prefs.ui.h:84
msgid "Start downloading upon device insertion"
msgstr "Påbörja överföring när enhet sätts i"
+#: rapid/glade3/prefs.ui.h:85
+msgid "Exit program when download completes"
+msgstr "Avsluta programmet när överföring är klar"
+
+#: rapid/glade3/prefs.ui.h:86
+msgid "Exit program even if download had warnings or errors"
+msgstr "Avsluta programmet även om fel eller varningar uppstod"
+
#: rapid/glade3/prefs.ui.h:87
-msgid "Stored number:"
-msgstr "Lagrat nummer:"
+msgid "Automatically rotate JPEG images"
+msgstr "Rotera JPEG-bilder automatiskt"
#: rapid/glade3/prefs.ui.h:88
-msgid "Strip incompatible characters"
-msgstr "Avlägsna inkompatibla tecken"
+msgid "Performance"
+msgstr "Prestanda"
#: rapid/glade3/prefs.ui.h:89
-msgid "Synchronize RAW + JPEG sequence numbers"
-msgstr "Synkronisera RAW och JPEG-sekvensnummer"
+msgid "Generate thumbnails (slower)"
+msgstr "Skapa miniatyrer (långsammare)"
#: rapid/glade3/prefs.ui.h:90
-msgid "Unmount (\"eject\") device upon download completion"
-msgstr "Mata ut och avmontera enheter när överföring är klar"
+msgid "Miscellaneous"
+msgstr "Diverse"
#: rapid/glade3/prefs.ui.h:91
-msgid "Use _python-style regular expressions"
-msgstr "Använd Python-kompatibla reguljära uttryck"
+msgid "<span weight=\"bold\" size=\"x-large\">Error Handling</span>"
+msgstr "<span weight=\"bold\" size=\"x-large\">Felhantering</span>"
#: rapid/glade3/prefs.ui.h:92
-msgid "Video Folders"
-msgstr "Filmkataloger"
+msgid "<b>Photo and Video Name Conflicts</b>"
+msgstr "<b>Bild- och filmnamnkonflikter</b>"
#: rapid/glade3/prefs.ui.h:93
-msgid "Video Rename"
-msgstr "Filmnamngivning"
+msgid "Add unique identifier"
+msgstr "Lägg till unik identifierare"
#: rapid/glade3/prefs.ui.h:94
-msgid "Video backup folder name:"
-msgstr "Katalog för säkerhetskopiering av film:"
+msgid "Skip download"
+msgstr "Hoppa över överföring"
#: rapid/glade3/prefs.ui.h:95
-msgid "Video backup location:"
-msgstr "Plats för säkerhetskopiering av videor:"
-
-#: rapid/glade3/prefs.ui.h:96
msgid ""
"When a photo or video of the same name has already been downloaded, choose "
"whether to skip downloading the file, or to add a unique indentifier."
@@ -1930,7 +1922,7 @@ msgstr ""
"När en bild eller video med samma namn redan har överförts, välj om den ska "
"skippas eller tilldelas ett unikt nummer."
-#: rapid/glade3/prefs.ui.h:97
+#: rapid/glade3/prefs.ui.h:96
msgid ""
"When backing up, choose whether to overwrite a file on the backup device "
"that has the same name, or skip backing it up."
@@ -1938,17 +1930,17 @@ msgstr ""
"Ange om filer som redan finns på enheten för säkerhetskopiering skall "
"skrivas över, eller inte säkerhetskopieras."
+#: rapid/glade3/prefs.ui.h:97
+msgid "Overwrite"
+msgstr "Ersätt"
+
#: rapid/glade3/prefs.ui.h:98
-msgid ""
-"You can have your photos and videos backed up to multiple locations as they "
-"are downloaded, e.g. external hard drives."
-msgstr ""
-"Du kan säkerhetskopiera dina bilder och filmer till flera mål när de "
-"överförs, till exempel externa hårddiskar."
+msgid "Skip"
+msgstr "Hoppa över"
#: rapid/glade3/prefs.ui.h:99
-msgid "_Add..."
-msgstr "_Lägg till..."
+msgid "Error Handling"
+msgstr "Felhantering"
#: rapid/glade3/about.ui.h:1
msgid "Import your photos and videos efficiently and reliably"
diff --git a/rapid/ChangeLog b/rapid/ChangeLog
index 6a28146..cc27252 100644
--- a/rapid/ChangeLog
+++ b/rapid/ChangeLog
@@ -1,3 +1,38 @@
+Version 0.4.6
+-------------
+
+2013-01-22
+
+Fixed bug #1083756: Application shows duplicate sources.
+Fixed bug #1093330: Photo rename ignores SubSeconds when 00.
+
+Added extra debugging output to help trace program execution progress.
+
+Updated German and Spanish translations.
+
+Version 0.4.6 Beta 1
+-------------
+
+2012-11-26
+
+Fixed bug #1023586: Added RAW file support for Nikon NRW files. Rapid Photo
+Downloader uses the exiv2 program to read a photo's metadata. Although the NRW
+format is not officially supported by exiv2, it appears to work. If you have
+NRW files and Rapid Photo Downloader crashes while reading this files, please
+file a bug report.
+
+Preliminary and tentative fix for bug #1025908: Application freezes under
+Ubuntu 12.10. This fix should not be considered final, and needs further
+testing.
+
+Added Arabic translation. Updated Czech, Danish, French, Italian, Norwegian,
+Russian, Serbian, Spanish and Swedish translations.
+
+Fixed missing dependencies on python-dbus and exiv2 in Debian/control file.
+
+Added extra debugging output to help trace program execution progress.
+
+
Version 0.4.5
-------------
@@ -113,6 +148,8 @@ confirm if this is really what they want to do.
Fixed bug #792228: clear all thumbnails when refresh command issued.
+Fixed bug #890949: Panasonic MOD format and duplicate filename issue
+
Fixed a bug where the device progress bar would occasionally disappear when
the download device was changed.
diff --git a/rapid/backupfile.py b/rapid/backupfile.py
index 6581e6d..310e665 100644
--- a/rapid/backupfile.py
+++ b/rapid/backupfile.py
@@ -23,6 +23,7 @@ import tempfile
import os
import gio
+import shutil
import logging
logger = multiprocessing.get_logger()
@@ -41,7 +42,7 @@ from gettext import gettext as _
class BackupFiles(multiprocessing.Process):
def __init__(self, path, name,
- batch_size_MB, results_pipe, terminate_queue,
+ batch_size_MB, results_pipe, terminate_queue,
run_event):
multiprocessing.Process.__init__(self)
self.results_pipe = results_pipe
@@ -50,7 +51,11 @@ class BackupFiles(multiprocessing.Process):
self.path = path
self.mount_name = name
self.run_event = run_event
-
+
+ # As of Ubuntu 12.10 / Fedora 18, the file move/rename command is running agonisingly slowly
+ # A hackish workaround is to replace it with the standard python function
+ self.use_gnome_file_operations = True
+
def check_termination_request(self):
"""
Check to see this process has not been requested to immediately terminate
@@ -61,8 +66,8 @@ class BackupFiles(multiprocessing.Process):
logger.info("Terminating file backup")
return True
return False
-
-
+
+
def update_progress(self, amount_downloaded, total):
# first check if process is being terminated
self.amount_downloaded = amount_downloaded
@@ -74,22 +79,22 @@ class BackupFiles(multiprocessing.Process):
chunk_downloaded = amount_downloaded - self.bytes_downloaded
if (chunk_downloaded > self.batch_size_bytes) or (amount_downloaded == total):
self.bytes_downloaded = amount_downloaded
-
+
if amount_downloaded == total:
# this function is called a couple of times when total is reached
self.total_reached = True
-
+
self.results_pipe.send((rpdmp.CONN_PARTIAL, (rpdmp.MSG_BYTES, (self.scan_pid, self.pid, self.total_downloaded + amount_downloaded, chunk_downloaded))))
if amount_downloaded == total:
self.bytes_downloaded = 0
-
+
def progress_callback(self, amount_downloaded, total):
self.update_progress(amount_downloaded, total)
-
+
def progress_callback_no_update(self, amount_downloaded, total):
"""called when copying very small files"""
pass
-
+
def backup_additional_file(self, dest_dir, full_file_name):
"""Backs up small files like XMP or THM files"""
source = gio.File(full_file_name)
@@ -99,55 +104,57 @@ class BackupFiles(multiprocessing.Process):
try:
source.copy(dest, self.progress_callback_no_update, cancellable=None)
except gio.Error, inst:
- logger.error("Failed to backup file %s", full_file_name)
-
+ logger.error("Failed to backup file %s", full_file_name)
+
def run(self):
-
+
self.cancel_copy = gio.Cancellable()
self.bytes_downloaded = 0
self.total_downloaded = 0
-
+
while True:
-
+
self.amount_downloaded = 0
- move_succeeded, rpd_file, path_suffix, backup_duplicate_overwrite = self.results_pipe.recv()
+ move_succeeded, rpd_file, path_suffix, backup_duplicate_overwrite, download_count = self.results_pipe.recv()
if rpd_file is None:
# this is a termination signal
return None
# pause if instructed by the caller
self.run_event.wait()
-
+
if self.check_termination_request():
return None
-
+
backup_succeeded = False
self.scan_pid = rpd_file.scan_pid
-
+
if move_succeeded:
self.total_reached = False
-
+
source = gio.File(path=rpd_file.download_full_file_name)
-
+
if path_suffix is None:
dest_base_dir = self.path
else:
dest_base_dir = os.path.join(self.path, path_suffix)
-
-
+
+
dest_dir = os.path.join(dest_base_dir, rpd_file.download_subfolder)
backup_full_file_name = os.path.join(
- dest_dir,
- rpd_file.download_name)
-
+ dest_dir,
+ rpd_file.download_name)
+
subfolder = gio.File(path=dest_dir)
if not subfolder.query_exists(cancellable=None):
# create the subfolders on the backup path
try:
+ logger.debug("Creating subfolder %s on backup device %s...", dest_dir, self.mount_name)
subfolder.make_directory_with_parents(cancellable=gio.Cancellable())
+ logger.debug("...backup subfolder created")
except gio.Error, inst:
# There is a tiny chance directory may have been created by
# another process between the time it takes to query and
- # the time it takes to create a new directory.
+ # the time it takes to create a new directory.
# Ignore such errors.
if inst.code <> gio.ERROR_EXISTS:
logger.error("Failed to create backup subfolder: %s", dest_dir)
@@ -159,7 +166,7 @@ class BackupFiles(multiprocessing.Process):
_("Destination directory could not be created: %(directory)s\n") % \
{'directory': subfolder, } + \
_("Source: %(source)s\nDestination: %(destination)s") % \
- {'source': rpd_file.download_full_file_name,
+ {'source': rpd_file.download_full_file_name,
'destination': backup_full_file_name} + "\n" + \
_("Error: %(inst)s") % {'inst': inst}
@@ -168,21 +175,33 @@ class BackupFiles(multiprocessing.Process):
flags = gio.FILE_COPY_OVERWRITE
else:
flags = gio.FILE_COPY_NONE
-
- try:
- source.copy(dest, self.progress_callback, flags,
- cancellable=self.cancel_copy)
- backup_succeeded = True
- except gio.Error, inst:
- fileNotBackedUpMessageDisplayed = True
- rpd_file.add_problem(None, pn.BACKUP_ERROR, self.mount_name)
- rpd_file.add_extra_detail('%s%s' % (pn.BACKUP_ERROR, self.mount_name), inst)
- rpd_file.error_title = _('Backing up error')
- rpd_file.error_msg = \
- _("Source: %(source)s\nDestination: %(destination)s") % \
- {'source': rpd_file.download_full_file_name, 'destination': backup_full_file_name} + "\n" + \
- _("Error: %(inst)s") % {'inst': inst}
- logger.error("%s:\n%s", rpd_file.error_title, rpd_file.error_msg)
+
+ if self.use_gnome_file_operations:
+ try:
+ logger.debug("Backing up file %s on device %s...", download_count, self.mount_name)
+ source.copy(dest, self.progress_callback, flags,
+ cancellable=self.cancel_copy)
+ backup_succeeded = True
+ logger.debug("...backing up file %s on device %s succeeded", download_count, self.mount_name)
+ except gio.Error, inst:
+ fileNotBackedUpMessageDisplayed = True
+ rpd_file.add_problem(None, pn.BACKUP_ERROR, self.mount_name)
+ rpd_file.add_extra_detail('%s%s' % (pn.BACKUP_ERROR, self.mount_name), inst)
+ rpd_file.error_title = _('Backing up error')
+ rpd_file.error_msg = \
+ _("Source: %(source)s\nDestination: %(destination)s") % \
+ {'source': rpd_file.download_full_file_name, 'destination': backup_full_file_name} + "\n" + \
+ _("Error: %(inst)s") % {'inst': inst}
+ logger.error("%s:\n%s", rpd_file.error_title, rpd_file.error_msg)
+ else:
+ try:
+ logger.debug("Using python to back up file %s on device %s...", download_count, self.mount_name)
+ shutil.copy(rpd_file.download_full_file_name, backup_full_file_name)
+ backup_succeeded = True
+ logger.debug("...backing up file %s on device %s succeeded", download_count, self.mount_name)
+ except:
+ logger.error("Backup of %s failed", backup_full_file_name)
+
if not backup_succeeded:
if rpd_file.status == config.STATUS_DOWNLOAD_FAILED:
@@ -197,17 +216,17 @@ class BackupFiles(multiprocessing.Process):
if rpd_file.download_xmp_full_name:
self.backup_additional_file(dest_dir,
rpd_file.download_xmp_full_name)
-
+
self.total_downloaded += rpd_file.size
bytes_not_downloaded = rpd_file.size - self.amount_downloaded
if bytes_not_downloaded:
self.results_pipe.send((rpdmp.CONN_PARTIAL, (rpdmp.MSG_BYTES, (self.scan_pid, self.pid, self.total_downloaded, bytes_not_downloaded))))
-
+
self.results_pipe.send((rpdmp.CONN_PARTIAL, (rpdmp.MSG_FILE,
(backup_succeeded, rpd_file))))
-
-
+
+
diff --git a/rapid/config.py b/rapid/config.py
index d44c9bb..977c342 100644
--- a/rapid/config.py
+++ b/rapid/config.py
@@ -16,7 +16,7 @@
### Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
### USA
-version = '0.4.5'
+version = '0.4.6'
GCONF_KEY="/apps/rapid-photo-downloader"
@@ -30,9 +30,9 @@ MEDIA_LOCATION = "/media"
SKIP_DOWNLOAD = "skip download"
ADD_UNIQUE_IDENTIFIER = "add unique identifier"
-# These next three values are fall back values that are used only
+# These next three values are fall back values that are used only
# if calls to xdg-user-dir fail
-DEFAULT_PHOTO_LOCATIONS = ['Pictures', 'Photos']
+DEFAULT_PHOTO_LOCATIONS = ['Pictures', 'Photos']
DEFAULT_BACKUP_LOCATION = 'Pictures'
DEFAULT_VIDEO_BACKUP_LOCATION = 'Videos'
diff --git a/rapid/generatename.py b/rapid/generatename.py
index 84c9310..6d138e8 100644
--- a/rapid/generatename.py
+++ b/rapid/generatename.py
@@ -43,18 +43,18 @@ class PhotoName:
Generate the name of a photo. Used as a base class for generating names
of videos, as well as subfolder names for both file types
"""
-
+
def __init__(self, pref_list):
self.pref_list = pref_list
-
+
# Some of the next values are overwritten in derived classes
self.strip_initial_period_from_extension = False
self.strip_forward_slash = True
self.L1_date_check = IMAGE_DATE #used in _get_date_component()
self.component = pn.FILENAME_COMPONENT #used in error reporting
-
-
+
+
def _get_values_from_pref_list(self):
for i in range(0, len(self.pref_list), 3):
yield (self.pref_list[i], self.pref_list[i+1], self.pref_list[i+2])
@@ -64,19 +64,19 @@ class PhotoName:
Returns portion of new file / subfolder name based on date time.
If the date is missing, will attempt to use the fallback date.
"""
-
+
# step 1: get the correct value from metadata
if self.L1 == self.L1_date_check:
if self.L2 == SUBSECONDS:
- d = self.rpd_file.metadata.sub_seconds()
- if d == '00':
+ d = self.rpd_file.metadata.sub_seconds(missing=None)
+ if d is None:
self.rpd_file.problem.add_problem(self.component, pn.MISSING_METADATA, _(self.L2))
return ''
else:
return d
else:
d = self.rpd_file.metadata.date_time(missing=None)
-
+
elif self.L1 == TODAY:
d = datetime.datetime.now()
elif self.L1 == YESTERDAY:
@@ -86,7 +86,7 @@ class PhotoName:
d = self.rpd_file.download_start_time
else:
raise("Date options invalid")
-
+
# step 2: if have a value, try to convert it to string format
if d:
try:
@@ -105,14 +105,14 @@ class PhotoName:
else:
self.rpd_file.add_problem(self.component, pn.MISSING_METADATA, _(self.L1))
return ''
-
+
try:
return d.strftime(convert_date_for_strftime(self.L2))
except:
self.rpd_file.add_problem(self.component, pn.INVALID_DATE_TIME, d)
logger.error("Both file modification time and metadata date & time are invalid for file %s", self.rpd_file.full_file_name)
return ''
-
+
def _get_thm_extension(self):
"""
Generates THM extension with correct capitalization, if needed
@@ -126,7 +126,7 @@ class PhotoName:
self.rpd_file.thm_extension = thm_extension
else:
self.rpd_file.thm_extension = None
-
+
def _get_xmp_extension(self, extension):
"""
Generates XMP extension with correct capitalization, if needed.
@@ -144,15 +144,15 @@ class PhotoName:
self.rpd_file.xmp_extension = '.xmp'
else:
self.rpd_file.xmp_extension = None
-
-
+
+
def _get_filename_component(self):
"""
Returns portion of new file / subfolder name based on the file name
"""
-
+
name, extension = os.path.splitext(self.rpd_file.name)
-
+
if self.L1 == NAME_EXTENSION:
filename = self.rpd_file.name
self._get_thm_extension()
@@ -178,10 +178,10 @@ class PhotoName:
n = re.search("(?P<image_number>[0-9]+$)", name)
if not n:
self.rpd_file.add_problem(self.component, pn.MISSING_IMAGE_NUMBER)
- return ''
+ return ''
else:
image_number = n.group("image_number")
-
+
if self.L2 == IMAGE_NUMBER_ALL:
filename = image_number
elif self.L2 == IMAGE_NUMBER_1:
@@ -201,14 +201,14 @@ class PhotoName:
filename = filename.lower()
return filename
-
+
def _get_metadata_component(self):
"""
Returns portion of new image / subfolder name based on the metadata
-
+
Note: date time metadata found in _getDateComponent()
"""
-
+
if self.L1 == APERTURE:
v = self.rpd_file.metadata.aperture()
elif self.L1 == ISO:
@@ -247,7 +247,7 @@ class PhotoName:
else:
raise TypeError("Invalid metadata option specified")
if self.L1 in [CAMERA_MAKE, CAMERA_MODEL, SHORT_CAMERA_MODEL,
- SHORT_CAMERA_MODEL_HYPHEN, OWNER_NAME, ARTIST,
+ SHORT_CAMERA_MODEL_HYPHEN, OWNER_NAME, ARTIST,
COPYRIGHT]:
if self.L2 == UPPERCASE:
v = v.upper()
@@ -269,49 +269,49 @@ class PhotoName:
x= x / 26 - 1
v = string.lowercase[r] + v
v = string.lowercase[x] + v
-
+
return v
-
-
+
+
v = _letters(sequence)
if self.L2 == UPPERCASE:
v = v.upper()
-
+
return v
def _format_sequence_no(self, value, amountToPad):
padding = LIST_SEQUENCE_NUMBERS_L2.index(amountToPad) + 1
formatter = '%0' + str(padding) + "i"
return formatter % value
-
+
def _get_downloads_today(self):
return self._format_sequence_no(self.rpd_file.sequences.get_downloads_today(), self.L2)
def _get_session_sequence_no(self):
- return self._format_sequence_no(self.rpd_file.sequences.get_session_sequence_no(), self.L2)
-
+ return self._format_sequence_no(self.rpd_file.sequences.get_session_sequence_no(), self.L2)
+
def _get_stored_sequence_no(self):
return self._format_sequence_no(self.rpd_file.sequences.get_stored_sequence_no(), self.L2)
def _get_sequence_letter(self):
return self._calculate_letter_sequence(self.rpd_file.sequences.get_sequence_letter())
-
+
def _get_sequences_component(self):
if self.L1 == DOWNLOAD_SEQ_NUMBER:
- return self._get_downloads_today()
+ return self._get_downloads_today()
elif self.L1 == SESSION_SEQ_NUMBER:
return self._get_session_sequence_no()
elif self.L1 == STORED_SEQ_NUMBER:
- return self._get_stored_sequence_no()
+ return self._get_stored_sequence_no()
elif self.L1 == SEQUENCE_LETTER:
- return self._get_sequence_letter()
+ return self._get_sequence_letter()
#~ elif self.L1 == SUBFOLDER_SEQ_NUMBER:
#~ return self._getSubfolderSequenceNo()
-
-
-
+
+
+
def _get_component(self):
try:
if self.L0 == DATE_TIME:
@@ -331,8 +331,8 @@ class PhotoName:
except:
self.rpd_file.add_problem(self.component, pn.ERROR_IN_GENERATION, _(self.L0))
return ''
-
-
+
+
def generate_name(self, rpd_file):
self.rpd_file = rpd_file
@@ -342,89 +342,89 @@ class PhotoName:
v = self._get_component()
if v:
name += v
-
+
# remove any null characters - they are bad news in filenames
name = name.replace('\x00', '')
if self.rpd_file.strip_characters:
for c in r'\:*?"<>|':
name = name.replace(c, '')
-
+
if self.strip_forward_slash:
name = name.replace('/', '')
-
+
name = name.strip()
-
+
return name
-
-
+
+
class VideoName(PhotoName):
def __init__(self, pref_list):
PhotoName.__init__(self, pref_list)
self.L1_date_check = VIDEO_DATE #used in _get_date_component()
-
+
def _get_metadata_component(self):
"""
Returns portion of video / subfolder name based on the metadata
-
+
Note: date time metadata found in _getDateComponent()
"""
- return get_video_metadata_component(self)
+ return get_video_metadata_component(self)
class PhotoSubfolder(PhotoName):
"""
Generate subfolder names for photo files
"""
-
+
def __init__(self, pref_list):
self.pref_list = pref_list
-
+
self.strip_extraneous_white_space = re.compile(r'\s*%s\s*' % os.sep)
self.strip_initial_period_from_extension = True
self.strip_forward_slash = False
self.L1_date_check = IMAGE_DATE #used in _get_date_component()
self.component = pn.SUBFOLDER_COMPONENT #used in error reporting
-
+
def generate_name(self, rpd_file):
-
+
subfolders = PhotoName.generate_name(self, rpd_file)
-
- # subfolder value must never start with a separator, or else any
- # os.path.join function call will fail to join a subfolder to its
+
+ # subfolder value must never start with a separator, or else any
+ # os.path.join function call will fail to join a subfolder to its
# parent folder
if subfolders:
if subfolders[0] == os.sep:
subfolders = subfolders[1:]
-
+
# remove any spaces before and after a directory name
if subfolders and self.rpd_file.strip_characters:
subfolders = self.strip_extraneous_white_space.sub(os.sep, subfolders)
-
+
return subfolders
-
-
-
+
+
+
class VideoSubfolder(PhotoSubfolder):
"""
Generate subfolder names for video files
"""
-
+
def __init__(self, pref_list):
PhotoSubfolder.__init__(self, pref_list)
self.L1_date_check = VIDEO_DATE #used in _get_date_component()
-
-
+
+
def _get_metadata_component(self):
"""
Returns portion of video / subfolder name based on the metadata
-
+
Note: date time metadata found in _getDateComponent()
"""
- return get_video_metadata_component(self)
-
+ return get_video_metadata_component(self)
+
def get_video_metadata_component(video):
"""
Returns portion of video / subfolder name based on the metadata
@@ -432,7 +432,7 @@ def get_video_metadata_component(video):
This is outside of a class definition because of the inheritence
hierarchy.
"""
-
+
problem = None
if video.L1 == CODEC:
v = video.rpd_file.metadata.codec()
@@ -456,7 +456,7 @@ def get_video_metadata_component(video):
return v
class Sequences:
- """
+ """
Holds sequence numbers and letters used in generating filenames.
"""
def __init__(self, downloads_today_tracker, stored_sequence_no):
@@ -465,58 +465,58 @@ class Sequences:
self.downloads_today_tracker = downloads_today_tracker
self.stored_sequence_no = stored_sequence_no
self.matched_sequences = None
-
+
def set_matched_sequence_value(self, matched_sequences):
self.matched_sequences = matched_sequences
-
+
def get_session_sequence_no(self):
if self.matched_sequences is not None:
return self.matched_sequences.session_sequence_no
else:
return self._get_session_sequence_no()
-
+
def _get_session_sequence_no(self):
return self.session_sequence_no + 1
-
+
def get_sequence_letter(self):
if self.matched_sequences is not None:
return self.matched_sequences.sequence_letter
else:
return self._get_sequence_letter()
-
+
def _get_sequence_letter(self):
return self.sequence_letter + 1
-
+
def increment(self, uses_session_sequece_no, uses_sequence_letter):
if uses_session_sequece_no:
self.session_sequence_no += 1
if uses_sequence_letter:
self.sequence_letter += 1
-
+
def get_downloads_today(self):
if self.matched_sequences is not None:
return self.matched_sequences.downloads_today
else:
return self._get_downloads_today()
-
+
def _get_downloads_today(self):
v = self.downloads_today_tracker.get_downloads_today()
if v == -1:
return 1
else:
return v + 1
-
+
def get_stored_sequence_no(self):
if self.matched_sequences is not None:
return self.matched_sequences.stored_sequence_no
else:
return self._get_stored_sequence_no()
-
+
def _get_stored_sequence_no(self):
# Must add 1 to the value, for historic reasons (that is how it used
# to work)
return self.stored_sequence_no + 1
-
+
def create_matched_sequences(self):
sequences = collections.namedtuple(
'AssignedSequences',
diff --git a/rapid/glade3/about.ui b/rapid/glade3/about.ui
index b770f72..221c62e 100644
--- a/rapid/glade3/about.ui
+++ b/rapid/glade3/about.ui
@@ -28,6 +28,7 @@ Martin Dahl Moe
Marco de Freitas &lt;marcodefreitas@gmail.com&gt;
Martin Egger &lt;martin.egger@gmx.net&gt;
Tauno Erik &lt;tauno.erik@gmail.com&gt;
+Sergiy Gavrylov &lt;sergiovana@bigmir.net&gt;
Emanuele Grande &lt;caccolangrifata@gmail.com&gt;
Torben Gundtofte-Bruun &lt;torben@g-b.dk&gt;
Miroslav Matejaš &lt;silverspace@ubuntu-hr.org&gt;
@@ -43,7 +44,7 @@ Michal Predotka &lt;mpredotka@googlemail.com&gt;
Ye Qing &lt;allen19920930@gmail.com&gt;
Luca Reverberi &lt;thereve@gmail.com&gt;
Mikko Ruohola &lt;polarfox@polarfox.net&gt;
-Sergiy Gavrylov &lt;sergiovana@bigmir.net&gt;
+Ahmed Shubbar &lt;ahmed.shubbar@gmail.com&gt;
Sergei Sedov &lt;sedov@webmail.perm.ru&gt;
Marco Solari &lt;marcosolari@gmail.com&gt;
Toni Lähdekorpi &lt;toni@lygon.net&gt;
diff --git a/rapid/glade3/xmp.ui b/rapid/glade3/xmp.ui
new file mode 100644
index 0000000..c0fd03b
--- /dev/null
+++ b/rapid/glade3/xmp.ui
@@ -0,0 +1,1376 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="2.24"/>
+ <!-- interface-naming-policy project-wide -->
+ <object class="GtkDialog" id="dialog1">
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
+ <property name="type_hint">dialog</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <object class="GtkNotebook" id="notebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <object class="GtkTable" id="table1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="n_rows">10</property>
+ <property name="n_columns">5</property>
+ <child>
+ <object class="GtkLabel" id="label14">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes" comments="The Description field, often referred to as &quot;Caption,&quot; should report the who, what and why of what the photograph depicts. Source: http://www.photometadata.org/META-Resources-Field-Guide-to-Metadata#Description">Description:</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <child>
+ <object class="GtkViewport" id="viewport1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkTextView" id="textview1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label15">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="A headline is a brief, publishable synopsis or summary of the contents of the photograph. Source: http://www.photometadata.org/META-Resources-Field-Guide-to-Metadata#Headline">Headline:</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label16">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes" comments="Keyword terms or phrases describe the subject of content in the photograph. Source: http://www.photometadata.org/META-Resources-Field-Guide-to-Metadata#Keywords">Keywords:</property>
+ </object>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow3">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <child>
+ <object class="GtkViewport" id="viewport3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkTextView" id="textview2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label17">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="The name of the person writing, editing or correcting the description of the photograph. Source: http://www.photometadata.org/META-Resources-Field-Guide-to-Metadata#Description%20writer">Description writer:</property>
+ </object>
+ <packing>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label18">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="The Copyright Notice for the photo.">Copyright:</property>
+ </object>
+ <packing>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry3">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label19">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="The location of a web page describing the owner and/or rights statement for this photo.">Copyright URL:</property>
+ </object>
+ <packing>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry4">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="invisible_char_set">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label20">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes" comments="Name or names of a person or the people shown in the photo.">Person(s) shown:</property>
+ </object>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow4">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <child>
+ <object class="GtkViewport" id="viewport4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkTextView" id="textview3">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Description</property>
+ </object>
+ <packing>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="table3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="n_rows">16</property>
+ <property name="n_columns">5</property>
+ <child>
+ <object class="GtkLabel" id="label21">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Location Created</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="right_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label22">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Sublocation:</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label23">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">City:</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label24">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Province/state:</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label25">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Country name:</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label26">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Country ISO-code:</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label27">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">World region:</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry5">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="invisible_char_set">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry6">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="invisible_char_set">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry7">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="invisible_char_set">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry8">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="invisible_char_set">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry9">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="invisible_char_set">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry10">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="invisible_char_set">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label28">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Location Shown</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="right_attach">5</property>
+ <property name="top_attach">8</property>
+ <property name="bottom_attach">9</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label29">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Sublocation:</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">9</property>
+ <property name="bottom_attach">10</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label30">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">City:</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">10</property>
+ <property name="bottom_attach">11</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label31">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Province/state:</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">11</property>
+ <property name="bottom_attach">12</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label32">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Country name:</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">12</property>
+ <property name="bottom_attach">13</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label33">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Country ISO-code:</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">13</property>
+ <property name="bottom_attach">14</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label34">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">World region:</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">14</property>
+ <property name="bottom_attach">15</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry11">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="invisible_char_set">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">9</property>
+ <property name="bottom_attach">10</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry12">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="invisible_char_set">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">10</property>
+ <property name="bottom_attach">11</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry13">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="invisible_char_set">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">11</property>
+ <property name="bottom_attach">12</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry14">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="invisible_char_set">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">12</property>
+ <property name="bottom_attach">13</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry15">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="invisible_char_set">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">13</property>
+ <property name="bottom_attach">14</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry16">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="invisible_char_set">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">14</property>
+ <property name="bottom_attach">15</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <object class="GtkButton" id="copy_location_button">
+ <property name="label" translatable="yes">Copy to Location Shown</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">7</property>
+ <property name="bottom_attach">8</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label35">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Location</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="table2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="n_rows">10</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Person who created the photograph">Creator:</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Job title of the person who created the photograph">Creator's job title:</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes" comments="Address of the person who created the photograph">Address:</property>
+ </object>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label7">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">City:</property>
+ </object>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="State or province of the person who created the photograph">State/province:</property>
+ </object>
+ <packing>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label9">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Postal code of the person who created the photograph">Postal code:</property>
+ </object>
+ <packing>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Country of the person who created the photograph">Country: </property>
+ </object>
+ <packing>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label11">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Phone numbers / number of the person who created the photograph">Phone(s):</property>
+ </object>
+ <packing>
+ <property name="top_attach">7</property>
+ <property name="bottom_attach">8</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label12">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Email address / addresses of the person who created the photograph">Email(s):</property>
+ </object>
+ <packing>
+ <property name="top_attach">8</property>
+ <property name="bottom_attach">9</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label13">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Websites / website of the person who created the photograph">Website(s):</property>
+ </object>
+ <packing>
+ <property name="top_attach">9</property>
+ <property name="bottom_attach">10</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="creator_combobox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_entry">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="job_title_combobox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_entry">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="city_combobox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_entry">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="state_combobox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_entry">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="postal_code_combobox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_entry">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="country_combobox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_entry">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="phone_combobox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_entry">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">7</property>
+ <property name="bottom_attach">8</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="email_combobox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_entry">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">8</property>
+ <property name="bottom_attach">9</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="website_combobox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_entry">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">9</property>
+ <property name="bottom_attach">10</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <child>
+ <object class="GtkViewport" id="viewport2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkTextView" id="address_textview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes" comments="Contact information for the photographer">Photographer</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/rapid/rapid.py b/rapid/rapid.py
index fab5796..7de18c2 100755
--- a/rapid/rapid.py
+++ b/rapid/rapid.py
@@ -18,6 +18,7 @@
### Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
### USA
+use_pynotify = True
import tempfile
@@ -39,7 +40,9 @@ import webbrowser
import sys, time, types, os, datetime
import gobject, pango, cairo, array, pangocairo, gio
-import pynotify
+
+if use_pynotify:
+ import pynotify
from multiprocessing import Process, Pipe, Queue, Event, Value, Array, current_process, log_to_stderr
from ctypes import c_int, c_bool, c_char
@@ -50,7 +53,7 @@ logger = log_to_stderr()
# Rapid Photo Downloader modules
import rpdfile
-
+
import problemnotification as pn
import thumbnail as tn
import rpdmultiprocessing as rpdmp
@@ -105,10 +108,10 @@ from config import STATUS_CANNOT_DOWNLOAD, STATUS_DOWNLOADED, \
STATUS_NOT_DOWNLOADED, \
STATUS_DOWNLOAD_AND_BACKUP_FAILED, \
STATUS_WARNING
-
+
DOWNLOADED = [STATUS_DOWNLOADED, STATUS_DOWNLOADED_WITH_WARNING, STATUS_BACKUP_PROBLEM]
-#Translators: if neccessary, for guidance in how to translate this program, you may see http://damonlynch.net/translate.html
+#Translators: if neccessary, for guidance in how to translate this program, you may see http://damonlynch.net/translate.html
PROGRAM_NAME = _('Rapid Photo Downloader')
__version__ = config.version
@@ -117,12 +120,12 @@ def date_time_human_readable(date, with_line_break=True):
return _("%(date)s\n%(time)s") % {'date':date.strftime("%x"), 'time':date.strftime("%X")}
else:
return _("%(date)s %(time)s") % {'date':date.strftime("%x"), 'time':date.strftime("%X")}
-
+
def date_time_subseconds_human_readable(date, subseconds):
return _("%(date)s %(hour)s:%(minute)s:%(second)s:%(subsecond)s") % \
- {'date':date.strftime("%x"),
+ {'date':date.strftime("%x"),
'hour':date.strftime("%H"),
- 'minute':date.strftime("%M"),
+ 'minute':date.strftime("%M"),
'second':date.strftime("%S"),
'subsecond': subseconds}
@@ -135,7 +138,7 @@ class DeviceCollection(gtk.TreeView):
def __init__(self, parent_app):
self.parent_app = parent_app
- # device icon & name, size of images on the device (human readable),
+ # device icon & name, size of images on the device (human readable),
# copy progress (%), copy text, eject button (None if irrelevant),
# process id, pulse
self.liststore = gtk.ListStore(gtk.gdk.Pixbuf, str, str, float, str,
@@ -144,15 +147,15 @@ class DeviceCollection(gtk.TreeView):
self.devices_by_scan_pid = {}
gtk.TreeView.__init__(self, self.liststore)
-
+
self.props.enable_search = False
# make it impossible to select a row
selection = self.get_selection()
selection.set_mode(gtk.SELECTION_NONE)
self.set_headers_visible(False)
-
-
- # Device refers to a thing like a camera, memory card in its reader,
+
+
+ # Device refers to a thing like a camera, memory card in its reader,
# external hard drive, Portable Storage Device, etc.
column0 = gtk.TreeViewColumn(_("Device"))
pixbuf_renderer = gtk.CellRendererPixbuf()
@@ -168,46 +171,46 @@ class DeviceCollection(gtk.TreeView):
column0.add_attribute(text_renderer, 'text', 1)
column0.add_attribute(eject_renderer, 'pixbuf', 5)
self.append_column(column0)
-
-
+
+
# Size refers to the total size of images on the device, typically in
# MB or GB
column1 = gtk.TreeViewColumn(_("Size"), gtk.CellRendererText(), text=2)
self.append_column(column1)
-
- column2 = gtk.TreeViewColumn(_("Download Progress"),
+
+ column2 = gtk.TreeViewColumn(_("Download Progress"),
gtk.CellRendererProgress(),
value=3,
text=4,
pulse=7)
self.append_column(column2)
self.show_all()
-
+
icontheme = gtk.icon_theme_get_default()
try:
- self.eject_pixbuf = icontheme.load_icon('media-eject', 16,
+ self.eject_pixbuf = icontheme.load_icon('media-eject', 16,
gtk.ICON_LOOKUP_USE_BUILTIN)
except:
self.eject_pixbuf = gtk.gdk.pixbuf_new_from_file(
paths.share_dir('glade3/media-eject.png'))
-
+
self.add_events(gtk.gdk.BUTTON_PRESS_MASK)
self.connect('button-press-event', self.button_clicked)
-
+
def add_device(self, process_id, device, progress_bar_text = ''):
-
+
# add the row, and get a temporary pointer to the row
size_files = ''
progress = 0.0
-
+
if device.mount is None:
eject = None
else:
eject = self.eject_pixbuf
-
+
self.devices_by_scan_pid[process_id] = device
-
+
iter = self.liststore.append((device.get_icon(),
device.get_name(),
size_files,
@@ -216,9 +219,9 @@ class DeviceCollection(gtk.TreeView):
eject,
process_id,
-1))
-
+
self._set_process_map(process_id, iter)
-
+
# adjust scrolled window height, based on row height and number of ready to start downloads
# please note, at program startup, self.row_height() will be less than it will be when already running
@@ -228,7 +231,8 @@ class DeviceCollection(gtk.TreeView):
row_height = self.get_background_area(0, self.get_column(0))[3] + 1
height = max(((len(self.map_process_to_row) + 1) * row_height), 24)
self.parent_app.device_collection_scrolledwindow.set_size_request(-1, height)
-
+
+
def update_device(self, process_id, total_size_files):
"""
Updates the size of the photos and videos on the device, displayed to the user
@@ -238,39 +242,39 @@ class DeviceCollection(gtk.TreeView):
self.liststore.set_value(iter, 2, total_size_files)
else:
logger.critical("This device is unknown")
-
+
def get_device(self, process_id):
return self.devices_by_scan_pid.get(process_id)
-
+
def remove_device(self, process_id):
if process_id in self.map_process_to_row:
iter = self._get_process_map(process_id)
self.liststore.remove(iter)
del self.map_process_to_row[process_id]
del self.devices_by_scan_pid[process_id]
-
+
def get_all_displayed_processes(self):
"""
- returns a list of the processes currently being displayed to the user
+ returns a list of the processes currently being displayed to the user
"""
return self.map_process_to_row.keys()
def _set_process_map(self, process_id, iter):
"""
- convert the temporary iter into a tree reference, which is
+ convert the temporary iter into a tree reference, which is
permanent
"""
path = self.liststore.get_path(iter)
treerowref = gtk.TreeRowReference(self.liststore, path)
self.map_process_to_row[process_id] = treerowref
-
+
def _get_process_map(self, process_id):
"""
return the tree iter for this process
"""
-
+
if process_id in self.map_process_to_row:
treerowref = self.map_process_to_row[process_id]
path = treerowref.get_path()
@@ -278,16 +282,16 @@ class DeviceCollection(gtk.TreeView):
return iter
else:
return None
-
+
def update_progress(self, scan_pid, percent_complete, progress_bar_text, bytes_downloaded, pulse=None):
-
+
iter = self._get_process_map(scan_pid)
if iter:
if percent_complete:
self.liststore.set_value(iter, 3, percent_complete)
if progress_bar_text:
self.liststore.set_value(iter, 4, progress_bar_text)
-
+
if pulse is not None:
if pulse:
# Make the bar pulse
@@ -316,14 +320,14 @@ class DeviceCollection(gtk.TreeView):
iter = self.liststore.get_iter(path)
if self.liststore.get_value(iter, 5) is not None:
self.unmount(process_id = self.liststore.get_value(iter, 6))
-
+
def unmount(self, process_id):
device = self.devices_by_scan_pid[process_id]
if device.mount is not None:
logger.debug("Unmounting device with scan pid %s", process_id)
device.mount.unmount(self.unmount_callback)
-
-
+
+
def unmount_callback(self, mount, result):
name = mount.get_name()
@@ -332,13 +336,14 @@ class DeviceCollection(gtk.TreeView):
logger.debug("%s successfully unmounted" % name)
except gio.Error, inst:
logger.error("%s did not unmount: %s", name, inst)
-
- title = _("%(device)s did not unmount") % {'device': name}
- message = '%s' % inst
-
- n = pynotify.Notification(title, message)
- n.set_icon_from_pixbuf(self.parent_app.application_icon)
- n.show()
+
+ if use_pynotify:
+ title = _("%(device)s did not unmount") % {'device': name}
+ message = '%s' % inst
+
+ n = pynotify.Notification(title, message)
+ n.set_icon_from_pixbuf(self.parent_app.application_icon)
+ n.show()
def create_cairo_image_surface(pil_image, image_width, image_height):
@@ -353,55 +358,55 @@ class ThumbnailCellRenderer(gtk.CellRenderer):
__gproperties__ = {
"image": (gobject.TYPE_PYOBJECT, "Image",
"Image", gobject.PARAM_READWRITE),
-
- "filename": (gobject.TYPE_STRING, "Filename",
+
+ "filename": (gobject.TYPE_STRING, "Filename",
"Filename", '', gobject.PARAM_READWRITE),
-
+
"status": (gtk.gdk.Pixbuf, "Status",
"Status", gobject.PARAM_READWRITE),
}
-
+
def __init__(self, checkbutton_height):
gtk.CellRenderer.__init__(self)
self.image = None
-
+
self.image_area_size = 100
self.text_area_size = 30
self.padding = 6
self.checkbutton_height = checkbutton_height
self.icon_width = 20
-
+
def do_set_property(self, pspec, value):
setattr(self, pspec.name, value)
def do_get_property(self, pspec):
return getattr(self, pspec.name)
-
+
def do_render(self, window, widget, background_area, cell_area, expose_area, flags):
-
+
cairo_context = window.cairo_create()
-
+
x = cell_area.x
y = cell_area.y + self.checkbutton_height - 8
w = cell_area.width
h = cell_area.height
-
- #constrain operations to cell area, allowing for a 1 pixel border
+
+ #constrain operations to cell area, allowing for a 1 pixel border
#either side
#~ cairo_context.rectangle(x-1, y-1, w+2, h+2)
#~ cairo_context.clip()
-
+
#fill in the background with dark grey
#this ensures that a selected cell's fill does not make
#the text impossible to read
#~ cairo_context.rectangle(x, y, w, h)
#~ cairo_context.set_source_rgb(0.267, 0.267, 0.267)
#~ cairo_context.fill()
-
+
#image width and height
image_w = self.image.size[0]
image_h = self.image.size[1]
-
+
#center the image horizontally
#bottom align vertically
#top left and right corners for the image:
@@ -416,33 +421,33 @@ class ThumbnailCellRenderer(gtk.CellRenderer):
cairo_context.set_line_width(1)
cairo_context.rectangle(image_x-.5, image_y-.5, image_w+1, image_h+1)
cairo_context.stroke()
-
+
# draw a thin border around each cell
#~ cairo_context.set_source_rgb(0.33,0.33,0.33)
#~ cairo_context.rectangle(x, y, w, h)
#~ cairo_context.stroke()
-
+
#place the image
cairo_context.set_source_surface(image, image_x, image_y)
cairo_context.paint()
-
+
#text
context = pangocairo.CairoContext(cairo_context)
-
+
text_y = y + self.image_area_size + 10
text_w = w - self.icon_width
text_x = x + self.icon_width
#~ context.rectangle(text_x, text_y, text_w, 15)
- #~ context.clip()
-
+ #~ context.clip()
+
layout = context.create_layout()
width = text_w * pango.SCALE
layout.set_width(width)
-
+
layout.set_alignment(pango.ALIGN_CENTER)
layout.set_ellipsize(pango.ELLIPSIZE_END)
-
+
#font color and size
fg_color = pango.AttrForeground(65535, 65535, 65535, 0, -1)
font_size = pango.AttrSize(8192, 0, -1) # 8 * 1024 = 8192
@@ -453,7 +458,7 @@ class ThumbnailCellRenderer(gtk.CellRenderer):
attr.insert(font_family)
layout.set_attributes(attr)
- layout.set_text(self.filename)
+ layout.set_text(self.filename)
context.move_to(text_x, text_y)
context.show_layout(layout)
@@ -461,13 +466,13 @@ class ThumbnailCellRenderer(gtk.CellRenderer):
#status
cairo_context.set_source_pixbuf(self.status, x, y + self.image_area_size + 10)
cairo_context.paint()
-
+
def do_get_size(self, widget, cell_area):
return (0, 0, self.image_area_size, self.image_area_size + self.text_area_size - self.checkbutton_height + 4)
-
+
gobject.type_register(ThumbnailCellRenderer)
-
+
class ThumbnailDisplay(gtk.IconView):
def __init__(self, parent_app):
@@ -475,39 +480,39 @@ class ThumbnailDisplay(gtk.IconView):
self.set_spacing(0)
self.set_row_spacing(5)
self.set_margin(25)
-
+
self.set_selection_mode(gtk.SELECTION_MULTIPLE)
self.connect('selection-changed', self.on_selection_changed)
self._selected_items = []
-
+
self.rapid_app = parent_app
-
+
self.batch_size = 10
-
+
self.thumbnail_manager = ThumbnailManager(self.thumbnail_results, self.batch_size)
self.preview_manager = PreviewManager(self.preview_results)
-
- self.treerow_index = {}
- self.process_index = {}
-
+
+ self.treerow_index = {}
+ self.process_index = {}
+
self.rpd_files = {}
-
+
self.total_thumbs_to_generate = 0
self.thumbnails_generated = 0
-
+
# dict of scan_pids that are having thumbnails generated
# value is the thumbnail process id
# this is needed when terminating thumbnailing early such as when
# user clicks download before the thumbnailing is finished
self.generating_thumbnails = {}
-
+
self.thumbnails = {}
self.previews = {}
self.previews_being_fetched = set()
-
+
self.stock_photo_thumbnails = tn.PhotoIcons()
self.stock_video_thumbnails = tn.VideoIcons()
-
+
self.SELECTED_COL = 1
self.UNIQUE_ID_COL = 2
self.TIMESTAMP_COL = 4
@@ -515,11 +520,11 @@ class ThumbnailDisplay(gtk.IconView):
self.CHECKBUTTON_VISIBLE_COL = 6
self.DOWNLOAD_STATUS_COL = 7
self.STATUS_ICON_COL = 8
-
+
self._create_liststore()
self.clear()
-
+
checkbutton = gtk.CellRendererToggle()
checkbutton.set_radio(False)
checkbutton.props.activatable = True
@@ -529,11 +534,11 @@ class ThumbnailDisplay(gtk.IconView):
self.add_attribute(checkbutton, "active", 1)
self.add_attribute(checkbutton, "visible", 6)
-
+
checkbutton_size = checkbutton.get_size(self, None)
checkbutton_height = checkbutton_size[3]
checkbutton_width = checkbutton_size[2]
-
+
image = ThumbnailCellRenderer(checkbutton_height)
self.pack_start(image, expand=True)
self.add_attribute(image, "image", 0)
@@ -542,12 +547,12 @@ class ThumbnailDisplay(gtk.IconView):
#set the background color to a darkish grey
self.modify_base(gtk.STATE_NORMAL, gtk.gdk.Color('#444444'))
-
+
self.show_all()
self._setup_icons()
-
+
self.connect('item-activated', self.on_item_activated)
-
+
def _create_liststore(self):
"""
Creates the default list store to hold the icons
@@ -562,8 +567,8 @@ class ThumbnailDisplay(gtk.IconView):
gobject.TYPE_BOOLEAN, # 6 visibility of checkbutton
int, # 7 status of download
gtk.gdk.Pixbuf, # 8 status icon
- )
-
+ )
+
def _setup_icons(self):
# icons to be displayed in status column
@@ -582,19 +587,19 @@ class ThumbnailDisplay(gtk.IconView):
size, size)
self.download_pending_icon = gtk.gdk.pixbuf_new_from_file_at_size(
paths.share_dir('glade3/rapid-photo-downloader-download-pending.png'),
- size, size)
+ size, size)
self.downloaded_with_warning_icon = gtk.gdk.pixbuf_new_from_file_at_size(
paths.share_dir('glade3/rapid-photo-downloader-downloaded-with-warning.svg'),
size, size)
self.downloaded_with_error_icon = gtk.gdk.pixbuf_new_from_file_at_size(
paths.share_dir('glade3/rapid-photo-downloader-downloaded-with-error.svg'),
size, size)
-
+
# make the not yet downloaded icon a transparent square
self.not_downloaded_icon = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, 16, 16)
self.not_downloaded_icon.fill(0xffffffff)
self.not_downloaded_icon = self.not_downloaded_icon.add_alpha(True, chr(255), chr(255), chr(255))
-
+
def get_status_icon(self, status):
"""
Returns the correct icon, based on the status
@@ -616,33 +621,33 @@ class ThumbnailDisplay(gtk.IconView):
else:
logger.critical("FIXME: unknown status: %s", status)
status_icon = self.not_downloaded_icon
- return status_icon
-
+ return status_icon
+
def sort_by_timestamp(self):
self.liststore.set_sort_column_id(self.TIMESTAMP_COL, gtk.SORT_ASCENDING)
-
+
def on_selection_changed(self, iconview):
self._selected_items = self.get_selected_items()
-
+
def on_checkbutton_toggled(self, cellrenderertoggle, path):
paths = [p[0] for p in self._selected_items]
if int(path) not in paths:
self._selected_items = [path,]
-
+
for path in self._selected_items:
iter = self.liststore.get_iter(path)
status = self.liststore.get_value(iter, self.DOWNLOAD_STATUS_COL)
if status == STATUS_NOT_DOWNLOADED:
self.liststore.set_value(iter, self.SELECTED_COL, not cellrenderertoggle.get_active())
self.select_path(path)
-
+
self.rapid_app.set_download_action_sensitivity()
-
-
+
+
def set_selected(self, unique_id, value):
iter = self.get_iter_from_unique_id(unique_id)
self.liststore.set_value(iter, self.SELECTED_COL, value)
-
+
def add_file(self, rpd_file, generate_thumbnail):
thumbnail_icon = self.get_stock_icon(rpd_file.file_type)
@@ -650,7 +655,7 @@ class ThumbnailDisplay(gtk.IconView):
scan_pid = rpd_file.scan_pid
timestamp = int(rpd_file.modification_time)
-
+
iter = self.liststore.append((thumbnail_icon,
True,
unique_id,
@@ -661,47 +666,47 @@ class ThumbnailDisplay(gtk.IconView):
STATUS_NOT_DOWNLOADED,
self.not_downloaded_icon
))
-
+
path = self.liststore.get_path(iter)
treerowref = gtk.TreeRowReference(self.liststore, path)
-
+
if scan_pid in self.process_index:
self.process_index[scan_pid].append(unique_id)
else:
self.process_index[scan_pid] = [unique_id,]
-
+
self.treerow_index[unique_id] = treerowref
self.rpd_files[unique_id] = rpd_file
-
+
if generate_thumbnail:
self.total_thumbs_to_generate += 1
def get_sample_file(self, file_type):
- """Returns an rpd_file for of a given file type, or None if it does
+ """Returns an rpd_file for of a given file type, or None if it does
not exist"""
for unique_id, rpd_file in self.rpd_files.iteritems():
if rpd_file.file_type == file_type:
if rpd_file.status <> STATUS_CANNOT_DOWNLOAD:
return rpd_file
-
+
return None
-
+
def get_unique_id_from_iter(self, iter):
return self.liststore.get_value(iter, 2)
-
+
def get_iter_from_unique_id(self, unique_id):
treerowref = self.treerow_index[unique_id]
path = treerowref.get_path()
return self.liststore.get_iter(path)
-
- def on_item_activated(self, iconview, path):
+
+ def on_item_activated(self, iconview, path):
"""
"""
iter = self.liststore.get_iter(path)
self.show_preview(iter=iter)
self.advance_get_preview_image(iter)
-
+
def _get_preview(self, unique_id, rpd_file):
if unique_id not in self.previews_being_fetched:
#check if preview should be from a downloaded file, or the source
@@ -711,13 +716,13 @@ class ThumbnailDisplay(gtk.IconView):
else:
file_location = rpd_file.full_file_name
thm_file_name = rpd_file.thm_full_name
-
+
self.preview_manager.get_preview(unique_id, file_location,
thm_file_name,
rpd_file.file_type, size_max=None,)
-
+
self.previews_being_fetched.add(unique_id)
-
+
def show_preview(self, unique_id=None, iter=None):
if unique_id is not None:
iter = self.get_iter_from_unique_id(unique_id)
@@ -734,31 +739,31 @@ class ThumbnailDisplay(gtk.IconView):
path = 0
iter = self.liststore.get_iter(path)
unique_id = self.get_unique_id_from_iter(iter)
-
-
- rpd_file = self.rpd_files[unique_id]
-
+
+
+ rpd_file = self.rpd_files[unique_id]
+
if unique_id in self.previews:
preview_image = self.previews[unique_id]
else:
# request daemon process to get a full size thumbnail
self._get_preview(unique_id, rpd_file)
- if unique_id in self.thumbnails:
+ if unique_id in self.thumbnails:
preview_image = self.thumbnails[unique_id]
else:
preview_image = self.get_stock_icon(rpd_file.file_type)
-
+
checked = self.liststore.get_value(iter, self.SELECTED_COL)
include_checkbutton_visible = rpd_file.status == STATUS_NOT_DOWNLOADED
- self.rapid_app.show_preview_image(unique_id, preview_image,
+ self.rapid_app.show_preview_image(unique_id, preview_image,
include_checkbutton_visible, checked)
-
+
def _get_next_iter(self, iter):
iter = self.liststore.iter_next(iter)
if iter is None:
iter = self.liststore.get_iter_first()
return iter
-
+
def _get_prev_iter(self, iter):
row = self.liststore.get_path(iter)[0]
if row == 0:
@@ -766,44 +771,44 @@ class ThumbnailDisplay(gtk.IconView):
else:
row -= 1
iter = self.liststore.get_iter(row)
- return iter
-
+ return iter
+
def show_next_image(self, unique_id):
iter = self.get_iter_from_unique_id(unique_id)
iter = self._get_next_iter(iter)
if iter is not None:
self.show_preview(iter=iter)
-
+
# cache next image
self.advance_get_preview_image(iter, prev=False, next=True)
-
+
def show_prev_image(self, unique_id):
iter = self.get_iter_from_unique_id(unique_id)
iter = self._get_prev_iter(iter)
if iter is not None:
self.show_preview(iter=iter)
-
+
# cache next image
self.advance_get_preview_image(iter, prev=True, next=False)
-
+
def advance_get_preview_image(self, iter, prev=True, next=True):
unique_ids = []
if next:
next_iter = self._get_next_iter(iter)
unique_ids.append(self.get_unique_id_from_iter(next_iter))
-
+
if prev:
prev_iter = self._get_prev_iter(iter)
unique_ids.append(self.get_unique_id_from_iter(prev_iter))
-
+
for unique_id in unique_ids:
if not unique_id in self.previews:
rpd_file = self.rpd_files[unique_id]
self._get_preview(unique_id, rpd_file)
-
+
def check_all(self, check_all, file_type=None):
for row in self.liststore:
if row[self.CHECKBUTTON_VISIBLE_COL]:
@@ -813,7 +818,7 @@ class ThumbnailDisplay(gtk.IconView):
else:
row[self.SELECTED_COL] = check_all
self.rapid_app.set_download_action_sensitivity()
-
+
def files_are_checked_to_download(self):
"""
Returns True if there is any file that the user has indicated they
@@ -825,12 +830,12 @@ class ThumbnailDisplay(gtk.IconView):
if rpd_file.status not in DOWNLOADED:
return True
return False
-
+
def get_files_checked_for_download(self, scan_pid):
"""
Returns a dict of scan ids and associated files the user has indicated
they want to download
-
+
If scan_pid is not None, then returns only those files from that scan_pid
"""
files = dict()
@@ -853,7 +858,7 @@ class ThumbnailDisplay(gtk.IconView):
if self.liststore.get_value(iter, self.SELECTED_COL):
files[scan_pid].append(rpd_file)
return files
-
+
def get_no_files_remaining(self, scan_pid):
"""
Returns the number of files that have not yet been downloaded for the
@@ -865,17 +870,17 @@ class ThumbnailDisplay(gtk.IconView):
if rpd_file.status == STATUS_NOT_DOWNLOADED:
i += 1
return i
-
+
def files_remain_to_download(self):
"""
- Returns True if any files remain that are not downloaded, else returns
+ Returns True if any files remain that are not downloaded, else returns
False
"""
for row in self.liststore:
if row[self.DOWNLOAD_STATUS_COL] == STATUS_NOT_DOWNLOADED:
return True
return False
-
+
def mark_download_pending(self, files_by_scan_pid):
"""
@@ -895,19 +900,19 @@ class ThumbnailDisplay(gtk.IconView):
self.liststore.set_value(iter, self.DOWNLOAD_STATUS_COL, STATUS_DOWNLOAD_PENDING)
icon = self.get_status_icon(STATUS_DOWNLOAD_PENDING)
self.liststore.set_value(iter, self.STATUS_ICON_COL, icon)
-
+
def select_image(self, unique_id):
iter = self.get_iter_from_unique_id(unique_id)
path = self.liststore.get_path(iter)
self.select_path(path)
self.scroll_to_path(path, use_align=False, row_align=0.5, col_align=0.5)
-
+
def get_stock_icon(self, file_type):
if file_type == rpdfile.FILE_TYPE_PHOTO:
return self.stock_photo_thumbnails.stock_thumbnail_image_icon
else:
return self.stock_video_thumbnails.stock_thumbnail_image_icon
-
+
def update_status_post_download(self, rpd_file):
iter = self.get_iter_from_unique_id(rpd_file.unique_id)
self.liststore.set_value(iter, self.DOWNLOAD_STATUS_COL, rpd_file.status)
@@ -915,7 +920,7 @@ class ThumbnailDisplay(gtk.IconView):
self.liststore.set_value(iter, self.STATUS_ICON_COL, icon)
self.liststore.set_value(iter, self.CHECKBUTTON_VISIBLE_COL, False)
self.rpd_files[rpd_file.unique_id] = rpd_file
-
+
def generate_thumbnails(self, scan_pid):
"""Initiate thumbnail generation for files scanned in one process
"""
@@ -923,81 +928,81 @@ class ThumbnailDisplay(gtk.IconView):
rpd_files = [self.rpd_files[unique_id] for unique_id in self.process_index[scan_pid]]
thumbnail_pid = self.thumbnail_manager.add_task((scan_pid, rpd_files))
self.generating_thumbnails[scan_pid] = thumbnail_pid
-
+
def _set_thumbnail(self, unique_id, icon):
treerowref = self.treerow_index[unique_id]
path = treerowref.get_path()
iter = self.liststore.get_iter(path)
- self.liststore.set(iter, 0, icon)
-
+ self.liststore.set(iter, 0, icon)
+
def update_thumbnail(self, thumbnail_data):
"""
Takes the generated thumbnail and updates the display
-
+
If the thumbnail_data includes a second image, that is used to
update the thumbnail list using the unique_id
"""
unique_id = thumbnail_data[0]
thumbnail_icon = thumbnail_data[1]
-
+
if thumbnail_icon is not None:
# get the thumbnail icon in PIL format
thumbnail_icon = thumbnail_icon.get_image()
-
+
if thumbnail_icon:
self._set_thumbnail(unique_id, thumbnail_icon)
-
+
if len(thumbnail_data) > 2:
# get the 2nd image in PIL format
self.thumbnails[unique_id] = thumbnail_data[2].get_image()
def terminate_thumbnail_generation(self, scan_pid):
"""
- Terminates thumbnail generation if thumbnails are currently
+ Terminates thumbnail generation if thumbnails are currently
being generated for this scan_pid
"""
-
+
if scan_pid in self.generating_thumbnails:
terminated = True
self.thumbnail_manager.terminate_process(
self.generating_thumbnails[scan_pid])
del self.generating_thumbnails[scan_pid]
-
+
if len(self.generating_thumbnails) == 0:
self._reset_thumbnail_tracking_and_display()
else:
terminated = False
-
+
return terminated
-
+
def mark_thumbnails_needed(self, rpd_files):
for rpd_file in rpd_files:
if rpd_file.unique_id not in self.thumbnails:
rpd_file.generate_thumbnail = True
-
+
def _reset_thumbnail_tracking_and_display(self):
self.rapid_app.download_progressbar.set_fraction(0.0)
self.rapid_app.download_progressbar.set_text('')
self.thumbnails_generated = 0
self.total_thumbs_to_generate = 0
-
+
def thumbnail_results(self, source, condition):
connection = self.thumbnail_manager.get_pipe(source)
-
+
conn_type, data = connection.recv()
-
+
if conn_type == rpdmp.CONN_COMPLETE:
scan_pid = data
del self.generating_thumbnails[scan_pid]
connection.close()
return False
else:
-
+
for thumbnail_data in data:
self.update_thumbnail(thumbnail_data)
-
+
self.thumbnails_generated += len(data)
-
+
# clear progress bar information if all thumbnails have been
# extracted
if self.thumbnails_generated == self.total_thumbs_to_generate:
@@ -1006,10 +1011,10 @@ class ThumbnailDisplay(gtk.IconView):
if self.total_thumbs_to_generate:
self.rapid_app.download_progressbar.set_fraction(
float(self.thumbnails_generated) / self.total_thumbs_to_generate)
-
-
+
+
return True
-
+
def preview_results(self, unique_id, preview_full_size, preview_small):
"""
Receive a full size preview image and update
@@ -1019,24 +1024,24 @@ class ThumbnailDisplay(gtk.IconView):
preview_image = preview_full_size.get_image()
self.previews[unique_id] = preview_image
self.rapid_app.update_preview_image(unique_id, preview_image)
-
+
# user can turn off option for thumbnail generation after a scan
if unique_id not in self.thumbnails and preview_small is not None:
self._set_thumbnail(unique_id, preview_small.get_image())
-
-
+
+
def clear_all(self, scan_pid=None, keep_downloaded_files=False):
"""
Removes files from display and internal tracking.
-
+
If scan_pid is not None, then only files matching that scan_pid will
be removed. Otherwise, everything will be removed.
-
+
If keep_downloaded_files is True, files will not be removed if they
have been downloaded.
"""
if scan_pid is None and not keep_downloaded_files:
-
+
# Here it is critically important to create a brand new liststore,
# because the old one is set to be sorted, which is extremely slow.
logger.debug("Creating new thumbnails model")
@@ -1045,7 +1050,7 @@ class ThumbnailDisplay(gtk.IconView):
self.treerow_index = {}
self.process_index = {}
-
+
self.rpd_files = {}
else:
if scan_pid in self.process_index:
@@ -1060,80 +1065,80 @@ class ThumbnailDisplay(gtk.IconView):
del self.rpd_files[rpd_file.unique_id]
if not keep_downloaded_files or not len(self.process_index[scan_pid]):
del self.process_index[scan_pid]
-
+
def display_thumbnails(self):
self.set_model(self.liststore)
-
+
class TaskManager:
def __init__(self, results_callback, batch_size):
self.results_callback = results_callback
-
+
# List of actual process, it's terminate_queue, and it's run_event
self._processes = []
-
+
self._pipes = {}
self.batch_size = batch_size
-
+
self.paused = False
self.no_tasks = 0
-
-
+
+
def add_task(self, task):
pid = self._setup_task(task)
logger.debug("TaskManager PID: %s", pid)
self.no_tasks += 1
return pid
-
+
def _setup_task(self, task):
task_results_conn, task_process_conn = self._setup_pipe()
-
+
source = task_results_conn.fileno()
self._pipes[source] = task_results_conn
gobject.io_add_watch(source, gobject.IO_IN, self.results_callback)
-
+
terminate_queue = Queue()
run_event = Event()
run_event.set()
-
- return self._initiate_task(task, task_results_conn, task_process_conn,
+
+ return self._initiate_task(task, task_results_conn, task_process_conn,
terminate_queue, run_event)
-
+
def _setup_pipe(self):
return Pipe(duplex=False)
-
+
def _initiate_task(self, task, task_process_conn, terminate_queue, run_event):
logger.error("Implement child class method!")
-
-
+
+
def processes(self):
for i in range(len(self._processes)):
yield self._processes[i]
-
+
def start(self):
self.paused = False
for scan in self.processes():
run_event = scan[2]
if not run_event.is_set():
run_event.set()
-
+
def pause(self):
self.paused = True
for scan in self.processes():
run_event = scan[2]
if run_event.is_set():
run_event.clear()
-
+
def _terminate_process(self, p):
self._send_termination_msg(p)
# The process might be paused: let it run
run_event = p[2]
if not run_event.is_set():
run_event.set()
-
+
def _send_termination_msg(self, p):
p[1].put(None)
-
+
def terminate_process(self, process_id):
"""
Send a signal to process with matching process_id that it should
@@ -1143,7 +1148,7 @@ class TaskManager:
if p[0].pid == process_id:
if p[0].is_alive():
self._terminate_process(p)
-
+
def request_termination(self):
"""
Send a signal to processes that they should immediately terminate
@@ -1153,29 +1158,29 @@ class TaskManager:
if p[0].is_alive():
requested = True
self._terminate_process(p)
-
+
return requested
-
+
def terminate_forcefully(self):
"""
Forcefully terminates any running processes. Use with great caution.
- No cleanup action is performed.
-
+ No cleanup action is performed.
+
As python essential reference (4th edition) says, if the process
'holds a lock or is involved with interprocess communication,
terminating it might cause a deadlock or corrupted I/O.'
"""
-
+
for p in self.processes():
if p[0].is_alive():
- logger.info("Forcefully terminating %s in %s" , p[0].name,
+ logger.info("Forcefully terminating %s in %s" , p[0].name,
self.__class__.__name__)
p[0].terminate()
-
+
def get_pipe(self, source):
return self._pipes[source]
-
+
def get_no_active_processes(self):
"""
Returns how many processes are currently active, i.e. running
@@ -1188,38 +1193,38 @@ class TaskManager:
class ScanManager(TaskManager):
-
- def __init__(self, results_callback, batch_size,
+
+ def __init__(self, results_callback, batch_size,
add_device_function):
TaskManager.__init__(self, results_callback, batch_size)
self.add_device_function = add_device_function
-
- def _initiate_task(self, task, task_results_conn, task_process_conn,
+
+ def _initiate_task(self, task, task_results_conn, task_process_conn,
terminate_queue, run_event):
-
+
device = task[0]
ignored_paths = task[1]
use_re_ignored_paths = task[2]
-
+
scan = scan_process.Scan(device.get_path(),
ignored_paths,
use_re_ignored_paths,
- self.batch_size,
+ self.batch_size,
task_process_conn, terminate_queue, run_event)
scan.start()
self._processes.append((scan, terminate_queue, run_event))
- self.add_device_function(scan.pid, device,
+ self.add_device_function(scan.pid, device,
# This refers to when a device like a hard drive is having its contents scanned,
- # looking for photos or videos. It is visible initially in the progress bar for each device
+ # looking for photos or videos. It is visible initially in the progress bar for each device
# (which normally holds "x photos and videos").
# It maybe displayed only briefly if the contents of the device being scanned is small.
progress_bar_text=_('scanning...'))
-
+
return scan.pid
-
+
class CopyFilesManager(TaskManager):
-
- def _initiate_task(self, task, task_results_conn,
+
+ def _initiate_task(self, task, task_results_conn,
task_process_conn, terminate_queue, run_event):
photo_download_folder = task[0]
video_download_folder = task[1]
@@ -1227,25 +1232,25 @@ class CopyFilesManager(TaskManager):
files = task[3]
modify_files_during_download = task[4]
modify_pipe = task[5]
-
+
copy_files = copyfiles.CopyFiles(photo_download_folder,
video_download_folder,
- files,
+ files,
modify_files_during_download,
modify_pipe,
- scan_pid, self.batch_size,
+ scan_pid, self.batch_size,
task_process_conn, terminate_queue, run_event)
copy_files.start()
self._processes.append((copy_files, terminate_queue, run_event))
return copy_files.pid
-
+
class ThumbnailManager(TaskManager):
def _initiate_task(self, task, task_results_conn,
task_process_conn, terminate_queue, run_event):
scan_pid = task[0]
files = task[1]
- generator = tn.GenerateThumbnails(scan_pid, files, self.batch_size,
- task_process_conn, terminate_queue,
+ generator = tn.GenerateThumbnails(scan_pid, files, self.batch_size,
+ task_process_conn, terminate_queue,
run_event)
generator.start()
self._processes.append((generator, terminate_queue, run_event))
@@ -1256,44 +1261,44 @@ class FileModifyManager(TaskManager):
Duplex, multiprocess, similar to BackupFilesManager
"""
def __init__(self, results_callback):
- TaskManager.__init__(self, results_callback=results_callback,
+ TaskManager.__init__(self, results_callback=results_callback,
batch_size=0)
self.file_modify_by_scan_pid = {}
-
- def _initiate_task(self, task, task_results_conn, task_process_conn,
+
+ def _initiate_task(self, task, task_results_conn, task_process_conn,
terminate_queue, run_event):
scan_pid = task[0]
auto_rotate_jpeg = task[1]
focal_length = task[2]
-
+
file_modify = filemodify.FileModify(auto_rotate_jpeg, focal_length,
- task_process_conn, terminate_queue,
+ task_process_conn, terminate_queue,
run_event)
file_modify.start()
- self._processes.append((file_modify, terminate_queue, run_event,
+ self._processes.append((file_modify, terminate_queue, run_event,
task_results_conn))
-
+
self.file_modify_by_scan_pid[scan_pid] = (task_results_conn, file_modify.pid)
-
+
return file_modify.pid
def _setup_pipe(self):
return Pipe(duplex=True)
-
+
def _send_termination_msg(self, p):
p[1].put(None)
p[3].send((None, None))
-
+
def get_modify_pipe(self, scan_pid):
return self.file_modify_by_scan_pid[scan_pid][0]
-
-
+
+
class BackupFilesManager(TaskManager):
"""
Handles backup processes. This is a little different from some other Task
Manager classes in that its pipe is Duplex, and the work done by it
is not pre-assigned when the process is started.
-
+
Duplex, multiprocess.
"""
def __init__(self, results_callback, batch_size):
@@ -1302,30 +1307,31 @@ class BackupFilesManager(TaskManager):
def _setup_pipe(self):
return Pipe(duplex=True)
-
+
def _send_termination_msg(self, p):
p[1].put(None)
- p[3].send((None, None, None, None))
-
- def _initiate_task(self, task, task_results_conn, task_process_conn,
+ p[3].send((None, None, None, None, None))
+
+ def _initiate_task(self, task, task_results_conn, task_process_conn,
terminate_queue, run_event):
path = task[0]
name = task[1]
backup_type = task[2]
- backup_files = backupfile.BackupFiles(path, name, self.batch_size,
- task_process_conn, terminate_queue,
+ backup_files = backupfile.BackupFiles(path, name, self.batch_size,
+ task_process_conn, terminate_queue,
run_event)
backup_files.start()
- self._processes.append((backup_files, terminate_queue, run_event,
+ self._processes.append((backup_files, terminate_queue, run_event,
task_results_conn))
-
+
self.backup_devices_by_path[path] = (task_results_conn, backup_files.pid,
backup_type)
-
+
return backup_files.pid
-
- def backup_file(self, move_succeeded, rpd_file, path_suffix,
- backup_duplicate_overwrite):
+
+ def backup_file(self, move_succeeded, rpd_file, path_suffix,
+ backup_duplicate_overwrite,
+ download_count):
if rpd_file.file_type == rpdfile.FILE_TYPE_PHOTO:
logger.debug("Backing up photo %s", rpd_file.download_name)
@@ -1334,124 +1340,124 @@ class BackupFilesManager(TaskManager):
for path in self.backup_devices_by_path:
backup_type = self.backup_devices_by_path[path][2]
- if ((backup_type == PHOTO_VIDEO_BACKUP) or
+ if ((backup_type == PHOTO_VIDEO_BACKUP) or
(rpd_file.file_type == rpdfile.FILE_TYPE_PHOTO and backup_type == PHOTO_BACKUP) or
(rpd_file.file_type == rpdfile.FILE_TYPE_VIDEO and backup_type == VIDEO_BACKUP)):
logger.debug("Backing up to %s", path)
task_results_conn = self.backup_devices_by_path[path][0]
- task_results_conn.send((move_succeeded, rpd_file, path_suffix,
- backup_duplicate_overwrite))
+ task_results_conn.send((move_succeeded, rpd_file, path_suffix,
+ backup_duplicate_overwrite, download_count))
else:
logger.debug("Not backing up to %s", path)
-
+
def add_device(self, path, name, backup_type):
"""
Convenience function to setup adding a backup device
"""
return self.add_task((path, name, backup_type))
-
+
def remove_device(self, path):
pid = self.backup_devices_by_path[path][1]
self.terminate_process(pid)
del self.backup_devices_by_path[path]
-
-
+
+
class SingleInstanceTaskManager:
"""
Base class to manage single instance processes. Examples are daemon
processes, but also a non-daemon process that has one simple task.
-
+
Core (infrastructure) functionality is implemented in this class.
Derived classes should implemented functionality to actually implement
specific tasks.
"""
- def __init__(self, results_callback):
+ def __init__(self, results_callback):
self.results_callback = results_callback
-
+
self.task_results_conn, self.task_process_conn = Pipe(duplex=True)
-
+
source = self.task_results_conn.fileno()
gobject.io_add_watch(source, gobject.IO_IN, self.task_results)
-
+
class PreviewManager(SingleInstanceTaskManager):
def __init__(self, results_callback):
SingleInstanceTaskManager.__init__(self, results_callback)
self._get_preview = tn.GetPreviewImage(self.task_process_conn)
self._get_preview.start()
-
+
def get_preview(self, unique_id, full_file_name, thm_file_name, file_type, size_max):
self.task_results_conn.send((unique_id, full_file_name, thm_file_name, file_type, size_max))
-
+
def task_results(self, source, condition):
unique_id, preview_full_size, preview_small = self.task_results_conn.recv()
self.results_callback(unique_id, preview_full_size, preview_small)
- return True
-
+ return True
+
class SubfolderFileManager(SingleInstanceTaskManager):
"""
Manages the daemon process that renames files and creates subfolders
"""
def __init__(self, results_callback, sequence_values):
SingleInstanceTaskManager.__init__(self, results_callback)
- self._subfolder_file = subfolderfile.SubfolderFile(self.task_process_conn,
+ self._subfolder_file = subfolderfile.SubfolderFile(self.task_process_conn,
sequence_values)
self._subfolder_file.start()
logger.debug("SubfolderFile PID: %s", self._subfolder_file.pid)
-
- def rename_file_and_move_to_subfolder(self, download_succeeded,
+
+ def rename_file_and_move_to_subfolder(self, download_succeeded,
download_count, rpd_file):
-
- self.task_results_conn.send((download_succeeded, download_count,
+
+ logger.debug("Sending file for rename: %s.", download_count)
+ self.task_results_conn.send((download_succeeded, download_count,
rpd_file))
- logger.debug("Download count: %s.", download_count)
-
+
def task_results(self, source, condition):
- move_succeeded, rpd_file = self.task_results_conn.recv()
- self.results_callback(move_succeeded, rpd_file)
+ move_succeeded, rpd_file, download_count = self.task_results_conn.recv()
+ self.results_callback(move_succeeded, rpd_file, download_count)
return True
-
+
class ResizblePilImage(gtk.DrawingArea):
def __init__(self, bg_color=None):
gtk.DrawingArea.__init__(self)
self.base_image = None
self.bg_color = bg_color
self.connect('expose_event', self.expose)
-
+
def set_image(self, image):
self.base_image = image
-
+
#set up sizes and ratio used for drawing the derived image
self.base_image_w = self.base_image.size[0]
self.base_image_h = self.base_image.size[1]
self.base_image_aspect = float(self.base_image_w) / self.base_image_h
-
+
self.queue_draw()
-
+
def expose(self, widget, event):
cairo_context = self.window.cairo_create()
-
- x = event.area.x
- y = event.area.y
+
+ x = event.area.x
+ y = event.area.y
w = event.area.width
h = event.area.height
-
- #constrain operations to event area
+
+ #constrain operations to event area
cairo_context.rectangle(x, y, w, h)
cairo_context.clip_preserve()
-
+
#set background color, if needed
if self.bg_color:
cairo_context.set_source_rgb(*self.bg_color)
- cairo_context.fill_preserve()
+ cairo_context.fill_preserve()
if not self.base_image:
return False
-
+
frame_aspect = float(w) / h
-
+
if frame_aspect > self.base_image_aspect:
# Frame is wider than image
height = h
@@ -1460,7 +1466,7 @@ class ResizblePilImage(gtk.DrawingArea):
# Frame is taller than image
width = w
height = int(width / self.base_image_aspect)
-
+
#resize image
pil_image = self.base_image.copy()
if self.base_image_w < width or self.base_image_h < height:
@@ -1473,38 +1479,38 @@ class ResizblePilImage(gtk.DrawingArea):
#image width and height
image_w = pil_image.size[0]
image_h = pil_image.size[1]
-
+
#center the image horizontally and vertically
#top left and right corners for the image:
image_x = x + ((w - image_w) / 2)
image_y = y + ((h - image_h) / 2)
-
+
image = create_cairo_image_surface(pil_image, image_w, image_h)
cairo_context.set_source_surface(image, image_x, image_y)
- cairo_context.paint()
+ cairo_context.paint()
+
+ return False
+
- return False
-
-
class PreviewImage:
-
+
def __init__(self, parent_app, builder):
#set background color to equivalent of '#444444
- self.preview_image = ResizblePilImage(bg_color=(0.267, 0.267, 0.267))
+ self.preview_image = ResizblePilImage(bg_color=(0.267, 0.267, 0.267))
self.preview_image_eventbox = builder.get_object("preview_eventbox")
self.preview_image_eventbox.add(self.preview_image)
self.preview_image.show()
self.download_this_checkbutton = builder.get_object("download_this_checkbutton")
self.rapid_app = parent_app
-
+
self.base_preview_image = None # large size image used to scale down from
self.current_preview_size = (0,0)
self.preview_image_size_limit = (0,0)
-
+
self.unique_id = None
-
- def set_preview_image(self, unique_id, pil_image, include_checkbutton_visible=None,
+
+ def set_preview_image(self, unique_id, pil_image, include_checkbutton_visible=None,
checked=None):
"""
"""
@@ -1516,72 +1522,74 @@ class PreviewImage:
if include_checkbutton_visible is not None:
self.download_this_checkbutton.props.visible = include_checkbutton_visible
-
+
def update_preview_image(self, unique_id, pil_image):
if unique_id == self.unique_id:
self.set_preview_image(unique_id, pil_image)
-
+
class RapidApp(dbus.service.Object):
"""
The main Rapid Photo Downloader application class.
-
+
Contains functionality for main program window, and directs all other
processes.
"""
-
+
def __init__(self, bus, path, name, taskserver=None, focal_length=None,
- auto_detect=None, device_location=None):
-
+ auto_detect=None, device_location=None):
+
dbus.service.Object.__init__ (self, bus, path, name)
self.running = False
-
+
self.taskserver = taskserver
-
+
self.focal_length = focal_length
-
+
# Setup program preferences, and set callback for when they change
self._init_prefs(auto_detect, device_location)
-
+
# Initialize widgets in the main window, and variables that point to them
self._init_widgets()
- self._init_pynotify()
-
+
+ if use_pynotify:
+ self._init_pynotify()
+
# Initialize job code handling
self._init_job_code()
-
+
# Remember the window size from the last time the program was run, or
# set a default size
self._set_window_size()
-
+
# Setup various widgets
self._setup_buttons()
self._setup_error_icons()
self._setup_icons()
-
+
# Show the main window
self.rapidapp.show()
-
+
# Check program preferences - don't allow auto start if there is a problem
prefs_valid, msg = prefsrapid.check_prefs_for_validity(self.prefs)
if not prefs_valid:
self.notify_prefs_are_invalid(details=msg)
-
+
# Initialize variables with which to track important downloads results
self._init_download_tracking()
-
+
# Set up process managers.
# A task such as scanning a device or copying files is handled in its
# own process.
self._start_process_managers()
-
+
# Setup devices from which to download from and backup to
- self.setup_devices(on_startup=True, on_preference_change=False,
+ self.setup_devices(on_startup=True, on_preference_change=False,
block_auto_start=not prefs_valid)
-
+
# Ensure the device collection scrolled window is not too small
self._set_device_collection_size()
-
+
def on_rapidapp_destroy(self, widget, data=None):
self._terminate_processes(terminate_file_copies = True)
@@ -1592,30 +1600,30 @@ class RapidApp(dbus.service.Object):
x, y, width, height = self.rapidapp.get_allocation()
self.prefs.main_window_size_x = width
self.prefs.main_window_size_y = height
-
+
self.prefs.set_downloads_today_from_tracker(self.downloads_today_tracker)
-
+
gtk.main_quit()
-
+
def _terminate_processes(self, terminate_file_copies=False):
-
+
if terminate_file_copies:
logger.info("Terminating all processes...")
- scan_termination_requested = self.scan_manager.request_termination()
+ scan_termination_requested = self.scan_manager.request_termination()
thumbnails_termination_requested = self.thumbnails.thumbnail_manager.request_termination()
backup_termination_requested = self.backup_manager.request_termination()
file_modify_termination_requested = self.file_modify_manager.request_termination()
-
+
if terminate_file_copies:
copy_files_termination_requested = self.copy_files_manager.request_termination()
else:
copy_files_termination_requested = False
-
+
if (scan_termination_requested or thumbnails_termination_requested or
backup_termination_requested or file_modify_termination_requested):
time.sleep(1)
- if (self.scan_manager.get_no_active_processes() > 0 or
+ if (self.scan_manager.get_no_active_processes() > 0 or
self.thumbnails.thumbnail_manager.get_no_active_processes() > 0 or
self.backup_manager.get_no_active_processes() > 0 or
self.file_modify_manager.get_no_active_processes() > 0):
@@ -1626,14 +1634,14 @@ class RapidApp(dbus.service.Object):
self.scan_manager.terminate_forcefully()
self.backup_manager.terminate_forcefully()
self.file_modify_manager.terminate_forcefully()
-
+
if terminate_file_copies and copy_files_termination_requested:
time.sleep(1)
self.copy_files_manager.terminate_forcefully()
-
+
if terminate_file_copies:
self._clean_all_temp_dirs()
-
+
# # #
# Events and tasks related to displaying preview images and thumbnails
# # #
@@ -1642,61 +1650,61 @@ class RapidApp(dbus.service.Object):
value = checkbutton.get_active()
self.thumbnails.set_selected(self.preview_image.unique_id, value)
self.set_download_action_sensitivity()
-
+
def on_preview_eventbox_button_press_event(self, widget, event):
-
+
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
- self.show_thumbnails()
-
+ self.show_thumbnails()
+
def on_show_thumbnails_action_activate(self, action):
logger.debug("on_show_thumbnails_action_activate")
self.show_thumbnails()
-
+
def on_show_image_action_activate(self, action):
logger.debug("on_show_image_action_activate")
self.thumbnails.show_preview()
-
+
def on_check_all_action_activate(self, action):
self.thumbnails.check_all(check_all=True)
-
+
def on_uncheck_all_action_activate(self, action):
self.thumbnails.check_all(check_all=False)
def on_check_all_photos_action_activate(self, action):
- self.thumbnails.check_all(check_all=True,
+ self.thumbnails.check_all(check_all=True,
file_type=rpdfile.FILE_TYPE_PHOTO)
-
+
def on_check_all_videos_action_activate(self, action):
- self.thumbnails.check_all(check_all=True,
+ self.thumbnails.check_all(check_all=True,
file_type=rpdfile.FILE_TYPE_VIDEO)
-
+
def on_quit_action_activate(self, action):
self.on_rapidapp_destroy(widget=self.rapidapp, data=None)
-
+
def on_refresh_action_activate(self, action):
self.thumbnails.clear_all()
self.setup_devices(on_startup=False, on_preference_change=False,
block_auto_start=True)
-
+
def on_get_help_action_activate(self, action):
webbrowser.open("http://www.damonlynch.net/rapid/help.html")
-
+
def on_about_action_activate(self, action):
self.about.set_property("name", PROGRAM_NAME)
self.about.set_property("version", utilities.human_readable_version(
__version__))
self.about.run()
self.about.hide()
-
+
def on_report_problem_action_activate(self, action):
webbrowser.open("https://bugs.launchpad.net/rapid")
-
+
def on_translate_action_activate(self, action):
webbrowser.open("http://www.damonlynch.net/rapid/translate.html")
-
+
def on_donate_action_activate(self, action):
webbrowser.open("http://www.damonlynch.net/rapid/donate.html")
-
+
def show_preview_image(self, unique_id, image, include_checkbutton_visible, checked):
if self.main_notebook.get_current_page() == 0: # thumbnails
logger.debug("Switching to preview image display")
@@ -1704,26 +1712,26 @@ class RapidApp(dbus.service.Object):
self.preview_image.set_preview_image(unique_id, image, include_checkbutton_visible, checked)
self.next_image_action.set_sensitive(True)
self.prev_image_action.set_sensitive(True)
-
+
def update_preview_image(self, unique_id, image):
self.preview_image.update_preview_image(unique_id, image)
-
+
def show_thumbnails(self):
logger.debug("Switching to thumbnails display")
self.main_notebook.set_current_page(0)
self.thumbnails.select_image(self.preview_image.unique_id)
self.next_image_action.set_sensitive(False)
self.prev_image_action.set_sensitive(False)
-
-
+
+
def on_next_image_action_activate(self, action):
if self.preview_image.unique_id is not None:
self.thumbnails.show_next_image(self.preview_image.unique_id)
-
+
def on_prev_image_action_activate(self, action):
- if self.preview_image.unique_id is not None:
+ if self.preview_image.unique_id is not None:
self.thumbnails.show_prev_image(self.preview_image.unique_id)
-
+
def display_scan_thumbnails(self):
"""
If all the scans are complete, sets the sort order and displays
@@ -1737,35 +1745,36 @@ class RapidApp(dbus.service.Object):
# # #
# Volume management
# # #
-
+
def start_volume_monitor(self):
if not self.vmonitor:
self.vmonitor = gio.volume_monitor_get()
self.vmonitor.connect("mount-added", self.on_mount_added)
- self.vmonitor.connect("mount-removed", self.on_mount_removed)
-
-
+ self.vmonitor.connect("mount-removed", self.on_mount_removed)
+
+
def _backup_device_name(self, path):
if self.backup_devices[path][0] is None:
name = path
else:
name = self.backup_devices[path][0].get_name()
return name
-
+
def start_device_scan(self, device):
"""
- Commences the scanning of a device using the preference values for
+ Commences the scanning of a device using the preference values for
any paths to ignore while scanning
"""
- return self.scan_manager.add_task([device,
+ logger.debug("Starting a device scan for device %s", device.get_name())
+ return self.scan_manager.add_task([device,
self.prefs.ignored_paths,
self.prefs.use_re_ignored_paths])
-
+
def confirm_manual_location(self):
"""
- Queries the user to ask if they really want to download from locations
+ Queries the user to ask if they really want to download from locations
that could take a very long time to scan. They can choose yes or no.
-
+
Returns True if yes or there was no need to ask the user, False if the
user said no.
"""
@@ -1781,34 +1790,34 @@ class RapidApp(dbus.service.Object):
question="<b>" + _("Downloading from %(location)s.") % {'location': l} + "</b>\n\n" +
_("Do you really want to download from here? On some systems, scanning this location can take a very long time."),
default_to_yes=False,
- use_markup=True)
+ use_markup=True)
response = c.run()
user_confirmed = response == gtk.RESPONSE_OK
c.destroy()
if not user_confirmed:
return False
return True
-
+
def setup_devices(self, on_startup, on_preference_change, block_auto_start):
"""
-
+
Setup devices from which to download from and backup to
-
+
Sets up volumes for downloading from and backing up to
-
- on_startup should be True if the program is still starting,
+
+ on_startup should be True if the program is still starting,
i.e. this is being called from the program's initialization.
-
+
on_preference_change should be True if this is being called as the
result of a preference being changed
-
+
block_auto_start should be True if automation options to automatically
start a download should be ignored
-
- Removes any image media that are currently not downloaded,
- or finished downloading
+
+ Removes any image media that are currently not downloaded,
+ or finished downloading
"""
-
+
if self.using_volume_monitor():
self.start_volume_monitor()
@@ -1816,10 +1825,10 @@ class RapidApp(dbus.service.Object):
if not self.prefs.device_autodetection:
if not self.confirm_manual_location():
return
-
+
mounts = []
self.backup_devices = {}
-
+
if self.using_volume_monitor():
# either using automatically detected backup devices
# or download devices
@@ -1827,7 +1836,7 @@ class RapidApp(dbus.service.Object):
if not mount.is_shadowed():
path = mount.get_root().get_path()
if path:
- if (path in self.prefs.device_blacklist and
+ if (path in self.prefs.device_blacklist and
self.search_for_PSD()):
logger.info("%s ignored", mount.get_name())
else:
@@ -1835,17 +1844,17 @@ class RapidApp(dbus.service.Object):
is_backup_mount, backup_file_type = self.check_if_backup_mount(path)
if is_backup_mount:
self.backup_devices[path] = (mount, backup_file_type)
- elif (self.prefs.device_autodetection and
- (dv.is_DCIM_device(path) or
+ elif (self.prefs.device_autodetection and
+ (dv.is_DCIM_device(path) or
self.search_for_PSD())):
logger.debug("Appending %s", mount.get_name())
mounts.append((path, mount))
else:
logger.debug("Ignoring %s", mount.get_name())
-
-
+
+
if not self.prefs.device_autodetection:
- # user manually specified the path from which to download
+ # user manually specified the path from which to download
path = self.prefs.device_location
if path:
logger.info("Using manually specified path %s", path)
@@ -1858,35 +1867,47 @@ class RapidApp(dbus.service.Object):
if not self.prefs.backup_device_autodetection:
self._setup_manual_backup()
self._add_backup_devices()
-
+
self.update_no_backup_devices()
-
+
# Display amount of free space in a status bar message
self.display_free_space()
-
+
if block_auto_start:
self.auto_start_is_on = False
else:
self.auto_start_is_on = ((not on_preference_change) and
- ((self.prefs.auto_download_at_startup and
- on_startup) or
+ ((self.prefs.auto_download_at_startup and
+ on_startup) or
(self.prefs.auto_download_upon_device_insertion and
not on_startup)))
-
+
+ logger.debug("Working with %s devices", len(mounts))
for m in mounts:
path, mount = m
device = dv.Device(path=path, mount=mount)
- if (self.search_for_PSD() and
- path not in self.prefs.device_whitelist):
- # prompt user to see if device should be used or not
- self.get_use_device(device)
- else:
- scan_pid = self.start_device_scan(device)
- if mount is not None:
- self.mounts_by_path[path] = scan_pid
+
+
+ if not self._device_already_detected(device):
+ if (self.search_for_PSD() and
+ path not in self.prefs.device_whitelist):
+ # prompt user to see if device should be used or not
+ self.get_use_device(device)
+ else:
+ scan_pid = self.start_device_scan(device)
+ if mount is not None:
+ self.mounts_by_path[path] = scan_pid
if not mounts:
self.set_download_action_sensitivity()
-
+
+ def _device_already_detected(self, device):
+ path = device.get_path()
+ if path in self.mounts_by_path:
+ logger.debug("Ignoring device %s as already have path %s", device.get_name(), path)
+ return True
+ else:
+ return False
+
def _setup_manual_backup(self):
"""
Setup backup devices that the user has manually specified.
@@ -1894,8 +1915,8 @@ class RapidApp(dbus.service.Object):
video backup will either be the same or they will differ.
"""
# user manually specified backup locations
- # will backup to these paths, but don't need any volume info
- # associated with them
+ # will backup to these paths, but don't need any volume info
+ # associated with them
self.backup_devices[self.prefs.backup_location] = (None, PHOTO_BACKUP)
if DOWNLOAD_VIDEO:
if self.prefs.backup_location <> self.prefs.backup_video_location:
@@ -1908,7 +1929,7 @@ class RapidApp(dbus.service.Object):
logger.info("Backing up photos and videos to %s", self.prefs.backup_location)
else:
logger.info("Backing up photos to %s", self.prefs.backup_location)
-
+
def _add_backup_devices(self):
"""
Add each backup devices / path to backup manager
@@ -1917,20 +1938,28 @@ class RapidApp(dbus.service.Object):
name = self._backup_device_name(path)
backup_type = self.backup_devices[path][1]
self.backup_manager.add_device(path, name, backup_type)
-
-
- def get_use_device(self, device):
+
+
+ def get_use_device(self, device):
""" Prompt user whether or not to download from this device """
-
+
logger.info("Prompting whether to use %s", device.get_name())
+
+ # On some systems, e.g. Ubuntu 12.10, the GTK/Gnome environment
+ # unexpectedly results in a device being added twice and not once.
+ # The hack on the next line ensures the user is not prompted twice
+ # for the same device.
+
+ self.mounts_by_path[device.get_path()] = "PROMPTING"
+
d = dv.UseDeviceDialog(self.rapidapp, device, self.got_use_device)
-
+
def got_use_device(self, dialog, user_selected, permanent_choice, device):
""" User has chosen whether or not to use a device to download from """
dialog.destroy()
-
+
path = device.get_path()
-
+
if user_selected:
if permanent_choice and path not in self.prefs.device_whitelist:
# do NOT do a list append operation here without the assignment,
@@ -1941,37 +1970,37 @@ class RapidApp(dbus.service.Object):
self.prefs.device_whitelist = [path]
scan_pid = self.start_device_scan(device)
self.mounts_by_path[path] = scan_pid
-
+
elif permanent_choice and path not in self.prefs.device_blacklist:
# do not do a list append operation here without the assignment, or the preferences will not be updated!
if len(self.prefs.device_blacklist):
self.prefs.device_blacklist = self.prefs.device_blacklist + [path]
else:
- self.prefs.device_blacklist = [path]
-
+ self.prefs.device_blacklist = [path]
+
def search_for_PSD(self):
"""
- Check to see if user preferences are to automatically search for
+ Check to see if user preferences are to automatically search for
Portable Storage Devices or not
"""
return self.prefs.device_autodetection_psd and self.prefs.device_autodetection
def check_if_backup_mount(self, path):
"""
- Checks to see if backups are enabled and path represents a valid backup
+ Checks to see if backups are enabled and path represents a valid backup
location. It must be writeable.
-
+
Checks against user preferences.
-
+
Returns a tuple:
(True, <backup-type> (one of PHOTO_VIDEO_BACKUP, PHOTO_BACKUP, or VIDEO_BACKUP)) or
- (False, None)
+ (False, None)
"""
if self.prefs.backup_images:
if self.prefs.backup_device_autodetection:
- # Determine if the auto-detected backup device is
+ # Determine if the auto-detected backup device is
# to be used to backup only photos, or videos, or both.
- # Use the presence of a corresponding directory to
+ # Use the presence of a corresponding directory to
# determine this.
# The directory must be writable.
photo_path = os.path.join(path, self.prefs.backup_identifier)
@@ -1991,7 +2020,7 @@ class RapidApp(dbus.service.Object):
logger.info("Videos will be backed up to %s", path)
return (True, VIDEO_BACKUP)
elif path == self.prefs.backup_location:
- # user manually specified the path
+ # user manually specified the path
if os.access(self.prefs.backup_location, os.W_OK):
return (True, PHOTO_BACKUP)
elif path == self.prefs.backup_video_location:
@@ -2013,22 +2042,22 @@ class RapidApp(dbus.service.Object):
#both videos and photos are backed up to this device / path
self.no_photo_backup_devices += 1
self.no_video_backup_devices += 1
- logger.info("# photo backup devices: %s; # video backup devices: %s",
+ logger.info("# photo backup devices: %s; # video backup devices: %s",
self.no_photo_backup_devices, self.no_video_backup_devices)
- self.download_tracker.set_no_backup_devices(self.no_photo_backup_devices,
+ self.download_tracker.set_no_backup_devices(self.no_photo_backup_devices,
self.no_video_backup_devices)
def refresh_backup_media(self):
"""
Setup the backup media
-
- Assumptions: this is being called after the user has changed their
+
+ Assumptions: this is being called after the user has changed their
preferences AND download media has already been setup
"""
-
+
# terminate any running backup processes
self.backup_manager.request_termination()
-
+
self.backup_devices = {}
if self.prefs.backup_images:
if not self.prefs.backup_device_autodetection:
@@ -2043,22 +2072,22 @@ class RapidApp(dbus.service.Object):
# is a backup volume
if path not in self.backup_devices:
self.backup_devices[path] = (mount, backup_file_type)
-
+
self._add_backup_devices()
self.update_no_backup_devices()
self.display_free_space()
-
+
def using_volume_monitor(self):
"""
Returns True if programs needs to use gio volume monitor
"""
-
- return (self.prefs.device_autodetection or
- (self.prefs.backup_images and
+
+ return (self.prefs.device_autodetection or
+ (self.prefs.backup_images and
self.prefs.backup_device_autodetection
))
-
+
def on_mount_added(self, vmonitor, mount):
"""
callback run when gio indicates a new volume
@@ -2069,7 +2098,7 @@ class RapidApp(dbus.service.Object):
if mount.is_shadowed():
# ignore this type of mount
return
-
+
path = mount.get_root().get_path()
if path is not None:
@@ -2078,7 +2107,7 @@ class RapidApp(dbus.service.Object):
'device': mount.get_name(), 'path': path})
else:
is_backup_mount, backup_file_type = self.check_if_backup_mount(path)
-
+
if is_backup_mount:
if path not in self.backup_devices:
self.backup_devices[path] = mount
@@ -2087,84 +2116,86 @@ class RapidApp(dbus.service.Object):
self.update_no_backup_devices()
self.display_free_space()
- elif self.prefs.device_autodetection and (dv.is_DCIM_device(path) or
+ elif self.prefs.device_autodetection and (dv.is_DCIM_device(path) or
self.search_for_PSD()):
-
+
self.auto_start_is_on = self.prefs.auto_download_upon_device_insertion
device = dv.Device(path=path, mount=mount)
- if self.search_for_PSD() and path not in self.prefs.device_whitelist:
- # prompt user if device should be used or not
- self.get_use_device(device)
- else:
- scan_pid = self.start_device_scan(device)
- self.mounts_by_path[path] = scan_pid
-
+
+ if not self._device_already_detected(device):
+ if self.search_for_PSD() and path not in self.prefs.device_whitelist:
+ # prompt user if device should be used or not
+ self.get_use_device(device)
+ else:
+ scan_pid = self.start_device_scan(device)
+ self.mounts_by_path[path] = scan_pid
+
def on_mount_removed(self, vmonitor, mount):
"""
callback run when gio indicates a new volume
has been mounted
"""
-
+
path = mount.get_root().get_path()
# three scenarios -
# the mount has been scanned but downloading has not yet started
# files are being downloaded from mount (it must be a messy unmount)
# files have finished downloading from mount
-
+
if path in self.mounts_by_path:
scan_pid = self.mounts_by_path[path]
del self.mounts_by_path[path]
# temp directory should be cleaned by finishing of process
-
- self.thumbnails.clear_all(scan_pid = scan_pid,
+
+ self.thumbnails.clear_all(scan_pid = scan_pid,
keep_downloaded_files = True)
self.device_collection.remove_device(scan_pid)
-
-
-
+
+
+
# remove backup volumes
elif path in self.backup_devices:
del self.backup_devices[path]
self.display_free_space()
self.backup_manager.remove_device(path)
self.update_no_backup_devices()
-
+
# may need to disable download button and menu
self.set_download_action_sensitivity()
-
+
def clear_non_running_downloads(self):
"""
Clears the display of downloads that are currently not running
"""
-
+
# Stop any processes currently scanning or creating thumbnails
self._terminate_processes(terminate_file_copies=False)
-
+
# Remove them from the user interface
for scan_pid in self.device_collection.get_all_displayed_processes():
if scan_pid not in self.download_active_by_scan_pid:
self.device_collection.remove_device(scan_pid)
self.thumbnails.clear_all(scan_pid=scan_pid)
-
-
-
+
+
+
# # #
# Download and help buttons, and menu items
# # #
-
+
def on_download_action_activate(self, action):
"""
Called when a download is activated
"""
-
+
if self.copy_files_manager.paused:
logger.debug("Download resumed")
self.resume_download()
else:
logger.debug("Download activated")
-
+
if self.download_action_is_download:
if self.need_job_code_for_naming and not self.prompting_for_job_code:
self.get_job_code()
@@ -2173,18 +2204,18 @@ class RapidApp(dbus.service.Object):
else:
self.pause_download()
-
+
def on_help_action_activate(self, action):
webbrowser.open("http://www.damonlynch.net/rapid/documentation")
-
+
def on_preferences_action_activate(self, action):
preferencesdialog.PreferencesDialog(self)
-
+
def set_download_action_sensitivity(self):
"""
Sets sensitivity of Download action to enable or disable it
-
+
Affects download button and menu item
"""
if not self.download_is_occurring():
@@ -2192,26 +2223,26 @@ class RapidApp(dbus.service.Object):
if self.scan_manager.no_tasks == 0:
if self.thumbnails.files_are_checked_to_download():
sensitivity = True
-
+
self.download_action.set_sensitive(sensitivity)
-
+
def set_download_action_label(self, is_download):
"""
- Toggles label betwen pause and download
+ Toggles label betwen pause and download
"""
-
+
if is_download:
self.download_action.set_label(_("Download"))
self.download_action_is_download = True
else:
self.download_action.set_label(_("Pause"))
self.download_action_is_download = False
-
+
# # #
# Job codes
# # #
-
-
+
+
def _init_job_code(self):
self.job_code = self.last_chosen_job_code = ''
self.need_job_code_for_naming = self.prefs.any_pref_uses_job_code()
@@ -2219,64 +2250,64 @@ class RapidApp(dbus.service.Object):
def assign_job_code(self, code):
""" assign job code (which may be empty) to member variable and update user preferences
-
+
Update preferences only if code is not empty. Do not duplicate job code.
"""
self.job_code = code
-
+
if code:
#add this value to job codes preferences
#delete any existing value which is the same
#(this way it comes to the front, which is where it should be)
#never modify self.prefs.job_codes in place! (or prefs become screwed up)
-
+
jcs = self.prefs.job_codes
while code in jcs:
jcs.remove(code)
-
+
self.prefs.job_codes = [code] + jcs
def _get_job_code(self, post_job_code_entry_callback):
""" prompt for a job code """
-
+
if not self.prompting_for_job_code:
logger.debug("Prompting for Job Code")
self.prompting_for_job_code = True
j = preferencesdialog.JobCodeDialog(parent_window = self.rapidapp,
job_codes = self.prefs.job_codes,
- default_job_code = self.last_chosen_job_code,
+ default_job_code = self.last_chosen_job_code,
post_job_code_entry_callback=post_job_code_entry_callback,
entry_only = False)
else:
logger.debug("Already prompting for Job Code, do not prompt again")
-
+
def get_job_code(self):
self._get_job_code(self.got_job_code)
-
+
def got_job_code(self, dialog, user_chose_code, code):
dialog.destroy()
self.prompting_for_job_code = False
-
+
if user_chose_code:
if code is None:
code = ''
self.assign_job_code(code)
self.last_chosen_job_code = code
logger.debug("Job Code %s entered", self.job_code)
- self.start_download()
-
+ self.start_download()
+
else:
# user cancelled
logger.debug("No Job Code entered")
self.job_code = ''
self.auto_start_is_on = False
-
-
+
+
# # #
# Download
# # #
-
+
def _init_download_tracking(self):
"""
Initialize variables to track downloads
@@ -2285,28 +2316,28 @@ class RapidApp(dbus.service.Object):
# (Scan id acts as an index to each device. A device could be scanned
# more than once).
self.download_tracker = downloadtracker.DownloadTracker()
-
+
# Track which temporary directories are created when downloading files
self.temp_dirs_by_scan_pid = dict()
-
+
# Track which downloads are running
self.download_active_by_scan_pid = []
-
+
def modify_files_during_download(self):
""" Returns True if there is a need to modify files during download"""
return self.prefs.auto_rotate_jpeg or (self.focal_length is not None)
-
+
def start_download(self, scan_pid=None):
"""
Start download, renaming and backup of files.
-
+
If scan_pid is specified, only files matching it will be downloaded
"""
-
+
files_by_scan_pid = self.thumbnails.get_files_checked_for_download(scan_pid)
folders_valid, invalid_dirs = self.check_download_folder_validity(files_by_scan_pid)
-
+
if not folders_valid:
if len(invalid_dirs) > 1:
msg = _("These download folders are invalid:\n%(folder1)s\n%(folder2)s") % {
@@ -2319,40 +2350,40 @@ class RapidApp(dbus.service.Object):
# set time download is starting if it is not already set
# it is unset when all downloads are completed
if self.download_start_time is None:
- self.download_start_time = datetime.datetime.now()
+ self.download_start_time = datetime.datetime.now()
- # Set status to download pending
+ # Set status to download pending
self.thumbnails.mark_download_pending(files_by_scan_pid)
-
+
# disable refresh and preferences change while download is occurring
self.enable_prefs_and_refresh(enabled=False)
-
+
for scan_pid in files_by_scan_pid:
files = files_by_scan_pid[scan_pid]
# if generating thumbnails for this scan_pid, stop it
if self.thumbnails.terminate_thumbnail_generation(scan_pid):
self.thumbnails.mark_thumbnails_needed(files)
-
+
self.download_files(files, scan_pid)
-
+
self.set_download_action_label(is_download = False)
-
+
def pause_download(self):
-
+
self.copy_files_manager.pause()
-
+
# set action to display Download
if not self.download_action_is_download:
self.set_download_action_label(is_download = True)
-
+
self.time_check.pause()
-
+
def resume_download(self):
for scan_pid in self.download_active_by_scan_pid:
self.time_remaining.set_time_mark(scan_pid)
-
+
self.time_check.set_download_mark()
-
+
self.copy_files_manager.start()
def download_files(self, files, scan_pid):
@@ -2360,16 +2391,16 @@ class RapidApp(dbus.service.Object):
Initiate downloading and renaming of files
"""
# Check which file types will be downloaded for this particular process
- no_photos_to_download = self.files_of_type_present(files,
- rpdfile.FILE_TYPE_PHOTO,
+ no_photos_to_download = self.files_of_type_present(files,
+ rpdfile.FILE_TYPE_PHOTO,
return_file_count=True)
if no_photos_to_download:
photo_download_folder = self.prefs.download_folder
else:
photo_download_folder = None
-
+
if DOWNLOAD_VIDEO:
- no_videos_to_download = self.files_of_type_present(files,
+ no_videos_to_download = self.files_of_type_present(files,
rpdfile.FILE_TYPE_VIDEO,
return_file_count=True)
if no_videos_to_download:
@@ -2379,30 +2410,30 @@ class RapidApp(dbus.service.Object):
else:
video_download_folder = None
no_videos_to_download = 0
-
+
photo_download_size, video_download_size = self.size_files_to_be_downloaded(files)
- self.download_tracker.init_stats(scan_pid=scan_pid,
- photo_size_in_bytes=photo_download_size,
+ self.download_tracker.init_stats(scan_pid=scan_pid,
+ photo_size_in_bytes=photo_download_size,
video_size_in_bytes=video_download_size,
no_photos_to_download=no_photos_to_download,
no_videos_to_download=no_videos_to_download)
-
-
+
+
download_size = photo_download_size + video_download_size
-
+
if self.prefs.backup_images:
download_size = download_size + ((self.no_photo_backup_devices * photo_download_size) +
(self.no_video_backup_devices * video_download_size))
-
+
self.time_remaining.set(scan_pid, download_size)
self.time_check.set_download_mark()
-
+
self.download_active_by_scan_pid.append(scan_pid)
-
-
+
+
if len(self.download_active_by_scan_pid) > 1:
self.display_summary_notification = True
-
+
if self.auto_start_is_on and self.prefs.generate_thumbnails:
for rpd_file in files:
rpd_file.generate_thumbnail = True
@@ -2414,13 +2445,13 @@ class RapidApp(dbus.service.Object):
else:
modify_pipe = None
-
+
# Initiate copy files process
- self.copy_files_manager.add_task((photo_download_folder,
+ self.copy_files_manager.add_task((photo_download_folder,
video_download_folder, scan_pid,
files, modify_files_during_download,
modify_pipe))
-
+
def copy_files_results(self, source, condition):
"""
Handle results from copy files process
@@ -2434,7 +2465,7 @@ class RapidApp(dbus.service.Object):
if msg_type == rpdmp.MSG_TEMP_DIRS:
scan_pid, photo_temp_dir, video_temp_dir = data
self.temp_dirs_by_scan_pid[scan_pid] = (photo_temp_dir, video_temp_dir)
-
+
# Report which temporary directories are being used for this
# download
if photo_temp_dir and video_temp_dir:
@@ -2445,10 +2476,10 @@ class RapidApp(dbus.service.Object):
photo_temp_dir)
else:
logger.debug("Using temp dir %s (videos)",
- video_temp_dir)
+ video_temp_dir)
elif msg_type == rpdmp.MSG_BYTES:
scan_pid, total_downloaded, chunk_downloaded = data
- self.download_tracker.set_total_bytes_copied(scan_pid,
+ self.download_tracker.set_total_bytes_copied(scan_pid,
total_downloaded)
self.time_check.increment(bytes_downloaded=chunk_downloaded)
percent_complete = self.download_tracker.get_percent_complete(scan_pid)
@@ -2457,39 +2488,39 @@ class RapidApp(dbus.service.Object):
self.time_remaining.update(scan_pid, bytes_downloaded=chunk_downloaded)
elif msg_type == rpdmp.MSG_FILE:
self.copy_file_results_single_file(data)
-
+
return True
else:
# Process is complete, i.e. conn_type == rpdmp.CONN_COMPLETE
connection.close()
return False
-
+
def copy_file_results_single_file(self, data):
"""
Handles results from one of two processes:
1. copy_files
2. file_modify
-
+
Operates after a single file has been copied from the download device
to the local folder.
-
+
Calls the process to rename files and create subfolders (subfolderfile)
"""
-
+
download_succeeded, rpd_file, download_count, temp_full_file_name, thumbnail_icon, thumbnail = data
-
+
if thumbnail is not None or thumbnail_icon is not None:
- self.thumbnails.update_thumbnail((rpd_file.unique_id,
- thumbnail_icon,
+ self.thumbnails.update_thumbnail((rpd_file.unique_id,
+ thumbnail_icon,
thumbnail))
-
+
self.download_tracker.set_download_count_for_file(
rpd_file.unique_id, download_count)
self.download_tracker.set_download_count(
rpd_file.scan_pid, download_count)
rpd_file.download_start_time = self.download_start_time
-
+
if download_succeeded:
# Insert preference values needed for name generation
rpd_file = prefsrapid.insert_pref_lists(self.prefs, rpd_file)
@@ -2498,21 +2529,21 @@ class RapidApp(dbus.service.Object):
rpd_file.download_conflict_resolution = self.prefs.download_conflict_resolution
rpd_file.synchronize_raw_jpg = self.prefs.must_synchronize_raw_jpg()
rpd_file.job_code = self.job_code
-
+
self.subfolder_file_manager.rename_file_and_move_to_subfolder(
- download_succeeded,
- download_count,
+ download_succeeded,
+ download_count,
rpd_file
- )
+ )
def file_modify_results(self, source, condition):
"""
- 'file modify' is a process that runs immediately after 'copy files',
- meaning there can be more than one at one time.
-
+ 'file modify' is a process that runs immediately after 'copy files',
+ meaning there can be more than one at one time.
+
It runs before the renaming process.
"""
connection = self.file_modify_manager.get_pipe(source)
-
+
conn_type, data = connection.recv()
if conn_type == rpdmp.CONN_PARTIAL:
self.copy_file_results_single_file(data)
@@ -2520,31 +2551,31 @@ class RapidApp(dbus.service.Object):
else:
# Process is complete, i.e. conn_type == rpdmp.CONN_COMPLETE
connection.close()
- return False
+ return False
+
-
def download_is_occurring(self):
- """Returns True if a file is currently being downloaded, renamed or
+ """Returns True if a file is currently being downloaded, renamed or
backed up
"""
return not len(self.download_active_by_scan_pid) == 0
-
+
# # #
# Create folder and file names for downloaded files
# # #
-
- def subfolder_file_results(self, move_succeeded, rpd_file):
+
+ def subfolder_file_results(self, move_succeeded, rpd_file, download_count):
"""
Handle results of subfolder creation and file renaming
"""
-
+
scan_pid = rpd_file.scan_pid
unique_id = rpd_file.unique_id
-
+
if rpd_file.status == config.STATUS_DOWNLOADED_WITH_WARNING:
- self.log_error(config.WARNING, rpd_file.error_title,
+ self.log_error(config.WARNING, rpd_file.error_title,
rpd_file.error_msg, rpd_file.error_extra_detail)
-
+
if self.prefs.backup_images and len(self.backup_devices):
if self.prefs.backup_device_autodetection:
if rpd_file.file_type == rpdfile.FILE_TYPE_PHOTO:
@@ -2553,23 +2584,24 @@ class RapidApp(dbus.service.Object):
path_suffix = self.prefs.video_backup_identifier
else:
path_suffix = None
-
- self.backup_manager.backup_file(move_succeeded, rpd_file,
+
+ self.backup_manager.backup_file(move_succeeded, rpd_file,
path_suffix,
- self.prefs.backup_duplicate_overwrite)
+ self.prefs.backup_duplicate_overwrite,
+ download_count)
else:
self.file_download_finished(move_succeeded, rpd_file)
-
-
+
+
def multiple_backup_devices(self, file_type):
"""Returns true if more than one backup device is being used for that
file type
"""
- return ((file_type == rpdfile.FILE_TYPE_PHOTO and
+ return ((file_type == rpdfile.FILE_TYPE_PHOTO and
self.no_photo_backup_devices > 1) or
- (file_type == rpdfile.FILE_TYPE_VIDEO and
+ (file_type == rpdfile.FILE_TYPE_VIDEO and
self.no_video_backup_devices > 1))
-
+
def backup_results(self, source, condition):
"""
Handle results sent from backup processes
@@ -2578,30 +2610,30 @@ class RapidApp(dbus.service.Object):
conn_type, msg_data = connection.recv()
if conn_type == rpdmp.CONN_PARTIAL:
msg_type, data = msg_data
-
+
if msg_type == rpdmp.MSG_BYTES:
scan_pid, backup_pid, total_downloaded, chunk_downloaded = data
- self.download_tracker.increment_bytes_backed_up(scan_pid,
+ self.download_tracker.increment_bytes_backed_up(scan_pid,
chunk_downloaded)
self.time_check.increment(bytes_downloaded=chunk_downloaded)
percent_complete = self.download_tracker.get_percent_complete(scan_pid)
self.device_collection.update_progress(scan_pid, percent_complete,
None, None)
self.time_remaining.update(scan_pid, bytes_downloaded=chunk_downloaded)
-
+
elif msg_type == rpdmp.MSG_FILE:
backup_succeeded, rpd_file = data
-
+
# Only show an error message if there is more than one device
# backing up files of this type - if that is the case,
- # do not want to reply on showing an error message in the
+ # do not want to reply on showing an error message in the
# function file_download_finished, as it is only called once,
# when all files have been backed up
if not backup_succeeded and self.multiple_backup_devices(rpd_file.file_type):
- self.log_error(config.SERIOUS_ERROR,
- rpd_file.error_title,
+ self.log_error(config.SERIOUS_ERROR,
+ rpd_file.error_title,
rpd_file.error_msg, rpd_file.error_extra_detail)
-
+
self.download_tracker.file_backed_up(rpd_file.unique_id)
if self.download_tracker.all_files_backed_up(rpd_file.unique_id,
rpd_file.file_type):
@@ -2610,7 +2642,7 @@ class RapidApp(dbus.service.Object):
else:
return False
-
+
def file_download_finished(self, succeeded, rpd_file):
"""
Called when a file has been downloaded i.e. copied, renamed, and backed up
@@ -2619,23 +2651,23 @@ class RapidApp(dbus.service.Object):
unique_id = rpd_file.unique_id
# Update error log window if neccessary
if not succeeded and not self.multiple_backup_devices(rpd_file.file_type):
- self.log_error(config.SERIOUS_ERROR, rpd_file.error_title,
+ self.log_error(config.SERIOUS_ERROR, rpd_file.error_title,
rpd_file.error_msg, rpd_file.error_extra_detail)
elif self.prefs.auto_delete:
- # record which files to automatically delete when download
+ # record which files to automatically delete when download
# completes
self.download_tracker.add_to_auto_delete(rpd_file)
-
+
self.thumbnails.update_status_post_download(rpd_file)
- self.download_tracker.file_downloaded_increment(scan_pid,
+ self.download_tracker.file_downloaded_increment(scan_pid,
rpd_file.file_type,
rpd_file.status)
-
+
completed, files_remaining = self._update_file_download_device_progress(scan_pid, unique_id, rpd_file.file_type)
-
+
if self.download_is_occurring():
self.update_time_remaining()
-
+
if completed:
# Last file for this scan pid has been downloaded, so clean temp directory
logger.debug("Purging temp directories")
@@ -2649,63 +2681,63 @@ class RapidApp(dbus.service.Object):
self.notify_downloaded_from_device(scan_pid)
if files_remaining == 0 and self.prefs.auto_unmount:
self.device_collection.unmount(scan_pid)
-
-
+
+
if not self.download_is_occurring():
logger.debug("Download completed")
self.enable_prefs_and_refresh(enabled=True)
self.notify_download_complete()
self.download_progressbar.set_fraction(0.0)
-
+
self.prefs.stored_sequence_no = self.stored_sequence_value.value
self.downloads_today_tracker.set_raw_downloads_today_from_int(self.downloads_today_value.value)
self.downloads_today_tracker.set_raw_downloads_today_date(self.downloads_today_date_value.value)
self.prefs.set_downloads_today_from_tracker(self.downloads_today_tracker)
- if ((self.prefs.auto_exit and self.download_tracker.no_errors_or_warnings())
+ if ((self.prefs.auto_exit and self.download_tracker.no_errors_or_warnings())
or self.prefs.auto_exit_force):
if not self.thumbnails.files_remain_to_download():
self._terminate_processes()
gtk.main_quit()
-
+
self.download_tracker.purge_all()
self.speed_label.set_label(" ")
-
+
self.display_free_space()
-
+
self.set_download_action_label(is_download=True)
self.set_download_action_sensitivity()
-
+
self.job_code = ''
self.download_start_time = None
-
-
+
+
def update_time_remaining(self):
update, download_speed = self.time_check.check_for_update()
if update:
self.speed_label.set_text(download_speed)
-
+
time_remaining = self.time_remaining.time_remaining()
if time_remaining:
secs = int(time_remaining)
-
+
if secs == 0:
message = ""
elif secs == 1:
message = _("About 1 second remaining")
elif secs < 60:
- message = _("About %i seconds remaining") % secs
+ message = _("About %i seconds remaining") % secs
elif secs == 60:
message = _("About 1 minute remaining")
else:
- # Translators: in the text '%(minutes)i:%(seconds)02i', only the : should be translated, if needed.
+ # Translators: in the text '%(minutes)i:%(seconds)02i', only the : should be translated, if needed.
# '%(minutes)i' and '%(seconds)02i' should not be modified or left out. They are used to format and display the amount
# of time the download has remainging, e.g. 'About 5:36 minutes remaining'
message = _("About %(minutes)i:%(seconds)02i minutes remaining") % {'minutes': secs / 60, 'seconds': secs % 60}
-
+
self.rapid_statusbar.pop(self.statusbar_context_id)
- self.rapid_statusbar.push(self.statusbar_context_id, message)
-
+ self.rapid_statusbar.push(self.statusbar_context_id, message)
+
def auto_delete(self, scan_pid):
"""Delete files from download device at completion of download"""
for file in self.download_tracker.get_files_to_auto_delete(scan_pid):
@@ -2714,10 +2746,10 @@ class RapidApp(dbus.service.Object):
f.delete(cancellable=None)
except gio.Error, inst:
logger.error("Failure deleting file %s", file)
- logger.error(inst)
-
+ logger.error(inst)
+
def file_types_by_number(self, no_photos, no_videos):
- """
+ """
returns a string to be displayed to the user that can be used
to show if a value refers to photos or videos or both, or just one
of each
@@ -2740,14 +2772,14 @@ class RapidApp(dbus.service.Object):
def notify_downloaded_from_device(self, scan_pid):
device = self.device_collection.get_device(scan_pid)
-
+
if device.mount is None:
notification_name = PROGRAM_NAME
icon = self.application_icon
else:
notification_name = device.get_name()
icon = device.get_icon(self.notification_icon_size)
-
+
no_photos_downloaded = self.download_tracker.get_no_files_downloaded(
scan_pid, rpdfile.FILE_TYPE_PHOTO)
no_videos_downloaded = self.download_tracker.get_no_files_downloaded(
@@ -2759,36 +2791,37 @@ class RapidApp(dbus.service.Object):
no_files_downloaded = no_photos_downloaded + no_videos_downloaded
no_files_failed = no_photos_failed + no_videos_failed
no_warnings = self.download_tracker.get_no_warnings(scan_pid)
-
+
file_types = self.file_types_by_number(no_photos_downloaded, no_videos_downloaded)
file_types_failed = self.file_types_by_number(no_photos_failed, no_videos_failed)
message = _("%(noFiles)s %(filetypes)s downloaded") % \
{'noFiles':no_files_downloaded, 'filetypes': file_types}
-
+
if no_files_failed:
message += "\n" + _("%(noFiles)s %(filetypes)s failed to download") % {'noFiles':no_files_failed, 'filetypes':file_types_failed}
-
+
if no_warnings:
- message = "%s\n%s " % (message, no_warnings) + _("warnings")
-
- n = pynotify.Notification(notification_name, message)
- n.set_icon_from_pixbuf(icon)
-
- n.show()
-
+ message = "%s\n%s " % (message, no_warnings) + _("warnings")
+
+ if use_pynotify:
+ n = pynotify.Notification(notification_name, message)
+ n.set_icon_from_pixbuf(icon)
+
+ n.show()
+
def notify_download_complete(self):
if self.display_summary_notification:
message = _("All downloads complete")
-
+
# photo downloads
photo_downloads = self.download_tracker.total_photos_downloaded
if photo_downloads:
filetype = self.file_types_by_number(photo_downloads, 0)
message += "\n" + _("%(number)s %(numberdownloaded)s") % \
- {'number': photo_downloads,
+ {'number': photo_downloads,
'numberdownloaded': _("%(filetype)s downloaded") % \
{'filetype': filetype}}
-
+
# photo failures
photo_failures = self.download_tracker.total_photo_failures
if photo_failures:
@@ -2797,16 +2830,16 @@ class RapidApp(dbus.service.Object):
{'number': photo_failures,
'numberdownloaded': _("%(filetype)s failed to download") % \
{'filetype': filetype}}
-
+
# video downloads
video_downloads = self.download_tracker.total_videos_downloaded
if video_downloads:
filetype = self.file_types_by_number(0, video_downloads)
message += "\n" + _("%(number)s %(numberdownloaded)s") % \
- {'number': video_downloads,
+ {'number': video_downloads,
'numberdownloaded': _("%(filetype)s downloaded") % \
{'filetype': filetype}}
-
+
# video failures
video_failures = self.download_tracker.total_video_failures
if video_failures:
@@ -2815,65 +2848,66 @@ class RapidApp(dbus.service.Object):
{'number': video_failures,
'numberdownloaded': _("%(filetype)s failed to download") % \
{'filetype': filetype}}
-
+
# warnings
- warnings = self.download_tracker.total_warnings
+ warnings = self.download_tracker.total_warnings
if warnings:
message += "\n" + _("%(number)s %(numberdownloaded)s") % \
- {'number': warnings,
+ {'number': warnings,
'numberdownloaded': _("warnings")}
-
- n = pynotify.Notification(PROGRAM_NAME, message)
- n.set_icon_from_pixbuf(self.application_icon)
- n.show()
+
+ if use_pynotify:
+ n = pynotify.Notification(PROGRAM_NAME, message)
+ n.set_icon_from_pixbuf(self.application_icon)
+ n.show()
self.display_summary_notification = False # don't show it again unless needed
-
-
+
+
def _update_file_download_device_progress(self, scan_pid, unique_id, file_type):
"""
Increments the progress bar for an individual device
-
+
Returns if the download is completed for that scan_pid
It also returns the number of files remaining for the scan_pid, BUT
this value is valid ONLY if the download is completed
"""
-
+
files_downloaded = self.download_tracker.get_download_count_for_file(unique_id)
files_to_download = self.download_tracker.get_no_files_in_download(scan_pid)
file_types = self.download_tracker.get_file_types_present(scan_pid)
completed = files_downloaded == files_to_download
if completed and (self.prefs.backup_images and len(self.backup_devices)):
completed = self.download_tracker.all_files_backed_up(unique_id, file_type)
-
+
if completed:
files_remaining = self.thumbnails.get_no_files_remaining(scan_pid)
else:
files_remaining = 0
-
+
if completed and files_remaining:
# e.g.: 3 of 205 photos and videos (202 remaining)
progress_bar_text = _("%(number)s of %(total)s %(filetypes)s (%(remaining)s remaining)") % {
- 'number': files_downloaded,
+ 'number': files_downloaded,
'total': files_to_download,
'filetypes': file_types,
'remaining': files_remaining}
else:
# e.g.: 205 of 205 photos and videos
progress_bar_text = _("%(number)s of %(total)s %(filetypes)s") % \
- {'number': files_downloaded,
+ {'number': files_downloaded,
'total': files_to_download,
'filetypes': file_types}
percent_complete = self.download_tracker.get_percent_complete(scan_pid)
self.device_collection.update_progress(scan_pid=scan_pid,
percent_complete=percent_complete,
- progress_bar_text=progress_bar_text,
+ progress_bar_text=progress_bar_text,
bytes_downloaded=None)
-
+
percent_complete = self.download_tracker.get_overall_percent_complete()
self.download_progressbar.set_fraction(percent_complete)
-
+
return (completed, files_remaining)
-
+
def _clean_all_temp_dirs(self):
"""
@@ -2882,10 +2916,10 @@ class RapidApp(dbus.service.Object):
for scan_pid in self.temp_dirs_by_scan_pid:
for temp_dir in self.temp_dirs_by_scan_pid[scan_pid]:
self._purge_dir(temp_dir)
-
+
self.temp_dirs_by_scan_pid = {}
-
-
+
+
def _clean_temp_dirs_for_scan_pid(self, scan_pid):
"""
Deletes temp files and folders used in download
@@ -2897,10 +2931,10 @@ class RapidApp(dbus.service.Object):
def _purge_dir(self, directory):
"""
Deletes all files in the directory, and the directory itself.
-
+
Does not recursively traverse any subfolders in the directory.
"""
-
+
if directory:
try:
path = gio.File(directory)
@@ -2916,16 +2950,16 @@ class RapidApp(dbus.service.Object):
except gio.Error, inst:
logger.error("Failure deleting temporary folder %s", directory)
logger.error(inst)
-
-
- # # #
+
+
+ # # #
# Preferences
# # #
-
-
- def _init_prefs(self, auto_detect, device_location):
+
+
+ def _init_prefs(self, auto_detect, device_location):
self.prefs = prefsrapid.RapidPreferences()
-
+
# handle device preferences set from the command line
# do this before preference changes are handled with notify_add
if auto_detect:
@@ -2933,82 +2967,82 @@ class RapidApp(dbus.service.Object):
elif device_location:
self.prefs.device_location = device_location
self.prefs.device_autodetection = False
-
+
self.prefs.notify_add(self.on_preference_changed)
-
- # flag to indicate whether the user changed some preferences that
+
+ # flag to indicate whether the user changed some preferences that
# indicate the image and backup devices should be setup again
self.rerun_setup_available_image_and_video_media = False
self.rerun_setup_available_backup_media = False
-
- # flag to indicate that the preferences dialog window is being
+
+ # flag to indicate that the preferences dialog window is being
# displayed to the user
self.preferences_dialog_displayed = False
# flag to indicate that the user has modified the download today
# related values in the preferences dialog window
self.refresh_downloads_today = False
-
- # these values are used to track the number of backup devices /
+
+ # these values are used to track the number of backup devices /
# locations for each file type
self.no_photo_backup_devices = 0
self.no_video_backup_devices = 0
-
+
self.downloads_today_tracker = self.prefs.get_downloads_today_tracker()
-
+
downloads_today = self.downloads_today_tracker.get_and_maybe_reset_downloads_today()
if downloads_today > 0:
logger.info("Downloads that have occurred so far today: %s", downloads_today)
else:
- logger.info("No downloads have occurred so far today")
+ logger.info("No downloads have occurred so far today")
- self.downloads_today_value = Value(c_int,
+ self.downloads_today_value = Value(c_int,
self.downloads_today_tracker.get_raw_downloads_today())
self.downloads_today_date_value = Array(c_char,
self.downloads_today_tracker.get_raw_downloads_today_date())
- self.day_start_value = Array(c_char,
+ self.day_start_value = Array(c_char,
self.downloads_today_tracker.get_raw_day_start())
self.refresh_downloads_today_value = Value(c_bool, False)
self.stored_sequence_value = Value(c_int, self.prefs.stored_sequence_no)
self.uses_stored_sequence_no_value = Value(c_bool, self.prefs.any_pref_uses_stored_sequence_no())
self.uses_session_sequece_no_value = Value(c_bool, self.prefs.any_pref_uses_session_sequece_no())
self.uses_sequence_letter_value = Value(c_bool, self.prefs.any_pref_uses_sequence_letter_value())
-
+
self.check_prefs_upgrade(__version__)
self.prefs.program_version = __version__
-
+
def _check_for_sequence_value_use(self):
self.uses_stored_sequence_no_value.value = self.prefs.any_pref_uses_stored_sequence_no()
self.uses_session_sequece_no_value.value = self.prefs.any_pref_uses_session_sequece_no()
- self.uses_sequence_letter_value.value = self.prefs.any_pref_uses_sequence_letter_value()
-
+ self.uses_sequence_letter_value.value = self.prefs.any_pref_uses_sequence_letter_value()
+
def check_prefs_upgrade(self, running_version):
"""
- Checks if the running version of the program is different from the
+ Checks if the running version of the program is different from the
version recorded in the preferences.
-
+
If the version is different, the preferences are checked to see
whether they should be upgraded or not.
"""
previous_version = self.prefs.program_version
if len(previous_version) > 0:
# the program has been run previously for this user
-
+
pv = utilities.pythonify_version(previous_version)
rv = utilities.pythonify_version(running_version)
-
+
if pv <> rv:
# 0.4.1 and below had only one manual backup location
# 0.4.2 introduced a distinct video back up location that can be manually set
- # Therefore must duplicate the previous photo & video manual backup location into the
+ # Therefore must duplicate the previous photo & video manual backup location into the
# new video field, unless it has already been changed already.
-
+
if pv < utilities.pythonify_version('0.4.2'):
if self.prefs.backup_video_location == os.path.expanduser('~'):
self.prefs.backup_video_location = self.prefs.backup_location
- logger.info("Migrated manual backup location preference to videos: %s",
+ logger.info("Migrated manual backup location preference to videos: %s",
self.prefs.backup_video_location)
-
+
def on_preference_changed(self, key, value):
"""
Called when user changes the program's preferences
@@ -3017,90 +3051,89 @@ class RapidApp(dbus.service.Object):
if key == 'show_log_dialog':
self.menu_log_window.set_active(value)
- elif key in ['device_autodetection', 'device_autodetection_psd',
+ elif key in ['device_autodetection', 'device_autodetection_psd',
'device_location', 'ignored_paths',
'use_re_ignored_paths', 'device_blacklist']:
self.rerun_setup_available_image_and_video_media = True
self._set_from_toolbar_state()
if not self.preferences_dialog_displayed:
self.post_preference_change()
-
-
- elif key in ['backup_images', 'backup_device_autodetection',
- 'backup_location', 'backup_video_location',
+
+
+ elif key in ['backup_images', 'backup_device_autodetection',
+ 'backup_location', 'backup_video_location',
'backup_identifier', 'video_backup_identifier']:
self.rerun_setup_available_backup_media = True
if not self.preferences_dialog_displayed:
self.post_preference_change()
-
+
# Downloads today and stored sequence numbers are kept in shared memory,
# so that the subfolderfile daemon process can access and modify them
-
+
# Note, totally ignore any changes in downloads today, as it
# is modified in a special manner via a tracking class
-
+
elif key == 'stored_sequence_no':
if type(value) <> types.IntType:
logger.critical("Stored sequence number value is malformed")
else:
self.stored_sequence_value.value = value
-
+
elif key in ['image_rename', 'subfolder', 'video_rename', 'video_subfolder']:
self.need_job_code_for_naming = self.prefs.any_pref_uses_job_code()
# Check if stored sequence no is being used
self._check_for_sequence_value_use()
-
+
elif key in ['download_folder', 'video_download_folder']:
self._set_to_toolbar_values()
self.display_free_space()
-
+
def post_preference_change(self):
if self.rerun_setup_available_image_and_video_media:
logger.info("Download device settings preferences were changed")
-
+
self.thumbnails.clear_all()
self.setup_devices(on_startup = False, on_preference_change = True, block_auto_start = True)
self._set_device_collection_size()
-
+
if self.main_notebook.get_current_page() == 1: # preview of file
self.main_notebook.set_current_page(0)
-
+
self.rerun_setup_available_image_and_video_media = False
-
+
if self.rerun_setup_available_backup_media:
if self.using_volume_monitor():
- self.start_volume_monitor()
+ self.start_volume_monitor()
logger.info("Backup preferences were changed.")
-
+
self.refresh_backup_media()
-
+
self.rerun_setup_available_backup_media = False
-
+
if self.refresh_downloads_today:
self.downloads_today_value.value = self.downloads_today_tracker.get_raw_downloads_today()
self.downloads_today_date_value.value = self.downloads_today_tracker.get_raw_downloads_today_date()
self.day_start_value.value = self.downloads_today_tracker.get_raw_day_start()
self.refresh_downloads_today_value.value = True
self.prefs.set_downloads_today_from_tracker(self.downloads_today_tracker)
-
-
+
+
# # #
# Main app window management and setup
# # #
-
+
def _init_pynotify(self):
"""
Initialize system notification messages
"""
-
+
if not pynotify.init("TestCaps"):
logger.warning("There might be problems using pynotify.")
- #~ sys.exit(1)
do_not_size_icon = False
- self.notification_icon_size = 48
+ self.notification_icon_size = 48
try:
info = pynotify.get_server_info()
except:
@@ -3111,7 +3144,7 @@ class RapidApp(dbus.service.Object):
do_not_size_icon = True
except:
pass
-
+
if do_not_size_icon:
self.application_icon = gtk.gdk.pixbuf_new_from_file(
paths.share_dir('glade3/rapid-photo-downloader.svg'))
@@ -3137,7 +3170,7 @@ class RapidApp(dbus.service.Object):
self.main_notebook = builder.get_object("main_notebook")
self.download_action = builder.get_object("download_action")
self.download_button = builder.get_object("download_button")
-
+
self.download_progressbar = builder.get_object("download_progressbar")
self.rapid_statusbar = builder.get_object("rapid_statusbar")
self.statusbar_context_id = self.rapid_statusbar.get_context_id("progress")
@@ -3148,71 +3181,71 @@ class RapidApp(dbus.service.Object):
self.speed_label = builder.get_object("speed_label")
self.refresh_action = builder.get_object("refresh_action")
self.preferences_action = builder.get_object("preferences_action")
-
+
# Only enable this action when actually displaying a preview
self.next_image_action.set_sensitive(False)
self.prev_image_action.set_sensitive(False)
-
+
self._init_toolbars()
-
+
# About dialog
builder.add_from_file(paths.share_dir("glade3/about.ui"))
self.about = builder.get_object("about")
-
+
builder.connect_signals(self)
-
+
self.preview_image = PreviewImage(self, builder)
thumbnails_scrolledwindow = builder.get_object('thumbnails_scrolledwindow')
self.thumbnails = ThumbnailDisplay(self)
- thumbnails_scrolledwindow.add(self.thumbnails)
-
+ thumbnails_scrolledwindow.add(self.thumbnails)
+
#collection of devices from which to download
self.device_collection_viewport = builder.get_object("device_collection_viewport")
self.device_collection = DeviceCollection(self)
self.device_collection_viewport.add(self.device_collection)
-
+
#error log window
self.error_log = errorlog.ErrorLog(self)
-
+
# monitor to handle mounts and dismounts
self.vmonitor = None
# track scan ids for mount paths - very useful when a device is unmounted
self.mounts_by_path = {}
-
+
# Download action state
self.download_action_is_download = True
-
+
# Track the time a download commences
self.download_start_time = None
-
+
# Whether a system wide notifcation message should be shown
# after a download has occurred in parallel
self.display_summary_notification = False
-
+
# Values used to display how much longer a download will take
self.time_remaining = downloadtracker.TimeRemaining()
self.time_check = downloadtracker.TimeCheck()
-
+
def _init_toolbars(self):
""" Setup the 3 vertical toolbars on the main screen """
self._setup_from_toolbar()
self._setup_copy_move_toolbar()
self._setup_dest_toolbar()
-
+
# size label widths so they are equal, or else the left border of the file chooser will not match
self.photo_dest_label.realize()
self._make_widget_widths_equal(self.photo_dest_label, self.video_dest_label)
self.photo_dest_label.set_alignment(xalign=0.0, yalign=0.5)
self.video_dest_label.set_alignment(xalign=0.0, yalign=0.5)
-
+
# size copy / move buttons so they are equal in length, so arrows align
self._make_widget_widths_equal(self.copy_button, self.move_button)
-
+
def _setup_from_toolbar(self):
self.from_toolbar.set_style(gtk.TOOLBAR_TEXT)
self.from_toolbar.set_border_width(5)
-
+
from_label = gtk.Label()
from_label.set_markup("<i>" + _("From") + "</i>")
self.from_toolbar_label = gtk.ToolItem()
@@ -3229,32 +3262,32 @@ class RapidApp(dbus.service.Object):
_("Select a folder containing %(file_types)s") % {'file_types':file_types_to_download()})
self.from_filechooser_button.set_action(
gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
-
+
self.from_filechooser = gtk.ToolItem()
self.from_filechooser.set_is_important(True)
self.from_filechooser.add(self.from_filechooser_button)
self.from_filechooser.set_expand(True)
self.from_toolbar.insert(self.from_filechooser, 2)
-
+
self._set_from_toolbar_state()
-
+
#set events after having initialized the values
self.auto_detect_button.connect("toggled", self.on_auto_detect_button_toggled_event)
- self.from_filechooser_button.connect("selection-changed",
+ self.from_filechooser_button.connect("selection-changed",
self.on_from_filechooser_button_selection_changed)
-
+
self.from_toolbar.show_all()
-
+
def _setup_copy_move_toolbar(self):
self.copy_toolbar.set_style(gtk.TOOLBAR_TEXT)
self.copy_toolbar.set_border_width(5)
-
+
copy_move_label = gtk.Label(" ")
self.copy_move_toolbar_label = gtk.ToolItem()
self.copy_move_toolbar_label.add(copy_move_label)
self.copy_move_toolbar_label.set_is_important(True)
self.copy_toolbar.insert(self.copy_move_toolbar_label, 0)
-
+
self.copy_hbox = gtk.HBox()
self.move_hbox = gtk.HBox()
self.forward_image = gtk.image_new_from_stock(gtk.STOCK_GO_FORWARD, gtk.ICON_SIZE_SMALL_TOOLBAR)
@@ -3265,7 +3298,7 @@ class RapidApp(dbus.service.Object):
self.forward_label2 = gtk.Label(" ")
self.forward_label3 = gtk.Label(" ")
self.forward_label4 = gtk.Label(" ")
-
+
self.copy_button = gtk.RadioToolButton()
self.copy_button.set_label(_("Copy"))
self.copy_button.set_is_important(True)
@@ -3278,7 +3311,7 @@ class RapidApp(dbus.service.Object):
copy_box = gtk.ToolItem()
copy_box.add(self.copy_hbox)
self.copy_toolbar.insert(copy_box, 1)
-
+
self.move_button = gtk.RadioToolButton(self.copy_button)
self.move_button.set_label(_("Move"))
self.move_button.set_is_important(True)
@@ -3290,27 +3323,27 @@ class RapidApp(dbus.service.Object):
move_box = gtk.ToolItem()
move_box.add(self.move_hbox)
self.copy_toolbar.insert(move_box, 2)
-
+
self.move_button.set_active(self.prefs.auto_delete)
- self.copy_button.connect("toggled", self.on_copy_button_toggle_event)
-
+ self.copy_button.connect("toggled", self.on_copy_button_toggle_event)
+
self.copy_toolbar.show_all()
- self._set_copy_toolbar_active_arrows()
-
+ self._set_copy_toolbar_active_arrows()
+
def _setup_dest_toolbar(self):
#Destination Toolbar
self.dest_toolbar.set_border_width(5)
-
+
dest_label = gtk.Label()
dest_label.set_markup("<i>" + _("To") + "</i>")
self.dest_toolbar_label = gtk.ToolItem()
self.dest_toolbar_label.add(dest_label)
self.dest_toolbar_label.set_is_important(True)
self.dest_toolbar.insert(self.dest_toolbar_label, 0)
-
+
photo_dest_hbox = gtk.HBox()
self.photo_dest_label = gtk.Label(_("Photos:"))
-
+
self.to_photo_filechooser_button = gtk.FileChooserButton(
_("Select a folder to download photos to"))
self.to_photo_filechooser_button.set_action(
@@ -3336,9 +3369,9 @@ class RapidApp(dbus.service.Object):
self.to_video_filechooser.set_expand(True)
self.to_video_filechooser.add(video_dest_hbox)
self.dest_toolbar.insert(self.to_video_filechooser, 2)
-
+
self._set_to_toolbar_values()
- self.to_photo_filechooser_button.connect("selection-changed",
+ self.to_photo_filechooser_button.connect("selection-changed",
self.on_to_photo_filechooser_button_selection_changed)
self.to_video_filechooser_button.connect("selection-changed",
self.on_to_video_filechooser_button_selection_changed)
@@ -3346,14 +3379,14 @@ class RapidApp(dbus.service.Object):
def _make_widget_widths_equal(self, widget1, widget2):
"""takes two widgets and sets a width for both equal to widest one"""
-
+
x1, y1, w1, h1 = widget1.get_allocation()
x2, y2, w2, h2 = widget2.get_allocation()
w = max(w1, w2)
h = max(h1, h2)
widget1.set_size_request(w,h)
widget2.set_size_request(w,h)
-
+
def _set_copy_toolbar_active_arrows(self):
if self.copy_button.get_active():
self.forward_image.set_visible(True)
@@ -3377,36 +3410,36 @@ class RapidApp(dbus.service.Object):
def on_copy_button_toggle_event(self, radio_button):
self._set_copy_toolbar_active_arrows()
self.prefs.auto_delete = not self.copy_button.get_active()
-
+
def _set_from_toolbar_state(self):
logger.debug("_set_from_toolbar_state")
self.auto_detect_button.set_active(self.prefs.device_autodetection)
if self.prefs.device_autodetection:
self.from_filechooser_button.set_sensitive(False)
self.from_filechooser_button.set_current_folder(self.prefs.device_location)
-
+
def on_auto_detect_button_toggled_event(self, button):
logger.debug("on_auto_detect_button_toggled_event")
self.from_filechooser_button.set_sensitive(not button.get_active())
if not self.rerun_setup_available_image_and_video_media:
self.prefs.device_autodetection = button.get_active()
-
+
def on_from_filechooser_button_selection_changed(self, filechooserbutton):
logger.debug("on_from_filechooser_button_selection_changed")
path = filechooserbutton.get_current_folder()
if path and not self.rerun_setup_available_image_and_video_media:
self.prefs.device_location = path
-
+
def on_to_photo_filechooser_button_selection_changed(self, filechooserbutton):
path = filechooserbutton.get_current_folder()
if path:
self.prefs.download_folder = path
-
+
def on_to_video_filechooser_button_selection_changed(self, filechooserbutton):
path = filechooserbutton.get_current_folder()
if path:
self.prefs.video_download_folder = path
-
+
def _set_to_toolbar_values(self):
self.to_photo_filechooser_button.set_current_folder(self.prefs.download_folder)
self.to_video_filechooser_button.set_current_folder(self.prefs.video_download_folder)
@@ -3419,20 +3452,20 @@ class RapidApp(dbus.service.Object):
def _set_window_size(self):
"""
Remember the window size from the last time the program was run, or
- set a default size
+ set a default size
"""
-
+
if self.prefs.main_window_maximized:
self.rapidapp.maximize()
- self.rapidapp.set_default_size(config.DEFAULT_WINDOW_WIDTH,
+ self.rapidapp.set_default_size(config.DEFAULT_WINDOW_WIDTH,
config.DEFAULT_WINDOW_HEIGHT)
elif self.prefs.main_window_size_x > 0:
self.rapidapp.set_default_size(self.prefs.main_window_size_x, self.prefs.main_window_size_y)
else:
# set a default size
- self.rapidapp.set_default_size(config.DEFAULT_WINDOW_WIDTH,
+ self.rapidapp.set_default_size(config.DEFAULT_WINDOW_WIDTH,
config.DEFAULT_WINDOW_HEIGHT)
-
+
def _set_device_collection_size(self):
"""
@@ -3445,36 +3478,36 @@ class RapidApp(dbus.service.Object):
else:
# don't allow the media collection to be absolutely empty
self.device_collection_scrolledwindow.set_size_request(-1, 47)
-
-
+
+
def on_rapidapp_window_state_event(self, widget, event):
""" Records the window maximization state in the preferences."""
-
+
if event.changed_mask & gdk.WINDOW_STATE_MAXIMIZED:
self.prefs.main_window_maximized = event.new_window_state & gdk.WINDOW_STATE_MAXIMIZED
-
+
def _setup_buttons(self):
thumbnails_button = self.builder.get_object("thumbnails_button")
image = gtk.image_new_from_file(paths.share_dir('glade3/thumbnails_icon.png'))
thumbnails_button.set_image(image)
-
+
preview_button = self.builder.get_object("preview_button")
image = gtk.image_new_from_file(paths.share_dir('glade3/photo_icon.png'))
preview_button.set_image(image)
-
+
next_image_button = self.builder.get_object("next_image_button")
image = gtk.image_new_from_stock(gtk.STOCK_GO_FORWARD, gtk.ICON_SIZE_BUTTON)
next_image_button.set_image(image)
-
+
prev_image_button = self.builder.get_object("prev_image_button")
image = gtk.image_new_from_stock(gtk.STOCK_GO_BACK, gtk.ICON_SIZE_BUTTON)
prev_image_button.set_image(image)
-
+
def _setup_icons(self):
icons = ['rapid-photo-downloader-jobcode',]
- icon_list = [(icon, paths.share_dir('glade3/%s.svg' % icon)) for icon in icons]
+ icon_list = [(icon, paths.share_dir('glade3/%s.svg' % icon)) for icon in icons]
register_iconsets(icon_list)
-
+
def _setup_error_icons(self):
"""
hide display of warning and error symbols in the taskbar until they
@@ -3486,7 +3519,7 @@ class RapidApp(dbus.service.Object):
self.error_image.hide()
self.warning_image.hide()
self.warning_vseparator.hide()
-
+
def enable_prefs_and_refresh(self, enabled):
"""
If enable is true, then the user is able to activate the preferences
@@ -3495,20 +3528,20 @@ class RapidApp(dbus.service.Object):
"""
self.refresh_action.set_sensitive(enabled)
self.preferences_action.set_sensitive(enabled)
-
+
def statusbar_message(self, msg):
self.rapid_statusbar.push(self.statusbar_context_id, msg)
-
+
def statusbar_message_remove(self):
self.rapid_statusbar.pop(self.statusbar_context_id)
def display_backup_mounts(self):
"""
- Create a message to be displayed to the user showing which backup
+ Create a message to be displayed to the user showing which backup
mounts will be used
"""
message = ''
-
+
paths = self.backup_devices.keys()
i = 0
v = len(paths)
@@ -3521,22 +3554,22 @@ class RapidApp(dbus.service.Object):
prefix = " " + _("and") + " "
i += 1
message = "%s%s'%s'" % (message, prefix, self.backup_devices[b][0].get_name())
-
+
if v > 1:
message = _("Using backup devices") + " %s" % message
elif v == 1:
message = _("Using backup device") + " %s" % message
else:
message = _("No backup devices detected")
-
+
return message
-
+
def display_free_space(self):
"""
- Displays the amount of space free on the filesystem the files will be
+ Displays the amount of space free on the filesystem the files will be
downloaded to.
-
- Also displays backup volumes / path being used.
+
+ Also displays backup volumes / path being used.
"""
photo_dir = self.is_valid_download_dir(path=self.prefs.download_folder, is_photo_dir=True, show_error_in_log=True)
video_dir = self.is_valid_download_dir(path=self.prefs.video_download_folder, is_photo_dir=False, show_error_in_log=True)
@@ -3545,17 +3578,17 @@ class RapidApp(dbus.service.Object):
self.prefs.video_download_folder)
else:
same_file_system = False
-
+
dirs = []
if photo_dir:
dirs.append((self.prefs.download_folder, _("photos")))
if video_dir and not same_file_system:
dirs.append((self.prefs.video_download_folder, _("videos")))
-
+
msg = ''
if len(dirs) > 1:
msg = ' ' + _('Free space:') + ' '
-
+
for i in range(len(dirs)):
dir_info = dirs[i]
folder = gio.File(dir_info[0])
@@ -3563,13 +3596,13 @@ class RapidApp(dbus.service.Object):
size = file_info.get_attribute_uint64(gio.FILE_ATTRIBUTE_FILESYSTEM_FREE)
free = format_size_for_user(bytes=size)
if len(dirs) > 1:
- #(videos) or (photos) will be appended to the free space message displayed to the
+ #(videos) or (photos) will be appended to the free space message displayed to the
#user in the status bar.
- #you should only translate this if your language does not use parantheses
+ #you should only translate this if your language does not use parantheses
file_type = _("(%(file_type)s)") % {'file_type': dir_info[1]}
#Freespace available on the filesystem for downloading to
- #Displayed in status bar message on main window
+ #Displayed in status bar message on main window
msg += _("%(free)s %(file_type)s") % {'free': free, 'file_type': file_type}
if i == 0:
#Inserted in the middle of the statusbar message concerning the amount of freespace
@@ -3579,17 +3612,17 @@ class RapidApp(dbus.service.Object):
elif not self.prefs.backup_images:
#Inserted at the end of the statusbar message concerning the amount of freespace
#Used to differentiate between two different file systems
- #e.g. Free space: 21.3GB (photos); 14.7GB (videos).
+ #e.g. Free space: 21.3GB (photos); 14.7GB (videos).
msg += _(".")
-
+
else:
#Freespace available on the filesystem for downloading to
#Displayed in status bar message on main window
#e.g. 14.7GB available
msg = " " + _("%(free)s free") % {'free': free}
-
-
- if self.prefs.backup_images:
+
+
+ if self.prefs.backup_images:
if not self.prefs.backup_device_autodetection:
if self.prefs.backup_location == self.prefs.backup_video_location:
if DOWNLOAD_VIDEO:
@@ -3604,29 +3637,29 @@ class RapidApp(dbus.service.Object):
'path':self.prefs.backup_location,
'path2': self.prefs.backup_video_location}
else:
- msg2 = self.display_backup_mounts()
-
+ msg2 = self.display_backup_mounts()
+
if msg:
msg = _("%(freespace)s. %(backuppaths)s.") % {'freespace': msg, 'backuppaths': msg2}
else:
msg = msg2
-
+
msg = msg.rstrip()
-
+
self.statusbar_message(msg)
-
+
def log_error(self, severity, problem, details, extra_detail=None):
"""
Display error and warning messages to user in log window
"""
self.error_log.add_message(severity, problem, details, extra_detail)
-
-
+
+
def on_error_eventbox_button_press_event(self, widget, event):
self.prefs.show_log_dialog = True
- self.error_log.widget.show()
-
-
+ self.error_log.widget.show()
+
+
def on_menu_log_window_toggled(self, widget):
active = widget.get_active()
self.prefs.show_log_dialog = active
@@ -3634,14 +3667,14 @@ class RapidApp(dbus.service.Object):
self.error_log.widget.show()
else:
self.error_log.widget.hide()
-
+
def notify_prefs_are_invalid(self, details):
title = _("Program preferences are invalid")
logger.critical(title)
self.log_error(severity=config.CRITICAL_ERROR, problem=title,
details=details)
-
-
+
+
# # #
# Utility functions
# # #
@@ -3650,7 +3683,7 @@ class RapidApp(dbus.service.Object):
"""
Returns true if there is at least one instance of the file_type
in the list of files to be copied
-
+
If return_file_count is True, then the number of files of that type
will be counted and returned instead of True or False
"""
@@ -3665,7 +3698,7 @@ class RapidApp(dbus.service.Object):
return False
else:
return i
-
+
def size_files_to_be_downloaded(self, files):
"""
Returns the total sizes of the photos and videos to be downloaded in bytes
@@ -3679,12 +3712,12 @@ class RapidApp(dbus.service.Object):
video_size += rpd_file.size
return (photo_size, video_size)
-
+
def check_download_folder_validity(self, files_by_scan_pid):
"""
Checks validity of download folders based on the file types the user
is attempting to download.
-
+
If valid, returns a tuple of True and an empty list.
If invalid, returns a tuple of False and a list of the invalid directores.
"""
@@ -3702,27 +3735,27 @@ class RapidApp(dbus.service.Object):
if not need_video_folder:
if self.files_of_type_present(files, rpdfile.FILE_TYPE_VIDEO):
need_video_folder = True
-
+
# second, check validity
if need_photo_folder:
- if not self.is_valid_download_dir(self.prefs.download_folder,
+ if not self.is_valid_download_dir(self.prefs.download_folder,
is_photo_dir=True):
valid = False
invalid_dirs.append(self.prefs.download_folder)
else:
- logger.debug("Photo download folder is valid: %s",
+ logger.debug("Photo download folder is valid: %s",
self.prefs.download_folder)
-
+
if need_video_folder:
if not self.is_valid_download_dir(self.prefs.video_download_folder,
- is_photo_dir=False):
+ is_photo_dir=False):
valid = False
invalid_dirs.append(self.prefs.video_download_folder)
else:
- logger.debug("Video download folder is valid: %s",
+ logger.debug("Video download folder is valid: %s",
self.prefs.video_download_folder)
-
+
return (valid, invalid_dirs)
def same_file_system(self, file1, file2):
@@ -3735,27 +3768,27 @@ class RapidApp(dbus.service.Object):
f2_info = f2.query_info(gio.FILE_ATTRIBUTE_ID_FILESYSTEM)
f2_id = f2_info.get_attribute_string(gio.FILE_ATTRIBUTE_ID_FILESYSTEM)
return f1_id == f2_id
-
-
+
+
def same_file(self, file1, file2):
"""Returns True if the files / directories are the same
"""
f1 = gio.File(file1)
f2 = gio.File(file2)
-
+
file_attributes = "id::file"
f1_info = f1.query_filesystem_info(file_attributes)
f1_id = f1_info.get_attribute_string(gio.FILE_ATTRIBUTE_ID_FILE)
f2_info = f2.query_filesystem_info(file_attributes)
f2_id = f2_info.get_attribute_string(gio.FILE_ATTRIBUTE_ID_FILE)
return f1_id == f2_id
-
+
def is_valid_download_dir(self, path, is_photo_dir, show_error_in_log=False):
"""
Checks the following conditions:
Does the directory exist?
Is it writable?
-
+
if show_error_in_log is True, then display warning in log window, using
is_photo_dir, which if true means the download directory is for photos,
if false, for Videos
@@ -3765,11 +3798,11 @@ class RapidApp(dbus.service.Object):
download_folder_type = _("Photo")
else:
download_folder_type = _("Video")
-
+
try:
d = gio.File(path)
if not d.query_exists(cancellable=None):
- logger.error("%s download folder does not exist: %s",
+ logger.error("%s download folder does not exist: %s",
download_folder_type, path)
if show_error_in_log:
severity = config.WARNING
@@ -3781,16 +3814,16 @@ class RapidApp(dbus.service.Object):
file_attributes = "standard::type,access::can-read,access::can-write"
file_info = d.query_filesystem_info(file_attributes)
file_type = file_info.get_file_type()
-
+
if file_type != gio.FILE_TYPE_DIRECTORY and file_type != gio.FILE_TYPE_UNKNOWN:
- logger.error("%s download folder is invalid: %s",
+ logger.error("%s download folder is invalid: %s",
download_folder_type, path)
if show_error_in_log:
severity = config.WARNING
problem = _("%(file_type)s download folder is invalid") % {
'file_type': download_folder_type}
details = _("Folder: %s") % path
- self.log_error(severity, problem, details)
+ self.log_error(severity, problem, details)
else:
# is the directory writable?
try:
@@ -3803,7 +3836,7 @@ class RapidApp(dbus.service.Object):
problem = _("%(file_type)s download folder is not writable") % {
'file_type': download_folder_type}
details = _("Folder: %s") % path
- self.log_error(severity, problem, details)
+ self.log_error(severity, problem, details)
else:
f = gio.File(temp_dir)
f.delete(cancellable=None)
@@ -3811,66 +3844,66 @@ class RapidApp(dbus.service.Object):
except gio.Error, inst:
logger.error("Error checking download directory %s", path)
logger.error(inst)
-
+
return valid
-
-
-
+
+
+
# # #
# Process results and management
# # #
-
-
+
+
def _start_process_managers(self):
"""
Set up process managers.
-
+
A task such as scanning a device or copying files is handled in its
own process.
"""
-
+
self.batch_size = 10
self.batch_size_MB = 2
-
+
sequence_values = (self.downloads_today_value,
self.downloads_today_date_value,
self.day_start_value,
self.refresh_downloads_today_value,
- self.stored_sequence_value,
+ self.stored_sequence_value,
self.uses_stored_sequence_no_value,
self.uses_session_sequece_no_value,
self.uses_sequence_letter_value)
-
- # daemon process to rename files and create subfolders
+
+ # daemon process to rename files and create subfolders
self.subfolder_file_manager = SubfolderFileManager(
self.subfolder_file_results,
sequence_values)
-
+
# process to scan source devices / paths
- self.scan_manager = ScanManager(self.scan_results, self.batch_size,
+ self.scan_manager = ScanManager(self.scan_results, self.batch_size,
self.device_collection.add_device)
-
+
#process to copy files from source to destination
- self.copy_files_manager = CopyFilesManager(self.copy_files_results,
+ self.copy_files_manager = CopyFilesManager(self.copy_files_results,
self.batch_size_MB)
-
+
#process to back files up
self.backup_manager = BackupFilesManager(self.backup_results,
self.batch_size_MB)
-
+
#process to enhance files after they've been copied and before they're
#renamed
self.file_modify_manager = FileModifyManager(self.file_modify_results)
-
-
+
+
def scan_results(self, source, condition):
"""
Receive results from scan processes
"""
connection = self.scan_manager.get_pipe(source)
-
+
conn_type, data = connection.recv()
-
+
if conn_type == rpdmp.CONN_COMPLETE:
connection.close()
self.scan_manager.no_tasks -= 1
@@ -3883,7 +3916,7 @@ class RapidApp(dbus.service.Object):
self.device_collection.update_device(scan_pid, size)
self.device_collection.update_progress(scan_pid, 0.0, results_summary, 0, pulse=False)
self.set_download_action_sensitivity()
-
+
if (not self.auto_start_is_on and
self.prefs.generate_thumbnails):
self.download_progressbar.set_text(_("Thumbnails"))
@@ -3897,7 +3930,7 @@ class RapidApp(dbus.service.Object):
logger.debug("Turning on display of thumbnails")
self.display_scan_thumbnails()
self.download_button.grab_focus()
-
+
# signal that no more data is coming, finishing io watch for this pipe
return False
else:
@@ -3910,20 +3943,20 @@ class RapidApp(dbus.service.Object):
scanning_progress = file_type_counter.running_file_count()
self.device_collection.update_device(scan_pid, size)
self.device_collection.update_progress(scan_pid, 0.0, scanning_progress, 0, pulse=True)
-
+
for rpd_file in rpd_files:
- self.thumbnails.add_file(rpd_file=rpd_file,
+ self.thumbnails.add_file(rpd_file=rpd_file,
generate_thumbnail = not self.auto_start_is_on)
-
+
# must return True for this method to be called again
return True
-
+
@dbus.service.method (config.DBUS_NAME,
in_signature='', out_signature='b')
def is_running (self):
return self.running
-
+
@dbus.service.method (config.DBUS_NAME,
in_signature='', out_signature='')
def start (self):
@@ -3932,14 +3965,14 @@ class RapidApp(dbus.service.Object):
else:
self.running = True
gtk.main()
-
+
def start():
is_beta = config.version.find('~') > 0
-
+
parser = OptionParser(version= "%%prog %s" % utilities.human_readable_version(config.version))
parser.set_defaults(verbose=is_beta, extensions=False)
- # Translators: this text is displayed to the user when they request information on the command line options.
+ # Translators: this text is displayed to the user when they request information on the command line options.
# The text %default should not be modified or left out.
parser.add_option("-v", "--verbose", action="store_true", dest="verbose", help=_("display program information on the command line as the program runs (default: %default)"))
parser.add_option("-d", "--debug", action="store_true", dest="debug", help=_('display debugging information when run from the command line'))
@@ -3951,26 +3984,26 @@ def start():
parser.add_option("-l", "--device-location", type="string", metavar="PATH", dest="device_location", help=_("manually specify the PATH of the device from which to download, overwriting existing program preferences"))
parser.add_option("--reset-settings", action="store_true", dest="reset", help=_("reset all program settings and preferences and exit"))
(options, args) = parser.parse_args()
-
+
if options.debug:
logging_level = logging.DEBUG
elif options.verbose:
logging_level = logging.INFO
else:
logging_level = logging.ERROR
-
+
logger.setLevel(logging_level)
-
+
if options.auto_detect and options.device_location:
logger.info(_("Error: specify device auto-detection or manually specify a device's path from which to download, but do not do both."))
sys.exit(1)
-
+
if options.auto_detect:
auto_detect=True
logger.info("Device auto detection set from command line")
else:
auto_detect=None
-
+
if options.device_location:
device_location=options.device_location
if device_location[-1]=='/':
@@ -3987,15 +4020,15 @@ def start():
v += '%s, ' % e.upper()
v = file_type + " " + v[:-1] + ' '+ (_('and %s') % exts[-1].upper())
print v
-
+
sys.exit(0)
-
+
if options.reset:
prefs = prefsrapid.RapidPreferences()
prefs.reset()
print _("All settings and preferences have been reset")
sys.exit(0)
-
+
if options.focal_length:
focal_length = options.focal_length
else:
@@ -4017,7 +4050,7 @@ def start():
bus = dbus.SessionBus ()
request = bus.request_name (config.DBUS_NAME, dbus.bus.NAME_FLAG_DO_NOT_QUEUE)
- if request != dbus.bus.REQUEST_NAME_REPLY_EXISTS:
+ if request != dbus.bus.REQUEST_NAME_REPLY_EXISTS:
app = RapidApp(bus, '/', config.DBUS_NAME, focal_length=focal_length,
auto_detect=auto_detect, device_location=device_location)
else:
@@ -4025,8 +4058,8 @@ def start():
print "Rapid Photo Downloader is already running"
object = bus.get_object (config.DBUS_NAME, "/")
app = dbus.Interface (object, config.DBUS_NAME)
-
- app.start()
+
+ app.start()
if __name__ == "__main__":
start()
diff --git a/rapid/rpdfile.py b/rapid/rpdfile.py
index cf38ebc..a405782 100644
--- a/rapid/rpdfile.py
+++ b/rapid/rpdfile.py
@@ -43,7 +43,8 @@ import thumbnail as tn
RAW_EXTENSIONS = ['arw', 'dcr', 'cr2', 'crw', 'dng', 'mos', 'mef', 'mrw',
- 'nef', 'orf', 'pef', 'raf', 'raw', 'rw2', 'sr2', 'srw']
+ 'nef', 'nrw', 'orf', 'pef', 'raf', 'raw', 'rw2', 'sr2',
+ 'srw']
JPEG_EXTENSIONS = ['jpg', 'jpe', 'jpeg']
diff --git a/rapid/subfolderfile.py b/rapid/subfolderfile.py
index a7b0f89..4e23309 100644
--- a/rapid/subfolderfile.py
+++ b/rapid/subfolderfile.py
@@ -26,6 +26,8 @@ Runs as a daemon process.
import os, datetime, collections
+import shutil
+import errno
import gio
import multiprocessing
import logging
@@ -44,7 +46,7 @@ from gettext import gettext as _
class SyncRawJpeg:
def __init__(self):
self.photos = {}
-
+
def add_download(self, name, extension, date_time, sub_seconds, sequence_number_used):
if name not in self.photos:
self.photos[name] = ([extension], date_time, sub_seconds, sequence_number_used)
@@ -52,16 +54,16 @@ class SyncRawJpeg:
if extension not in self.photos[name][0]:
self.photos[name][0].append(extension)
-
+
def matching_pair(self, name, extension, date_time, sub_seconds):
"""Checks to see if the image matches an image that has already been downloaded.
Image name (minus extension), exif date time, and exif subseconds are checked.
-
+
Returns -1 and a sequence number if the name, extension, and exif values match (i.e. it has already been downloaded)
Returns 0 and a sequence number if name and exif values match, but the extension is different (i.e. a matching RAW + JPG image)
Returns -99 and a sequence number of None if photos detected with the same filenames, but taken at different times
Returns 1 and a sequence number of None if no match"""
-
+
if name in self.photos:
if self.photos[name][1] == date_time and self.photos[name][2] == sub_seconds:
if extension in self.photos[name][0]:
@@ -71,37 +73,37 @@ class SyncRawJpeg:
else:
return (-99, None)
return (1, None)
-
+
def ext_exif_date_time(self, name):
"""Returns first extension, exif date time and subseconds data for the already downloaded photo"""
return (self.photos[name][0][0], self.photos[name][1], self.photos[name][2])
-
+
def time_subseconds_human_readable(date, subseconds):
return _("%(hour)s:%(minute)s:%(second)s:%(subsecond)s") % \
{'hour':date.strftime("%H"),
- 'minute':date.strftime("%M"),
+ 'minute':date.strftime("%M"),
'second':date.strftime("%S"),
- 'subsecond': subseconds}
+ 'subsecond': subseconds}
def load_metadata(rpd_file, temp_file=True):
"""
Loads the metadata for the file. Returns True if operation succeeded, false
otherwise
-
+
If temp_file is true, the the metadata from the temporary file rather than
the original source file is used. This is important, because the metadata
can be modified by the filemodify process.
"""
- if rpd_file.metadata is None:
+ if rpd_file.metadata is None:
if not rpd_file.load_metadata(temp_file):
# Error in reading metadata
rpd_file.add_problem(None, pn.CANNOT_DOWNLOAD_BAD_METADATA, {'filetype': rpd_file.title_capitalized})
return False
return True
-
+
def _generate_name(generator, rpd_file):
-
+
do_generation = True
if rpd_file.file_type == rpdfile.FILE_TYPE_PHOTO:
do_generation = load_metadata(rpd_file)
@@ -115,37 +117,37 @@ def _generate_name(generator, rpd_file):
value = ''
else:
value = ''
-
+
return value
def generate_subfolder(rpd_file):
-
+
if rpd_file.file_type == rpdfile.FILE_TYPE_PHOTO:
generator = gn.PhotoSubfolder(rpd_file.subfolder_pref_list)
else:
generator = gn.VideoSubfolder(rpd_file.subfolder_pref_list)
-
+
rpd_file.download_subfolder = _generate_name(generator, rpd_file)
return rpd_file
-
+
def generate_name(rpd_file):
do_generation = True
-
+
if rpd_file.file_type == rpdfile.FILE_TYPE_PHOTO:
generator = gn.PhotoName(rpd_file.name_pref_list)
else:
generator = gn.VideoName(rpd_file.name_pref_list)
-
+
rpd_file.download_name = _generate_name(generator, rpd_file)
return rpd_file
-
+
class SubfolderFile(multiprocessing.Process):
def __init__(self, results_pipe, sequence_values):
multiprocessing.Process.__init__(self)
self.daemon = True
self.results_pipe = results_pipe
-
+
self.downloads_today = sequence_values[0]
self.downloads_today_date = sequence_values[1]
self.day_start = sequence_values[2]
@@ -154,12 +156,17 @@ class SubfolderFile(multiprocessing.Process):
self.uses_stored_sequence_no = sequence_values[5]
self.uses_session_sequece_no = sequence_values[6]
self.uses_sequence_letter = sequence_values[7]
-
+ # As of Ubuntu 12.10 / Fedora 18, the file move/rename command is running agonisingly slowly
+ # A hackish workaround is to replace it with the standard python function
+ self.use_gnome_file_operations = False
+
logger.debug("Start of day is set to %s", self.day_start.value)
-
+
def progress_callback_no_update(self, amount_downloaded, total):
pass
-
+ #~ if debug_progress:
+ #~ logger.debug("%.1f", amount_downloaded / float(total))
+
def file_exists(self, rpd_file, identifier=None):
"""
Notify user that the download file already exists
@@ -171,24 +178,24 @@ class SubfolderFile(multiprocessing.Process):
date = dt.strftime("%x")
time = dt.strftime("%X")
except:
- logger.warning("Could not determine the file modification time of %s",
+ logger.warning("Could not determine the file modification time of %s",
rpd_file.download_full_file_name)
date = time = ''
-
+
if not identifier:
- rpd_file.add_problem(None, pn.FILE_ALREADY_EXISTS_NO_DOWNLOAD,
+ rpd_file.add_problem(None, pn.FILE_ALREADY_EXISTS_NO_DOWNLOAD,
{'filetype':rpd_file.title_capitalized})
- rpd_file.add_extra_detail(pn.EXISTING_FILE,
- {'filetype': rpd_file.title,
+ rpd_file.add_extra_detail(pn.EXISTING_FILE,
+ {'filetype': rpd_file.title,
'date': date, 'time': time})
rpd_file.status = config.STATUS_DOWNLOAD_FAILED
rpd_file.error_extra_detail = pn.extra_detail_definitions[pn.EXISTING_FILE] % \
{'date':date, 'time':time, 'filetype': rpd_file.title}
else:
- rpd_file.add_problem(None, pn.UNIQUE_IDENTIFIER_ADDED,
+ rpd_file.add_problem(None, pn.UNIQUE_IDENTIFIER_ADDED,
{'filetype':rpd_file.title_capitalized})
- rpd_file.add_extra_detail(pn.UNIQUE_IDENTIFIER,
- {'identifier': identifier,
+ rpd_file.add_extra_detail(pn.UNIQUE_IDENTIFIER,
+ {'identifier': identifier,
'filetype': rpd_file.title,
'date': date, 'time': time})
rpd_file.status = config.STATUS_DOWNLOADED_WITH_WARNING
@@ -197,10 +204,10 @@ class SubfolderFile(multiprocessing.Process):
'date': date, 'time': time}
rpd_file.error_title = rpd_file.problem.get_title()
rpd_file.error_msg = _("Source: %(source)s\nDestination: %(destination)s") \
- % {'source': rpd_file.full_file_name,
+ % {'source': rpd_file.full_file_name,
'destination': rpd_file.download_full_file_name}
return rpd_file
-
+
def download_failure_file_error(self, rpd_file, inst):
"""
Handle cases where file failed to download
@@ -209,24 +216,49 @@ class SubfolderFile(multiprocessing.Process):
rpd_file.add_extra_detail(pn.DOWNLOAD_COPYING_ERROR_DETAIL, inst)
rpd_file.status = config.STATUS_DOWNLOAD_FAILED
logger.error("Failed to create file %s: %s", rpd_file.download_full_file_name, inst)
-
+
rpd_file.error_title = rpd_file.problem.get_title()
rpd_file.error_msg = _("%(problem)s\nFile: %(file)s") % \
{'problem': rpd_file.problem.get_problems(),
'file': rpd_file.full_file_name}
-
+
return rpd_file
-
+
+ def download_file_exists(self, rpd_file):
+ """
+ Check how to handle a download file already existing
+ """
+ if (rpd_file.download_conflict_resolution ==
+ config.ADD_UNIQUE_IDENTIFIER):
+ add_unique_identifier = True
+ logger.debug("Will add unique identifier to avoid duplicate filename")
+ else:
+ rpd_file = self.file_exists(rpd_file)
+ add_unique_identifier = False
+ return (rpd_file, add_unique_identifier)
+
+ def added_unique_identifier(self, rpd_file):
+ """
+ Track fact that a unique identifier was added to a file name
+ """
+ move_succeeded = True
+ suffix_already_used = False
+ rpd_file = self.file_exists(rpd_file, identifier)
+ logger.error("%s: %s - %s", rpd_file.full_file_name,
+ rpd_file.problem.get_title(),
+ rpd_file.problem.get_problems())
+ return (rpd_file, move_succeeded, suffix_already_used)
+
def same_name_different_exif(self, sync_photo_name, rpd_file):
"""Notify the user that a file was already downloaded with the same name, but the exif information was different"""
i1_ext, i1_date_time, i1_subseconds = self.sync_raw_jpeg.ext_exif_date_time(sync_photo_name)
- detail = {'image1': "%s%s" % (sync_photo_name, i1_ext),
+ detail = {'image1': "%s%s" % (sync_photo_name, i1_ext),
'image1_date': i1_date_time.strftime("%x"),
- 'image1_time': time_subseconds_human_readable(i1_date_time, i1_subseconds),
- 'image2': rpd_file.name,
+ 'image1_time': time_subseconds_human_readable(i1_date_time, i1_subseconds),
+ 'image2': rpd_file.name,
'image2_date': rpd_file.metadata.date_time().strftime("%x"),
'image2_time': time_subseconds_human_readable(
- rpd_file.metadata.date_time(),
+ rpd_file.metadata.date_time(),
rpd_file.metadata.sub_seconds())}
rpd_file.add_problem(None, pn.SAME_FILE_DIFFERENT_EXIF, detail)
@@ -234,8 +266,8 @@ class SubfolderFile(multiprocessing.Process):
rpd_file.error_msg = pn.problem_definitions[pn.SAME_FILE_DIFFERENT_EXIF][1] % detail
rpd_file.status = config.STATUS_DOWNLOADED_WITH_WARNING
return rpd_file
-
-
+
+
def run(self):
"""
Get subfolder and name.
@@ -246,37 +278,39 @@ class SubfolderFile(multiprocessing.Process):
"""
i = 0
download_count = 0
-
+
duplicate_files = {}
- # Track downloads today, using a class whose purpose is to
+ # Track downloads today, using a class whose purpose is to
# take the value in the user prefs, increment, and then be used
# to update the prefs (which can only happen via the main process)
self.downloads_today_tracker = prefsrapid.DownloadsTodayTracker(
day_start = self.day_start.value,
downloads_today = self.downloads_today.value,
downloads_today_date = self.downloads_today_date.value)
-
+
# Track sequences using shared downloads today and stored sequence number
# (shared with main process)
- self.sequences = gn.Sequences(self.downloads_today_tracker,
+ self.sequences = gn.Sequences(self.downloads_today_tracker,
self.stored_sequence_no.value)
-
+
self.sync_raw_jpeg = SyncRawJpeg()
-
+
while True:
- logger.debug("Finished %s. Getting next task.", download_count)
+ if download_count:
+ logger.debug("Finished %s. Getting next task.", download_count)
- # rename file and move to generated subfolder
+ # rename file and move to generated subfolder
download_succeeded, download_count, rpd_file = self.results_pipe.recv()
-
+
move_succeeded = False
-
+
if download_succeeded:
- temp_file = gio.File(rpd_file.temp_full_file_name)
+ if self.use_gnome_file_operations:
+ temp_file = gio.File(rpd_file.temp_full_file_name)
synchronize_raw_jpg_failed = False
if not (rpd_file.synchronize_raw_jpg and
@@ -290,8 +324,8 @@ class SubfolderFile(multiprocessing.Process):
synchronize_raw_jpg_failed = True
else:
j, sequence_to_use = self.sync_raw_jpeg.matching_pair(
- name=sync_photo_name, extension=sync_photo_ext,
- date_time=rpd_file.metadata.date_time(),
+ name=sync_photo_name, extension=sync_photo_ext,
+ date_time=rpd_file.metadata.date_time(),
sub_seconds=rpd_file.metadata.sub_seconds())
if j == -1:
# this exact file has already been downloaded (same extension, same filename, and same exif date time subsecond info)
@@ -306,26 +340,29 @@ class SubfolderFile(multiprocessing.Process):
self.sequences.set_matched_sequence_value(sequence_to_use)
if j == -99:
rpd_file = self.same_name_different_exif(sync_photo_name, rpd_file)
-
+
if synchronize_raw_jpg_failed:
generation_succeeded = False
else:
# Generate subfolder name and new file name
generation_succeeded = True
-
+
if rpd_file.file_type == rpdfile.FILE_TYPE_PHOTO:
if hasattr(rpd_file, 'new_focal_length'):
# A RAW file has had its focal length and aperture adjusted.
# These have been written out to an XMP sidecar, but they won't
- # be picked up by pyexiv2. So temporarily change the values inplace here,
+ # be picked up by pyexiv2. So temporarily change the values inplace here,
# without saving them.
if load_metadata(rpd_file):
rpd_file.metadata["Exif.Photo.FocalLength"] = rpd_file.new_focal_length
rpd_file.metadata["Exif.Photo.FNumber"] = rpd_file.new_aperture
-
+
rpd_file = generate_subfolder(rpd_file)
+
+
if rpd_file.download_subfolder:
-
+ logger.debug("Generated subfolder name %s for file %s", rpd_file.download_subfolder, rpd_file.name)
+
if self.refresh_downloads_today.value:
# overwrite downloads today value tracked here,
# as user has modified their preferences
@@ -333,21 +370,26 @@ class SubfolderFile(multiprocessing.Process):
self.downloads_today_tracker.set_raw_downloads_today_date(self.downloads_today_date.value)
self.downloads_today_tracker.day_start = self.day_start.value
self.refresh_downloads_today.value = False
-
+
# update whatever the stored value is
self.sequences.stored_sequence_no = self.stored_sequence_no.value
rpd_file.sequences = self.sequences
-
+
# generate the file name
rpd_file = generate_name(rpd_file)
-
+
if rpd_file.has_problem():
+ logger.debug("Encountered a problem generating file name for file %s", rpd_file.name)
rpd_file.status = config.STATUS_DOWNLOADED_WITH_WARNING
rpd_file.error_title = rpd_file.problem.get_title()
rpd_file.error_msg = _("%(problem)s\nFile: %(file)s") % \
{'problem': rpd_file.problem.get_problems(),
'file': rpd_file.full_file_name}
-
+ else:
+ logger.debug("Generated file name %s for file %s", rpd_file.download_name, rpd_file.name)
+ else:
+ logger.debug("Failed to generate subfolder name for file: %s", rpd_file.name)
+
# Check for any errors
if not rpd_file.download_subfolder or not rpd_file.download_name:
if not rpd_file.download_subfolder and not rpd_file.download_name:
@@ -360,59 +402,93 @@ class SubfolderFile(multiprocessing.Process):
rpd_file.add_extra_detail(pn.NO_DATA_TO_NAME, {'filetype': area})
generation_succeeded = False
rpd_file.status = config.STATUS_DOWNLOAD_FAILED
-
+
rpd_file.error_title = rpd_file.problem.get_title()
rpd_file.error_msg = _("%(problem)s\nFile: %(file)s") % \
{'problem': rpd_file.problem.get_problems(),
'file': rpd_file.full_file_name}
-
-
+
+
if generation_succeeded:
rpd_file.download_path = os.path.join(rpd_file.download_folder, rpd_file.download_subfolder)
rpd_file.download_full_file_name = os.path.join(rpd_file.download_path, rpd_file.download_name)
rpd_file.download_full_base_name = os.path.splitext(rpd_file.download_full_file_name)[0]
-
+
subfolder = gio.File(path=rpd_file.download_path)
-
+
# Create subfolder if it does not exist.
# It is possible to skip the query step, and just try to create
# the directories and ignore the error of it already existing -
# but it takes twice as long to fail with an error than just
# run the straight query
-
+
+ logger.debug("Probing to see if subfolder already exists...")
if not subfolder.query_exists(cancellable=None):
- try:
- subfolder.make_directory_with_parents(cancellable=gio.Cancellable())
- except gio.Error, inst:
- # The directory may have been created by another process
- # between the time it takes to query and the time it takes
- # to create a new directory. Ignore such errors.
- if inst.code <> gio.ERROR_EXISTS:
- logger.error("Failed to create download subfolder: %s", rpd_file.download_path)
- logger.error(inst)
- rpd_file.error_title = _("Failed to create download subfolder")
- rpd_file.error_msg = _("Path: %s") % rpd_file.download_path
-
+ if self.use_gnome_file_operations:
+ try:
+ logger.debug("...subfolder doesn't exist: creating it using gnome...")
+ subfolder.make_directory_with_parents(cancellable=gio.Cancellable())
+ logger.debug("...subfolder created")
+ except gio.Error, inst:
+ # The directory may have been created by another process
+ # between the time it takes to query and the time it takes
+ # to create a new directory. Ignore such errors.
+ if inst.code <> gio.ERROR_EXISTS:
+ logger.error("Failed to create download subfolder: %s", rpd_file.download_path)
+ logger.error(inst)
+ rpd_file.error_title = _("Failed to create download subfolder")
+ rpd_file.error_msg = _("Path: %s") % rpd_file.download_path
+ else:
+ try:
+ logger.debug("...subfolder doesn't exist: creating it using python...")
+ os.makedirs(rpd_file.download_path)
+ logger.debug("...subfolder created")
+ except IOError as inst:
+ if inst.errno <> errno.EEXIST:
+ logger.error("Failed to create download subfolder: %s", rpd_file.download_path)
+ logger.error(inst)
+ rpd_file.error_title = _("Failed to create download subfolder")
+ rpd_file.error_msg = _("Path: %s") % rpd_file.download_path
+ else:
+ logger.debug("...subfolder already exists")
+
# Move temp file to subfolder
- download_file = gio.File(rpd_file.download_full_file_name)
-
add_unique_identifier = False
- try:
- temp_file.move(download_file, self.progress_callback_no_update, cancellable=None)
- move_succeeded = True
- if rpd_file.status <> config.STATUS_DOWNLOADED_WITH_WARNING:
- rpd_file.status = config.STATUS_DOWNLOADED
- except gio.Error, inst:
- if inst.code == gio.ERROR_EXISTS:
- if (rpd_file.download_conflict_resolution ==
- config.ADD_UNIQUE_IDENTIFIER):
- add_unique_identifier = True
+ if self.use_gnome_file_operations:
+ download_file = gio.File(rpd_file.download_full_file_name)
+ try:
+ logger.debug("Attempting to use Gnome to rename file %s to %s .....", rpd_file.temp_full_file_name, rpd_file.download_full_file_name)
+ temp_file.move(download_file, self.progress_callback_no_update, cancellable=None)
+ logger.debug("....successfully renamed file")
+ move_succeeded = True
+ if rpd_file.status <> config.STATUS_DOWNLOADED_WITH_WARNING:
+ rpd_file.status = config.STATUS_DOWNLOADED
+ except gio.Error as inst:
+ if inst.code == gio.ERROR_EXISTS:
+ rpd_file, add_unique_identifier = download_file_exists(rpd_file)
else:
- rpd_file = self.file_exists(rpd_file)
- else:
- rpd_file = self.download_failure_file_error(rpd_file, inst)
-
+ rpd_file = self.download_failure_file_error(rpd_file, inst)
+ else:
+ # Use python library functions to rename file
+ # Sadly this code basically duplicates the logic of the previous block
+ try:
+ if os.path.exists(rpd_file.download_full_file_name):
+ raise IOError(errno.EEXIST, "File exists: %s" % rpd_file.download_full_file_name)
+ logger.debug("Attempting to use python to rename file %s to %s .....", rpd_file.temp_full_file_name, rpd_file.download_full_file_name)
+ shutil.move(rpd_file.temp_full_file_name, rpd_file.download_full_file_name)
+ logger.debug("....successfully renamed file")
+ move_succeeded = True
+ if rpd_file.status <> config.STATUS_DOWNLOADED_WITH_WARNING:
+ rpd_file.status = config.STATUS_DOWNLOADED
+ except IOError as inst:
+ if inst.errno == errno.EEXIST:
+ rpd_file, add_unique_identifier = self.download_file_exists(rpd_file)
+ else:
+ rpd_file = self.download_failure_file_error(rpd_file, inst.strerror)
+ except:
+ rpd_file = self.download_failure_file_error(rpd_file, inst.strerror)
+
if add_unique_identifier:
name = os.path.splitext(rpd_file.download_name)
full_name = rpd_file.download_full_file_name
@@ -425,25 +501,35 @@ class SubfolderFile(multiprocessing.Process):
rpd_file.download_full_file_name = os.path.join(
rpd_file.download_path,
rpd_file.download_name)
- download_file = gio.File(
+
+ if self.use_gnome_file_operations:
+ download_file = gio.File(
rpd_file.download_full_file_name)
-
- try:
- temp_file.move(download_file, self.progress_callback_no_update, cancellable=None)
- move_succeeded = True
- suffix_already_used = False
- rpd_file = self.file_exists(rpd_file, identifier)
- logger.error("%s: %s - %s", rpd_file.full_file_name,
- rpd_file.problem.get_title(),
- rpd_file.problem.get_problems())
- except gio.Error, inst:
- if inst.code <> gio.ERROR_EXISTS:
+ try:
+ temp_file.move(download_file, self.progress_callback_no_update, cancellable=None)
+ rpd_file, move_succeeded, suffix_already_used = self.added_unique_identifier(rpd_file)
+ except gio.Error, inst:
+ if inst.code <> gio.ERROR_EXISTS:
+ rpd_file = self.download_failure_file_error(rpd_file, inst)
+ else:
+ try:
+ if os.path.exists(rpd_file.download_full_file_name):
+ raise IOError(errno.EEXIST, "File exists: %s" % rpd_file.download_full_file_name)
+ shutil.move(rpd_file.temp_full_file_name, rpd_file.download_full_file_name)
+ rpd_file, move_succeeded, suffix_already_used = self.added_unique_identifier(rpd_file)
+ except IOError as inst:
+ if inst.errno <> errno.EEXIST:
+ rpd_file = self.download_failure_file_error(rpd_file, inst)
+ break
+ except:
rpd_file = self.download_failure_file_error(rpd_file, inst)
-
-
-
- logger.debug("Finish processing file: %s", download_count)
-
+ break
+
+
+
+
+ logger.debug("Finish processing file: %s", download_count)
+
if move_succeeded:
if synchronize_raw_jpg:
if sequence_to_use is None:
@@ -458,17 +544,15 @@ class SubfolderFile(multiprocessing.Process):
if sequence_to_use is None:
if self.uses_session_sequece_no.value or self.uses_sequence_letter.value:
self.sequences.increment(
- self.uses_session_sequece_no.value,
+ self.uses_session_sequece_no.value,
self.uses_sequence_letter.value)
if self.uses_stored_sequence_no.value:
self.stored_sequence_no.value += 1
self.downloads_today_tracker.increment_downloads_today()
self.downloads_today.value = self.downloads_today_tracker.get_raw_downloads_today()
self.downloads_today_date.value = self.downloads_today_tracker.get_raw_downloads_today_date()
-
+
if rpd_file.temp_thm_full_name:
- # copy and rename THM video file
- source = gio.File(path=rpd_file.temp_thm_full_name)
ext = None
if hasattr(rpd_file, 'thm_extension'):
if rpd_file.thm_extension:
@@ -476,45 +560,69 @@ class SubfolderFile(multiprocessing.Process):
if ext is None:
ext = '.THM'
download_thm_full_name = rpd_file.download_full_base_name + ext
- dest = gio.File(path=download_thm_full_name)
- try:
- source.move(dest, self.progress_callback_no_update, cancellable=None)
- rpd_file.download_thm_full_name = download_thm_full_name
- except gio.Error, inst:
- logger.error("Failed to move video THM file %s", download_thm_full_name)
-
+
+ # copy and rename THM video file
+ if self.use_gnome_file_operations:
+ source = gio.File(path=rpd_file.temp_thm_full_name)
+ dest = gio.File(path=download_thm_full_name)
+ try:
+ source.move(dest, self.progress_callback_no_update, cancellable=None)
+ rpd_file.download_thm_full_name = download_thm_full_name
+ except gio.Error, inst:
+ logger.error("Failed to move video THM file %s", download_thm_full_name)
+ else:
+ try:
+ # don't check to see if it already exists
+ shutil.move(rpd_file.temp_thm_full_name, download_thm_full_name)
+ rpd_file.download_thm_full_name = download_thm_full_name
+ except:
+ logger.error("Failed to move video THM file %s", download_thm_full_name)
+
if rpd_file.temp_xmp_full_name:
# copy and rename XMP sidecar file
- source = gio.File(path=rpd_file.temp_xmp_full_name)
# generate_name() has generated xmp extension with correct capitalization
download_xmp_full_name = rpd_file.download_full_base_name + rpd_file.xmp_extension
- dest = gio.File(path=download_xmp_full_name)
- try:
- source.move(dest, self.progress_callback_no_update, cancellable=None)
- rpd_file.download_xmp_full_name = download_xmp_full_name
- except gio.Error, inst:
- logger.error("Failed to move XMP sidecar file %s", download_xmp_full_name)
-
-
+ if self.use_gnome_file_operations:
+ source = gio.File(path=rpd_file.temp_xmp_full_name)
+ dest = gio.File(path=download_xmp_full_name)
+ try:
+ source.move(dest, self.progress_callback_no_update, cancellable=None)
+ rpd_file.download_xmp_full_name = download_xmp_full_name
+ except gio.Error, inst:
+ logger.error("Failed to move XMP sidecar file %s", download_xmp_full_name)
+ else:
+ try:
+ shutil.move(rpd_file.temp_xmp_full_name, download_xmp_full_name)
+ rpd_file.download_xmp_full_name = download_xmp_full_name
+ except:
+ logger.error("Failed to move XMP sidecar file %s", download_xmp_full_name)
+
+
if not move_succeeded:
- logger.error("%s: %s - %s", rpd_file.full_file_name,
- rpd_file.problem.get_title(),
+ logger.error("%s: %s - %s", rpd_file.full_file_name,
+ rpd_file.problem.get_title(),
rpd_file.problem.get_problems())
- try:
- temp_file.delete(cancellable=None)
- except gio.Error, inst:
- logger.error("Failed to delete temporary file %s", rpd_file.temp_full_file_name)
- logger.error(inst)
-
-
-
-
-
+ if self.use_gnome_file_operations:
+ try:
+ temp_file.delete(cancellable=None)
+ except gio.Error, inst:
+ logger.error("Failed to delete temporary file %s", rpd_file.temp_full_file_name)
+ logger.error(inst)
+ else:
+ try:
+ os.remove(rpd_file.temp_full_file_name)
+ except:
+ logger.error("Failed to delete temporary file %s", rpd_file.temp_full_file_name)
+
+
+
+
+
rpd_file.metadata = None #purge metadata, as it cannot be pickled
rpd_file.sequences = None
- self.results_pipe.send((move_succeeded, rpd_file,))
-
+ self.results_pipe.send((move_succeeded, rpd_file, download_count))
+
i += 1
-
+